Increased speed by only storing the last turn for each number

This commit is contained in:
Akumatic 2020-12-15 14:24:04 +01:00
parent 90075581f2
commit 5f2a520e43

View File

@ -8,20 +8,12 @@ def readFile() -> tuple:
return [int(num) for num in f.readline().split(",")] return [int(num) for num in f.readline().split(",")]
def play(input: list, turns: int) -> int: def play(input: list, turns: int) -> int:
mem = {val: [idx + 1] for idx, val in enumerate(input)} mem = {val: idx + 1 for idx, val in enumerate(input)}
prev = input[-1] prev = input[-1]
for turn in range(len(input) + 1, turns + 1): for turn in range(len(input) + 1, turns + 1):
# set last spoken number next = 0 if prev not in mem else turn - 1 - mem[prev]
if prev not in mem or len(mem[prev]) == 1: mem[prev] = turn - 1
prev = 0 prev = next
else:
prev = mem[prev][-1] - mem[prev][-2]
# store the counter
if prev in mem:
mem[prev].append(turn)
else:
mem[prev] = [turn]
return prev return prev
def part1(input: list) -> int: def part1(input: list) -> int: