From 4e97f88f70c4f1920e81f380ae9dedcb2b17e5e0 Mon Sep 17 00:00:00 2001 From: trwnh Date: Tue, 15 Dec 2020 01:02:52 -0600 Subject: [PATCH] almost fell into a trap there --- 2020/15/15.py | 48 +++++++++++++++++++++++++++++++++++++++++++++++ 2020/15/input.txt | 1 + 2 files changed, 49 insertions(+) create mode 100644 2020/15/15.py create mode 100644 2020/15/input.txt diff --git a/2020/15/15.py b/2020/15/15.py new file mode 100644 index 0000000..c966032 --- /dev/null +++ b/2020/15/15.py @@ -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() \ No newline at end of file diff --git a/2020/15/input.txt b/2020/15/input.txt new file mode 100644 index 0000000..c184552 --- /dev/null +++ b/2020/15/input.txt @@ -0,0 +1 @@ +1,12,0,20,8,16 \ No newline at end of file