Solve 2017 day 14 to 17.
This commit is contained in:
59
2017/d15.py
Normal file
59
2017/d15.py
Normal 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()
|
||||
Reference in New Issue
Block a user