summaryrefslogtreecommitdiffstats
path: root/20/py
diff options
context:
space:
mode:
Diffstat (limited to '20/py')
-rw-r--r--20/py/d15.py42
1 files changed, 42 insertions, 0 deletions
diff --git a/20/py/d15.py b/20/py/d15.py
new file mode 100644
index 0000000..8723a28
--- /dev/null
+++ b/20/py/d15.py
@@ -0,0 +1,42 @@
+#!/usr/bin/env python3
+import aoc20
+import sys
+
+
+def pt1(_in):
+ nums = [int(n) for n in _in[0].split(",")]
+ prev = {n: i for i, n in enumerate(nums)}
+ while len(nums) < 2020:
+ cur = nums[-1]
+ if cur not in prev:
+ nums.append(0)
+ prev[cur] = len(nums) - 2
+ else:
+ nums.append(len(nums) - 1 - prev[cur])
+ prev[cur] = len(nums) - 2
+ return nums[2019]
+
+
+def pt2(_in):
+ nums = [int(n) for n in _in[0].split(",")]
+ amount = 3
+ cur = nums[-1]
+ prev = {n: i for i, n in enumerate(nums)}
+ while amount < 30000000:
+ if amount % 300000 == 0:
+ print(amount // 300000)
+ if cur not in prev:
+ new = 0
+ prev[cur] = amount - 1
+ else:
+ new = amount - 1 - prev[cur]
+ prev[cur] = amount - 1
+ cur = new
+ amount += 1
+ return cur
+
+
+if __name__ == "__main__":
+ input = aoc20.read_input(sys.argv[1:], 15)
+ print(pt1(input))
+ print(pt2(input))