diff options
| author | Gustav Sörnäs <gustav@sornas.net> | 2020-12-15 07:15:51 +0100 |
|---|---|---|
| committer | Gustav Sörnäs <gustav@sornas.net> | 2020-12-15 07:15:51 +0100 |
| commit | 6226afb16d4d87226ae73babfce58864b4e3e308 (patch) | |
| tree | 2df12c8f7242f636c94ae115a1f5c2da9f534783 /20 | |
| parent | ac915bc9c59be8ebe031d32d479b1ead2f6b8177 (diff) | |
| download | aoc-6226afb16d4d87226ae73babfce58864b4e3e308.tar.gz | |
working d15p1
Diffstat (limited to '20')
| -rw-r--r-- | 20/py/d15.py | 42 |
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)) |
