2018-12-14 - Chocolate Charts
(original .ipynb)
# Part 1
recipes = [3, 7]
elves = list([ n for n in range(2) ])
def ten_recipes_after(max_iterations):
global recipes
global elves
while len(recipes) < (10 + max_iterations):
# generate the new recipes
new_recipes_str = str(sum([ recipes[elf_recipe] for elf_recipe in elves ]))
new_recipes = [ int(c) for c in new_recipes_str ]
recipes += new_recipes
# move the elves
for elf_index, current_recipe in enumerate(elves):
new_elf_recipe = (current_recipe + 1 + recipes[current_recipe]) % len(recipes)
elves[elf_index] = new_elf_recipe
return int("".join([ str(i) for i in recipes[-10:]]))
print(ten_recipes_after(165061))
5992684592
# Part 2
def first_instance_of(pattern_str):
pattern = [ int(c) for c in pattern_str ]
recipes = [3, 7]
elves = list([ n for n in range(2) ])
count = 0
pattern_found = False
while not pattern_found:
# generate the new recipes
new_recipes_str = str(sum([ recipes[elf_recipe] for elf_recipe in elves ]))
new_recipes = [ int(c) for c in new_recipes_str ]
recipes += new_recipes
# move the elves
for elf_index, current_recipe in enumerate(elves):
new_elf_recipe = (current_recipe + 1 + recipes[current_recipe]) % len(recipes)
elves[elf_index] = new_elf_recipe
if recipes[-len(pattern):] == pattern:
pattern_found = True
count += 1
return ("".join([ str(i) for i in recipes]).index(pattern_str))
assert first_instance_of("51589") == 9
assert first_instance_of("01245") == 5
assert first_instance_of("92510") == 18
assert first_instance_of("59414") == 2018
print(first_instance_of("165061"))
OK