Solve 2017 day 14 to 17.

This commit is contained in:
2024-05-29 02:35:48 -04:00
parent 4ba0b25b77
commit 5b7b9c87cb
5 changed files with 234 additions and 1 deletions

59
2017/d15.py Normal file
View File

@@ -0,0 +1,59 @@
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()