diff --git a/day15.py b/day15.py new file mode 100644 index 0000000..8a50ade --- /dev/null +++ b/day15.py @@ -0,0 +1,55 @@ +from tools.aoc import AOCDay +from typing import Any + + +class Day(AOCDay): + inputs = [ + [ + (588, "input15_test"), + (567, "input15") + ], + [ + (309, "input15_test"), + (323, "input15") + ] + ] + + factor_a = 16807 + factor_b = 48271 + + def get_generator_start_values(self) -> (int, int): + return map(int, map(lambda x: x.split(" ")[-1], self.getInput())) + + def part1(self) -> Any: + a, b = self.get_generator_start_values() + + count = 0 + for _ in range(40_000_000): + a, b = a * self.factor_a % 2147483647, b * self.factor_b % 2147483647 + if a & 0x0000FFFF == b & 0x0000FFFF: + count += 1 + + return count + + def part2(self) -> Any: + a, b = self.get_generator_start_values() + + count = 0 + for _ in range(5_000_000): + a = a * self.factor_a % 2147483647 + while a % 4 != 0: + a = a * self.factor_a % 2147483647 + + b = b * self.factor_b % 2147483647 + while b % 8 != 0: + b = b * self.factor_b % 2147483647 + + if a & 0x0000FFFF == b & 0x0000FFFF: + count += 1 + + return count + + +if __name__ == '__main__': + day = Day(2017, 15) + day.run(verbose=True) diff --git a/inputs/input15 b/inputs/input15 new file mode 100644 index 0000000..5b0280b --- /dev/null +++ b/inputs/input15 @@ -0,0 +1,2 @@ +Generator A starts with 512 +Generator B starts with 191 diff --git a/inputs/input15_test b/inputs/input15_test new file mode 100644 index 0000000..50a4b58 --- /dev/null +++ b/inputs/input15_test @@ -0,0 +1,2 @@ +Generator A starts with 65 +Generator B starts with 8921