aocpy/2017/d15.py
2024-05-29 02:35:48 -04:00

60 lines
966 B
Python

from lib import str_to_int
def part_1(data):
fa = 16807
fb = 48271
m = 2147483647
xs = []
for line in data.splitlines():
xs.append(str_to_int(line))
a, b = xs
c = 0
for _ in range(40_000_000):
a = (a * fa) % m
b = (b * fb) % m
if (a & 0xffff) == (b & 0xffff):
c += 1
print(c)
def gen(a, f, m, d):
while True:
a = (a * f) % m
if a % d == 0:
yield a
def part_2(data):
fa = 16807
fb = 48271
m = 2147483647
xs = []
for line in data.splitlines():
xs.append(str_to_int(line))
a, b = xs
xs = gen(a, fa, m, 4)
ys = gen(b, fb, m, 8)
c = 0
for _ in range(5_000_000):
a = next(xs)
b = next(ys)
if (a & 0xffff) == (b & 0xffff):
c += 1
print(c)
def main():
data = open(0).read().strip()
part_1(data)
part_2(data)
if __name__ == "__main__":
main()