diff options
| -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)) |
