Compare commits
10 Commits
945ab0c86d
...
2f52af69e7
| Author | SHA1 | Date | |
|---|---|---|---|
| 2f52af69e7 | |||
| fd8aa6af91 | |||
| a44bd51f68 | |||
| 6a8040d4d9 | |||
| cfd6382756 | |||
| d4314d63fc | |||
| 008bab9cf7 | |||
| 450b092a51 | |||
| 700e3fdf30 | |||
| 9a5897748b |
40
day17.py
Normal file
40
day17.py
Normal file
@ -0,0 +1,40 @@
|
||||
from tools.aoc import AOCDay
|
||||
from typing import Any
|
||||
|
||||
|
||||
class Day(AOCDay):
|
||||
inputs = [
|
||||
[
|
||||
(638, "input17_test"),
|
||||
(1506, "input17"),
|
||||
],
|
||||
[
|
||||
(39479736, "input17")
|
||||
]
|
||||
]
|
||||
|
||||
def part1(self) -> Any:
|
||||
step = self.getInput(int)
|
||||
buffer = [0]
|
||||
index = 0
|
||||
for i in range(2017):
|
||||
index = (index + step) % len(buffer) + 1
|
||||
buffer.insert(index, i + 1)
|
||||
|
||||
return buffer[buffer.index(2017) + 1]
|
||||
|
||||
def part2(self) -> Any:
|
||||
step = self.getInput(int)
|
||||
index = 0
|
||||
ans = 0
|
||||
for i in range(50_000_000):
|
||||
index = (index + step) % (i + 1) + 1
|
||||
if index == 1:
|
||||
ans = i + 1
|
||||
|
||||
return ans
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
day = Day(2017, 17)
|
||||
day.run(verbose=True)
|
||||
114
day18.py
Normal file
114
day18.py
Normal file
@ -0,0 +1,114 @@
|
||||
import time
|
||||
from collections import defaultdict
|
||||
from threading import Thread
|
||||
from tools.aoc import AOCDay
|
||||
from typing import Any
|
||||
from queue import Queue
|
||||
|
||||
|
||||
class Duet(Thread):
|
||||
def __init__(self, commands: list, pid: int = 0, input_queue: Queue = None, export_queue: Queue = None) -> None:
|
||||
super().__init__()
|
||||
self.commands = commands
|
||||
self.pid = pid
|
||||
self.input_queue = input_queue
|
||||
self.export_queue = export_queue
|
||||
self.state = 0
|
||||
self.output = 0
|
||||
|
||||
def run(self) -> None:
|
||||
last_freq = 0
|
||||
register = defaultdict(int)
|
||||
register['p'] = self.pid
|
||||
index = 0
|
||||
while 0 <= index < len(self.commands):
|
||||
cmd = self.commands[index]
|
||||
|
||||
if len(cmd) == 3:
|
||||
value_index = 2
|
||||
else:
|
||||
value_index = 1
|
||||
|
||||
try:
|
||||
value = int(cmd[value_index])
|
||||
except ValueError:
|
||||
value = register[cmd[value_index]]
|
||||
|
||||
match cmd[0]:
|
||||
case "snd":
|
||||
last_freq = value
|
||||
if self.export_queue is not None:
|
||||
self.export_queue.put(value)
|
||||
self.output += 1
|
||||
case "set":
|
||||
register[cmd[1]] = value
|
||||
case "add":
|
||||
register[cmd[1]] += value
|
||||
case "mul":
|
||||
register[cmd[1]] *= value
|
||||
case "mod":
|
||||
register[cmd[1]] %= value
|
||||
case "rcv":
|
||||
if self.input_queue is not None:
|
||||
self.state = 1
|
||||
while self.input_queue.empty():
|
||||
time.sleep(0.01)
|
||||
register[cmd[1]] = self.input_queue.get()
|
||||
self.state = 0
|
||||
else:
|
||||
if register[cmd[1]] != 0:
|
||||
self.output = last_freq
|
||||
return
|
||||
case "jgz":
|
||||
try:
|
||||
if int(cmd[1]) > 0:
|
||||
index += value - 1
|
||||
except ValueError:
|
||||
if register[cmd[1]] > 0:
|
||||
index += value - 1
|
||||
case _:
|
||||
raise ValueError("Unknown command: " + cmd[0])
|
||||
|
||||
index += 1
|
||||
|
||||
return
|
||||
|
||||
|
||||
class Day(AOCDay):
|
||||
inputs = [
|
||||
[
|
||||
(4, "input18_test"),
|
||||
(7071, "input18")
|
||||
],
|
||||
[
|
||||
(3, "input18_test2"),
|
||||
(8001, "input18")
|
||||
]
|
||||
]
|
||||
|
||||
def part1(self) -> Any:
|
||||
duet = Duet([x.split(" ") for x in self.getInput()])
|
||||
duet.start()
|
||||
duet.join()
|
||||
return duet.output
|
||||
|
||||
def part2(self) -> Any:
|
||||
q1, q2 = Queue(), Queue()
|
||||
p1 = Duet([x.split(" ") for x in self.getInput()], 0, q1, q2)
|
||||
p2 = Duet([x.split(" ") for x in self.getInput()], 1, q2, q1)
|
||||
p1.daemon = True
|
||||
p2.daemon = True
|
||||
p1.start()
|
||||
p2.start()
|
||||
|
||||
while p1.is_alive() or p2.is_alive():
|
||||
if (p1.state == 1 and q1.empty()) and (p2.state == 1 and q2.empty()):
|
||||
return p2.output
|
||||
time.sleep(0.01)
|
||||
|
||||
return p2.output
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
day = Day(2017, 18)
|
||||
day.run(verbose=True)
|
||||
72
day19.py
Normal file
72
day19.py
Normal file
@ -0,0 +1,72 @@
|
||||
from tools.aoc import AOCDay
|
||||
from tools.coordinate import Coordinate
|
||||
from tools.grid import Grid
|
||||
from typing import Any
|
||||
|
||||
|
||||
class Day(AOCDay):
|
||||
inputs = [
|
||||
[
|
||||
('ABCDEF', "input19_test"),
|
||||
('FEZDNIVJWT', "input19")
|
||||
],
|
||||
[
|
||||
(38, "input19_test"),
|
||||
(17200, "input19")
|
||||
]
|
||||
]
|
||||
|
||||
def getLineGrid(self) -> Grid:
|
||||
grid = Grid()
|
||||
for y, line in enumerate(self.getInput()):
|
||||
for x, char in enumerate(line):
|
||||
if char != ' ':
|
||||
grid.set(Coordinate(x, y), char)
|
||||
|
||||
return grid
|
||||
|
||||
def walkMaze(self) -> (str, int):
|
||||
maze = self.getLineGrid()
|
||||
x = 0
|
||||
for i in maze.rangeX():
|
||||
if maze.get(Coordinate(i, 0)):
|
||||
x = i
|
||||
break
|
||||
|
||||
letters = ''
|
||||
step_count = 1
|
||||
start = Coordinate(x, 0)
|
||||
last_pos = Coordinate(0, 0)
|
||||
last_dir = Coordinate(0, 1)
|
||||
neighbours = maze.getNeighboursOf(start, includeDiagonal=False) + [Coordinate(0, 0)]
|
||||
while len(neighbours) > 1:
|
||||
step_count += 1
|
||||
if maze.get(start + last_dir):
|
||||
last_pos = start
|
||||
start += last_dir
|
||||
else:
|
||||
if last_pos in neighbours:
|
||||
neighbours.remove(last_pos)
|
||||
last_pos = start
|
||||
last_dir = neighbours[0] - start
|
||||
start = neighbours[0]
|
||||
|
||||
if maze.get(start) in 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz':
|
||||
letters += maze.get(start)
|
||||
|
||||
neighbours = maze.getNeighboursOf(start, includeDiagonal=False)
|
||||
|
||||
return letters, step_count
|
||||
|
||||
def part1(self) -> Any:
|
||||
letters, _ = self.walkMaze()
|
||||
return letters
|
||||
|
||||
def part2(self) -> Any:
|
||||
_, steps = self.walkMaze()
|
||||
return steps
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
day = Day(2017, 19)
|
||||
day.run(verbose=True)
|
||||
85
day20.py
Normal file
85
day20.py
Normal file
@ -0,0 +1,85 @@
|
||||
from tools.aoc import AOCDay
|
||||
from tools.coordinate import Coordinate, DistanceAlgorithm
|
||||
from typing import Any
|
||||
|
||||
|
||||
ZERO = Coordinate(0, 0, 0)
|
||||
|
||||
|
||||
class Particle:
|
||||
def __init__(self, pos: Coordinate, vel: Coordinate, acc: Coordinate):
|
||||
self.pos = pos
|
||||
self.vel = vel
|
||||
self.acc = acc
|
||||
|
||||
def move(self):
|
||||
self.vel += self.acc
|
||||
self.pos += self.vel
|
||||
|
||||
def dist(self):
|
||||
return self.pos.getDistanceTo(ZERO, algorithm=DistanceAlgorithm.MANHATTAN, includeDiagonals=False)
|
||||
|
||||
|
||||
class Day(AOCDay):
|
||||
inputs = [
|
||||
[
|
||||
(0, "input20_test"),
|
||||
(457, "input20")
|
||||
],
|
||||
[
|
||||
(1, "input20_test2"),
|
||||
(448, "input20")
|
||||
]
|
||||
]
|
||||
|
||||
def getParticles(self) -> list:
|
||||
particles = []
|
||||
for line in self.getInput():
|
||||
p, v, a = line.split(", ")
|
||||
p = Coordinate(*map(int, p[3:-1].split(",")))
|
||||
v = Coordinate(*map(int, v[3:-1].split(",")))
|
||||
a = Coordinate(*map(int, a[3:-1].split(",")))
|
||||
|
||||
particles.append(Particle(p, v, a))
|
||||
|
||||
return particles
|
||||
|
||||
def part1(self) -> Any:
|
||||
particles = self.getParticles()
|
||||
closest = 0
|
||||
last_closest = list(range(-1, -1000, -1))
|
||||
while len(set(last_closest)) != 1:
|
||||
last_closest.append(closest)
|
||||
last_closest.pop(0)
|
||||
min_dist = 10e9
|
||||
for i, p in enumerate(particles):
|
||||
p.move()
|
||||
if p.dist() < min_dist:
|
||||
closest = i
|
||||
min_dist = p.dist()
|
||||
|
||||
return closest
|
||||
|
||||
def part2(self) -> Any:
|
||||
particles = self.getParticles()
|
||||
for _ in range(1000):
|
||||
pos_cache = {}
|
||||
new_particles = []
|
||||
for i, p in enumerate(particles.copy()):
|
||||
p.move()
|
||||
if p.pos not in pos_cache:
|
||||
new_particles.append(p)
|
||||
pos_cache[p.pos] = len(new_particles) - 1
|
||||
else:
|
||||
if pos_cache[p.pos] >= 0:
|
||||
new_particles.pop(pos_cache[p.pos])
|
||||
pos_cache[p.pos] = -1
|
||||
|
||||
particles = new_particles
|
||||
|
||||
return len(particles)
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
day = Day(2017, 20)
|
||||
day.run(verbose=True)
|
||||
94
day21.py
Normal file
94
day21.py
Normal file
@ -0,0 +1,94 @@
|
||||
from tools.aoc import AOCDay
|
||||
from tools.coordinate import Coordinate
|
||||
from tools.grid import Grid, GridTransformation
|
||||
from typing import Any
|
||||
|
||||
|
||||
FLIPS = [
|
||||
GridTransformation.ROTATE_RIGHT,
|
||||
GridTransformation.ROTATE_RIGHT,
|
||||
GridTransformation.ROTATE_RIGHT,
|
||||
GridTransformation.ROTATE_RIGHT,
|
||||
GridTransformation.FLIP_HORIZONTALLY,
|
||||
GridTransformation.ROTATE_RIGHT,
|
||||
GridTransformation.ROTATE_RIGHT,
|
||||
GridTransformation.ROTATE_RIGHT,
|
||||
]
|
||||
|
||||
|
||||
def init_grid() -> Grid:
|
||||
grid = Grid()
|
||||
grid.set(Coordinate(1, 0))
|
||||
grid.set(Coordinate(2, 1))
|
||||
grid.set(Coordinate(0, 2))
|
||||
grid.set(Coordinate(1, 2))
|
||||
grid.set(Coordinate(2, 2))
|
||||
return grid
|
||||
|
||||
|
||||
class Day(AOCDay):
|
||||
inputs = [
|
||||
[
|
||||
(12, "input21_test"),
|
||||
(176, "input21")
|
||||
],
|
||||
[
|
||||
(2368161, "input21")
|
||||
]
|
||||
]
|
||||
|
||||
def load_replacement_grids(self) -> dict:
|
||||
ret = {}
|
||||
for line in self.getInput():
|
||||
rep, grid_string = line.split(" => ")
|
||||
ret[rep] = Grid.from_str(grid_string, true_char='#')
|
||||
rep_grid_size = len(rep.split("/")[0]) + 1
|
||||
ret[rep].minX, ret[rep].maxX, ret[rep].minY, ret[rep].maxY = 0, rep_grid_size, 0, rep_grid_size
|
||||
|
||||
return ret
|
||||
|
||||
def interact(self, interact_count: int) -> int:
|
||||
grid = Grid.from_str('.#./..#/###')
|
||||
grid_size = 3
|
||||
replacements = self.load_replacement_grids()
|
||||
|
||||
for i in range(2 if self._current_test_file.endswith('test') else interact_count):
|
||||
new_grid = Grid()
|
||||
block_size = 3
|
||||
replace_size = 4
|
||||
if grid_size % 2 == 0:
|
||||
block_size = 2
|
||||
replace_size = 3
|
||||
|
||||
for x in range(0, grid_size, block_size):
|
||||
for y in range(0, grid_size, block_size):
|
||||
sub_grid = grid.sub_grid(x, y, x + block_size - 1, y + block_size - 1)
|
||||
sub_grid.minX, sub_grid.minY, sub_grid.maxX, sub_grid.maxY = 0, 0, block_size - 1, block_size - 1
|
||||
for f in FLIPS:
|
||||
sub_grid.transform(f)
|
||||
sub_grid.maxX, sub_grid.maxY = block_size - 1 + sub_grid.minX, block_size - 1 + sub_grid.minY
|
||||
if str(sub_grid) in replacements:
|
||||
new_grid.update(
|
||||
x // block_size * replace_size,
|
||||
y // block_size * replace_size,
|
||||
replacements[str(sub_grid)]
|
||||
)
|
||||
break
|
||||
else:
|
||||
raise ValueError("No sub_grid matches found.")
|
||||
|
||||
grid = new_grid
|
||||
grid_size = grid_size // block_size * replace_size
|
||||
|
||||
return grid.getOnCount()
|
||||
|
||||
def part1(self) -> Any:
|
||||
return self.interact(5)
|
||||
|
||||
def part2(self) -> Any:
|
||||
return self.interact(18)
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
day = Day(2017, 21)
|
||||
day.run(verbose=True)
|
||||
90
day22.py
Normal file
90
day22.py
Normal file
@ -0,0 +1,90 @@
|
||||
from enum import Enum
|
||||
|
||||
from tools.aoc import AOCDay
|
||||
from tools.coordinate import Coordinate
|
||||
from tools.grid import Grid
|
||||
from typing import Any
|
||||
|
||||
|
||||
DIRECTIONS = [
|
||||
Coordinate(0, -1),
|
||||
Coordinate(1, 0),
|
||||
Coordinate(0, 1),
|
||||
Coordinate(-1, 0)
|
||||
]
|
||||
|
||||
|
||||
class NodeState(Enum):
|
||||
CLEAN = 0
|
||||
WEAKENED = 1
|
||||
INFECTED = 2
|
||||
FLAGGED = 3
|
||||
|
||||
|
||||
class Day(AOCDay):
|
||||
inputs = [
|
||||
[
|
||||
(5587, "input22_test"),
|
||||
(5460, "input22")
|
||||
],
|
||||
[
|
||||
(2511944, "input22_test"),
|
||||
(2511702, "input22")
|
||||
]
|
||||
]
|
||||
|
||||
def get_init_state(self) -> (Grid, int, Coordinate):
|
||||
grid = Grid.from_str(
|
||||
"/".join(self.getInput()),
|
||||
true_char='#',
|
||||
true_value=NodeState.INFECTED,
|
||||
default=NodeState.CLEAN
|
||||
)
|
||||
|
||||
carrier_direction_index = 0
|
||||
cattier_position = Coordinate((len(self.getInput()[0]) - 1) // 2, (len(self.getInput()) - 1) // 2)
|
||||
|
||||
return grid, carrier_direction_index, cattier_position
|
||||
|
||||
def part1(self) -> Any:
|
||||
grid, carrier_direction_index, carrier_position = self.get_init_state()
|
||||
infect_count = 0
|
||||
for _ in range(10_000):
|
||||
if grid.get(carrier_position) == NodeState.INFECTED:
|
||||
carrier_direction_index = (carrier_direction_index + 1) % 4
|
||||
grid.set(carrier_position, NodeState.CLEAN)
|
||||
else:
|
||||
infect_count += 1
|
||||
carrier_direction_index = (carrier_direction_index - 1) % 4
|
||||
grid.set(carrier_position, NodeState.INFECTED)
|
||||
|
||||
carrier_position += DIRECTIONS[carrier_direction_index]
|
||||
|
||||
return infect_count
|
||||
|
||||
def part2(self) -> Any:
|
||||
grid, carrier_direction_index, carrier_position = self.get_init_state()
|
||||
infect_count = 0
|
||||
for _ in range(10_000_000):
|
||||
match grid.get(carrier_position):
|
||||
case NodeState.CLEAN:
|
||||
carrier_direction_index = (carrier_direction_index - 1) % 4
|
||||
grid.set(carrier_position, NodeState.WEAKENED)
|
||||
case NodeState.WEAKENED:
|
||||
grid.set(carrier_position, NodeState.INFECTED)
|
||||
infect_count += 1
|
||||
case NodeState.INFECTED:
|
||||
carrier_direction_index = (carrier_direction_index + 1) % 4
|
||||
grid.set(carrier_position, NodeState.FLAGGED)
|
||||
case NodeState.FLAGGED:
|
||||
carrier_direction_index = (carrier_direction_index + 2) % 4
|
||||
grid.set(carrier_position, NodeState.CLEAN)
|
||||
|
||||
carrier_position += DIRECTIONS[carrier_direction_index]
|
||||
|
||||
return infect_count
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
day = Day(2017, 22)
|
||||
day.run(verbose=True)
|
||||
69
day23.py
Normal file
69
day23.py
Normal file
@ -0,0 +1,69 @@
|
||||
from collections import defaultdict
|
||||
|
||||
from tools.aoc import AOCDay
|
||||
from typing import Any
|
||||
|
||||
from tools.math import get_factors
|
||||
|
||||
|
||||
class Day(AOCDay):
|
||||
inputs = [
|
||||
[
|
||||
(4225, "input23")
|
||||
],
|
||||
[
|
||||
(905, "input23")
|
||||
]
|
||||
]
|
||||
|
||||
def get_commands(self) -> list:
|
||||
return [x.split(" ") for x in self.getInput()]
|
||||
|
||||
def part1(self) -> Any:
|
||||
register = defaultdict(int)
|
||||
index = 0
|
||||
commands = self.get_commands()
|
||||
mul_count = 0
|
||||
while 0 <= index < len(commands):
|
||||
cmd = commands[index]
|
||||
|
||||
try:
|
||||
value = int(cmd[2])
|
||||
except ValueError:
|
||||
value = register[cmd[2]]
|
||||
|
||||
match cmd[0]:
|
||||
case "set":
|
||||
register[cmd[1]] = value
|
||||
case "sub":
|
||||
register[cmd[1]] -= value
|
||||
case "mul":
|
||||
mul_count += 1
|
||||
register[cmd[1]] *= value
|
||||
case "jnz":
|
||||
try:
|
||||
jumper = int(cmd[1])
|
||||
except ValueError:
|
||||
jumper = register[cmd[1]]
|
||||
if jumper != 0:
|
||||
index += value - 1
|
||||
|
||||
index += 1
|
||||
|
||||
return mul_count
|
||||
|
||||
def part2(self) -> Any:
|
||||
b = int(self.getInput()[0].split(" ")[2]) * 100 + 100000
|
||||
c = b + 17000
|
||||
h = 0
|
||||
while b <= c:
|
||||
if len(get_factors(b)) > 2:
|
||||
h += 1
|
||||
b += 17
|
||||
|
||||
return h
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
day = Day(2017, 23)
|
||||
day.run(verbose=True)
|
||||
65
day24.py
Normal file
65
day24.py
Normal file
@ -0,0 +1,65 @@
|
||||
from tools.aoc import AOCDay
|
||||
from typing import Any
|
||||
|
||||
|
||||
def get_max_bridge_strength(bridge_parts: list, connect_to: int) -> int:
|
||||
max_strength = 0
|
||||
|
||||
for part in bridge_parts:
|
||||
if connect_to not in part:
|
||||
continue
|
||||
|
||||
sub_parts = bridge_parts.copy()
|
||||
sub_parts.remove(part)
|
||||
this_strength = sum(part) + get_max_bridge_strength(sub_parts, part[int(not part.index(connect_to))])
|
||||
max_strength = max(max_strength, this_strength)
|
||||
|
||||
return max_strength
|
||||
|
||||
|
||||
def get_possible_bridges(bridge_parts: list, connect_to: int) -> list:
|
||||
bridges = []
|
||||
for part in bridge_parts:
|
||||
if connect_to not in part:
|
||||
continue
|
||||
|
||||
sub_parts = bridge_parts.copy()
|
||||
sub_parts.remove(part)
|
||||
bridges.append([part])
|
||||
sub_bridges = get_possible_bridges(sub_parts, part[int(not part.index(connect_to))])
|
||||
for sub_bridge in sub_bridges:
|
||||
bridges.append([part] + sub_bridge)
|
||||
|
||||
return bridges
|
||||
|
||||
|
||||
class Day(AOCDay):
|
||||
inputs = [
|
||||
[
|
||||
(31, "input24_test"),
|
||||
(1940, "input24")
|
||||
],
|
||||
[
|
||||
(19, "input24_test"),
|
||||
(1928, "input24")
|
||||
]
|
||||
]
|
||||
|
||||
def get_bridge_parts(self) -> list:
|
||||
return [
|
||||
list(map(int, line.split("/")))
|
||||
for line in self.getInput()
|
||||
]
|
||||
|
||||
def part1(self) -> Any:
|
||||
return get_max_bridge_strength(self.get_bridge_parts(), 0)
|
||||
|
||||
def part2(self) -> Any:
|
||||
bridges = get_possible_bridges(self.get_bridge_parts(), 0)
|
||||
max_length = max(map(len, bridges))
|
||||
return max(sum(sum(x) for x in b) for b in bridges if len(b) == max_length)
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
day = Day(2017, 24)
|
||||
day.run(verbose=True)
|
||||
69
day25.py
Normal file
69
day25.py
Normal file
@ -0,0 +1,69 @@
|
||||
from tools.aoc import AOCDay
|
||||
from typing import Any
|
||||
|
||||
|
||||
class Day(AOCDay):
|
||||
inputs = [
|
||||
[
|
||||
(3, "input25_test"),
|
||||
(5593, "input25")
|
||||
],
|
||||
[
|
||||
(None, "input25")
|
||||
]
|
||||
]
|
||||
|
||||
def get_blueprint(self) -> (str, int, dict):
|
||||
i = self.getInput()
|
||||
begin_state = i[0][-2]
|
||||
step_count = int(i[1].split(" ")[-2])
|
||||
blueprint = {}
|
||||
current_state = ''
|
||||
current_value_order = {}
|
||||
for line in i[3:]:
|
||||
if not line:
|
||||
blueprint[current_state].append(current_value_order)
|
||||
elif line.startswith("In state "):
|
||||
current_state = line[-2]
|
||||
blueprint[current_state] = []
|
||||
elif line.startswith(" If the current value is"):
|
||||
if line[-2] == '1':
|
||||
blueprint[current_state].append(current_value_order)
|
||||
current_value_order = {}
|
||||
elif line.startswith(" - Write"):
|
||||
current_value_order['write'] = int(line.split(" ")[-1][:-1])
|
||||
elif line.startswith(" - Move"):
|
||||
current_value_order['move'] = -1 if line.split(" ")[-1] == 'left.' else 1
|
||||
elif line.startswith(" - Continue"):
|
||||
current_value_order['continue'] = line[-2]
|
||||
|
||||
blueprint[current_state].append(current_value_order)
|
||||
|
||||
return begin_state, step_count, blueprint
|
||||
|
||||
def part1(self) -> Any:
|
||||
current_state, step_count, blueprint = self.get_blueprint()
|
||||
tape = [0]
|
||||
index = 0
|
||||
|
||||
for _ in range(step_count):
|
||||
order = blueprint[current_state][tape[index]]
|
||||
tape[index] = order['write']
|
||||
index += order['move']
|
||||
current_state = order['continue']
|
||||
|
||||
if index < 0:
|
||||
tape.insert(0, 0)
|
||||
index = 0
|
||||
if index == len(tape):
|
||||
tape.append(0)
|
||||
|
||||
return sum(tape)
|
||||
|
||||
def part2(self) -> Any:
|
||||
return ""
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
day = Day(2017, 25)
|
||||
day.run(verbose=True)
|
||||
1
inputs/input17
Normal file
1
inputs/input17
Normal file
@ -0,0 +1 @@
|
||||
359
|
||||
1
inputs/input17_test
Normal file
1
inputs/input17_test
Normal file
@ -0,0 +1 @@
|
||||
3
|
||||
41
inputs/input18
Normal file
41
inputs/input18
Normal file
@ -0,0 +1,41 @@
|
||||
set i 31
|
||||
set a 1
|
||||
mul p 17
|
||||
jgz p p
|
||||
mul a 2
|
||||
add i -1
|
||||
jgz i -2
|
||||
add a -1
|
||||
set i 127
|
||||
set p 826
|
||||
mul p 8505
|
||||
mod p a
|
||||
mul p 129749
|
||||
add p 12345
|
||||
mod p a
|
||||
set b p
|
||||
mod b 10000
|
||||
snd b
|
||||
add i -1
|
||||
jgz i -9
|
||||
jgz a 3
|
||||
rcv b
|
||||
jgz b -1
|
||||
set f 0
|
||||
set i 126
|
||||
rcv a
|
||||
rcv b
|
||||
set p a
|
||||
mul p -1
|
||||
add p b
|
||||
jgz p 4
|
||||
snd a
|
||||
set a b
|
||||
jgz 1 3
|
||||
snd b
|
||||
set f 1
|
||||
add i -1
|
||||
jgz i -11
|
||||
snd a
|
||||
jgz f -16
|
||||
jgz a -19
|
||||
10
inputs/input18_test
Normal file
10
inputs/input18_test
Normal file
@ -0,0 +1,10 @@
|
||||
set a 1
|
||||
add a 2
|
||||
mul a a
|
||||
mod a 5
|
||||
snd a
|
||||
set a 0
|
||||
rcv a
|
||||
jgz a -1
|
||||
set a 1
|
||||
jgz a -2
|
||||
7
inputs/input18_test2
Normal file
7
inputs/input18_test2
Normal file
@ -0,0 +1,7 @@
|
||||
snd 1
|
||||
snd 2
|
||||
snd p
|
||||
rcv a
|
||||
rcv b
|
||||
rcv c
|
||||
rcv d
|
||||
201
inputs/input19
Normal file
201
inputs/input19
Normal file
@ -0,0 +1,201 @@
|
||||
|
|
||||
+-------+ | +-----------------------------------------------------------------------------------------------------------------------------------------------------------------+
|
||||
| | | | |
|
||||
| | +--I------|---------------------------------------+ +--------------------------V----------+ +---------------+ +-------+ |
|
||||
| | | | | | | | | | | | |
|
||||
| | | | | | | +---|-------------------------|-------+ | | | |
|
||||
| | | | | | | | | | | | | | |
|
||||
| | | | | +-----------------|---------------------------------|---|-------------------------|---------------|---------------|-------|-----------+ |
|
||||
| | | | | | | | | | | | | | | | |
|
||||
| | | | | | | | | | | | | | | | |
|
||||
| | | | | | | | | | | | | | | | |
|
||||
| | | | +-+ | +---------------------|---------------------------------------------------|---|-------------+ | | | +---------------------------|-+
|
||||
| | | | | | | | | | | | | | | | | | | | | | |
|
||||
| | +-|-----|-|-|-------------------------------------|-|-------------------------------------|-------------|-----------|-------|-------------------|---|-------|-----------|---|-+
|
||||
| | | | | | | | | | | | | | | | | | | | |
|
||||
| | | | | | | | | | | | +---------------|---------------------------+ | | | |
|
||||
| | | | | | | | | | | | | | | | | | | | |
|
||||
| +-+ | | +-|---+ +-----------|---------------------------------------------------------------------|------------Z------|-----------------------|-------------------|-----------+
|
||||
| | | | | | | | | | | | | | | | | | | | | | |
|
||||
| | | | | +-+ | | +---------|---------------------------|---------------------------------------|-------------|---------------------------|---------------|-+ | +---------|---+ |
|
||||
| | | | | | | | | | | | | | | | | | | | | | | | | | |
|
||||
+-+ | | | | | | | | | +---------------------------------------------------------------|-+ | | | +-------|-+ | | | | | | | |
|
||||
| | | | | | | | | | | | | | | | | | | | | | | | | | | | |
|
||||
T | | +---+ | | | | | | | | | | | | +-------+ | | | | | | | | | | | |
|
||||
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
|
||||
+-|---+ +-+ | +-|-----|---------------------|---+ | | | | | | | | | | | | +-|-------------------------------------------------+ +-------+
|
||||
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
|
||||
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
|
||||
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
|
||||
| | | | | | | | | | +---------------------------------------|---|---|-------|-|-----------------|---------------+ | | | | | | | | |
|
||||
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
|
||||
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
|
||||
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
|
||||
| | | | +-|---|-----------+ +---------|-------|---+ | | | | +-------|---------------|-|---|-+ +-----|-----|-----------------|-+ | | | | |
|
||||
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
|
||||
+-----------|---+ | | | | | | +-------|-----|-------------------------------------+ | | +---------|-------|-+ | | | | | | | | | | | |
|
||||
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
|
||||
| | | | | | | | | | +-----------------|-----|---------------------------------|-|-----+ | | | | | | +-------|-----+ | | | | | | | | |
|
||||
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
|
||||
| | | | | | | | | | | | | | | | | | | | | | | | | +---+ | | | | | | | | |
|
||||
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
|
||||
| | | | | | | | | +-----------------------------------|-----------------------------------|-------+ | | | | | | | | +-----------+ | | | +-------+ | | | | |
|
||||
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
|
||||
| | | | | | | | | | | | | | | | | | | | | | | +---------|-----+ | | | | | | | | | | |
|
||||
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
|
||||
| | +-|-----|-----|-|-|---|-------|---------------------|-----|---+ | | | | | | | | | +-------------------|-------+ +---+ | | | | +---------+ | | |
|
||||
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
|
||||
| +-+ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
|
||||
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
|
||||
| | | | | | | | | | | | | | +-------------------------------|-----+ | +-----------|-----+ | | | | | | | | | | | | | |
|
||||
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
|
||||
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
|
||||
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
|
||||
| | | | | | | | | +---------|-----------|-----|-----------+ | | | +---+ | | | | | | | | | +-|---+ | | | | | | | | | | | | |
|
||||
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
|
||||
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
|
||||
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
|
||||
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | +---------|---------|-------|-------------+ | | | | |
|
||||
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
|
||||
| | | | | | | | | +-----|-----------------|-----------|---------------+ | | | | | | | | | +---+ | | | | | | | | | | | | | | | | | | | | |
|
||||
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
|
||||
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | +---------------------|-----|-|-------|-----------|-+ | | | | | |
|
||||
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
|
||||
| +-|---+ +---|-|---|---|-----------------------------|-----------------|-|-------------------|-----|-|-----|-|-------|-----------|-----|-----------|-|---|-----------|-----------|-|-|-|-+ | |
|
||||
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
|
||||
| | | | | | | | +-----+ | +-+ | | | | | | | | | | | | | | | | | | | | | | | | | | | | +-|-+ | | | | | | |
|
||||
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
|
||||
| | +---+ | | | | | | | | | | | | | | | | | | | | | | | | | | | | +-------------|---------------|---|-----------|-------------|-+ | | |
|
||||
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
|
||||
| +-----------|---|---|---|-------|-+ | | | | | | | | | | | | | | | | | | | | | | | +-|---+ +-|-------+ | | | | | | | | |
|
||||
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
|
||||
| | +---|-----|---|-----|-------|-----------------|-------------|-------------|---------|---|-|-|---|-|-----|-|---|-----|---|---+ | | | | | | | | | | | | | |
|
||||
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
|
||||
| | | | | | | | | | | | | | +---------------------|-----|-|---|-|-----|-|-------|-----|-----|-----------|---|---|---|---|---------|-------|-----+ | | |
|
||||
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
|
||||
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
|
||||
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
|
||||
| | | | | | | | | | | +-----------------------|-------------|-----|-|---|---|-----|---------|---|---------|-------|---|---|---|---|-------|-|---+ | | | | | | |
|
||||
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
|
||||
| | | | | | | | | | | | | +-----|-------|-|---------+ | | | | | | | | | | | | | | | | +---------|-|-----|-+ | | | | | | | | | | |
|
||||
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
|
||||
| | | | | | | | | | | | | | | | | | | +-------|---|-----|-|-|-----|-----|-------------------|---+ | | | | | | | | | | | | | | | | | +---+
|
||||
| | | | | | | | | | | | | | | J | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
|
||||
| | | | | | | | | | | | | | | | | | | | | | +-|-|-|---|-|-------------------|---------+ | | | | | | | | +-----|-|---|---|---|-|-------+ | | |
|
||||
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
|
||||
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | +-+ | | +-|-----|---+ | | | | | | | | | | | | | | | | | +-|-+ | |
|
||||
| | | | | E | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
|
||||
| | | | | | | +-|-------|-------|---|-----|-----------|-----+ | +-----------|-----|---+ | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
|
||||
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
|
||||
| | +---|-|-------|-------|---|-|-------|-------|-----|-|-----|---|-|-----|---|-------|---|---|-------|-|-----|-|-------|-----|-----------|-|---------|-----|-|-------|-|-|---|-+ | | |
|
||||
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
|
||||
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
|
||||
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
|
||||
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | +---------|-----|-----------|-|---|-----|---------|-|-|-|-|-------+ | |
|
||||
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
|
||||
+---+ | | | | | | | | | | | | | | | | | | +---|-|---|-+ | | | | | | | +-----|---|-|-|-|-|-+ | | | | | | | | | | | | | | | | | | | | | | | | | |
|
||||
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
|
||||
| | | | | | | | +-------|-------------------|---|-|-|-----------|-+ | | | | | | | +-|-|-|---|---|---|---|-|-----------------------+ | | | | | | | | | | | | | | | | | |
|
||||
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
|
||||
| | | | | | | | +-|-|-----|---------------------|-|-----|-----|-----|-------|---|-------|-|-----|-|-------------+ | | +---|-+ | +-------|-|-----------+ | | | | | | | | | | |
|
||||
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
|
||||
| | | | | | +---------|-----|-|-------|---------|-----|-|-----|---|-----|-|-|---|-|-|---|-----|-----|-------+ | | +-|-------------+ | | | | | | | | | | | | | | | | | | | | | |
|
||||
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
|
||||
| +-----+ | | | | | | | | | | | | | | | | | | | | | | | | | | | | +-|---|-----|---------------|---------|---+ | | | | | | | | | | | | | | | | | | | | | |
|
||||
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
|
||||
| +---+ | | | | | | | | | | | | | | | | | +-|-|-|---|-+ | | | | | | +---|---|-----|-|---|-|---|-|-----------|-|-|---|-----|-----------|---------|-|-|-|-|---+ | | |
|
||||
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
|
||||
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
|
||||
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
|
||||
| | +---|---|---------|---|-|-|---|-|-------|---|---|-----|-------------|-------------|-----------|-|-----------|-|---|---|-|-----------|---+ | | | | | | | | | | | | | | | | | | |
|
||||
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
|
||||
| +-|-------|-------------|---|-|---------+ | | | | | | | +-----|---|---|-|-------|-|-----|-----+ +-------|---|-----|---+ | | +-|---------|-|-|---------|-|-----|-|-|-----------+ | |
|
||||
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
|
||||
+-----|-----|---------------------|-------|-------|-------|-|---|F|-----|---|-|-|-----------|-|---|-----|-------------|-----------+ | | | | | | | | | | +-|---------------------+ | |
|
||||
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
|
||||
| | | | | | | | | | | | +-----|-|---------|-----|-------------------|-|---|-----|-----|-----|-|-----------|-|---|---|-----|-|-----------|---------|-------|---|-------|---|---------+ | |
|
||||
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
|
||||
| | | | +-|-+ | | | +---------------+ | | | | | | | | | +-|-|-|-+ | | | | | | +-----------+ | | | | +---+ | | | | | +---------|-|-|-+ | | | | | | | | | | | | | | |
|
||||
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
|
||||
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | +---|-------|-|-----+ | | | | | | | | | | | | | | | | | | | | | | | |
|
||||
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
|
||||
+-|-|-----------------|-------|-|---|---+ | +-|-|-------+ | | | | | | | | | | +-|-----+ | | | +-----|-------+ | | | +---+ | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
|
||||
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
|
||||
| | | | | +-------|-------|---|-|-+ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
|
||||
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
|
||||
| | | | | +-------|-|-------|-|-|-|---|-------|---|---------+ | | | | | | | | | | | | | +-|---------|---|---|---------|-|-----|-|---------|-----|-|-|-|---------|-----|---------+ | |
|
||||
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
|
||||
| | | | | | +---|-------|-------|-|-------|-----------|---------|---|-|-----------|-+ | | | | | | | | | | +-+ | | | | | | | | | | | | | | | | | | | | | | | | | |
|
||||
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
|
||||
| | | | | | | | | | | +---|-|----------D|---------+ | | | +-+ | | | | +---|-----------------|-|-----|-----------|-|---|---|-|-|---|-----|---|-|---|-|---|-|-------|-+ +-+ |
|
||||
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
|
||||
| | | | | | | | | | | | | | | | | | | | | | | | | | | +---------------|-----|-|---+ | | +-|-----|---+ | | | | | | | | | | +-+ | | | | | | | |
|
||||
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
|
||||
| | | | | | | | | | | | | | | | | | | | | | | | | | | | +-|-----|---|-|-|---------------|-+ | | | | | | | | | | | | | | | | | | | |
|
||||
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
|
||||
+-----+ | +-|-------|-|-------|-----|-+ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
|
||||
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
|
||||
| | | | | +-|-------------------+ | | | | | | | | | | | | | +---|-----|-+ | | | | | | +-|-----|-----|-----+ | | +-----|-+ | | | | | | | |
|
||||
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
|
||||
| | | | +-------|-|---+ | | | +-+ | | | +-|-------------|-|-------------|-|---|-------|---------|-----------|-----------|-------|-----|-------|-----|-----+ | | | | | | | | | |
|
||||
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
|
||||
| | | | +---+ | +-----------|-+ | | | | | | +---|-|-----------|-------|-----------|-----|-----------|---|-------|-------------|-----|-------|-|-------|---------+ | +---|-|---+ | |
|
||||
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
|
||||
| | | | | | | | | | | | | | | | | | | | | | | | | +-------|---|---|---------------|-----|-----|---------------|-|---------------|-------+ | |
|
||||
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
|
||||
| | +-+ | | | | | | | | | | | | +-------|-|---------|-|-|---|-------|---|-----------------|-|-|---------------|-------|-----|-----+ | +-------------------|-----+ | |
|
||||
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
|
||||
| | | | | | | | | | | +-----------------------------------|-|-----|---------+ | | +-+ | +-----------|-+ | | | | | | +-----------------|-+ | | | |
|
||||
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
|
||||
| +-----|-----+ | | | | | | | | | | | | | | | | | | +---|---------------------------------|-|-+ | | | | | | | +-----------|---|---|-|-+ |
|
||||
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
|
||||
| | | | | | | | | | | | | | +-|-|-------------|---|-------------------------|-----|---------------|-+ | | | | | | | | +---------+ | | | | |
|
||||
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
|
||||
| +---------------|-------|-|-----|---|---|---|-----------------|-|---------+ | | | +---------------------------------------|-----|---------+ | | | | | | | | | | | +-|---+ |
|
||||
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
|
||||
| | | | | +-----|-|-----|-------------------------------------|-|-------|-|---------------|---|---------|---|-|-|-----|---------------------|-|-------------------|-----+ |
|
||||
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
|
||||
| | | | | | | | | | +-------------------------------------+ | | | | | | | | | | | | | | | | | | | | | | | | |
|
||||
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
|
||||
| | +-------------+ | +---|-----|---|---------------|-------------|-|-----|-------------------------+ | | | | | | | | | +-|---------|---+ | | | | | |
|
||||
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
|
||||
| | | | | +-+ | | | | +---------+ | | +-------|-|---------------------------------------------|-----|-|-----|-------|-----------|-|-|-----------------+ | | | |
|
||||
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
|
||||
| | +---------+ | | | | | | | | | | | | | | | | | | | | | | +-----|---------|---|---|---|---|---------+ | | | |
|
||||
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
|
||||
| +---|---------------|-----|---+ | | | | | | | | | | | | | | | +---------------+ | | | | | | | | | | | | | | | | | |
|
||||
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
|
||||
| | | | | +-------|-----|-|---------------------|-|--N--------|---------------+ | | | +-|-------------|-|-+ | | | | +---+ | | | | | | | |
|
||||
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
|
||||
| | | +-----|-+ | +-----|-|-|-|---|---------------------|-------------|-|-----+ | | | | | | | | | +-------|---------|---|-----|-|---|-----------|-+ | |
|
||||
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
|
||||
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
|
||||
| | | | | | | | | | | W | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
|
||||
| | | | | | | | | | | | | | +-------------+ | | | | | | | | +-+ +-------|---|-------|-------|-------------------|-|---|-------|---|---+ |
|
||||
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
|
||||
| +---------|-----|-|-------|---|-|---|-------------------------|-------------------------------|-----|-----------------------|-----------|-+ | | | | | | | | | | | |
|
||||
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
|
||||
| | | | | | +-------------|-----------------------|---|-------|-----------------------|---------------------------|---------|-------+ +---|-------+ | | | | | | |
|
||||
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
|
||||
| | | +-|-|-----------|-|-|-|-----------------------|-|---|-------|-|---------------------|-------|-----+ | | | | | | | | | | | | | | | |
|
||||
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
|
||||
+---+ | | | | | | | | | | | | | +-|---------------------|---------------------+ | | | | | | | | | | | | | | | |
|
||||
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
|
||||
| | | +---|-----------+ | | | | | | | | | | | | | | | | | | +---|---------------------+ | | | | |
|
||||
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
|
||||
| +-----|-----|-+ | | | | | | | | +---------|-------+ +-----|---------------------------|-------|-|-----|-----|---|---|-----------+ | | | |
|
||||
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
|
||||
| +-|---------|---------|---|-|---|---------------------|-|---------------------|-------------|-------------|---------|-+ | | | | +-----+ +---|---|-----|---------+ | | | |
|
||||
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
|
||||
+-------------+ +---+ | | | | | | +-----------------------------------------------------------+ | | | | | | | +-----------|-|-------|---|---------------------+ | |
|
||||
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
|
||||
| | | +---|---+ +-|---+ +-------------------------|-----------------------|---------------------------|-------------|-|-------------|-------------------|---------+ | | |
|
||||
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
|
||||
| +-----------------+ | | | +-------+ | +-------------+ | | | +-|---|-|-------|---+ | +-------|---|-----+ | | |
|
||||
| | | | | | | | | | | | | | | | | | | | | | | |
|
||||
+-------------------------|---+ | +-----------------------|---------------------------+ | | | | +---+ +---|-+ | | +---------------------------+
|
||||
| | | | | | | | | | | | | | | |
|
||||
| +-------------------+ +-----------------------------------+ +-+ +-----------------|-|-|-----------+ | | +---------------+ |
|
||||
| | | | | | | | | | | |
|
||||
+-------------------------------------------------------------------+ +---------------------------------------+ +-+ +-----------------------+ +-------------------+ +-+
|
||||
|
||||
6
inputs/input19_test
Normal file
6
inputs/input19_test
Normal file
@ -0,0 +1,6 @@
|
||||
|
|
||||
| +--+
|
||||
A | C
|
||||
F---|----E|--+
|
||||
| | | D
|
||||
+B-+ +--+
|
||||
1000
inputs/input20
Normal file
1000
inputs/input20
Normal file
File diff suppressed because it is too large
Load Diff
2
inputs/input20_test
Normal file
2
inputs/input20_test
Normal file
@ -0,0 +1,2 @@
|
||||
p=< 3,0,0>, v=< 2,0,0>, a=<-1,0,0>
|
||||
p=< 4,0,0>, v=< 0,0,0>, a=<-2,0,0>
|
||||
4
inputs/input20_test2
Normal file
4
inputs/input20_test2
Normal file
@ -0,0 +1,4 @@
|
||||
p=<-6,0,0>, v=< 3,0,0>, a=< 0,0,0>
|
||||
p=<-4,0,0>, v=< 2,0,0>, a=< 0,0,0>
|
||||
p=<-2,0,0>, v=< 1,0,0>, a=< 0,0,0>
|
||||
p=< 3,0,0>, v=<-1,0,0>, a=< 0,0,0>
|
||||
108
inputs/input21
Normal file
108
inputs/input21
Normal file
@ -0,0 +1,108 @@
|
||||
../.. => .#./.../###
|
||||
#./.. => .#./##./#..
|
||||
##/.. => #.#/#../###
|
||||
.#/#. => ##./..#/###
|
||||
##/#. => .#./#../..#
|
||||
##/## => #../..#/#.#
|
||||
.../.../... => .###/.#.#/.###/##.#
|
||||
#../.../... => .##./##../##../#.##
|
||||
.#./.../... => .#.#/#.#./..#./..#.
|
||||
##./.../... => ###./#.##/...#/#.##
|
||||
#.#/.../... => .#.#/.#../.###/.###
|
||||
###/.../... => ..##/#.#./..../##.#
|
||||
.#./#../... => #.../..../..../....
|
||||
##./#../... => ...#/..#./.###/#.#.
|
||||
..#/#../... => #.../#.##/###./##..
|
||||
#.#/#../... => .##./#..#/#..#/..##
|
||||
.##/#../... => .#.#/#.##/..##/.#.#
|
||||
###/#../... => #.#./.###/..#./#.#.
|
||||
.../.#./... => #..#/..../.##./.#.#
|
||||
#../.#./... => .#../.##./.#.#/...#
|
||||
.#./.#./... => ##.#/...#/.##./...#
|
||||
##./.#./... => ..#./#.#./#.##/####
|
||||
#.#/.#./... => ..##/#..#/.###/....
|
||||
###/.#./... => .#../#..#/#.../..#.
|
||||
.#./##./... => ..##/#.#./####/###.
|
||||
##./##./... => ...#/.#../####/#..#
|
||||
..#/##./... => ..##/##../###./....
|
||||
#.#/##./... => ..##/#.../.#../.##.
|
||||
.##/##./... => #.../##../#.##/...#
|
||||
###/##./... => .#../####/#.##/#.##
|
||||
.../#.#/... => #..#/####/###./#.#.
|
||||
#../#.#/... => #.../##.#/#.../.#..
|
||||
.#./#.#/... => ##.#/##.#/..#./..#.
|
||||
##./#.#/... => .###/..#./.#../.###
|
||||
#.#/#.#/... => .###/##../..#./..#.
|
||||
###/#.#/... => ##../.#../.#../.#..
|
||||
.../###/... => ..#./#.#./..#./#..#
|
||||
#../###/... => ..../#.#./##.#/..##
|
||||
.#./###/... => ..#./#.#./..##/.#..
|
||||
##./###/... => .##./..##/#..#/#.#.
|
||||
#.#/###/... => ###./###./#.##/..##
|
||||
###/###/... => ##.#/..../.##./.#..
|
||||
..#/.../#.. => .###/####/..../##.#
|
||||
#.#/.../#.. => ##../###./#..#/...#
|
||||
.##/.../#.. => ###./#..#/###./...#
|
||||
###/.../#.. => #.../#..#/##.#/.##.
|
||||
.##/#../#.. => ..##/####/..##/#...
|
||||
###/#../#.. => #.../..../...#/..##
|
||||
..#/.#./#.. => ####/#.#./..../.#.#
|
||||
#.#/.#./#.. => .##./.#.#/##.#/.##.
|
||||
.##/.#./#.. => ###./.#.#/###./##.#
|
||||
###/.#./#.. => #.##/..##/#.#./##.#
|
||||
.##/##./#.. => ..../..##/#.#./.##.
|
||||
###/##./#.. => #.#./#..#/#..#/###.
|
||||
#../..#/#.. => ..../####/#..#/.###
|
||||
.#./..#/#.. => .###/#.../#.../#.##
|
||||
##./..#/#.. => ####/##.#/###./####
|
||||
#.#/..#/#.. => .#../##.#/#..#/#..#
|
||||
.##/..#/#.. => ..##/##.#/#.##/###.
|
||||
###/..#/#.. => ##.#/####/##.#/.#..
|
||||
#../#.#/#.. => .###/#..#/.##./.###
|
||||
.#./#.#/#.. => #.##/.##./.#../..#.
|
||||
##./#.#/#.. => ###./..#./.##./##..
|
||||
..#/#.#/#.. => .###/.#.#/#.#./##..
|
||||
#.#/#.#/#.. => #..#/.###/.##./....
|
||||
.##/#.#/#.. => ###./.###/#.##/.###
|
||||
###/#.#/#.. => ####/.###/..../.##.
|
||||
#../.##/#.. => ##.#/..../#.../..#.
|
||||
.#./.##/#.. => #.../..../...#/###.
|
||||
##./.##/#.. => ###./.#../..##/...#
|
||||
#.#/.##/#.. => #.../...#/..#./.###
|
||||
.##/.##/#.. => ###./..../##.#/...#
|
||||
###/.##/#.. => ##.#/##../###./.##.
|
||||
#../###/#.. => ..#./#.../..##/#.##
|
||||
.#./###/#.. => ...#/.##./.#../.#..
|
||||
##./###/#.. => ##.#/.#.#/###./....
|
||||
..#/###/#.. => #.##/#.../####/.##.
|
||||
#.#/###/#.. => .#.#/...#/#..#/..#.
|
||||
.##/###/#.. => .##./#..#/#..#/.#.#
|
||||
###/###/#.. => ###./####/#.##/#...
|
||||
.#./#.#/.#. => ###./#..#/...#/...#
|
||||
##./#.#/.#. => #.#./#.##/#.../#..#
|
||||
#.#/#.#/.#. => .#.#/#.##/..../.#..
|
||||
###/#.#/.#. => #.#./.#../.###/#.#.
|
||||
.#./###/.#. => #.../.###/##../##.#
|
||||
##./###/.#. => .###/#.../####/.#.#
|
||||
#.#/###/.#. => #..#/####/#.#./#...
|
||||
###/###/.#. => .#../..../.##./.#.#
|
||||
#.#/..#/##. => ##../###./...#/###.
|
||||
###/..#/##. => .##./###./.###/#.##
|
||||
.##/#.#/##. => ..../##.#/#..#/#...
|
||||
###/#.#/##. => .###/##../..../..#.
|
||||
#.#/.##/##. => ####/.###/##../...#
|
||||
###/.##/##. => #.##/..##/..#./#..#
|
||||
.##/###/##. => ..../#.##/#.../#.##
|
||||
###/###/##. => ..../#..#/#.##/#.##
|
||||
#.#/.../#.# => #.../##.#/..../.#.#
|
||||
###/.../#.# => ##../##../#.#./.##.
|
||||
###/#../#.# => .##./.#../#.##/.##.
|
||||
#.#/.#./#.# => #.../.#../####/#.##
|
||||
###/.#./#.# => .###/##.#/#.../#.#.
|
||||
###/##./#.# => .##./.##./.###/.#.#
|
||||
#.#/#.#/#.# => ####/####/###./.##.
|
||||
###/#.#/#.# => #.#./.###/...#/.#.#
|
||||
#.#/###/#.# => .###/..#./..../.##.
|
||||
###/###/#.# => #.#./##.#/..#./..#.
|
||||
###/#.#/### => ###./#.../##../##..
|
||||
###/###/### => ##.#/.#.#/#.#./...#
|
||||
2
inputs/input21_test
Normal file
2
inputs/input21_test
Normal file
@ -0,0 +1,2 @@
|
||||
../.# => ##./#../...
|
||||
.#./..#/### => #..#/..../..../#..#
|
||||
25
inputs/input22
Normal file
25
inputs/input22
Normal file
@ -0,0 +1,25 @@
|
||||
..######.###...######...#
|
||||
.##..##.#....#..##.#....#
|
||||
.##.#....###..##.###.#.#.
|
||||
#.#.###.#####.###.##.##.#
|
||||
.###.#.#.###.####..##.###
|
||||
..####.##..#.#.#####...##
|
||||
....##.###..#.#..#...####
|
||||
.#.##.##.#..##...##.###..
|
||||
.######..#..#.#####....##
|
||||
###.##.###.########...###
|
||||
.#.#.#..#.##.#..###...#..
|
||||
.#.##.#.####.#.#.....###.
|
||||
##..###.###..##...#.##.##
|
||||
##.#.##..#...##...#...###
|
||||
##..#..###.#..##.#.#.#.#.
|
||||
.##.#####..##....#.#.#..#
|
||||
..#.######.##...#..#.##..
|
||||
#.##...#.#....###.#.##.#.
|
||||
.#..#.#.#..#.####..#.####
|
||||
.##...##....##..#.#.###..
|
||||
..##.#.#.##..##.#.#....#.
|
||||
###.###.######.#.########
|
||||
..#.####.#.#.##..####...#
|
||||
#.##..#.#.####...#..#..##
|
||||
###.###.#..##..#.###....#
|
||||
3
inputs/input22_test
Normal file
3
inputs/input22_test
Normal file
@ -0,0 +1,3 @@
|
||||
..#
|
||||
#..
|
||||
...
|
||||
32
inputs/input23
Normal file
32
inputs/input23
Normal file
@ -0,0 +1,32 @@
|
||||
set b 67
|
||||
set c b
|
||||
jnz a 2
|
||||
jnz 1 5
|
||||
mul b 100
|
||||
sub b -100000
|
||||
set c b
|
||||
sub c -17000
|
||||
set f 1
|
||||
set d 2
|
||||
set e 2
|
||||
set g d
|
||||
mul g e
|
||||
sub g b
|
||||
jnz g 2
|
||||
set f 0
|
||||
sub e -1
|
||||
set g e
|
||||
sub g b
|
||||
jnz g -8
|
||||
sub d -1
|
||||
set g d
|
||||
sub g b
|
||||
jnz g -13
|
||||
jnz f 2
|
||||
sub h -1
|
||||
set g b
|
||||
sub g c
|
||||
jnz g 2
|
||||
jnz 1 3
|
||||
sub b -17
|
||||
jnz 1 -23
|
||||
57
inputs/input24
Normal file
57
inputs/input24
Normal file
@ -0,0 +1,57 @@
|
||||
42/37
|
||||
28/28
|
||||
29/25
|
||||
45/8
|
||||
35/23
|
||||
49/20
|
||||
44/4
|
||||
15/33
|
||||
14/19
|
||||
31/44
|
||||
39/14
|
||||
25/17
|
||||
34/34
|
||||
38/42
|
||||
8/42
|
||||
15/28
|
||||
0/7
|
||||
49/12
|
||||
18/36
|
||||
45/45
|
||||
28/7
|
||||
30/43
|
||||
23/41
|
||||
0/35
|
||||
18/9
|
||||
3/31
|
||||
20/31
|
||||
10/40
|
||||
0/22
|
||||
1/23
|
||||
20/47
|
||||
38/36
|
||||
15/8
|
||||
34/32
|
||||
30/30
|
||||
30/44
|
||||
19/28
|
||||
46/15
|
||||
34/50
|
||||
40/20
|
||||
27/39
|
||||
3/14
|
||||
43/45
|
||||
50/42
|
||||
1/33
|
||||
6/39
|
||||
46/44
|
||||
22/35
|
||||
15/20
|
||||
43/31
|
||||
23/23
|
||||
19/27
|
||||
47/15
|
||||
43/43
|
||||
25/36
|
||||
26/38
|
||||
1/10
|
||||
8
inputs/input24_test
Normal file
8
inputs/input24_test
Normal file
@ -0,0 +1,8 @@
|
||||
0/2
|
||||
2/2
|
||||
2/3
|
||||
3/4
|
||||
3/5
|
||||
0/1
|
||||
10/1
|
||||
9/10
|
||||
62
inputs/input25
Normal file
62
inputs/input25
Normal file
@ -0,0 +1,62 @@
|
||||
Begin in state A.
|
||||
Perform a diagnostic checksum after 12134527 steps.
|
||||
|
||||
In state A:
|
||||
If the current value is 0:
|
||||
- Write the value 1.
|
||||
- Move one slot to the right.
|
||||
- Continue with state B.
|
||||
If the current value is 1:
|
||||
- Write the value 0.
|
||||
- Move one slot to the left.
|
||||
- Continue with state C.
|
||||
|
||||
In state B:
|
||||
If the current value is 0:
|
||||
- Write the value 1.
|
||||
- Move one slot to the left.
|
||||
- Continue with state A.
|
||||
If the current value is 1:
|
||||
- Write the value 1.
|
||||
- Move one slot to the right.
|
||||
- Continue with state C.
|
||||
|
||||
In state C:
|
||||
If the current value is 0:
|
||||
- Write the value 1.
|
||||
- Move one slot to the right.
|
||||
- Continue with state A.
|
||||
If the current value is 1:
|
||||
- Write the value 0.
|
||||
- Move one slot to the left.
|
||||
- Continue with state D.
|
||||
|
||||
In state D:
|
||||
If the current value is 0:
|
||||
- Write the value 1.
|
||||
- Move one slot to the left.
|
||||
- Continue with state E.
|
||||
If the current value is 1:
|
||||
- Write the value 1.
|
||||
- Move one slot to the left.
|
||||
- Continue with state C.
|
||||
|
||||
In state E:
|
||||
If the current value is 0:
|
||||
- Write the value 1.
|
||||
- Move one slot to the right.
|
||||
- Continue with state F.
|
||||
If the current value is 1:
|
||||
- Write the value 1.
|
||||
- Move one slot to the right.
|
||||
- Continue with state A.
|
||||
|
||||
In state F:
|
||||
If the current value is 0:
|
||||
- Write the value 1.
|
||||
- Move one slot to the right.
|
||||
- Continue with state A.
|
||||
If the current value is 1:
|
||||
- Write the value 1.
|
||||
- Move one slot to the right.
|
||||
- Continue with state E.
|
||||
22
inputs/input25_test
Normal file
22
inputs/input25_test
Normal file
@ -0,0 +1,22 @@
|
||||
Begin in state A.
|
||||
Perform a diagnostic checksum after 6 steps.
|
||||
|
||||
In state A:
|
||||
If the current value is 0:
|
||||
- Write the value 1.
|
||||
- Move one slot to the right.
|
||||
- Continue with state B.
|
||||
If the current value is 1:
|
||||
- Write the value 0.
|
||||
- Move one slot to the left.
|
||||
- Continue with state B.
|
||||
|
||||
In state B:
|
||||
If the current value is 0:
|
||||
- Write the value 1.
|
||||
- Move one slot to the left.
|
||||
- Continue with state A.
|
||||
If the current value is 1:
|
||||
- Write the value 1.
|
||||
- Move one slot to the right.
|
||||
- Continue with state A.
|
||||
Loading…
Reference in New Issue
Block a user