Solve 2021:1 "Sonar sweep"

Felt a bit slow and rusty. Tooling was not set up properly on the
computer which decreased the flow.

Anyhow, fun first day! Could have been done more pythonic with list sequences, and readability would have increased with more use of sum() and lambdas. But this is not what Advent of Code is about.
This commit is contained in:
Anders Englöf Ytterström 2021-12-01 06:38:45 +01:00
parent fec07723b8
commit 9976edc457
2 changed files with 71 additions and 0 deletions

View file

@ -0,0 +1,31 @@
from solutions import BaseSolution
class Solution(BaseSolution):
input_file = "01.txt"
def __str__(self):
return "Day 1: Sonar Sweep"
def parse_input(self, data):
return [int(n) for n in data.split()]
def solve(self, puzzle_input):
return sum(
[puzzle_input[i] > puzzle_input[i - 1] for i in range(1, len(puzzle_input))]
)
def solve_again(self, puzzle_input):
puzzle_input.append(max(puzzle_input) + 1)
return sum(
[
(puzzle_input[i] + puzzle_input[i - 1] + puzzle_input[i - 2])
> (puzzle_input[i - 1] + puzzle_input[i - 2] + puzzle_input[i - 3])
for i in range(2, len(puzzle_input) - 1)
]
)
if __name__ == "__main__":
solution = Solution()
solution.show_results()

View file

@ -0,0 +1,40 @@
import unittest
from solutions.day_01 import Solution
class Day01TestCase(unittest.TestCase):
def setUp(self):
self.solution = Solution()
self.puzzle_input = self.solution.parse_input(
"""
199
200
208
210
200
207
240
269
260
263
"""
)
def test_parse_puzzle_input(self):
data = """
12
23
45
"""
assert self.solution.parse_input(data) == [12, 23, 45]
def test_solve_first_part(self):
assert self.solution.solve(self.puzzle_input) == 7
def test_solve_second_part(self):
assert self.solution.solve_again(self.puzzle_input) == 5
if __name__ == "__main__":
unittest.main()