day12
This commit is contained in:
parent
e8b37bdddb
commit
643ad7fd8d
@ -103,5 +103,19 @@
|
|||||||
"wrong": [],
|
"wrong": [],
|
||||||
"correct": "90,214,15"
|
"correct": "90,214,15"
|
||||||
}
|
}
|
||||||
|
},
|
||||||
|
"12": {
|
||||||
|
"1": {
|
||||||
|
"wrong": [],
|
||||||
|
"correct": 3494
|
||||||
|
},
|
||||||
|
"2": {
|
||||||
|
"wrong": [
|
||||||
|
8211,
|
||||||
|
2852454,
|
||||||
|
2850000002511
|
||||||
|
],
|
||||||
|
"correct": 2850000002454
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
81
day12.py
Normal file
81
day12.py
Normal file
@ -0,0 +1,81 @@
|
|||||||
|
from tools.aoc import AOCDay
|
||||||
|
from typing import Any
|
||||||
|
|
||||||
|
|
||||||
|
def simulate_generation(state: str, transform: dict, shift: int) -> (str, int):
|
||||||
|
while not state.startswith("....."):
|
||||||
|
state = '.' + state
|
||||||
|
shift += 1
|
||||||
|
|
||||||
|
while not state.endswith('.....'):
|
||||||
|
state += '.'
|
||||||
|
|
||||||
|
new_state = '..'
|
||||||
|
for x in range(len(state) - 5):
|
||||||
|
key = state[x:x+5]
|
||||||
|
if key not in transform:
|
||||||
|
new_state += '.'
|
||||||
|
else:
|
||||||
|
new_state += transform[key]
|
||||||
|
|
||||||
|
while new_state.startswith('.'):
|
||||||
|
new_state = new_state[1:]
|
||||||
|
shift -= 1
|
||||||
|
|
||||||
|
return new_state, shift
|
||||||
|
|
||||||
|
|
||||||
|
def get_pot_value(state: str, shift: int) -> int:
|
||||||
|
sum = 0
|
||||||
|
for i, x in enumerate(state):
|
||||||
|
if x == '#':
|
||||||
|
sum += i - shift
|
||||||
|
|
||||||
|
return sum
|
||||||
|
|
||||||
|
|
||||||
|
class Day(AOCDay):
|
||||||
|
inputs = [
|
||||||
|
[
|
||||||
|
(325, "input12_test"),
|
||||||
|
(3494, "input12"),
|
||||||
|
],
|
||||||
|
[
|
||||||
|
(2850000002454, "input12"),
|
||||||
|
]
|
||||||
|
]
|
||||||
|
|
||||||
|
def parse_input(self) -> (str, dict):
|
||||||
|
state = self.getInput()[0].split(": ")[1]
|
||||||
|
|
||||||
|
transform = {}
|
||||||
|
for line in self.getInput()[2:]:
|
||||||
|
k, v = line.split(" => ")
|
||||||
|
transform[k] = v
|
||||||
|
|
||||||
|
return state, transform
|
||||||
|
|
||||||
|
def part1(self) -> Any:
|
||||||
|
state, transform = self.parse_input()
|
||||||
|
shift = 0
|
||||||
|
for x in range(20):
|
||||||
|
state, shift = simulate_generation(state, transform, shift)
|
||||||
|
|
||||||
|
return get_pot_value(state, shift)
|
||||||
|
|
||||||
|
def part2(self) -> Any:
|
||||||
|
cache = {}
|
||||||
|
num_gens = 50_000_000_000
|
||||||
|
state, transform = self.parse_input()
|
||||||
|
cache[state] = (0, 0)
|
||||||
|
shift = 0
|
||||||
|
for x in range(1, num_gens + 1):
|
||||||
|
state, shift = simulate_generation(state, transform, shift)
|
||||||
|
if state in cache:
|
||||||
|
return get_pot_value(state, (-num_gens + 11))
|
||||||
|
cache[state] = (x, shift)
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == '__main__':
|
||||||
|
day = Day(2018, 12)
|
||||||
|
day.run(verbose=True)
|
||||||
34
inputs/input12
Normal file
34
inputs/input12
Normal file
@ -0,0 +1,34 @@
|
|||||||
|
initial state: #.#####.#.#.####.####.#.#...#.......##..##.#.#.#.###..#.....#.####..#.#######.#....####.#....##....#
|
||||||
|
|
||||||
|
##.## => .
|
||||||
|
#.#.. => .
|
||||||
|
..... => .
|
||||||
|
##..# => #
|
||||||
|
###.. => #
|
||||||
|
.##.# => .
|
||||||
|
..#.. => #
|
||||||
|
##.#. => #
|
||||||
|
.##.. => .
|
||||||
|
#..#. => .
|
||||||
|
###.# => #
|
||||||
|
.#### => #
|
||||||
|
.#.## => .
|
||||||
|
#.##. => #
|
||||||
|
.###. => #
|
||||||
|
##### => .
|
||||||
|
..##. => .
|
||||||
|
#.#.# => .
|
||||||
|
...#. => #
|
||||||
|
..### => .
|
||||||
|
.#.#. => #
|
||||||
|
.#... => #
|
||||||
|
##... => #
|
||||||
|
.#..# => #
|
||||||
|
#.### => #
|
||||||
|
#..## => #
|
||||||
|
....# => .
|
||||||
|
####. => .
|
||||||
|
#...# => #
|
||||||
|
#.... => .
|
||||||
|
...## => .
|
||||||
|
..#.# => #
|
||||||
16
inputs/input12_test
Normal file
16
inputs/input12_test
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
initial state: #..#.#..##......###...###
|
||||||
|
|
||||||
|
...## => #
|
||||||
|
..#.. => #
|
||||||
|
.#... => #
|
||||||
|
.#.#. => #
|
||||||
|
.#.## => #
|
||||||
|
.##.. => #
|
||||||
|
.#### => #
|
||||||
|
#.#.# => #
|
||||||
|
#.### => #
|
||||||
|
##.#. => #
|
||||||
|
##.## => #
|
||||||
|
###.. => #
|
||||||
|
###.# => #
|
||||||
|
####. => #
|
||||||
Loading…
Reference in New Issue
Block a user