d14
This commit is contained in:
parent
d0e3be3296
commit
1a8d7ccf96
@ -130,5 +130,15 @@
|
||||
],
|
||||
"correct": "111,68"
|
||||
}
|
||||
},
|
||||
"14": {
|
||||
"1": {
|
||||
"wrong": [],
|
||||
"correct": "3718110721"
|
||||
},
|
||||
"2": {
|
||||
"wrong": [],
|
||||
"correct": 20298300
|
||||
}
|
||||
}
|
||||
}
|
||||
104
day14.py
Normal file
104
day14.py
Normal file
@ -0,0 +1,104 @@
|
||||
from __future__ import annotations
|
||||
from tools.aoc import AOCDay
|
||||
from typing import Any
|
||||
|
||||
|
||||
class Recipe:
|
||||
score: int
|
||||
next: Recipe
|
||||
|
||||
def __init__(self, score: int):
|
||||
self.score = score
|
||||
|
||||
|
||||
class RecipeList:
|
||||
def __init__(self):
|
||||
self.head = Recipe(3)
|
||||
self.tail = Recipe(7)
|
||||
self.head.next = self.tail
|
||||
self.tail.next = self.head
|
||||
|
||||
def add(self, score: int):
|
||||
r = Recipe(score)
|
||||
r.next = self.head
|
||||
self.tail.next = r
|
||||
self.tail = r
|
||||
|
||||
def print(self):
|
||||
m = self.head
|
||||
while m.next != self.head:
|
||||
print("%d " % m.score, end="")
|
||||
m = m.next
|
||||
|
||||
print(m.score)
|
||||
|
||||
|
||||
class Day(AOCDay):
|
||||
inputs = [
|
||||
[
|
||||
("5158916779", "input14_test1"),
|
||||
("3718110721", "input14"),
|
||||
],
|
||||
[
|
||||
(18, "input14_test2"),
|
||||
(2018, "input14_test3"),
|
||||
(20298300, "input14"),
|
||||
],
|
||||
]
|
||||
|
||||
def part1(self) -> Any:
|
||||
recipes = RecipeList()
|
||||
elf_1 = recipes.head
|
||||
elf_2 = recipes.tail
|
||||
|
||||
for _ in range(self.getInput(int) + 10):
|
||||
new_score = str(elf_1.score + elf_2.score)
|
||||
for c in map(int, new_score):
|
||||
recipes.add(c)
|
||||
|
||||
for i in range(elf_1.score + 1):
|
||||
elf_1 = elf_1.next
|
||||
|
||||
for i in range(elf_2.score + 1):
|
||||
elf_2 = elf_2.next
|
||||
|
||||
mark = recipes.head
|
||||
for _ in range(self.getInput(int)):
|
||||
mark = mark.next
|
||||
|
||||
res = ""
|
||||
for _ in range(10):
|
||||
res += str(mark.score)
|
||||
mark = mark.next
|
||||
|
||||
return res
|
||||
|
||||
def part2(self) -> Any:
|
||||
recipes = RecipeList()
|
||||
elf_1 = recipes.head
|
||||
elf_2 = recipes.tail
|
||||
|
||||
count = 2
|
||||
target = self.getInput()
|
||||
current = "0" * (len(target) - 2) + "37"
|
||||
while current != target:
|
||||
new_score = str(elf_1.score + elf_2.score)
|
||||
for c in map(int, new_score):
|
||||
recipes.add(c)
|
||||
count += 1
|
||||
current = current[1:] + str(c)
|
||||
if current == target:
|
||||
return count - len(target)
|
||||
|
||||
for i in range(elf_1.score + 1):
|
||||
elf_1 = elf_1.next
|
||||
|
||||
for i in range(elf_2.score + 1):
|
||||
elf_2 = elf_2.next
|
||||
|
||||
return count - len(target)
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
day = Day(2018, 14)
|
||||
day.run(verbose=True)
|
||||
1
inputs/input14
Normal file
1
inputs/input14
Normal file
@ -0,0 +1 @@
|
||||
306281
|
||||
1
inputs/input14_test1
Normal file
1
inputs/input14_test1
Normal file
@ -0,0 +1 @@
|
||||
9
|
||||
1
inputs/input14_test2
Normal file
1
inputs/input14_test2
Normal file
@ -0,0 +1 @@
|
||||
92510
|
||||
1
inputs/input14_test3
Normal file
1
inputs/input14_test3
Normal file
@ -0,0 +1 @@
|
||||
59414
|
||||
Loading…
Reference in New Issue
Block a user