Day 15
This commit is contained in:
parent
2f3d47d782
commit
09f5a715aa
32
2020/day15.py
Normal file
32
2020/day15.py
Normal file
|
@ -0,0 +1,32 @@
|
||||||
|
import sys
|
||||||
|
from collections import defaultdict
|
||||||
|
|
||||||
|
|
||||||
|
def main():
|
||||||
|
nl = list(map(lambda s: int(s), sys.stdin.read().rstrip().split(",")))
|
||||||
|
|
||||||
|
# Part 1
|
||||||
|
print("Part 1:", get_nth(2020, nl))
|
||||||
|
# Part 2
|
||||||
|
print("Part 2:", get_nth(30000000, nl))
|
||||||
|
|
||||||
|
|
||||||
|
def get_nth(limit, starters): # pretty horrible complexity but i'm behind sched
|
||||||
|
said = defaultdict(list)
|
||||||
|
for turn in range(1, limit + 1):
|
||||||
|
if turn <= len(starters): # starting number shit special case.
|
||||||
|
n = starters[turn - 1]
|
||||||
|
else:
|
||||||
|
last_spoken = n
|
||||||
|
if len(said[last_spoken]) == 1:
|
||||||
|
n = 0
|
||||||
|
else:
|
||||||
|
last_turn_said = said[last_spoken][-2]
|
||||||
|
n = turn - 1 - last_turn_said
|
||||||
|
said[n].append(turn)
|
||||||
|
said[n] = said[n][-2:]
|
||||||
|
return n
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
main()
|
Loading…
Reference in a new issue