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