from solutions import BaseSolution class Solution(BaseSolution): input_file = '15.txt' def __str__(self): return 'Day 15: Dueling Generators' def _calc(self, x, f, m=1): x = (x * f) % 2147483647 if x % m != 0: return self._calc(x, f, m) else: return x def solve(self, puzzle_input): af, bf = (16807, 48271) a, b = [int(pi.split()[-1]) for pi in puzzle_input.splitlines()] j = 0 for _ in range(40 * 10**6): a = self._calc(a, af) b = self._calc(b, bf) if '{:b}'.format(a)[-16:] == '{:b}'.format(b)[-16:]: j += 1 return j def solve_again(self, puzzle_input): af, bf = (16807, 48271) a, b = [int(pi.split()[-1]) for pi in puzzle_input.splitlines()] j = 0 for _ in range(5 * 10 ** 6): a = self._calc(a, af, 4) b = self._calc(b, bf, 8) if '{:b}'.format(a)[-16:] == '{:b}'.format(b)[-16:]: j += 1 return j if __name__ == '__main__': solution = Solution() solution.show_results()