I got told about this fantastic coding challenge site Advent of Code, which publishes a new pair of coding challenges every day from December 1st until Christmas Day.
Unfortunately I didn’t get the chance to start until January, but the challenges are still there at time of writing, so hopefully I will be able to make my way through them as I get time through 2021.
I will add my solutions below so you can compare; as always, it’s unlikely to be the most elegant answer but it works! I’ve only reproduced answers to part 2 of each challenge, which has always been a harder variant of part 1 so far.
Day 1 – Report Repair
#open text file with open("C:\\aoc1.txt") as file: #create a list from lines in the file data = file.readlines() #strip whitespace and convert string to integer for maths data = [int(x.strip()) for x in data] #loop through every combo until match condition found for i in data: for j in data: for k in data: if i + j + k == 2020: print(i * j * k)
Day 2 – Password Philosophy
#read in data from the file and create a list of lines with open("C:\\aoc2.txt") as file: data = file.readlines() #create lists of three members, each containing specific parameter data = [x.split() for x in data] #initiate counter count = 0 #loop through each parameter list for password in data: #from first parameter, split the numbers, convert to integers and assign vars params = password.split("-") low, high = int(params), int(params) #set variable to search parameter target = password.strip(":") #set variable to parameter to search source = password #set the match condition and perform the count if ((source[low-1] == target) or (source[high-1] == target)) and (source[low-1] != source[high-1]): count += 1 print(count)
Day 3 – Toboggan Trajectory
#open file and create a list of lines with open("C:\\aoc3.txt") as file: data = file.readlines() data = [line.strip() for line in data] #create function taking in slope, a list of two integers def tree_counter(slope): #initialise function variables x,y,tree_count,column_count = 0,0,0,0 #create a game field from input that will accomodate the slope while column_count < (slope * len(data)): column_count += len(data) input_count = int(column_count / len(data)) i = 1 new_data = data.copy() while i < input_count: for j in range(len(data)): new_data[j] += data[j] i += 1 #move through the game field counting trees while y < len(new_data) - 1: x, y = x + slope, y + slope if new_data[y][x] == '#': tree_count += 1 return tree_count #run the function for provided inputs a1 = tree_counter([1,1]) a2 = tree_counter([3,1]) a3 = tree_counter([5,1]) a4 = tree_counter([7,1]) a5 = tree_counter([1,2]) #calculate condition answer = a1 * a2 * a3 * a4 * a5 print(answer)