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
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
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']
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
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]
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]
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
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()
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
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")
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))
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)
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))
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 = []
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]) ]))
def initialise(): global boardingPasses boardingPasses = utils.loadInputFile("input_5.txt")
def initialise(): global luggageRules, totalBags luggageRules = utils.loadInputFile("input_7.txt") totalBags = []
def initialise(): global expressions, numbers expressions = utils.loadInputFile("input_18.txt") numbers = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9']
def initialise(): global instructions instructions = utils.loadInputFile("input_8.txt")
def initialise(): global instructions, exp instructions = utils.loadInputFile("input_14.txt") exp = re.compile("^mem\\[(\\d+)\\]\\s=\\s(\\d+)$")
def initialise(): global customsDeclarations customsDeclarations = utils.loadInputFile("input_6.txt")
def initialise(): global cubes cubes = utils.loadInputFile("input_17.txt") cubes = [[list(x) for x in cubes]]
def initialise(): global numbers, preamble numbers = utils.loadInputFile("input_9.txt") numbers = [int(number) for number in numbers] preamble = 25