almost fell into a trap there
This commit is contained in:
parent
2d3ca01a15
commit
4e97f88f70
48
2020/15/15.py
Normal file
48
2020/15/15.py
Normal file
|
@ -0,0 +1,48 @@
|
||||||
|
def read_file():
|
||||||
|
with open("input.txt","r") as f:
|
||||||
|
return [int(x) for x in f.read().split(',')]
|
||||||
|
|
||||||
|
def numbers_spoken(seed, limit):
|
||||||
|
"""Stores all numbers spoken."""
|
||||||
|
numbers = seed
|
||||||
|
i = len(seed)
|
||||||
|
number = seed[-1]
|
||||||
|
while len(numbers) != limit:
|
||||||
|
past = numbers[:-1]
|
||||||
|
if number not in past:
|
||||||
|
numbers.append(0)
|
||||||
|
number = 0
|
||||||
|
else:
|
||||||
|
last_spoken = len(past) + 1
|
||||||
|
most_recently_spoken = (len(past) - past[::-1].index(number))
|
||||||
|
turns_ago = last_spoken - most_recently_spoken
|
||||||
|
numbers.append(turns_ago)
|
||||||
|
number = turns_ago
|
||||||
|
return numbers[-1]
|
||||||
|
|
||||||
|
def part1(seed):
|
||||||
|
return numbers_spoken(seed,2020)
|
||||||
|
|
||||||
|
def number_spoken_on_turn(seed, turn):
|
||||||
|
"""Only cares about specific turn."""
|
||||||
|
last_spoken = {last: i+1 for i, last in enumerate(seed)}
|
||||||
|
number = seed[-1]
|
||||||
|
for i in range(len(seed),turn):
|
||||||
|
if number not in last_spoken:
|
||||||
|
last_spoken[number] = i
|
||||||
|
number = 0
|
||||||
|
else:
|
||||||
|
last = last_spoken[number]
|
||||||
|
last_spoken[number] = i
|
||||||
|
number = last_spoken[number] - last
|
||||||
|
return(number)
|
||||||
|
|
||||||
|
def part2(seed):
|
||||||
|
return number_spoken_on_turn(seed,30000000)
|
||||||
|
|
||||||
|
def main():
|
||||||
|
seed = read_file()
|
||||||
|
print(part1(seed), part2(seed))
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
main()
|
1
2020/15/input.txt
Normal file
1
2020/15/input.txt
Normal file
|
@ -0,0 +1 @@
|
||||||
|
1,12,0,20,8,16
|
Loading…
Reference in a new issue