Advent of Code 2018
Advent of Code is a series of 25 holiday-themed coding challenges. This repository contains my solutions for 2018, along with brief notes on each of the puzzles.
Day 1: Chronal Calibration
Part 1: Sum a list of numbers.
Part 2: Add up a cycle of numbers until you get the same total twice. All inputs have a cycle.
Day 2: Inventory Management System
Part 1: Count the number of letters in the IDs, apply the checksum as specified.
Part 2: Find a pair of IDs that differ by only one character. Return their overlap.
Finding the difference between two equal length strings has a cute one-liner:
return sum(x != y for x, y in zip(a, b))
Now, I don't know that summing booleans is the most obvious way to do this, and I almost always prefer obvious code to clever code, but this one is cute. For anyone who doesn't know why this works, Python bools are pretty much just aliases for 0 and 1, so you can sum them.
Day 3: No Matter How You Slice It
Part 1: Mark up a hashmap<(x, y), visit_count>, and sum up every square that is > 1.
Part 2: Find the piece of fabric where every square in the counting grid is 1.
Day 4: Repose Record
We're only considering the midnight hour; between 12:00AM and 12:59AM. We can use the input data to create a heatmap of how many minutes each guard sleeps during a particular minute:
class Guard: def __init__(self, guard_id): self.guard_id = guard_id self.minutes =  * 60 # heatmaps of which minutes they sleep throughout their one hour shift @property def time_sleeping(self): return sum(self.minutes) @property def favorite_minute_to_sleep(self): sleep_amount = 0 minute = 0 for i, v in enumerate(self.minutes): if v > sleep_amount: sleep_amount = v minute = i return minute, sleep_amount
Part 1: Sort the guards by the the total minutes we've seen them sleeping.
sleepiest_guard = sorted(parser.guards.values(), key=lambda x: x.time_sleeping)[-1]
Part 2: Sort the guards to find the one who is most consistent in their sleeping.
most_consistent_guard = sorted(parser.guards.values(), key=lambda x: x.favorite_minute_to_sleep)[-1]
(To be continued...)