def test_get_aim_position_trace(self): expected_trace = [(0, 0, 0), (5, 0, 0), (5, 0, 5), (13, 40, 5), (13, 40, 2), (13, 40, 10), (15, 60, 10)] submarine = Submarine("test_data.txt") trace = submarine.get_aim_position_trace() for idx, trace_point in enumerate(trace): with self.subTest(i=idx): self.assertEqual(expected_trace[idx], trace_point)
class BoardSubmarines: FIRST_SUBMARINE = Submarine(3) FIRST_SUBMARINE_COORDINATES = [(1, 1), (1, 2), (1, 3)] SECOND_SUBMARINE = Submarine(3) SECOND_SUBMARINE_COORDINATES = [(2, 5), (2, 6), (2, 7)] THIRD_SUBMARINE = Submarine(2) THIRD_SUBMARINE_COORDINATES = [(9, 7), (9, 8)] FOURTH_SUBMARINE = Submarine(4) FOURTH_SUBMARINE_COORDINATES = [(4, 8), (5, 8), (6, 8), (7, 8)] FIFTH_SUBMARINE = Submarine(5) FIFTH_SUBMARINE_COORDINATES = [(7, 1), (7, 2), (7, 3), (7, 4), (7, 5)]
def moveSubs(self, timeStep): listy = [205, 275, 345, 415, 485, 555, 625, 690, 765] for i in range(9): if self.subs[i] == None: if random() < self.makeProb: y = listy[i] self.subs[i] = Submarine(y, self.win) else: self.subs[i].submove(timeStep) if self.subs[i].offScreen(): self.subs[i].undraw() self.subs[i] = None
#!/usr/bin/env python # vim:set fileencoding=utf8: # import sys from command import Command from submarine import Submarine commands = [Command(x) for x in sys.stdin.readlines()] sub = Submarine() for c in commands: sub.execute_command(c) print('Part 1 Solution: {}'.format(sub.horizontal() * sub.depth())) sub = Submarine(True) for c in commands: sub.execute_command(c) print('Part 2 Solution: {}'.format(sub.horizontal() * sub.depth()))
def part2(lines: List[str]): sub = Submarine().move_lines(lines) return sub.pos.horizontal * sub.pos.depth
def test_command_list(self): submarine = Submarine("test_data.txt") command = submarine.commands[1] self.assertIsInstance(command, Command) self.assertEqual(6, len(submarine.commands))
def test_get_aim_position(self): submarine = Submarine("input_data.txt") horizontal, depth = submarine.get_aim_position() self.assertEqual(1947878632, horizontal * depth)
def test_get_position_trace(self): submarine = Submarine("test_data.txt") trace = submarine.get_position_trace() self.assertEqual(7, len(trace))
def test_solve_day2_puzzle1(self): submarine = Submarine("input_data.txt") horizontal, depth = submarine.get_position() self.assertEqual(1938402, horizontal * depth)
def test_get_position(self): submarine = Submarine("test_data.txt") horizontal, depth = submarine.get_position() self.assertEqual(15, horizontal) self.assertEqual(10, depth)