parent
47a459210d
commit
179da7a7e1
@ -0,0 +1,90 @@ |
||||
#!/usr/bin/env python |
||||
|
||||
from aoc import get_input # AoC |
||||
from collections import defaultdict |
||||
|
||||
nums = list(map( int, get_input(15).split(","))) |
||||
|
||||
firstNums = defaultdict(list) |
||||
|
||||
i = 0 |
||||
for n in nums: |
||||
firstNums[n].append(i) |
||||
i += 1 |
||||
|
||||
|
||||
def addSeen(num): |
||||
firstNums.add(num) |
||||
|
||||
def copyNums(lst): |
||||
return [elem for elem in lst] |
||||
|
||||
def getFirstNum(num, start=len(firstNums)): |
||||
i = start |
||||
while i >= 0: |
||||
n = firstNums[i] |
||||
if( n[0] == num ): |
||||
return n[1] |
||||
i -= 1 |
||||
|
||||
|
||||
# def getNextNum(i): |
||||
# if( i >= len(nums) ): |
||||
# lastNum = nums[i-1] |
||||
# newNums = nums[:i-1] |
||||
|
||||
# if( lastNum == nums[i-2] ): |
||||
# nums.append(1) |
||||
# addSeen(1) |
||||
|
||||
# elif( not lastNum in firstNums ): # new number |
||||
# nums.append(0) |
||||
# addSeen( (lastNum, i-1) ) |
||||
|
||||
# elif( lastNum in firstNums ): # spoken before |
||||
# ei= getFirstNum(lastNum) |
||||
# fi = getFirstNum(lastNum, ei-1) |
||||
# newN = ei - fi # diff is still the same if ei = ei+1 |
||||
# nums.append(newN) |
||||
# addSeen( (newN, i-1) ) |
||||
|
||||
|
||||
# turn = 3 |
||||
|
||||
# while True: |
||||
# if( turn < 30000000 ): |
||||
# getNextNum(turn) |
||||
# print(turn, "/30000000") |
||||
# turn += 1 |
||||
# else: |
||||
# print(nums[-1]) |
||||
# break |
||||
|
||||
|
||||
|
||||
|
||||
def numbers(maxt): |
||||
num = nums[-1] |
||||
prevnum = None |
||||
for i in range(len(nums), maxt): |
||||
numsSeen = len(firstNums[num]) |
||||
|
||||
if( numsSeen > 1 ): |
||||
num = firstNums[num][-1] - firstNums[num][-2] |
||||
else: |
||||
num = 0 |
||||
|
||||
print(f"{num=} {i=} {nums=}") |
||||
firstNums[num].append(i) |
||||
|
||||
return num |
||||
|
||||
|
||||
|
||||
|
||||
turn = 3 |
||||
#maxturn = 30000000 |
||||
#maxturn = 2020 |
||||
maxturn = 10 |
||||
print("0, 3, 6, 0, 3, 3, 1, 0, 4, 0") |
||||
print(numbers(maxturn)) |
Loading…
Reference in new issue