|
@@ -0,0 +1,31 @@
|
|
|
+lines = []
|
|
|
+
|
|
|
+with open("15.input") as f:
|
|
|
+ for line in f.readlines():
|
|
|
+ lines.append(line.strip())
|
|
|
+
|
|
|
+numbers = [int(num) for num in lines[0].split(",")]
|
|
|
+
|
|
|
+def find_nth(numbers, end):
|
|
|
+ numbers = list(numbers)
|
|
|
+ last_spoken = {}
|
|
|
+
|
|
|
+ for (i, num) in enumerate(numbers[:-1]):
|
|
|
+ last_spoken[num] = i
|
|
|
+
|
|
|
+ last = numbers[-1]
|
|
|
+ numbers = numbers[0:-1]
|
|
|
+
|
|
|
+ for i in range(len(numbers), end):
|
|
|
+ if last in last_spoken:
|
|
|
+ next = i - last_spoken[last]
|
|
|
+ else:
|
|
|
+ next = 0
|
|
|
+ numbers.append(last)
|
|
|
+ last_spoken[last] = i
|
|
|
+ last = next
|
|
|
+
|
|
|
+ return numbers[-1]
|
|
|
+
|
|
|
+print("Answer 1:", find_nth(numbers, 2020))
|
|
|
+print("Answer 2:", find_nth(numbers, 30000000))
|