day15 challenge

This commit is contained in:
Thibaud Gasser 2020-12-15 18:17:17 +01:00
parent 50e0fb7141
commit 2cad32dda7

58
day15/day15.py Normal file
View File

@ -0,0 +1,58 @@
#!/usr/bin/env python3
from collections import defaultdict
from array import array
def main(initial_suite, max_iteration):
iteration = 1
seen = defaultdict(int)
# init
for number in initial_suite:
seen[number] = iteration
iteration += 1
current = 0
while iteration < max_iteration:
last_seen = seen[current]
if last_seen == 0:
seen[current] = iteration
current = 0 # next
else:
seen[current] = iteration
current = iteration - last_seen # next
iteration += 1
return current
def main_array(initial_suite, max_iteration):
iteration = 1
seen = array('I', [0] * max_iteration)
# init
for number in initial_suite:
seen[number] = iteration
iteration += 1
current = 0
while iteration < max_iteration:
last_seen = seen[current]
if last_seen == 0:
seen[current] = iteration
current = 0 # next
else:
seen[current] = iteration
current = iteration - last_seen # next
iteration += 1
return current
if __name__ == "__main__":
inp = [6, 3, 15, 13, 1, 0]
# 423 µs ± 53.9 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)
print(main(inp, 2020))
# 13.6 s ± 2.89 s per loop (mean ± std. dev. of 7 runs, 1 loop each)
#print(main(inp, 30000000))
print(main_array(inp, 30000000))