Solve 2021:2 "Drive!"

This commit is contained in:
Anders Englöf Ytterström 2021-12-02 06:42:42 +01:00
parent 9976edc457
commit d63c7463cc
2 changed files with 74 additions and 0 deletions

View file

@ -0,0 +1,38 @@
from solutions import BaseSolution
class Solution(BaseSolution):
input_file = "02.txt"
def __str__(self):
return "Day 2: Drive!"
def parse_input(self, data):
def xy(direction, value):
if direction == "forward":
return (0, int(value))
elif direction == "up":
return (-int(value), 0)
elif direction == "down":
return (int(value), 0)
return [xy(*l.split()) for l in data.strip().splitlines()]
def solve(self, puzzle_input):
x = sum(map(lambda xy: xy[0], puzzle_input))
y = sum(map(lambda xy: xy[1], puzzle_input))
return x * y
def solve_again(self, puzzle_input):
pos = (0, 0, 0)
for x, y in puzzle_input:
if y > 0:
pos = (pos[2] * y + pos[0], pos[1] + y, pos[2])
else:
pos = (pos[0], pos[1], pos[2] + x)
return pos[0] * pos[1]
if __name__ == "__main__":
solution = Solution()
solution.show_results()

View file

@ -0,0 +1,36 @@
import unittest
from solutions.day_02 import Solution
class Day02TestCase(unittest.TestCase):
def setUp(self):
self.solution = Solution()
self.puzzle_input = self.solution.parse_input(
"""
forward 5
down 5
forward 8
up 3
down 8
forward 2
"""
)
def test_parse_puzzle_input(self):
data = """
forward 8
up 3
down 8
"""
assert self.solution.parse_input(data) == [(0, 8), (-3, 0), (8, 0)]
def test_solve_first_part(self):
assert self.solution.solve(self.puzzle_input) == 150
def test_solve_second_part(self):
assert self.solution.solve_again(self.puzzle_input) == 900
if __name__ == "__main__":
unittest.main()