63 lines
1.5 KiB
Python
63 lines
1.5 KiB
Python
def part_1(data):
|
|
num = int(data.strip())
|
|
recipes = [3, 7]
|
|
i, j = 0, 1
|
|
|
|
while True:
|
|
s = recipes[i] + recipes[j]
|
|
ss = str(s)
|
|
if len(ss) == 1:
|
|
recipes.append(s)
|
|
elif len(ss) == 2:
|
|
recipes.append(int(ss[0]))
|
|
recipes.append(int(ss[1]))
|
|
else:
|
|
assert False
|
|
|
|
i = (i + 1 + recipes[i]) % len(recipes)
|
|
j = (j + 1 + recipes[j]) % len(recipes)
|
|
if i == j:
|
|
j = (j + 1) % len(recipes)
|
|
if len(recipes) > num + 10:
|
|
print("".join(map(str, recipes[num : num + 10])))
|
|
break
|
|
|
|
|
|
def part_2(data):
|
|
target = list(map(int, data.strip()))
|
|
recipes = [3, 7]
|
|
|
|
i, j = 0, 1
|
|
while True:
|
|
s = recipes[i] + recipes[j]
|
|
if s < 10:
|
|
recipes.append(s)
|
|
elif s < 100:
|
|
recipes.append(s // 10)
|
|
recipes.append(s % 10)
|
|
else:
|
|
assert False
|
|
|
|
i = (i + 1 + recipes[i]) % len(recipes)
|
|
j = (j + 1 + recipes[j]) % len(recipes)
|
|
if i == j:
|
|
j = (j + 1) % len(recipes)
|
|
|
|
if recipes[-len(target) :] == target:
|
|
print(len(recipes) - len(target))
|
|
elif recipes[-len(target) - 1 : -1] == target:
|
|
print(len(recipes) - len(target) - 1)
|
|
break
|
|
|
|
|
|
def main():
|
|
input_file = __file__.replace(".py", ".txt")
|
|
with open(input_file) as f:
|
|
data = f.read()
|
|
part_1(data)
|
|
part_2(data)
|
|
|
|
|
|
if __name__ == "__main__":
|
|
main()
|