Increased speed by only storing the last turn for each number
This commit is contained in:
parent
90075581f2
commit
5f2a520e43
@ -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:
|
||||||
|
Loading…
x
Reference in New Issue
Block a user