DEV Community is a community of 786,923 amazing developers

We're a place where coders share, stay up-to-date and grow their careers.

~   ~  ~ ~~ ~~~~~~~~~~~~~~~
..''''

I'll be posting here my solutions for AoC 2021. Follow along!

--- Day 1: Sonar Sweep --- [link]

For part 1, we're given a list of numbers and are asked how many times the numbers increase relatively to the previous number. The solution is pretty straightforward: loop over the list, compare each item with the previous, count the occurrence where it's greater than the previous:

with open(Path(__file__).parent / "input.txt") as file:

increases = 0
for value in map(int, file):
increases += value > previous
previous = value
return increases

For part 2, we're asked to consider the sum of a three-measurement sliding window. I thought I would need a deque to keep a list of 3 values, or use list comprehension + slices, when I remembered about these recipes in the python docs. I copied over an implementation for a generator of these windows and used for my solution:

def sliding_window(iterable, n):
# sliding_window('ABCDEFG', 4) -> ABCD BCDE CDEF DEFG
it = iter(iterable)
window = collections.deque(islice(it, n), maxlen=n)
if len(window) == n:
yield tuple(window)
for x in it:
window.append(x)
yield tuple(window)

with open(Path(__file__).parent / "input.txt") as file:
it = sliding_window(map(int, file), 3)
previous = next(it)

increases = 0
for window in it:
increases += sum(window) > sum(previous)
previous = window
return increases

For the next days, I'm adding more-itertools to have these recipes readily available!

Check my repository for the final code for day 1. See y'all tomorrow!