aoc2017/day15.py
Stefan Harmuth 10928fd157 day15
2022-11-30 16:46:59 +01:00

56 lines
1.3 KiB
Python

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)