Advent-of-Code/2021/6/main2.py

56 lines
1.5 KiB
Python
Raw Normal View History

2021-12-07 14:50:37 -05:00
# "constants":
DAYS = 256
# intialize shared data:
fish_reproducing_on_day = []
for i in range(0, DAYS + 9):
fish_reproducing_on_day.append(0)
# functions:
def SimulateFish(days_until_next_fish, total_days_left):
# # DEBUG(dev):
# print('SimulateFish(', days_until_next_fish, ',', total_days_left, ')')
# If we're past the final date, don't count any more:
if(total_days_left - days_until_next_fish <= 0):
# add 1 for THIS fish
return 1
total = 0
# Add up all the totals of the fish this one is going to spawn
for i in range(total_days_left - days_until_next_fish, 0, -7):
total += SimulateFish(9, i)
# Add this fish, as well
total += 1
# Return grand total from this fish (INCLUDING this fish)
return total
def SimulateFishByDay(current_day):
fish_reproducing_on_day[current_day + 7] += fish_reproducing_on_day[current_day]
fish_reproducing_on_day[current_day + 9] += fish_reproducing_on_day[current_day]
return fish_reproducing_on_day[current_day]
#### MAIN EXECUTION ####
fish = []
with open('data', 'r') as fp:
fish = fp.readline().strip().split(',')
grand_total_1 = 0
for i in range(0, len(fish)):
grand_total_1 += SimulateFish(int(fish[i]), 80)
print(grand_total_1)
for i in range(0, len(fish)):
fish_reproducing_on_day[int(fish[i])] += 1
grand_total_2 = 300 # starting fish count
for i in range(0, DAYS):
print(fish_reproducing_on_day)
grand_total_2 += SimulateFishByDay(i)
print(grand_total_2)