Esempio n. 1
0
def initialiseGrid():
    global grid, rows, cols

    grid = utils.loadInputFile("input_3.txt")

    rows = len(grid) - 1  # 31, so 30
    cols = len(grid[0]) - 1  # 323, so 322
Esempio n. 2
0
def initialiseGrid():
    global grid, rows, cols

    grid = utils.loadInputFile("input_11.txt")
    grid = [list(x) for x in grid]

    rows = len(grid)  # 31, so 30
    cols = len(grid[0])  # 323, so 322
Esempio n. 3
0
def initialise():
    global earliestTimeOfArrival, timetable, filteredTimetable

    timetable = utils.loadInputFile("input_13.txt")

    earliestTimeOfArrival = int(timetable[0])

    timetable = timetable[1].split(",")
    filteredTimetable = [int(x) for x in timetable if x != 'x']
Esempio n. 4
0
def initialise():
    global messages, rules

    data = utils.loadInputFile("input_19.txt")

    for idx, line in enumerate(data):
        if line == "":
            rules = data[:idx]
            messages = data[idx + 1:]
            break
Esempio n. 5
0
def initialise():
    global passwords, criteria, letter, mini, maxi

    data = utils.loadInputFile("input_2.txt")

    passwords = [i.split(':', 1)[1].strip() for i in data]

    criteria = [i.split(':', 1)[0] for i in data]
    letter = [i.split(' ', 1)[1] for i in criteria]
    mini = [int(i.split(' ', 1)[0].split('-')[0]) for i in criteria]
    maxi = [int(i.split(' ', 1)[0].split('-')[1]) for i in criteria]
Esempio n. 6
0
def initialise():
    global instructions

    instructions = utils.loadInputFile("input_24.txt")

    print(instructions)

    for idx, instruction in enumerate(instructions):
        instructions[idx] = re.sub(r"(e)|(w)|(se)|(sw)|(ne)|(nw)",
                                   r"\g<1>\g<2>\g<3>\g<4>\g<5>\g<6>,",
                                   instruction)[:-1]
Esempio n. 7
0
def initialise():
    global cups, currentCupIdx, totalCups, move

    cups = utils.loadInputFile("input_23.txt")

    cups = [int(cup) for cup in cups[0]]

    currentCupIdx = 0
    totalCups = len(cups)

    move = 1
Esempio n. 8
0
def initialise():
    global adapters, device

    adapters = utils.loadInputFile("input_10.txt")
    adapters = [int(adapters) for adapters in adapters]

    # a adapter can take 1,2,3 jolts lower input
    # device jolts = 3 jolts higher than the highest rated adapter
    # plane charging outlet is 0 jolts
    device = max(adapters) + 3
    adapters.sort()
Esempio n. 9
0
def initialise():
    global data, dataMap

    data = utils.loadInputFile("input_1.txt")
    # convert to int
    data = [int(x) for x in data]

    dataMap = dict()

    for x in data:
        if x not in dataMap:
            dataMap[x] = 1
Esempio n. 10
0
def initialise():
    # Passport Fields
    # byr (Birth Year)       four digits; at least 1920 and at most 2002.
    # iyr (Issue Year)       four digits; at least 2010 and at most 2020.
    # eyr (Expiration Year)  four digits; at least 2020 and at most 2030.
    # hgt (Height)           a number followed by either cm or in:
    #       If cm, the number must be at least 150 and at most 193.
    #       If in, the number must be at least 59 and at most 76.
    # hcl (Hair Color)       a # followed by exactly six characters 0-9 or a-f.
    # ecl (Eye Color)        exactly one of: amb blu brn gry grn hzl oth.
    # pid (Passport ID)      a nine-digit number, including leading zeroes.
    # cid (Country ID)       ignored, missing or not.
    global batchInput
    batchInput = utils.loadInputFile("input_4.txt")
Esempio n. 11
0
def initialise():
    global playerOneDeck, playerTwoDeck

    deck = utils.loadInputFile("input_22.txt")

    for idx, card in enumerate(deck):
        if card == "":
            break

    playerOneDeck = deck[1:idx]
    playerTwoDeck = deck[idx+2:]

    playerOneDeck = [int(x) for x in playerOneDeck]
    playerTwoDeck = [int(x) for x in playerTwoDeck]

    assert(len(playerOneDeck) == len(playerTwoDeck))
Esempio n. 12
0
def initialise():
    global numbers, spoken

    numbers = utils.loadInputFile("input_15.txt")
    numbers = numbers[0].split(",")
    numbers = [int(x) for x in numbers]

    spoken = {}

    for idx, number in enumerate(numbers):
        spoken[number] = [idx + 1]

    # the last number in the loop is spoken here

    if 0 not in spoken.keys():
        spoken[0] = []
    spoken[0].append(len(numbers) + 1)
Esempio n. 13
0
def initialise():
    global ticketInput, rules, otherTickets, validNumbers, ruleDict, ticket

    ticketInput = utils.loadInputFile("input_16.txt")

    rules = []
    otherTickets = []

    for line in ticketInput:
        if line == "":
            break
        rules.append(line)

    for idx, line in enumerate(ticketInput):
        if line == "your ticket:":
            ticket = ticketInput[idx + 1]
            break

    ticket = [int(x) for x in ticket.split(",")]

    for i in range(idx + 4, len(ticketInput)):
        otherTickets.append(ticketInput[i].split(","))

    validNumbers = []

    exp = re.compile(r"^(.*): (\d+)-(\d+) or (\d+)-(\d+).*$")
    ruleDict = {}

    for rule in rules:
        m = re.match(exp, rule)

        validNumbers.extend(range(int(m.group(2)), int(m.group(3)) + 1))
        validNumbers.extend(range(int(m.group(4)), int(m.group(5)) + 1))

        ruleDict[m.group(1)] = []

        ruleDict[m.group(1)].extend(range(int(m.group(2)),
                                          int(m.group(3)) + 1))
        ruleDict[m.group(1)].extend(range(int(m.group(4)),
                                          int(m.group(5)) + 1))
Esempio n. 14
0
def initialise():
    global images

    data = utils.loadInputFile("input_20.txt")

    images = {}
    currentImage = []

    for line in data:

        if line.startswith("Tile"):
            imageId = int(line[5:-1])

        elif line == "":
            images[imageId] = currentImage
            currentImage = []

        else:
            currentImage.append(list(line))

    images[imageId] = currentImage
    currentImage = []
Esempio n. 15
0
def initialise():
    global ingredients

    date = utils.loadInputFile("input_21.txt")

    ingredients = []
    allergens = []

    for line in date:

        ingredients.append(line.split(" (contains")[0].split())
        allergens.append(
            line.split(" (contains")[1][:-1].replace(",", "").split())

    freqAllergens = collections.Counter(
        [item for sublist in allergens for item in sublist])
    freqIngredients = collections.Counter(
        [item for sublist in ingredients for item in sublist])

    failed = True

    # brute force random approach
    while failed:

        tempAllergens = copy.deepcopy(allergens)
        tempIngredients = copy.deepcopy(ingredients)

        failed = False

        translatedIngredients = {}

        # optimisation: sort so that most common ingredient is first
        for k, v in sorted(freqAllergens.items(),
                           key=lambda item: item[1],
                           reverse=True):

            # find all lists that have ingredient k
            containing = [idx for idx, x in enumerate(tempAllergens) if k in x]

            commonIngredients = set(tempIngredients[containing[0]])

            for x in containing[1:]:
                # find common values by using a set intersection
                commonIngredients = commonIngredients.intersection(
                    tempIngredients[x])

            try:
                # choose a random ingredient from the intersection
                ingredientToRemove = random.choice(list(commonIngredients))
                translatedIngredients[k] = ingredientToRemove
            except:
                # if no common value, error
                failed = True
                break

            for ingredient in tempIngredients:
                # remove that value from ingredients
                if ingredientToRemove in ingredient:
                    ingredient.remove(ingredientToRemove)

    print("Part 1:",
          len([item for sublist in tempIngredients for item in sublist]))
    print(
        "Part 2:", ",".join([
            v for k, v in sorted(translatedIngredients.items(),
                                 key=lambda item: item[0])
        ]))
Esempio n. 16
0
def initialise():
    global boardingPasses
    boardingPasses = utils.loadInputFile("input_5.txt")
Esempio n. 17
0
def initialise():
    global luggageRules, totalBags
    luggageRules = utils.loadInputFile("input_7.txt")
    totalBags = []
Esempio n. 18
0
def initialise():
    global expressions, numbers

    expressions = utils.loadInputFile("input_18.txt")
    numbers = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9']
Esempio n. 19
0
def initialise():
    global instructions
    instructions = utils.loadInputFile("input_8.txt")
Esempio n. 20
0
def initialise():
    global instructions, exp

    instructions = utils.loadInputFile("input_14.txt")
    exp = re.compile("^mem\\[(\\d+)\\]\\s=\\s(\\d+)$")
Esempio n. 21
0
def initialise():
    global customsDeclarations
    customsDeclarations = utils.loadInputFile("input_6.txt")
Esempio n. 22
0
def initialise():
    global cubes

    cubes = utils.loadInputFile("input_17.txt")

    cubes = [[list(x) for x in cubes]]
Esempio n. 23
0
def initialise():
    global numbers, preamble
    numbers = utils.loadInputFile("input_9.txt")
    numbers = [int(number) for number in numbers]
    preamble = 25