Compare commits
No commits in common. "master" and "dev/2024/17" have entirely different histories.
master
...
dev/2024/1
1
.gitignore
vendored
1
.gitignore
vendored
@ -4,4 +4,3 @@ __pycache__
|
||||
.ruff_cache
|
||||
.vscode
|
||||
build
|
||||
files
|
||||
|
@ -63,6 +63,7 @@ class Solver(BaseSolver):
|
||||
(x, y, z), (vx, vy, vz), positions[i1], velocities[i1]
|
||||
):
|
||||
equations.append(p + ti * d - pi - ti * di)
|
||||
print(equations)
|
||||
|
||||
r = solve(equations, [x, y, z, vx, vy, vz] + list(ts), dict=True)[0]
|
||||
yield r[x] + r[y] + r[z]
|
||||
|
@ -1,58 +1,7 @@
|
||||
from typing import Any, Iterator
|
||||
|
||||
from ..base import BaseSolver
|
||||
from ..tools import graphs
|
||||
|
||||
|
||||
class Solver(BaseSolver):
|
||||
def print_grid(self, grid: list[tuple[int, int]], n_rows: int, n_cols: int):
|
||||
values = set(grid)
|
||||
if self.files:
|
||||
self.files.create(
|
||||
"graph.txt",
|
||||
"\n".join(
|
||||
"".join(
|
||||
"#" if (row, col) in values else "." for col in range(n_cols)
|
||||
)
|
||||
for row in range(n_rows)
|
||||
).encode(),
|
||||
text=True,
|
||||
)
|
||||
else:
|
||||
for row in range(n_rows):
|
||||
self.logger.info(
|
||||
"".join(
|
||||
"#" if (row, col) in values else "." for col in range(n_cols)
|
||||
)
|
||||
)
|
||||
|
||||
def dijkstra(self, corrupted: list[tuple[int, int]], n_rows: int, n_cols: int):
|
||||
return graphs.dijkstra(
|
||||
(0, 0),
|
||||
(n_rows - 1, n_cols - 1),
|
||||
graphs.make_neighbors_grid_fn(n_rows, n_cols, set(corrupted)),
|
||||
)
|
||||
|
||||
def solve(self, input: str) -> Iterator[Any]:
|
||||
values = [
|
||||
(int(p[0]), int(p[1])) for r in input.splitlines() if (p := r.split(","))
|
||||
]
|
||||
|
||||
_is_test = len(values) < 100
|
||||
|
||||
n_rows, n_cols, n_bytes_p1 = (7, 7, 12) if _is_test else (71, 71, 1024)
|
||||
|
||||
bytes_p1 = values[:n_bytes_p1]
|
||||
self.print_grid(bytes_p1, n_rows, n_cols)
|
||||
|
||||
path_p1, cost_p1 = self.dijkstra(bytes_p1, n_rows, n_cols) or ((), -1)
|
||||
yield cost_p1
|
||||
|
||||
path = path_p1
|
||||
for b in range(n_bytes_p1, len(values)):
|
||||
if values[b] not in path:
|
||||
continue
|
||||
path, _ = self.dijkstra(values[: b + 1], n_rows, n_cols) or (None, -1)
|
||||
if path is None:
|
||||
yield ",".join(map(str, values[b]))
|
||||
break
|
||||
def solve(self, input: str) -> Iterator[Any]: ...
|
||||
|
@ -1,42 +1,7 @@
|
||||
from functools import cache
|
||||
from typing import Any, Iterator
|
||||
|
||||
from ..base import BaseSolver
|
||||
|
||||
|
||||
@cache
|
||||
def is_valid(design: str, towels: tuple[str, ...]) -> bool:
|
||||
if not design:
|
||||
return True
|
||||
|
||||
return any(
|
||||
design.startswith(towel) and is_valid(design[len(towel) :], towels)
|
||||
for towel in towels
|
||||
)
|
||||
|
||||
|
||||
@cache
|
||||
def count_valid(design: str, towels: tuple[str, ...]) -> int:
|
||||
if not design:
|
||||
return 1
|
||||
|
||||
return sum(
|
||||
design.startswith(towel) and count_valid(design[len(towel) :], towels)
|
||||
for towel in towels
|
||||
)
|
||||
|
||||
|
||||
class Solver(BaseSolver):
|
||||
def solve(self, input: str) -> Iterator[Any]:
|
||||
towels_s, designs_s = input.split("\n\n")
|
||||
|
||||
towels = tuple(s.strip() for s in towels_s.split(","))
|
||||
|
||||
designs = [
|
||||
design
|
||||
for design in self.progress.wrap(designs_s.splitlines())
|
||||
if is_valid(design, towels)
|
||||
]
|
||||
|
||||
yield len(designs)
|
||||
yield sum(count_valid(design, towels) for design in self.progress.wrap(designs))
|
||||
def solve(self, input: str) -> Iterator[Any]: ...
|
||||
|
@ -1,95 +1,7 @@
|
||||
import itertools
|
||||
from collections import Counter
|
||||
from typing import Any, Callable, Iterable, Iterator, Sequence, TypeAlias
|
||||
from typing import Any, Iterator
|
||||
|
||||
from ..base import BaseSolver
|
||||
from ..tools.graphs import dijkstra, make_neighbors_grid_fn
|
||||
|
||||
Node: TypeAlias = tuple[int, int]
|
||||
|
||||
|
||||
def make_neighbors_fn(grid: list[str], cheat_length: int):
|
||||
n_rows, n_cols = len(grid), len(grid[0])
|
||||
|
||||
def _fn(node: Node):
|
||||
row, col = node
|
||||
return (
|
||||
((row_n, col_n), abs(row_n - row) + abs(col_n - col))
|
||||
for row_d in range(-cheat_length, cheat_length + 1)
|
||||
for col_d in range(
|
||||
-cheat_length + abs(row_d), cheat_length - abs(row_d) + 1
|
||||
)
|
||||
if 0 <= (row_n := row + row_d) < n_rows
|
||||
and 0 <= (col_n := col + col_d) < n_cols
|
||||
and grid[row_n][col_n] != "#"
|
||||
)
|
||||
|
||||
return _fn
|
||||
|
||||
|
||||
class Solver(BaseSolver):
|
||||
def find_cheats(
|
||||
self,
|
||||
path: Sequence[Node],
|
||||
cost: float,
|
||||
costs_to_target: dict[Node, float],
|
||||
neighbors_fn: Callable[[Node], Iterable[tuple[Node, float]]],
|
||||
):
|
||||
cheats: dict[tuple[tuple[int, int], tuple[int, int]], float] = {}
|
||||
|
||||
for i_node, node in enumerate(self.progress.wrap(path)):
|
||||
for reach_node, reach_cost in neighbors_fn(node):
|
||||
n_cost = (
|
||||
i_node + reach_cost + costs_to_target.get(reach_node, float("inf"))
|
||||
)
|
||||
if n_cost < cost:
|
||||
cheats[node, reach_node] = cost - n_cost
|
||||
|
||||
return cheats
|
||||
|
||||
def solve(self, input: str) -> Iterator[Any]:
|
||||
grid = input.splitlines()
|
||||
n_rows, n_cols = len(grid), len(grid[0])
|
||||
start = next(
|
||||
(i, j) for i in range(n_rows) for j in range(n_cols) if grid[i][j] == "S"
|
||||
)
|
||||
target = next(
|
||||
(i, j) for i in range(n_rows) for j in range(n_cols) if grid[i][j] == "E"
|
||||
)
|
||||
|
||||
reachable = dijkstra(
|
||||
target,
|
||||
None,
|
||||
make_neighbors_grid_fn(
|
||||
n_rows,
|
||||
n_cols,
|
||||
excluded=(
|
||||
(i, j)
|
||||
for i in range(n_rows)
|
||||
for j in range(n_cols)
|
||||
if grid[i][j] == "#"
|
||||
),
|
||||
),
|
||||
)
|
||||
|
||||
# note: path is inverted here
|
||||
path, cost = reachable[start]
|
||||
costs_to_target = {k: c for k, (_, c) in reachable.items()}
|
||||
|
||||
self.logger.info(f"found past from start to target with cost {cost}")
|
||||
|
||||
for cheat_length in (2, 20):
|
||||
cheats = self.find_cheats(
|
||||
list(reversed(path)),
|
||||
cost,
|
||||
costs_to_target,
|
||||
make_neighbors_fn(grid, cheat_length),
|
||||
)
|
||||
|
||||
for saving, count in sorted(Counter(cheats.values()).items()):
|
||||
self.logger.debug(
|
||||
f"There are {count} cheats that save {saving} picoseconds."
|
||||
)
|
||||
|
||||
target_saving = 100 if len(grid) > 20 else 50
|
||||
yield sum(saving >= target_saving for saving in cheats.values())
|
||||
def solve(self, input: str) -> Iterator[Any]: ...
|
||||
|
@ -1,85 +1,7 @@
|
||||
import itertools
|
||||
from functools import cache
|
||||
from typing import Any, Iterator, Literal
|
||||
from typing import Any, Iterator
|
||||
|
||||
from ..base import BaseSolver
|
||||
|
||||
NUM_PAD_P = {
|
||||
v: (i, j)
|
||||
for i, r in enumerate(("789", "456", "123", " 0A"))
|
||||
for j, v in enumerate(r)
|
||||
if v.strip()
|
||||
}
|
||||
MOV_PAD_P = {
|
||||
v: (i, j)
|
||||
for i, r in enumerate((" ^A", "<v>"))
|
||||
for j, v in enumerate(r)
|
||||
if v.strip()
|
||||
}
|
||||
|
||||
|
||||
def path(start: tuple[int, int], end: tuple[int, int], pad: Literal["num", "mov"]):
|
||||
# a move in the grid is composed of at most two straight line: up/down and
|
||||
# left/right, since doing some kind of diagonal moves would create long path for
|
||||
# the robot above (since this involves going back-and-forth to the letter 'A')
|
||||
#
|
||||
row_s, col_s = start
|
||||
row_e, col_e = end
|
||||
|
||||
le, de, ue, re = (
|
||||
"<" * max(0, col_s - col_e),
|
||||
"v" * max(0, row_e - row_s),
|
||||
"^" * max(0, row_s - row_e),
|
||||
">" * max(0, col_e - col_s),
|
||||
)
|
||||
|
||||
# when the robot starts or ends on the row/column with the empty cell, there is
|
||||
# only one way to move
|
||||
#
|
||||
if pad == "num" and (row_s, col_e) == (3, 0):
|
||||
return ue + le
|
||||
elif pad == "num" and (col_s, row_e) == (0, 3):
|
||||
return re + de
|
||||
elif pad == "mov" and col_s == 0:
|
||||
return re + ue
|
||||
elif pad == "mov" and col_e == 0:
|
||||
return de + le
|
||||
|
||||
# otherwise, we need to decide if we want to go up/down first, or left/right, and
|
||||
# apparently this is the best way to do it...
|
||||
return le + de + ue + re
|
||||
|
||||
|
||||
@cache
|
||||
def v_clicks(clicks: str, depth: int) -> int:
|
||||
if depth == 0:
|
||||
return len(clicks)
|
||||
|
||||
n_clicks = 0
|
||||
at = "A"
|
||||
for _, group in itertools.groupby(clicks):
|
||||
group = list(group)
|
||||
n_clicks += v_clicks(
|
||||
path(MOV_PAD_P[at], MOV_PAD_P[group[0]], "mov") + "A" * len(group),
|
||||
depth - 1,
|
||||
)
|
||||
at = group[0]
|
||||
|
||||
return n_clicks
|
||||
|
||||
|
||||
def path_length(code: str, depth: int):
|
||||
return sum(
|
||||
v_clicks(path(NUM_PAD_P[start], NUM_PAD_P[end], "num") + "A", depth)
|
||||
for start, end in zip("A" + code[:-1], code, strict=True)
|
||||
)
|
||||
|
||||
|
||||
class Solver(BaseSolver):
|
||||
def solve(self, input: str) -> Iterator[Any]:
|
||||
yield sum(
|
||||
path_length(code, 2) * int(code[:-1], 10) for code in input.splitlines()
|
||||
)
|
||||
yield sum(
|
||||
path_length(code, 25) * int(code[:-1], 10) for code in input.splitlines()
|
||||
)
|
||||
def solve(self, input: str) -> Iterator[Any]: ...
|
||||
|
@ -3,57 +3,5 @@ from typing import Any, Iterator
|
||||
from ..base import BaseSolver
|
||||
|
||||
|
||||
def mix(secret: int, value: int) -> int:
|
||||
return secret ^ value
|
||||
|
||||
|
||||
def prune(secret: int) -> int:
|
||||
return secret % 16777216
|
||||
|
||||
|
||||
def next_number(secret: int) -> int:
|
||||
# Calculate the result of multiplying the secret number by 64. Then, mix this
|
||||
# result into the secret number. Finally, prune the secret number.
|
||||
secret = prune(mix(secret, secret * 64))
|
||||
|
||||
# Calculate the result of dividing the secret number by 32. Round the result down
|
||||
# to the nearest integer. Then, mix this result into the secret number. Finally,
|
||||
# prune the secret number.
|
||||
secret = prune(mix(secret, secret // 32))
|
||||
|
||||
# Calculate the result of multiplying the secret number by 2048. Then, mix this
|
||||
# result into the secret number. Finally, prune the secret number.
|
||||
secret = prune(mix(secret, secret * 2048))
|
||||
|
||||
return secret
|
||||
|
||||
|
||||
class Solver(BaseSolver):
|
||||
def solve(self, input: str) -> Iterator[Any]:
|
||||
starts = [int(r) for r in input.splitlines()]
|
||||
|
||||
ends: list[int] = []
|
||||
prices: list[int] = [0 for _ in range(2**16)]
|
||||
|
||||
for secret in self.progress.wrap(starts):
|
||||
checked: list[bool] = [False] * len(prices)
|
||||
hashed: int = 0
|
||||
|
||||
for i in range(2000):
|
||||
last = secret % 10
|
||||
secret = next_number(secret)
|
||||
next = secret % 10
|
||||
|
||||
hashed = ((hashed << 4) & 0xFFFF) | ((last - next) & 0xF)
|
||||
|
||||
if i >= 3 and not checked[hashed]:
|
||||
checked[hashed] = True
|
||||
prices[hashed] += next
|
||||
|
||||
ends.append(secret)
|
||||
|
||||
for start, end in zip(starts, ends, strict=True):
|
||||
self.logger.info(f"{start}: {end}")
|
||||
|
||||
yield sum(ends)
|
||||
yield max(prices)
|
||||
def solve(self, input: str) -> Iterator[Any]: ...
|
||||
|
@ -1,36 +1,7 @@
|
||||
from collections import defaultdict
|
||||
from typing import Any, Iterator
|
||||
|
||||
from ..base import BaseSolver
|
||||
from ..tools.graphs import iter_max_cliques
|
||||
|
||||
|
||||
class Solver(BaseSolver):
|
||||
def solve(self, input: str) -> Iterator[Any]:
|
||||
connections: dict[str, set[str]] = defaultdict(set)
|
||||
for row in input.splitlines():
|
||||
src, dst = row.split("-")
|
||||
connections[src].add(dst)
|
||||
connections[dst].add(src)
|
||||
|
||||
if self.files:
|
||||
content = "graph G {\n"
|
||||
for row in input.splitlines():
|
||||
src, dst = row.split("-")
|
||||
content += f"{src} -- {dst}\n"
|
||||
content += "}"
|
||||
self.files.create("graph.dot", content.encode(), False)
|
||||
|
||||
cliques: set[frozenset[str]] = set()
|
||||
|
||||
for node1, neighbors in connections.items():
|
||||
for node2 in neighbors:
|
||||
for node3 in connections[node2].intersection(neighbors):
|
||||
cliques.add(frozenset({node1, node2, node3}))
|
||||
|
||||
self.logger.info(f"found {len(cliques)} cliques of size 3")
|
||||
yield sum(any(node.startswith("t") for node in clique) for clique in cliques)
|
||||
|
||||
# clique = max(nx.algorithms.clique.find_cliques(G), key=len)
|
||||
clique = max(iter_max_cliques(connections), key=len)
|
||||
yield ",".join(sorted(clique))
|
||||
def solve(self, input: str) -> Iterator[Any]: ...
|
||||
|
@ -1,170 +1,7 @@
|
||||
from dataclasses import dataclass
|
||||
from typing import Any, Iterator, Literal, TypeAlias, cast
|
||||
from typing import Any, Iterator
|
||||
|
||||
from ..base import BaseSolver
|
||||
|
||||
GateType: TypeAlias = Literal["and", "or", "xor"]
|
||||
|
||||
|
||||
@dataclass(frozen=True, eq=True)
|
||||
class Gate:
|
||||
type: GateType
|
||||
lhs: str
|
||||
rhs: str
|
||||
|
||||
def __call__(self, lhs: int, rhs: int) -> Any:
|
||||
match self.type:
|
||||
case "or":
|
||||
return int(lhs or rhs)
|
||||
case "and":
|
||||
return int(lhs and rhs)
|
||||
case "xor":
|
||||
return int(lhs != rhs)
|
||||
|
||||
|
||||
class Solver(BaseSolver):
|
||||
def solve(self, input: str) -> Iterator[Any]:
|
||||
inputs_s, gates_s = input.split("\n\n")
|
||||
|
||||
wires: dict[str, int | None] = {}
|
||||
for row in inputs_s.splitlines():
|
||||
parts = row.split(": ")
|
||||
wires[parts[0]] = int(parts[1])
|
||||
|
||||
gates: dict[str, Gate] = {}
|
||||
for row in gates_s.splitlines():
|
||||
parts = row.split()
|
||||
assert parts[4] not in gates
|
||||
assert parts[4] not in wires
|
||||
|
||||
lhs, rhs = sorted([parts[0], parts[2]])
|
||||
|
||||
gates[parts[4]] = Gate(cast(GateType, parts[1].lower()), lhs, rhs)
|
||||
wires[parts[4]] = None
|
||||
|
||||
if self.files:
|
||||
content = "digraph G {\n"
|
||||
for wire in wires:
|
||||
content += f'{wire} [label="{wire}"]\n'
|
||||
for wire, gate in gates.items():
|
||||
gate_n = f"G_{wire}"
|
||||
content += f'{gate_n} [label="{gate.type.upper()}"]\n'
|
||||
content += f"{gate.lhs} -> {gate_n}\n"
|
||||
content += f"{gate.rhs} -> {gate_n}\n"
|
||||
content += f"{gate_n} -> {wire}\n"
|
||||
content += "}\n"
|
||||
self.files.create("gates.dot", content.encode(), text=False)
|
||||
|
||||
wires_to_find = set(gates)
|
||||
|
||||
while wires_to_find:
|
||||
wires_found: list[str] = []
|
||||
for wire in wires_to_find:
|
||||
gate = gates[wire]
|
||||
|
||||
lhs, rhs = wires[gate.lhs], wires[gate.rhs]
|
||||
|
||||
if lhs is None or rhs is None:
|
||||
continue
|
||||
|
||||
assert wires[wire] is None
|
||||
wires[wire] = gate(lhs, rhs)
|
||||
|
||||
wires_found.append(wire)
|
||||
|
||||
wires_to_find.difference_update(wires_found)
|
||||
|
||||
z_wires = sorted((wire for wire in wires if wire.startswith("z")))
|
||||
self.logger.info(
|
||||
"binary value is '{}'".format(
|
||||
"".join(str(wires[w]) for w in reversed(z_wires))
|
||||
)
|
||||
)
|
||||
yield int("".join(str(wires[w]) for w in reversed(z_wires)), base=2)
|
||||
|
||||
# e00 = x00 ^ y00
|
||||
# z00 = e00
|
||||
# r00 = x00 & y00
|
||||
|
||||
# e01 = x01 ^ y01
|
||||
# z01 = r00 ^ e01
|
||||
# a01 = x01 & y01
|
||||
# b01 = r00 & e01
|
||||
# r01 = a01 | (r00 & e01)
|
||||
|
||||
assert gates["z00"] == Gate("xor", "x00", "y00")
|
||||
|
||||
# normalized names -> gate name
|
||||
m_gates: dict[str, str] = {}
|
||||
|
||||
def find_gate(type: GateType, lhs: str, rhs: str):
|
||||
try:
|
||||
return next(
|
||||
wire
|
||||
for wire, gate in gates.items()
|
||||
if gate.type == type
|
||||
and {gate.lhs, gate.rhs}
|
||||
== {m_gates.get(lhs, lhs), m_gates.get(rhs, rhs)}
|
||||
)
|
||||
except StopIteration as ex:
|
||||
self.logger.info(
|
||||
f"gate {lhs} [{m_gates.get(lhs, lhs)}] {type} {rhs} [{m_gates.get(rhs, rhs)}] not found"
|
||||
)
|
||||
raise ex
|
||||
|
||||
# find the r00 gate (= x00 & y00)
|
||||
m_gates["r00"] = find_gate("and", "x00", "y00")
|
||||
|
||||
swapped: list[str] = []
|
||||
|
||||
for i_wire, z_wire in enumerate(z_wires[1:-1], start=1):
|
||||
i2d = f"{i_wire:02d}"
|
||||
r0n = f"r{i_wire - 1:02d}"
|
||||
m_gates[f"e{i2d}"] = find_gate("xor", f"x{i2d}", f"y{i2d}")
|
||||
|
||||
try:
|
||||
z_gate = find_gate("xor", r0n, f"e{i2d}")
|
||||
except StopIteration:
|
||||
# gate xor not found -> one of the input gate has been swapped
|
||||
#
|
||||
# assume there is a XOR gate with the remainder, so it is the other
|
||||
# input that has been swapped
|
||||
assert gates[z_wire].type == "xor"
|
||||
assert m_gates.get(r0n, r0n) in (gates[z_wire].lhs, gates[z_wire].rhs)
|
||||
|
||||
wrong_wire_1 = (
|
||||
gates[z_wire].lhs
|
||||
if gates[z_wire].rhs == m_gates.get(r0n, r0n)
|
||||
else gates[z_wire].rhs
|
||||
)
|
||||
wrong_wire_2 = m_gates[f"e{i2d}"]
|
||||
|
||||
# we are going to fix all the gates (there is probably only 2 but
|
||||
# eh...) whose wires needs to be swapped
|
||||
|
||||
self.logger.info(f"swapping {wrong_wire_1} <> {wrong_wire_2}")
|
||||
switch = {wrong_wire_1: wrong_wire_2, wrong_wire_2: wrong_wire_1}
|
||||
|
||||
for wire, gate in list(gates.items()):
|
||||
lhs, rhs = (
|
||||
switch.get(gate.lhs, gate.lhs),
|
||||
switch.get(gate.rhs, gate.rhs),
|
||||
)
|
||||
if lhs != gate.lhs or rhs != gate.rhs:
|
||||
gates[wire] = Gate(gate.type, lhs, rhs)
|
||||
|
||||
swapped.extend((wrong_wire_1, wrong_wire_2))
|
||||
|
||||
z_gate = find_gate("xor", r0n, f"e{i2d}")
|
||||
|
||||
if z_gate != z_wire:
|
||||
self.logger.info(f"swapping {z_gate} <> {z_wire}")
|
||||
gates[z_gate], gates[z_wire] = gates[z_wire], gates[z_gate]
|
||||
swapped.extend((z_gate, z_wire))
|
||||
|
||||
m_gates[f"a{i2d}"] = find_gate("and", f"x{i2d}", f"y{i2d}")
|
||||
m_gates[f"b{i2d}"] = find_gate("and", r0n, f"e{i2d}")
|
||||
m_gates[f"r{i2d}"] = find_gate("or", f"a{i2d}", f"b{i2d}")
|
||||
|
||||
assert len(swapped) == 8
|
||||
yield ",".join(sorted(swapped))
|
||||
def solve(self, input: str) -> Iterator[Any]: ...
|
||||
|
@ -1,40 +1,7 @@
|
||||
import itertools as it
|
||||
from typing import Any, Iterator
|
||||
|
||||
from ..base import BaseSolver
|
||||
|
||||
|
||||
def read_locks_and_keys(input: str):
|
||||
locks: list[tuple[int, ...]] = []
|
||||
keys: list[tuple[int, ...]] = []
|
||||
|
||||
for block in map(str.splitlines, input.split("\n\n")):
|
||||
n_rows, n_cols = len(block), len(block[0])
|
||||
if block[0] == "#" * n_cols:
|
||||
locks.append(
|
||||
tuple(
|
||||
next(i for i in range(n_rows) if block[i][j] == ".") - 1
|
||||
for j in range(n_cols)
|
||||
)
|
||||
)
|
||||
else:
|
||||
keys.append(
|
||||
tuple(
|
||||
n_rows - next(i for i in range(n_rows) if block[i][j] == "#") - 1
|
||||
for j in range(n_cols)
|
||||
)
|
||||
)
|
||||
|
||||
return locks, keys
|
||||
|
||||
|
||||
class Solver(BaseSolver):
|
||||
def solve(self, input: str) -> Iterator[Any]:
|
||||
locks, keys = read_locks_and_keys(input)
|
||||
assert len(set(locks)) == len(locks)
|
||||
assert len(set(keys)) == len(keys)
|
||||
|
||||
yield sum(
|
||||
all(c1 + c2 <= 5 for c1, c2 in zip(lock, key, strict=True))
|
||||
for lock, key in it.product(locks, keys)
|
||||
)
|
||||
def solve(self, input: str) -> Iterator[Any]: ...
|
||||
|
@ -12,29 +12,10 @@ from .utils.files import SimpleFileHandler
|
||||
from .utils.progress import ProgressNone, ProgressTQDM
|
||||
|
||||
|
||||
def find_input_file(folder: Path, day: int, target: Path | None):
|
||||
if (path := folder.joinpath(f"day{day}.txt")).exists():
|
||||
return path
|
||||
|
||||
if (
|
||||
target is not None
|
||||
and (path := folder.joinpath(f"day{day}_v{target}.txt")).exists()
|
||||
):
|
||||
return path
|
||||
|
||||
try:
|
||||
return next(path for path in sorted(folder.glob(f"day{day}*.txt")))
|
||||
except StopIteration:
|
||||
...
|
||||
|
||||
return folder.joinpath(f"day{day}.txt")
|
||||
|
||||
|
||||
def main():
|
||||
parser = argparse.ArgumentParser("Holt59 Advent-Of-Code Runner")
|
||||
parser.add_argument("-v", "--verbose", action="store_true", help="verbose mode")
|
||||
parser.add_argument("-t", "--test", action="store_true", help="test mode")
|
||||
|
||||
parser.add_argument("-a", "--api", action="store_true", help="API mode")
|
||||
parser.add_argument(
|
||||
"-o",
|
||||
@ -80,13 +61,9 @@ def main():
|
||||
handlers=[LoggerAPIHandler()] if api else None,
|
||||
)
|
||||
|
||||
if input_path is None or not input_path.exists():
|
||||
input_path = find_input_file(
|
||||
Path(__file__).parent.joinpath(
|
||||
"inputs", "tests" if test else user, str(year)
|
||||
),
|
||||
day,
|
||||
input_path,
|
||||
if input_path is None:
|
||||
input_path = Path(__file__).parent.joinpath(
|
||||
"inputs", "tests" if test else user, str(year), f"day{day}.txt"
|
||||
)
|
||||
assert input_path.exists(), f"{input_path} missing"
|
||||
|
||||
|
File diff suppressed because it is too large
Load Diff
@ -1,402 +0,0 @@
|
||||
ggrru, ugu, gwgg, bwrw, bww, brg, brwu, ruugb, grggr, wrgbuug, bbbrbr, rgrrbrbw, gbwg, wuruug, gbgwbg, rgw, buu, ggbgb, rwg, gr, ggurggr, wruuwgrr, wbgg, gggrb, rgwuu, uuwww, bgrw, uuguubw, bbbrwu, ugurb, uwbggg, rurg, ubb, wrr, rbbbbg, gguuug, gbur, wb, bubbu, gbwru, bgg, ugg, bbrrg, wubr, bgwgbwgg, rguurb, bugu, wuww, urugr, bwb, wug, brr, u, rru, wwgbw, gwu, bw, ugrwggr, rgubuw, bbg, bwru, uwgbwu, gbrugg, rgub, rgbbuwwg, wwr, grw, rwggwwrw, bbbu, wr, wbwu, wwrbuu, rbbgwru, gur, buurr, ggbrg, gwg, wrg, urw, uubub, gwrgb, bbw, rrw, ugrurw, rubrw, bgb, bwgbwbw, guw, ur, wgrbu, bgu, rrrrbrw, uww, uuu, wuugbw, wwbugw, rwbr, ruwbr, uwu, wgrb, b, rrwugru, gwb, burw, rurb, rbrrbgu, uwgw, brubr, bwu, rbw, ugbu, gww, wwrb, wbgbrww, brrwgrg, rugug, grgrrb, wuubbgu, brub, rrwwwb, ugr, wbw, ruwgguu, wgw, rrwrg, bwbbrwbg, rggg, gbgrguw, rwgw, rbbgwbr, gub, rgrrg, wbgggu, bbbgww, ugb, rbbgr, wru, rubbuu, bggrbu, gbg, bgrgbb, wwrwugbg, rrgu, wrrubwu, wrbuu, rgug, bbu, wrww, wbb, wgrwu, bbrurru, wgrugwu, uuw, uggwg, rrbuwu, gruw, ubr, urgug, www, wgrwrrw, rruw, rbg, bbwu, brww, rbwbw, grgr, bgr, wgwwu, wur, gubu, rrubgg, wbrurbb, ugub, wrrr, gbbr, wwubu, uwwbuw, wuu, rgb, bbr, rbrbuwg, urwb, gg, grug, br, wwguuwb, wu, ruu, guuwrw, wgb, gbr, wgggug, rw, brggww, wrgrw, guggub, gbbrug, gbbrb, bugrg, bwr, gwwg, wwbbrggw, urwu, rgwr, rwb, rrub, ggb, wbwrrbw, wrub, wwg, ww, ggg, brugwrr, wbur, ubbbrw, uwugrg, buw, grg, rrr, bgwu, rbggg, rgr, wuwub, rg, guuwu, rrwwwrbr, rrg, gurwg, wburrwug, rwr, wbg, grwbr, bgwbwug, bwg, bru, rbwuug, gggg, gurb, bbb, ubwu, gugbr, buru, gbbg, brb, wgr, guwg, gurgrbug, wgwugwwu, uw, wrbbr, wgwugurr, uwww, urr, bgubug, bbgu, bbuugb, rwug, gurbb, bguw, ubbbub, bbwb, gugbgwb, bb, wrrg, ggr, wrbub, uu, wwbw, ub, uggw, ugbggrw, bur, uuuguru, bgwuu, gwr, uurrrw, rb, buwugrr, brwrrrgb, guu, bgur, wggur, wub, gbb, rr, wubw, uuwgww, bwurwur, gubgg, ubwg, grbr, rwgr, wrubw, grgwb, uuguu, rwgwb, bwrrgg, ubu, bwbwggrw, uwg, bgguu, wwu, grwgw, bwrr, uur, rwuww, bwbb, gwrr, gwgrww, rbgw, grub, wugu, grrwuwg, bburbb, wbgb, ubbr, gggu, wbu, rrbugrbu, gbbubrwg, gwwurw, grbb, gbugu, wguwrw, ubggbb, rbgbu, rwub, gb, wbrgr, wubwwb, brwg, bwwbur, gugwg, gru, rbrwurr, wrb, gwubug, ggbguu, bubg, uruub, wuw, gubbr, gu, uwrubg, wggrbug, uub, ggrb, rwu, ug, ugrggw, wgg, rrb, bbug, wrw, uubbbur, uwgb, bwgr, uru, bu, guuuguw, gwwu, uwb, uwwwb, w, rur, wguuw, guru, gwrrwwb, wwrww, rww, bbur, ruuwr, rbb, bugubgrr, ru, rbubwr, grr, bbrbu, gwww, uwwgw, wwwu, uwr, uguw, rbwrr, bguwg, rguw, guwgbbg, rub, rrur, bwwbgw, rrrg, bgggru, ggu, wrrggu, rug, uuburg, rbu, wggrbgb, brguurw, r, guwrr, bwbgrb, urwgbb, rwgur, urg, gbwrw, grb, gwburg, wbr, bwww, brwr, ugw, uwgu, uggwr, brw, wgu, gug, gbu, gwrur, ggbrb, rbubr, rrggurbw, rwrru, uug, urb, grbu, gbgug, bugg, gbw, rgu, rgurrw, gwbw, ggw, bgub, wwgugug, ugubwg, wuggr, ruw, rbr, bbwuwwgb, wg, ubw, rwwg, wggbr, urubb, wwb, bubr
|
||||
|
||||
ggrbbwbbwbuguwbuguwbbuwrbbbrwgurgwggbbwbguurb
|
||||
gruurruwgbwwrbbggwuwrwugwrguuwwrurugbbgubrurubrgwubg
|
||||
wguwwgbbggbbrbwurguububrwgbubwbwwuwgrgbuwgubg
|
||||
gbgrwggwbgwuwbgwgwgubwguwwwuwbwugbwgwrgrubg
|
||||
uubwgrwrwrruwrwggggwwrbgbbwgwwbwguwbrrwrgugbrbwrurggb
|
||||
rgruubburgubugugbwuguwururrbbgwuurwwbugburgrbbgbbgugwgbgg
|
||||
urggwuuwgubugurguwwrrbwuggbwbruuwbwugwwrwrguubbbbw
|
||||
bgrwuggburgggbubbgrwwrbuuwgwrrwuuurbugwgurubrwwrrugru
|
||||
rrbbrwgurwgrrgburbwurgbbuwrgrwwgrrgwrbrbrubbrwrg
|
||||
uururbwwwurbruwwwbubgbrugubrwubgwuuubggburbbu
|
||||
wrwrrgbrgwgububrgwggbguurgugwbuwgwwbggurbrw
|
||||
uugbgwuwbgwggrbwrwruwgrrwugbguwguuuuwurugwwbbruwuubg
|
||||
gwgrrwrguwgwbwgbuwuurgugugguwbrrrbguwrwubgwrgubggbburbu
|
||||
bbugbburwuggwrugrbgbbubbrrurbwbwburwrgubgwurgubg
|
||||
wuwubwguwuwwbbwgwugwugurgrbugurwbuubbuurrrrwwbgrgwgwgwgubg
|
||||
wurgwbwrgguwbbuuurrgrrgrgurgbrubbrgrgwbrrbgrurguurw
|
||||
brrburwwuwugbwrrrwruuwgrrrgruwrwgrbbgwwrruwwwbrbguuuww
|
||||
wgurrugrwbbrgubwrgbuwuubrggubbrwwwbwrggwggbrbg
|
||||
gurgrrwgruwbruwrbbbrugrgrrwrbbubgrbgbbgrwurwuguubgw
|
||||
rwrrruwrwwruugbgbbururbubgrrugguggbwgwgwguwwurb
|
||||
wuguguruwrurbwbwggrwuuwwrbwrbguuwwwruuwrguubgwbg
|
||||
wggbrgubrwrwgwubbgbuwgwggwgubrwurrrrrbggubg
|
||||
urgbbgggurgrbugbbubwbugrburgrurbgwbwuuuugbbuuuuub
|
||||
gwbuubrgwrwrguwbwubbruurgrrwwuwrrrrrwbbwuguugguwbrurrbbugw
|
||||
rrwuubbwruwuwbbbrrgbguwbguwgbruruubggbrbrwbwgbrbrbggu
|
||||
gbrruuwuwruwgwuubrwwwuugubwubwuwbwwrrgbrgwrr
|
||||
rwwrrbbgurgwuwgugwrgbgbgurwruwwwruugrbggwubwr
|
||||
uwbrrugrbgwwgwrguwgrbgwbrbbruugggwgggwwbwrwgr
|
||||
wguubgwuuwbrbgrgggrgbbguugrwgwgbrgugbrugbbuuurrruruuggrbr
|
||||
uwggbgrugruguggrrgwbwbguwwgugbgrbuuwugrubbgbuubg
|
||||
wbuwggugwruuurbwwrrrrbbwruugurwurrbggwgubg
|
||||
buwrbburrubggwurgburuwrurrgwgbuugrruugbbbgrgurw
|
||||
ubugwbrbwwrugrbwwrgwugubrrbbrwbbwbubugbububwwwubrrubwur
|
||||
gwgwwuwurgruubbwgrguuggubrrubgrwwwbwbwbbrrburbbbu
|
||||
rrbrwrwwrwrwbwbrbrgwwbrwwwrgwubwrrgbuugrugurrbug
|
||||
wurgrrbuurrbwwgwbguuuwgruwuubuwwgrrrwubgrbgw
|
||||
bbrwbrbbwgubbbwgubbruwrrbrbrrrgwbbruggbgrr
|
||||
buurbwrurgwrbugruuwrbbubbbubgbuwurugrbwrubuwbwwgb
|
||||
uwbwwgugruugbururbgwgrbbwruwrbruggbrrgbburggbwg
|
||||
grurbwwuwruwwbrrguwbwwrgrruuguubrrubrrrwruwwrrggbuugwu
|
||||
ubgrrwbwrrbbgrrgwuugrggbwgrrwrrrwbbwubrrrugugwubg
|
||||
urwbugwwwbrbbggwgwggwuwwggbuurrbuguubbrgubrwgrwubbrgubr
|
||||
wbbrgrugrgwuuwbubgwrgwrwuubgwwubuguugwgbgwuubg
|
||||
gwwrwbruwwgwbgwbgrggwwububurbbgggruurwwbgbbrugubbwuwb
|
||||
grggruggrgggbrubguwggruwbbbgrgruurrrgwguwuubrwbrrurgrubg
|
||||
wugbrrurrwbgurwgggwwgrurrbwubbuwwwburrwuggubgwwggbwggubgu
|
||||
bbuwrruwgrwuuwgrwrwgggbwrgrrbugubgururrwuubg
|
||||
bgwgbwgguwbugrrbwwugwuwgwbuwbwuwrgwbuwubggurbruwruuubr
|
||||
bwwrrggbuwwgrrgugruuurgrgrubrbwuuwbwgrubg
|
||||
brbrwrurruwurrwwbuwbggbuwwrwbwwruuwguubbuubgrbbuwwgbrrr
|
||||
rbwrwwrrurrrgrbuubburbrrruuurruurwwgbbguwrwgggu
|
||||
wuurbgwrggbuggbgwbubgbubgrrwbrbwgwwrrbgububrbr
|
||||
rgbugbrgrgwurbguuwburggwubggwrubwwggbbrrbbugbbrggrgwbbuugr
|
||||
brbubwwubwbwwwrrubwggwgwwgwrbwgwwurwbugrrguurbb
|
||||
grugwurwrwubbbbgubgbwrugrwwbgwburwwbrgwubu
|
||||
gurrgwbbbubbggrwrrrwbburwruurgrguwggrbwbuuwguugubrwbwb
|
||||
rrbgrrubuurwubrrbrrwguugrwrgrrguwggrgbrbgubububbrb
|
||||
wgrwgwgrgbguwgbrwwgrwbuuubwrgbwguwbbbbuguugrwwwburrbruuuubg
|
||||
uwgrrgrrbrwbrrbubggggubggbbgbbwbrugwrwrbrrwwgbwr
|
||||
uburgubgbbbwgwubggwuugwbbgruwubbugbbuurwruggrggwrugrbwubg
|
||||
rbguwurwwrbggrrgruuwubwgbbrgwwrgbrugguguuwwbbrggwbwurbgubg
|
||||
wrurwburbugrrubggubgbwwrbwbwggrwrrrwwuguwgguwrbubbubwrb
|
||||
ugrburuubbrbwgrbugrggwgbwuurgrwuwbuwrrbgubg
|
||||
wgubrbggbwubgruwgrgrwrrgrugubugrwgrurguwrgrububbbg
|
||||
bwgbbgwgurwgwugrbbgburgwbburrurubwbbruwgwbububgrgbrwgbuwubg
|
||||
wuwbuwrbuuggwggbbugbwbbuurgbgrrubbbrgggwrbwugguwubg
|
||||
wwbgbgugbgggugwrrwwguwbwubggbwgurgwurwrgwubg
|
||||
bwwubrrwurbgwubbuguuubrgrwrrwuwrugguuwwurubgw
|
||||
rrbbuwwrwbbruwwububbrbrwburrrrbubugwugbbgrwrw
|
||||
grrrbwgwugurrwuwwrrbwggubwuugbuwwwgurwgbuurubggbgw
|
||||
rwgbbgbrgubgugubwwbbruwggbwwwgbuwrrguuwwbubbrwgbgrwg
|
||||
urgrwrgbrgbggrurubwwrwrwgrbgubbruurbugubww
|
||||
gbburgbuggrwwgrgguugwbugwwrgurbwbugurubwbrrug
|
||||
bbruuuruurrgggrwburgbrurwurgrrrbrgwbuwrwrugurwwwbb
|
||||
wggguggbwguwrrrbwrgugrgwuwrubburbgbruubwuggbubuurgww
|
||||
ggrubgrggwgburgwurubuubugrgrbrwwwgbbwrbuwwwruwwwwrugwb
|
||||
rrrbugggrwuubwrbbgbgrwggbggwwwrwbrugruurwgrruuuubg
|
||||
grurwggwgrubrbbbubgwrbrrwgwugurubgrwwwguwwbrbubwbuuuwgwwbw
|
||||
uwrrguggwbrgbgrwbgguubgrrbuwurrwbubrggrwbgu
|
||||
wbwgrbgwgwrwgguwrrugbwburrwugbuwwugwwurrguuuwbbwburubgrbgw
|
||||
bbbrbrgwbwwgugggwwbggruwwbwurgwggbbbrurrwwbugrrgubg
|
||||
gbuuguugwrburruuwbbwbbwubrwbrgwwwurrbgwbbugwwbuwuwgruubg
|
||||
bwbgbwubugwgrwbubbugbwuwbubrrrwwggwbrggubwrbrbubgggw
|
||||
bbbggrurgggubbbbbburugrwggwwrwggbwuwbbgbggbrbuurugbwugbg
|
||||
ubgbwbguuwbrbruggwguburwwgbrwuwguwguwurbrbrrurww
|
||||
bruwrrurrwwwrbrubgrrguwwrrgggbbwrwwgbggrubg
|
||||
bbwugggwrwgurbrbgrwrwuurwwwruuugbgrrbuwbwbwgbgrwwburuubugg
|
||||
rgbgugwwwrubgggwwbuwrugwbbwwbwuwwbbgugbwburgrr
|
||||
rwrgrwbggwugguggrgurbugwbuggrrrrguwbgwubg
|
||||
urwruuwgrrwggwgrwuwgrggwbuwwbrbwuwwwrubg
|
||||
urwrbrrbrubbruwbguuwwggubuguwwggwwrugbuwwrbbwwgrrrbggb
|
||||
uurguwwgbrbbuwrrbrrgrbggrrurbwbrwugrwugruurbgbbu
|
||||
ggguuubrgwgbwuburubruuggrwwururubgwwbbubbrwbgwbubbwrg
|
||||
grwbrgwbbgbwwwruubgbwbbbrbgwurrrururrgurubugbrrrugwwbuwbw
|
||||
rgrubwgbwwgrbwburgwuubwbwwwbgrbbbwbbwbrwgbbrggrwubg
|
||||
uuggwggrgwugrgruurgbwrugwbrrbbbgwrbbgbrubg
|
||||
wurrguubwrbwuubgguuwrgrrugbgrrrwrbrwrrrgbuwwrbwrbgrgrgbwbu
|
||||
gubgbwubgbbbubwgrbubbgwrrguburururbgbbruuuruu
|
||||
ubwgbrwbwbgguwwruububgrrggrurruuuwwuwubuubgubwwgrubwwurggubg
|
||||
grwwwubuwurruububbwugubgggwrbgrguwwwugruruubgwbbrwuruubg
|
||||
ugrgbwwgbrwrwugwubbwuubburrrgrbbgruubgwug
|
||||
bgrgggwurrbggwubbrgrwbgwwwwwwbgwwbwrwbbrugwrububwgubg
|
||||
uugwwurrwggwrrbgwbrrgrrurugbgurggurubgbwwubbwrru
|
||||
bwgggbrubwguurrgwrggggbgrwwwuggbrwbgrgbgbrrugbwwwgbbrbwu
|
||||
bwgubrubrgbuwgbbuwgbwuurguwuuwwbruwuwbrrbuubg
|
||||
gbuwugubrbbburrwbrwuubrwwrwburwbrwguggugbrbwburww
|
||||
brguguururwgwwwbrwuwbgrrrgwwrguwwbuwrwguwgwwgwugwwugubg
|
||||
brubrwbwwrgwgrgguwwgrrbggbrwgbbwugbrgwggbbgbgrbwgr
|
||||
wrwgguwbrggwbgururwbrurggurwwrbuurwrrrrwburugggugbwrgubg
|
||||
grwwwggubgrrrwuwggbwrwgbrrbugrrbuguggwuruwugr
|
||||
wrwwwwrwubwuugurrbgugrwrbgrurgbgbubgbguuwubbwubg
|
||||
rgguruwrugrrrbwwuwwrwrrrgguwbgbggwwbuguguguwwgggbr
|
||||
wwwgwbbgbgbgbuwugwgrrgwbrwguguwgrggbwwbwwggbuuububgwbggugg
|
||||
ubwruwgbbwwuuwuurburgwgugwuggrbbgrgwguggwrgrggru
|
||||
rwrwguruubbgubrgubuwgrbwgbgbruwgurgwbbbgbrw
|
||||
wuggwrbrwwurwuuuruwwrwubwrgwrwwbrugruwbgwbgguuggbubwrrwguu
|
||||
ubwwuuwbggrwgbuwburuwrubgrgrbubgwrubwbwburubbbgu
|
||||
bggrbbuuuubrwwrrbgrggrgurugbuwbbbgbwubrrgu
|
||||
bgrwuggwwbbgubbwrggubrwwwrwwwrwgbuwbbgggwuurbugrg
|
||||
ggbgubrggbwgrgwbbbbbgugurguwggbrbbgrwuguwwruwbwwruuguww
|
||||
gbwbrrgwwggguwgguubwubwgrrrwrwbrgbrwbrbwbwuwrr
|
||||
uwbbwrrugbgrrbwwrwgwbggbwwrwggbruwururbwgrggrrggggwbbu
|
||||
uubbwuwbgbwgbugbugwrgurrgubwuguwrrbwbbbrgg
|
||||
bbwrwrwurubrgrbugbgwrgruubuurwurbggbbrguubg
|
||||
bbgrgbgwbbugwggwbrwubwwugwbwgrbubbubbbgwrururwwgubuuwg
|
||||
rwbwgwrbgbugrbwgburburbuuggwuguggrgrwwurggwuubgw
|
||||
uuuurubugrrbgwwrbuwwwbwuuwrgwrgbbwubggbwggwrgrbb
|
||||
ruuwugbgbrrgrwgwwwgwrbuggbgwubwrrbbrwrrwwgwbgrwrwbg
|
||||
wbbbwubwgrgwrwgwgwubwrwbwrwuuwbrwggwwrwrrugubgubg
|
||||
ubwbubugggggrrbggrwwrguubgrwrrbgwuubgbbuwwubuuwubgbuguubg
|
||||
rrwugrgurguguwggbwurwguuruwgwwrbwugbwrbbggbrrwgww
|
||||
ruguwurwgwbrwwgburubwuugwbgbgwwrurggbrubbrubwrugugugrwrg
|
||||
ggburgrubrbbbwgwuuwuugwuubrbuuwgrbwbrurbwuruu
|
||||
grbbbbrwuurguruurwwgbwrbburrbwugggwrwuruurgbrwwrwgb
|
||||
ruurgwgggwgbwrgrwbruuurgrbwrbgwuwbbrbggrbrrbgubbw
|
||||
gurgbwbggrwbrwbbgbwuwwbugrurrbuburbwbgbgrugr
|
||||
urrbgwugbuwbuwbwgrbrbugrbruwbwbwwwbugrrgrgbubbuurrrugwbwuubg
|
||||
ruuwgbgbbgrgwrgurgbbggwwuwrrrugwwbgruwugbwrgrruurbrbguu
|
||||
grbuurbrubrgggbbubrwgbwwgbgrbwubrurbgbuwgubgbwuguwrubgubgw
|
||||
bwbbrwwruurgugggbuwugwbuuwwrruurguwbuurwgbguurbgbrwbgurgubg
|
||||
rwggrwbruwgwrbuuwrruguwbbrrwwwrrgruurbwuwggrwbwgurwuubg
|
||||
gguruuguurugwuwuwuwurwwbgbgbuwrrwwgwugrbuubbbwrrggrubbw
|
||||
gggrbwgbggurgwrwrwgrurrrgguuwggbwwbrbbbrgwbrubrg
|
||||
ububggbgrbwbbrwbggwugbwrbrgwbrgrbwugwurgwrubg
|
||||
ubgugruruururwrwgguggbbgruwwruwuururbgwurwbrubgwgrw
|
||||
gbgrruwurrbbwbgwbuwggggbwuwwuubrbwurrbrwrrrubg
|
||||
rgwgrubrwbrwgggruwwbrwrubwwwrwbggwuugrruuwugbrg
|
||||
ubgwrrgbrgbbrgwbbwubururwbwuwwwugwwwrgbbrbrwgrgrbbur
|
||||
wbgbwgubbrbuwgrubbbgrwgwrgguburrgbwgbbwrgbgbwwwrwbubr
|
||||
wurubbubrgwwgwrbwrurrbwgbuugugwbgwbgubbubwuwbwbugbgrwurrg
|
||||
wrgggrguwgrwbbrgbrbbwwuwggrggburugwwgwuguburbwugrrgbburw
|
||||
rrrruwugurugwrggbgggwrgwbuwuguwbubbwgrbwgr
|
||||
rbwbbwbbwgbwggggwrbruwbugrgugubbgwrrrugubg
|
||||
rbrrbrgurwbgurwbgrwuwgrwwgbbrgurgggrwbuguw
|
||||
gbbgubwbguururbgrwuwrwbbbgwuurbbuwgwwruwwgubgwwbg
|
||||
buwrgbgggrruugugbwuruwgwgwwurwugbbbbbrwuwwwbbugubrgrgu
|
||||
gwbwrubugbrrwurwgrwwwwbwbbrgwubbguurwguuwrrb
|
||||
rwugguuubbbrrgurrbbwrrwuurrggrruwururrrwwgububwgurubg
|
||||
bbgbbrbgrwrgwuuwrrwubbuwuwrwuwrburggwwburwbugubgrr
|
||||
uurwbwubwbgrruwwbbwgwgrrbrubrrbubwrwgubg
|
||||
rrrgwguwwrwugbggrbururbgrrgugrbgbwugbgrwubg
|
||||
gbuuwbrubgrrwrgwbwbgbrgbuuubrugwggwurrggbbwuwwgbwwbbuugubg
|
||||
bbwbgwbwrrwgguwbrwgrgbbubwubwgwgrwguwurrrwburbgugbburuwubg
|
||||
ggbuubrwrwurwgwbwburwwwgwwwrgguwgurrggbwurrgwgw
|
||||
grrwrubwgbbrwburgrguurgrurwbwbrbuugrwuwrbwurubgwgu
|
||||
brwwwrruggbbuwrbbgrugrbwgbwwwrbgbwgburrwrurgubg
|
||||
grbwugwrugrwrwrgrrbruguwugggbrgbrwbwruwgrgguugbgwbgrur
|
||||
urwgwwrgurrubugwwuwrbrrrbwwrrbwuuwuuwuwururuguruwbwurgr
|
||||
urgrwuwuwbbrbwrbuurbbwbbwggbruwruwburgrwgwuwrruuubg
|
||||
ruuwwrwwwgrrwwgwubwbuwgwubbggrgurruwgwrwugb
|
||||
urbbgggrrrrrrrrwwbrrbgggurgwwugburwbuuuwwwrurwrrbubwrrwrw
|
||||
rwbgrbbwubgbuwrrgbbguwbbrbrwbgrbuwwwwugbugwrwurwgwubg
|
||||
ruwbuggwgbuuburwburgwgurrwrggrrgurrwburgbwbgr
|
||||
bwwgwggrgrbbggbgrrwbggugwbgrgbbrbwbbrgrbbuubg
|
||||
gggbbwbwgbbuubwrbggburrbgwwruuguruuguubrwrwwuubgw
|
||||
bwwwbuwrwrwugubrwbgwrwrguubwrugurrgggubg
|
||||
grwbuwwburbwbwurguuggrruuuurwwurggbgrbuwwrgr
|
||||
wubbwuggrgwbrwgbwrgwwwwuubuguuwbgruuwgrwgbuuwrwwurubgwwgw
|
||||
bbrwbwuwgwwbwwrrruwwbwwuwrguuuuuwrwurbbbbuuugurgugw
|
||||
wggubgbuubbuurburruwurbgwbwubbgrgwgrwwbbburggbu
|
||||
buurrrwbgguuurbbbgwrgggggwuwruwwbgguggbwbrrrgrggwg
|
||||
gwbwrgbrburbguwbgrwuwgburgbrrubrubugbrugubg
|
||||
rwgrgwwubguggrwubggbrrurwbburbuwrrbuwbgrbgrruwgrrwwubg
|
||||
wbwwgwrgguguwrrgggbwwbrrgbububwwwugururrrbr
|
||||
rbgurbrbgwrbgrwuwruguubgwuwbgwguwuwrbruwbbuwubbu
|
||||
bgrgbwgbrwuruuugrrbugrburburgrbgubbrwbubwgubg
|
||||
ggruruwrrwwwrbrgbwgwbuubgugguwgbuuwggrwgbgburbgwbr
|
||||
wrgrrgrwgwbbbrgugguwbwuubbwbruuwwrbgggugwwgbbruugr
|
||||
ggwwbbwugrgbgwbbbuwwwwuggrgguuwggrrbbwbugwgug
|
||||
wrugrwwbwgbwruwuwwubugubggbuuwgbwgrurbgbuwguurrggrrbwwwguubg
|
||||
grwurrbbuuuwrubbrwrubrbbubgugbugbwrgwggurwubg
|
||||
gbggwurwgguwwurrubrgwbrbbwgbbrugburgbgrwrwguuw
|
||||
rrwbwuuuugwrbwuwgbbbwbwwwrgrwrurbgrrgwrbwugbrrbrwubgr
|
||||
uuwwbgguugrbrwgbwrrbbrwrgbubgwrggwwuurrgbwrbgwuugwruuwwbgr
|
||||
wgrurgbugwwrrwrrrgbbggrwuruuwbrrgrrgubrrubg
|
||||
uuwrruubrbbgururrrbbrwruubbwwgbwrgwrbuubgw
|
||||
urwrggbbgbgrwgwugurrrgbuuwbbwrgrwburrrbugwggbuwgbw
|
||||
urrggbwggggwrgrbgbrbbgrgbgubrggbgbrbwggwuurubg
|
||||
wwbrbwbrrgwuuugrgwbgrwwgwuwuuwggwbbwggugwrbggwgrugrbubgw
|
||||
bggggurbgugruwuggwuruububwugrbbubgrwurbbrubgw
|
||||
bbwwgguwwrggwrwbwbbuwwugugrrggurbwwrgggbwuwbuburubg
|
||||
rwgbgrubrrbuwwbbbbbggwruwubgbgguwuwwwgwggbubrr
|
||||
rurwgwbwuugwruguwbwuururgurguggbugwwuguuwrwu
|
||||
bwrbwruwubbgwguwgrwuubuwgwugwwgrbrrubgwbgbrbwugwbuwwwb
|
||||
rwgbgrugggbgubugwbbbwggbguugwggrbbbrubwbubgrbb
|
||||
rgwwrbrbrwrgrbgbwwuwwgwrbuwrgbrrurugwburrggrwuruub
|
||||
grwbbbubbuububbrrwubgugrgrwruuwrwubrruggbuguubg
|
||||
bbrrbrbrwbrgwgwuwguuuubbruwwbuuwuuwgwugbgur
|
||||
uuguwbururbggrgrugbrubgggrrwwuugwgbrubwgbgwwgurr
|
||||
rgwrgbbwbwwruggguwbrugwbrrwwbwrgwbwrgrrbuuuggbuubgw
|
||||
wbbbguwbuuugrurggwwbgbuugwwrguggurrrbbbrbgbrb
|
||||
wrbuuuwrbgwuugubguggrggbgbuguurbrrbrgbrurbrbbuugrw
|
||||
bgubwwgrbwwwwwbrrrwgbwwugbuwgwruugrgbbuwwgrr
|
||||
urrggurbwwrurbwbwrbwwwwuurugguwrggwwrrwgbwbrrruru
|
||||
rwbgwguwurrurbwuwrubbwwbubwwwwbrggugubgw
|
||||
burgrurbrugburgrbgruwggruuuwgrgwuwrgwurrrrurbwrwwwgbuwubbb
|
||||
rruwuwgrubrbubugrwbwuuugwuwubbgwrbgwwgubrurwbgwbwwgwgwbwuu
|
||||
wgrbggrrwbbgurwurwrwrggbwwrwugwrwuugwgwubrubgwbguuwbwwgbu
|
||||
guuwrrggbrrugbrguggrbubrggbwururwbrgrwrbwb
|
||||
gwgggggbgrgbbbbuurugwrruuuwrbwrggguwruggwgbbugu
|
||||
rguwrwrrubbruwruubwggbuwwgbgggguwugwwubwrgwwrubrg
|
||||
brggwbbbubbrrrwrbwrwbgubbugbbgwgwbrwbggurbbwuubbgrggrbbr
|
||||
wuuuurbbuwgubwbwrrwbbgbuugrgwgwuburubuuwbw
|
||||
ubgwrruruwbwgurwrrrrrbrrbrwuubwrwwbrwwrgww
|
||||
grgbguubrugrgbgggwgrwgrguwbubbwbugrburrugrwbwbgurubgw
|
||||
rgguwgruburwgbguggbwgrgggrubgwgrguubwubgw
|
||||
uurubgbbuubbguwrgrwwgguwgbrrwguggggwurbwubg
|
||||
uguguruuuugbgwgwbuwgbrbrwrwbubbuubugrwwbbgubg
|
||||
guuwwruugbggwubrrgrbuugbwuwggwrggwgwuurwbgbwbuwbguurbrbggu
|
||||
bbubwrgbggrwbbwguurrrwrugbugbruwruwwbugrwbugbbgrugwrwr
|
||||
guwuuwurrububbgrwugruuuguruwbrbubgrrubgggbu
|
||||
wrburuguguburrbuuwbgurbubwruubbuurgubrugrbgubub
|
||||
wurbrruurgrrruggbbrbruuugbbgggurbgbgwbwbrbugubg
|
||||
rwrwwrurrwgwgbrubrbwwrrgwurruwgwguuguubg
|
||||
uuwwwgbgwuuruwrubrbgrbruggrggbwruurgguguwgbrrbrbwwuubg
|
||||
uggugggbwrgugwrgwubwrwgrubggburgggwrbgbgbugruwugg
|
||||
uggbugwwbggrbbuggubrggwrwwurbbuwugwruuubgggbww
|
||||
rrrugrwrrrgwgbuguwgwugrbuguubwgrwgwbrgbbwguwuuubgwb
|
||||
uwwrubgrrbbugwgwbgbrgurgrbwbgrwbwrgwruuubgwrrbuu
|
||||
gwrrrwrrggwrrwgbwruwubuwwbgubgwgbwgggwuwugrgwruurwgwuubg
|
||||
grrwrbugrbubuwruububbrgbuwrubrgbugrruurgwgrrgubg
|
||||
gurbbbruuuuwwbbwgrgrwrrwuwubbbgburubwruwuuugwrgbgg
|
||||
urggrgbwbwbgrgrrbrbwguuwbuwwbggrgbbbgggwuubwbw
|
||||
ubugrubuugugwwrgwrrrbwwgbrrbruuggguugrugwrurrgrbbguwuwgrg
|
||||
bubrgbbrwguuwbbgwbbbwbrgrbbbwuwrbubgrwwgbwbrubg
|
||||
guwwurwgbwgbrurwuuruwbbbguuurbwuwubwbrrgrbwgwugrubrwrwbuu
|
||||
rrgruubrurwurwguuwbgubruwugbuwwurrbwwuwrwwrrugrubguwubgw
|
||||
ugurrrwbguggbgwggwurgggrgggrgbwuwgrgwrbugr
|
||||
uwbguwugrgbgwwbugbbugubgrrgwggrgwguwgugggbu
|
||||
rgbgwuwuwrrwbggrbuuwrwbrwurrrrrrwrgrgrburbu
|
||||
gbwurbbbuuwugbwwgubruugwubbbbwrbwrwrrwggwgwgwbuubg
|
||||
wbuggbrugrrbugbbwrbwgbbgbbgrgwwurburuurbuuuubrwgruwgrrbrubg
|
||||
wrwggwurggbuwrwbgruugguwbguuurgwuwwwbbruuu
|
||||
wwrurwrrwbrbwwbrgguugbugbuwwwwwwrurgbrgguguuuubg
|
||||
wwubbbrubgrbrrggburgwwgugbggggburwbguguwwburbwbbgwubbur
|
||||
gbubruwrwuwubbrgwuburwrgubbgbuwugruubbwrgrwubg
|
||||
ugrubrugwbgbbgurrbwuwurgwggrwuwbbbuuuwugbbuugrggbgb
|
||||
gwggwgwgrwubgubrbrrubrugwrbgrgbgwbuwrburrrurbgrrubgw
|
||||
wgrrggwwubgurwrrruuwbwrrgwwgwruugburbguuubruwuwbrggbrbb
|
||||
bbrwguwgwgwbgurbruruubrbbgrbrgburguwuwggwwurrrgu
|
||||
wrrbgrgguwugwwbgurgwgbuwbwguwbwrruwwrbugwrruuwbbwurbwrru
|
||||
uwuwurrwrbruwggrbbrrbwubugrbgrrurgrggwrwgrubbb
|
||||
ubugrbbubgwgggrurbburwbguuugwguwgwguwurrgwuwwbugrrburb
|
||||
ggrwwgrurwbrrbbbbgrbwggbwrbgurbbuurwwbbwggugww
|
||||
wbuurbbbrbgruuggburrguubgrrgurbubgwuuurubrr
|
||||
wgrwbwwwbrurgurrgbruggwwugwubgubububbbuuuuuubrgbwuwuurbw
|
||||
bbgbggrbbburgubbruuwgggwrubuuwurgrubrwgbrggubg
|
||||
rbgrbwubwurwbwwurbrruuurbrguwwwrrbugrbubrwugrwb
|
||||
wrugurgwuwurrbrwugruguggwbwwwuwwwrrrwwubg
|
||||
gbwuggbbwbbuububruburrrwggwbwbwgrbgwgwguwrubuururbwuubgwub
|
||||
gbubwwwrruwwubruugrbgbgwrwrrwruwwuggbrburbguggubuugubg
|
||||
wgbwgwrurwwurwbrububrwbrrgguwwwbwrrbruugrrru
|
||||
ubrrbrugbwuwubgbbguwrwugggbrgrruuwwuwubbgrwurubg
|
||||
uruuuuuuwggrbgggugugbwuuurwgruwgwugwrbgubbrrgwubg
|
||||
brruurbgbburbrugwuuuwbwrurbubbbubgrgrwwurgbugwgwgrugwuuwbb
|
||||
gurgwuubwrrrwbuguwuwgrbrrubrwgurrrugurbrrrrrbrwwrbugrg
|
||||
wbwubwwuugrrwrbggurrgbbuwwgrwuguggbubgrrgbrbrbbgwbrubg
|
||||
rrwubrwrrbgrruwrbbgrwrwuugggwgubgwuwbgwgbrwwgbgbgbgwbgrr
|
||||
bbwggbbwuwwgbwuwwuuguburgwbrgbrwwruurwbuwrrbuwgbrw
|
||||
rbgrbuwbuwbbrgrrurrbuwbrwrrrbruggguuuubbrbguru
|
||||
ugwwubwgwgwbbbbguwbbuggbuwuburuuwwwwbwwrggwgrruwwwwbbubu
|
||||
brrrrwugbuwwruwbwgbrgwwgwbbbrwrrrgbgwbbbgbubgwrurgrubg
|
||||
bwrwrrwwbwguwburrrrgwbbrgubrubbbwuwrbrwuwburrugwwrwwrbbruu
|
||||
gurrwuugurbuubrgbwubbgwubbbbuwruugrrbgurbggrrrguu
|
||||
gwrwuuruggwbgurwwgwrwuuwwbgggbrwbugbrrgwbgrwrruuuurwrg
|
||||
grggwgwgbrrbbwbrubgbrggubbbbgbrgbwwbwbrgubggbgbubgw
|
||||
ugbgubrbrbrggwguwwwrgbgruggurgwgrrugbbbuuubg
|
||||
gubwugguwrbuggwburrrwguwubbgrubbuwruubrgrgrugrwrrbrbbugwu
|
||||
rwgwwgubggurrbwrwrguwrrbrggrggwwgwwwruuwgburrrrbuugbg
|
||||
wwrwurwggggrrrbbbbruurgguwwrrurugurgubrbwgubgwgrbwbguubg
|
||||
rwguurwrrwwrrwbrbrugwbgrbggbbbuwbrrrgbuggwwwuubg
|
||||
wubwbgggubbbgguwurwggwbwuwbwwubwguurbwrruwwrubg
|
||||
bbuugrggbbwubgurwbwrwwuwbwbggurwguggwbwubg
|
||||
bgrugwuwbgwwrrwwuwubrwurwbuurwwgbrgwwggrwgwuwububwbbuubg
|
||||
bubrggwuugrgrwgbruugbgrwbgbbbwbwwurrrgwgwwbuggguu
|
||||
ubrbwbururbrgurgugrgurbwbbwwgrugrbubrugbbbbburbrurgrwgwgu
|
||||
wuwubuwbbugbgrrwrgbgbrbbugguwbbwwwgwugwwurwwuugbwgg
|
||||
bubwbgggwugrwgrrrrrrrrugguwwrrbwrrggbruwuurwguuwwgggwwwrgw
|
||||
wubbbuuwwbbwubgbrgurbggggurwrrbgbrwwuggwubgw
|
||||
wbubuwuuwwbuwwbwrbrggwwbbuwggbwuuwwrgrbwurguwgbrrwwubgw
|
||||
gwrwggrubwguubwuggugwrrwgbrwrrrwbubgwuwbbubww
|
||||
gguwuugugbuubrwbrrrbrrrubwburrgwgwgwbgurbgbrrwbrgr
|
||||
bbwbbgbbwwuwbrugbwruggbugwbwgurgwgggbrwgug
|
||||
ubruuuuwrggbrggbugbbwwguwguwuggbbwguuburugrugbrgruuwbbbwubg
|
||||
wuggrwgwbrgwwbbwbgwrbrwgurwwgbbwrwbgubwrugggbrgrbbrbgrrgubg
|
||||
rbwrubrgwrgrwugurwbguuugbrbbbwubbwbbguwbrrbbbwrrwg
|
||||
brubruurbwguwrrwuwrugbuwwwgbrrgubwwgrggwgbru
|
||||
rrbggwrbbwbbrwrrgrgbgubggbrwwrrbburwwbrwuwbrbbwbrgw
|
||||
wrggruwrwwwwwwugbrgwgggurubbrbbgguggrwbgugugrrruwu
|
||||
gggwurggwwgurugububrbbrurgwwrgrwwbwubwubrwgwrubg
|
||||
uwbbwgrrrbrwbrubuuwwguwguwgubbgruruguwbwubg
|
||||
bwrrgburgwguuurwggwrwgrubbbuwruwbrgwbuuwubug
|
||||
ugurrwbgbuwgbuugrbwgugwguwwbrugwbbuwurugugbuuugbu
|
||||
bgrbwbbuwbrrgggwugwgwrbbuwbugubgrruurubg
|
||||
ggbrrgubbgurwwrgrgbbuggwrgwruguggbbrrrrbbrbwurwr
|
||||
ggbgbubuubbgwgrrrbwwgbugrgrwbubburgbuuubgw
|
||||
ruugggwrbbgbbuuburrgwbwwgbwgurbrbbggbgubgw
|
||||
guwrbugwuubgubggwgwbruugrwbbwgwrwurrbggrrgwub
|
||||
bubwgbrguugrwwgbwrwbuuurwrwrgbbuguwwbgbwubg
|
||||
brubuuwgbgwgrggruruwrrubwbuuwwuubbrrrwbuurwuruuur
|
||||
grgurgggwggruwuwrgrbgguggrwrbgbugwbuuubg
|
||||
bwuuwgbrbwgwurrrwbrwwwbuwugbrrggbbgbuwgrubrugubg
|
||||
wbbbwuwububuuuwbwgwrrbuurbwbrbgwuuwuggwubrguuwggguwuubwggr
|
||||
uurgwgbgwrwwbguubuurwwrwurbuubwbwgwuurwwwwubgwrugrgru
|
||||
rgwgbbbgguuwuugugwbrurbwbbbubwurwubggwuurggrugwbgb
|
||||
gwgbwuwwgwuugruugrruwgbwwgwugbuwbrrbbgwwuwgwbgwugwbbrrguw
|
||||
grrbbuuggrugbgbbbgbrgubuwrrrwrbwwwguwwgbgwgggwug
|
||||
wwwrwgbgruubuwbrwuuuwggubwbrgrrguuuwbuwugbrgrbubrbrubg
|
||||
ruwbrwugbbrggwguurgbrugrgbruuuwugugwurruuwbrbwggubg
|
||||
uuuwuguwuwrubgbwbgurguubwwrbwrrgbrgrrbbgrrrgwgrur
|
||||
uwubuubwrggbwwrugrbwrwwruuwbrrbuubbgrruwbg
|
||||
buuwwwggwbuwwwwgwbwbguwgrwrrgbwuubwgurrguubwwwub
|
||||
gguurgrurbrgwwrwgugbgurbwguugrgwrrwbruugrrubggw
|
||||
rbuuwbwgwrrubbrbgrrrugggrrubgbbrbwgbuuurrubg
|
||||
rbburbbwbwurrrbbggwwgwbgwggbrbubwgrugurbbbrgubwwuwwu
|
||||
guwrbgbwwuwbbuwrwgurbgwrbwbwburwwggwruruburguw
|
||||
ugubbggbwbubbgrwuubruwggbbwrgwgbguubbwgwwggrrburuurwrgguuubg
|
||||
wggburwgrgrwuugrggburubrbwbbbwggrwbwuwguuwbr
|
||||
burrbuwuwwwbrrwguwggubbrbrgrrguwuwwuuuwwbgguuuwubg
|
||||
wrbbwubrrugrrbruruuubuuwbruruwburrwguwggbwwuurrgwugbruubgw
|
||||
gggwbubwwrwbugwuwwuuubgwguwbubgwrbuuwbwubbbrbrugbgbur
|
||||
wrgbruuguubgwbuwrrbubwwggrrrrbugugggbrrurrrgggbbgrguwrgwb
|
||||
gugbrwurgruwgrrwgbruuuuwburbgwwwwwubgbrgwwrrrbgubg
|
||||
wgwurwwbuwbggwgugrbwuruwuwuururbrrgwrbugugrrugubg
|
||||
wbgwgrwwuubrurwwwuwwuuwrwuwuburwuwwuubgggwuuuwubgubg
|
||||
rwgwguwuubwuwgwggrwgwrrbbggrwruuggrbubrrgbuugwuruubgrgr
|
||||
rbububguururbwrurbrubbubuuubguwbrbuugrrbgwwgww
|
||||
grubwubrgwurubbwbgwgubguguuwbgruwubwwrbuurwgurgbr
|
||||
uubwgwwuubgggbgbruwuguuwbwurguuguwbgguuwwrb
|
||||
bwwgbubrwwbugbrrwguwugruwwgbwbururbrbgrubg
|
||||
ugugggbggbgrwwugrggbwbuwggguugububuwbubbubuwgubgw
|
||||
ugrubgbbuuuwgbuurbgwbwubguggrurgwrwgbrrgrbruwrgw
|
||||
rrggurwrrwugguuwrwuruuguggrbwwbrrgwwbrgubgw
|
||||
rbrbgburgbuuruuugbrggbwgrubrugrbwruuwwwwrgrwwr
|
||||
rrggbrgrwrbgrbrrwrgwrwwwwuubrgwwggubbwgugrwrurbgrrruwrb
|
||||
rrbrwrrrruurgbwbggrrwwgubrwgggwwwugrwwubgwruguwugwbbbug
|
||||
rgbgrwgbbbguggwgwbwugbbbwgbgbrgguurgbbbugrubuwrrgwubw
|
||||
bggwwrbuurgwwwbrbggggbgbbgwwgwwrbwbbrwbgbbrrbgrgwwbbggbwuw
|
||||
rwururuuggwbugguwgwgrbubrgbrrbruguuwbbbuurg
|
||||
gbbbrbgbwrrrgwrrwgrrrbubrggrwrgrgburrrruwwurw
|
||||
guguugwbrgwugwwwbuwrrbugurbbbruubggwuuwguguwu
|
||||
uwbggwbururwuwbrggbuwrwubuurbrugrurruwurubuggbbwwgww
|
||||
rruuububwrruugrurubbbwwugrbruggbrugrrwwgwrguwbburubwwbwbrubg
|
||||
bbwrggbgrrbuwwggwgwbubwgbwugwgbrurgbwbbbbbuuuubw
|
||||
gbgbgwrrugggubgrrubwguwuuwwwwguubwggwuwgugwuuubu
|
||||
rguuubuwbrbrwwgwggbugbubwrrruggwrwuuguwwggugrrbgrbrwwuww
|
||||
rrgrggruggbgwgggbrgurggurburrurbuburbgrgbbubrwgru
|
||||
gburrbwbrbuwugwwbbrggwbwwgrbbrwwuwgubbuwbwr
|
||||
bgurwuggrwuwwwgrrgrwwgurbrbgbruggrbwbgurwbwwwg
|
||||
bgbbgrubbruggrgrguwrbbgbwguwwubwbrrwwubgw
|
||||
bgurguwrbbrrrbgrubrwrwgwggbbggbbubgrguggbwggbbugbgbwgrwuw
|
||||
urugbbrbbbwugruwrwrggbgwbwwrwgrugwugbguwubgb
|
||||
rgurrwbwwugggbgwubbwbwwwruguggwruuwrwrurbbrwwggbrrbgubbwubg
|
||||
ugrgwruuruuggwrrurwwwguwwuggrwwgbruburbggbrb
|
||||
uurgbgbgwgbwgrburrurrrruruurrubwbgurbwubguwgubwbwrbgrr
|
||||
grbrggbbbgwbbuwwrbuwuruwwrgbuguwgbgrgrgrwwbwgrbw
|
||||
wwruburuwggbrwbruwurrrgbbwwrwgguruwbrwubbr
|
||||
bbwburbbrbwubrbwuruugrrwwgbubgugggrwugrbgurgwwgubg
|
||||
ugbwwbrgubrrrurwgbgubrrbbrbggwburrwuuuuruwgurubgwgubg
|
||||
wbwubrbgbrbgugrrguggwrrgwbugrwubgwgrrgbgrurbwrbrububwwgwubg
|
||||
rrububggbrwbrubwubuuwwrbubrbuggwrbubgwwururrgwwurwr
|
||||
wbrbrgbrbgubguugwruwrrgrwgguurugbguwubbuubwggrrggubwbb
|
||||
rguuwbrururbwbubggugbwbwuwgggruubwbuubwrrrrug
|
||||
ruwwggggwruwrurwgrguwwgurbgwrgwuuwrbrrwbgbuubrwubgbg
|
||||
rugrgrwgbbrgwrggguggbwrugrrrbguwwbguwrbwwwrwugbgwwrwbr
|
||||
wwubggbwubgrubwrbrgbrbwgbrggbwggggwggggguggrbr
|
||||
bbuwgwgbbuwbuburgwgbgggugrgrrbrgurrguurugbbuurubggbg
|
||||
rruwbwwwgurbgugbubwwwuwwuwbururgwwrrwubg
|
||||
ubgbbuubwbwgrbbrbuwwuuwubrgugurbgruwurwwgu
|
||||
grbwbubbrrruuuuuwuwrwugwuwgbubwbbwrbwbbubbg
|
||||
urgrugbgbruwwburwrgrburbubrbbuwrrgwgbgrubg
|
||||
ggububgubgwgbgguwrbrubwwburugwubuuwrgubg
|
||||
brgwuugggbbuwbuuuwruwubrgguuugrggbwbwwrbugrwbguurugwgbu
|
||||
wwwggugwwbbbgwgururugbgrwubgbwrwrggrubgrgwbrbrr
|
||||
ggburgrrbrbwbrruwwwrwurgbwgrbrgguwrgubbubwwubg
|
||||
buubugggwrbwrbbbgrbbgwwwwgbrrbbugggggbgguwbruwurwbrwbrgw
|
||||
rbuurwgrwuuuwrggurbubbgbrgwrbwgrwbbuubgrrbwbwubruubg
|
||||
wgwwbrrrgwbuubwgwgubwwggurggrrwugbugurrbugwbwrubbrgurbbgw
|
||||
ugwguuugbrggggurubrbbgbrrwwbbwurrruwrugruwuwubwu
|
||||
urrbbgwwbburrbrwbwggwrbbwbgwwbruwubrbwbgubbgwrgu
|
@ -1,141 +0,0 @@
|
||||
#############################################################################################################################################
|
||||
#.......#.........#.....#.....#...#...###...###.....###...#...###.....#.....#.......#.......#.....#...#####.....#...#...#...#...............#
|
||||
#.#####.#.#######.#.###.#.###.#.#.#.#.###.#.###.###.###.#.#.#.###.###.#.###.#.#####.#.#####.#.###.#.#.#####.###.#.#.#.#.#.#.#.#############.#
|
||||
#...#...#.......#.#...#.#...#.#.#...#...#.#...#...#.....#.#.#...#...#.#...#.#.....#.#...#...#.#...#.#...#...#...#.#...#.#.#.#...#...........#
|
||||
###.#.#########.#.###.#.###.#.#.#######.#.###.###.#######.#.###.###.#.###.#.#####.#.###.#.###.#.###.###.#.###.###.#####.#.#.###.#.###########
|
||||
#...#.....#.....#.#...#.#...#.#.......#.#.#...###.#.......#.#...#...#.....#.......#...#.#...#.#...#.#...#...#.###.....#...#...#.#...........#
|
||||
#.#######.#.#####.#.###.#.###.#######.#.#.#.#####.#.#######.#.###.###################.#.###.#.###.#.#.#####.#.#######.#######.#.###########.#
|
||||
#...#.....#.....#.#.#...#...#...#...#.#...#...#...#.......#.#...#...........#.......#...#...#.#...#.#...#...#...#...#.#.......#.#.........#.#
|
||||
###.#.#########.#.#.#.#####.###.#.#.#.#######.#.#########.#.###.###########.#.#####.#####.###.#.###.###.#.#####.#.#.#.#.#######.#.#######.#.#
|
||||
###.#.###.....#.#.#.#.#...#.#...#.#.#...#.....#.....#.....#.#...#...###...#...#...#.#.....#...#...#.#...#...#...#.#.#.#.###...#.#.#.....#.#.#
|
||||
###.#.###.###.#.#.#.#.#.#.#.#.###.#.###.#.#########.#.#####.#.###.#.###.#.#####.#.#.#.#####.#####.#.#.#####.#.###.#.#.#.###.#.#.#.#.###.#.#.#
|
||||
#...#...#...#.#.#.#.#.#.#...#.#...#.....#...###.....#...#...#...#.#.#...#.###...#...#...###.....#.#.#.#.....#...#.#.#.#.....#...#...#...#...#
|
||||
#.#####.###.#.#.#.#.#.#.#####.#.###########.###.#######.#.#####.#.#.#.###.###.#########.#######.#.#.#.#.#######.#.#.#.###############.#######
|
||||
#.....#.....#...#.#.#.#.....#.#...........#...#.#.....#.#.....#.#.#.#.#...#...#.......#.#...###.#.#.#.#.....#...#.#...#.............#.......#
|
||||
#####.###########.#.#.#####.#.###########.###.#.#.###.#.#####.#.#.#.#.#.###.###.#####.#.#.#.###.#.#.#.#####.#.###.#####.###########.#######.#
|
||||
#...#.........#...#.#.#...#.#...#...#...#.#...#.#...#...#.....#.#.#...#.###...#.#.....#...#...#.#.#.#.....#.#.###.#...#...........#...#.....#
|
||||
#.#.#########.#.###.#.#.#.#.###.#.#.#.#.#.#.###.###.#####.#####.#.#####.#####.#.#.###########.#.#.#.#####.#.#.###.#.#.###########.###.#.#####
|
||||
#.#...........#...#.#.#.#.#...#...#.#.#.#.#.....#...#...#...#...#...#...#...#...#...#.....#...#.#...#.....#.#...#.#.#.......#...#...#.#.....#
|
||||
#.###############.#.#.#.#.###.#####.#.#.#.#######.###.#.###.#.#####.#.###.#.#######.#.###.#.###.#####.#####.###.#.#.#######.#.#.###.#.#####.#
|
||||
#...#.....#.....#...#...#...#.....#.#.#.#.#.......#...#.....#...#...#...#.#...#...#.#...#...###.....#.#...#...#.#.#.#...###.#.#.#...#.......#
|
||||
###.#.###.#.###.###########.#####.#.#.#.#.#.#######.###########.#.#####.#.###.#.#.#.###.###########.#.#.#.###.#.#.#.#.#.###.#.#.#.###########
|
||||
###...###...#...#...#...#...#...#.#.#.#.#.#...#...#.........#...#.....#.#.#...#.#...#...#...#...#...#...#.....#...#...#...#.#.#...#...#...###
|
||||
#############.###.#.#.#.#.###.#.#.#.#.#.#.###.#.#.#########.#.#######.#.#.#.###.#####.###.#.#.#.#.#######################.#.#.#####.#.#.#.###
|
||||
#.............#...#...#.#...#.#.#.#.#.#.#.#...#.#.#...###...#.#...#...#...#...#...#...#...#.#.#.#.....#.........#.........#.#.....#.#.#.#...#
|
||||
#.#############.#######.###.#.#.#.#.#.#.#.#.###.#.#.#.###.###.#.#.#.#########.###.#.###.###.#.#.#####.#.#######.#.#########.#####.#.#.#.###.#
|
||||
#.#.............###...#...#.#.#...#...#...#.....#.#.#.#...#...#.#.#...#.......#...#...#.#...#.#.#...#.#.......#.#.......###.......#.#.#.#...#
|
||||
#.#.###############.#.###.#.#.###################.#.#.#.###.###.#.###.#.#######.#####.#.#.###.#.#.#.#.#######.#.#######.###########.#.#.#.###
|
||||
#...#...#...........#.....#...#...#...#...#.......#.#.#...#...#.#.#...#.#.....#.....#.#.#...#.#.#.#...#.......#...#...#.......#.....#...#...#
|
||||
#####.#.#.#####################.#.#.#.#.#.#.#######.#.###.###.#.#.#.###.#.###.#####.#.#.###.#.#.#.#####.#########.#.#.#######.#.###########.#
|
||||
#...#.#.#.........#.......#.....#...#...#.#.#...###.#.#...#...#.#.#...#...#...#.....#.#...#.#.#.#.#...#...###...#...#.........#...#.....#...#
|
||||
#.#.#.#.#########.#.#####.#.#############.#.#.#.###.#.#.###.###.#.###.#####.###.#####.###.#.#.#.#.#.#.###.###.#.#################.#.###.#.###
|
||||
#.#...#.......#...#.#.....#...#...#...#...#...#.#...#.#...#...#.#...#.#...#...#.....#...#.#...#.#...#.#...#...#.......###...#...#.#...#.#...#
|
||||
#.###########.#.###.#.#######.#.#.#.#.#.#######.#.###.###.###.#.###.#.#.#.###.#####.###.#.#####.#####.#.###.#########.###.#.#.#.#.###.#.###.#
|
||||
#.........#...#.....#.........#.#...#.#.#.......#...#.###.#...#.#...#...#.#...#...#.#...#.#.....#...#.#.###.#.......#.#...#...#.#.#...#.....#
|
||||
#########.#.###################.#####.#.#.#########.#.###.#.###.#.#######.#.###.#.#.#.###.#.#####.#.#.#.###.#.#####.#.#.#######.#.#.#########
|
||||
###...###.#.#...#...#.........#.....#...#...#.....#.#.#...#.#...#...#...#.#.....#.#.#.#...#...#...#...#.....#.....#.#.#...#.....#.#.....#...#
|
||||
###.#.###.#.#.#.#.#.#.#######.#####.#######.#.###.#.#.#.###.#.#####.#.#.#.#######.#.#.#.#####.#.#################.#.#.###.#.#####.#####.#.#.#
|
||||
#...#.....#...#.#.#.#.....#...#...#.......#.#.#...#.#.#...#.#.....#.#.#.#.....###.#.#.#.#.....#.....###.........#.#...###.#.......#...#...#.#
|
||||
#.#############.#.#.#####.#.###.#.#######.#.#.#.###.#.###.#.#####.#.#.#.#####.###.#.#.#.#.#########.###.#######.#.#######.#########.#.#####.#
|
||||
#.#...........#...#.......#.#...#.#.......#.#.#...#.#.#...#.#.....#.#.#.#...#.#...#.#.#.#...#.....#...#.......#...#.......#.........#.....#.#
|
||||
#.#.#########.#############.#.###.#.#######.#.###.#.#.#.###.#.#####.#.#.#.#.#.#.###.#.#.###.#.###.###.#######.#####.#######.#############.#.#
|
||||
#...#.....###.............#.#...#...#.....#...###.#.#.#.#...#...#...#.#.#.#.#.#...#.#...#...#.###.#...#.....#...#...#...#...#...#...#...#...#
|
||||
#####.###.###############.#.###.#####.###.#######.#.#.#.#.#####.#.###.#.#.#.#.###.#.#####.###.###.#.###.###.###.#.###.#.#.###.#.#.#.#.#.#####
|
||||
#...#...#.....#...........#.....#...#.#...#.....#...#...#...#...#...#.#.#.#.#S###.#.....#...#...#...###...#...#...#...#.#.....#.#.#...#...###
|
||||
#.#.###.#####.#.#################.#.#.#.###.###.###########.#.#####.#.#.#.#.#####.#####.###.###.#########.###.#####.###.#######.#.#######.###
|
||||
#.#.###.....#...#...#.....#.......#...#...#.#...#...#.......#.#...#...#...#...###.#.....#...#...#...#...#...#.#...#...#.........#.......#...#
|
||||
#.#.#######.#####.#.#.###.#.#############.#.#.###.#.#.#######.#.#.###########.###.#.#####.###.###.#.#.#.###.#.#.#.###.#################.###.#
|
||||
#.#.#...#...#...#.#.#.###.#.###.........#...#.....#.#.#.....#...#.......#.....###.#...#...#...###.#...#.....#...#.....#.....#...#.......#...#
|
||||
#.#.#.#.#.###.#.#.#.#.###.#.###.#######.###########.#.#.###.###########.#.#######.###.#.###.#####.#####################.###.#.#.#.#######.###
|
||||
#.#.#.#.#...#.#...#...#...#.#...#.....#.#...#...#...#.#.#...#.....#...#.#.#...###.#...#...#.....#...#...........###...#...#.#.#.#.#.......###
|
||||
#.#.#.#.###.#.#########.###.#.###.###.#.#.#.#.#.#.###.#.#.###.###.#.#.#.#.#.#.###.#.#####.#####.###.#.#########.###.#.###.#.#.#.#.#.#########
|
||||
#.#...#...#...###...###...#.#.....#...#.#.#...#...###...#...#...#.#.#...#...#.###.#.#.....#...#.#...#.#.........#...#...#.#...#...#...#...###
|
||||
#.#######.#######.#.#####.#.#######.###.#.#################.###.#.#.#########.###.#.#.#####.#.#.#.###.#.#########.#####.#.###########.#.#.###
|
||||
#.......#.....#...#.#.....#.#.......###...#.........#.......#...#...###...#...###...#...#...#...#.....#...........#...#.#.#...........#.#...#
|
||||
#######.#####.#.###.#.#####.#.#############.#######.#.#######.#########.#.#.###########.#.#########################.#.#.#.#.###########.###.#
|
||||
#...###.#.....#...#...#...#.#...#...#.....#.#.......#.....#...###...#...#.#...#######...#.###.................#...#.#...#.#...#...#.....#...#
|
||||
#.#.###.#.#######.#####.#.#.###.#.#.#.###.#.#.###########.#.#####.#.#.###.###.#######.###.###.###############.#.#.#.#####.###.#.#.#.#####.###
|
||||
#.#.....#.....###...#...#...###...#...#...#.#.....###...#.#...#...#.#...#.....#######...#.#...#.......#.....#.#.#...#...#.#...#.#...#...#...#
|
||||
#.###########.#####.#.#################.###.#####.###.#.#.###.#.###.###.###############.#.#.###.#####.#.###.#.#.#####.#.#.#.###.#####.#.###.#
|
||||
#...#.......#.#...#...###...#...#.......###.#.....#...#.#.....#...#.#...#.....#######...#.#...#.#.....#.#...#...#.....#...#.....#.....#.....#
|
||||
###.#.#####.#.#.#.#######.#.#.#.#.#########.#.#####.###.#########.#.#.###.###.#######.###.###.#.#.#####.#.#######.###############.###########
|
||||
#...#.#...#.#.#.#.........#.#.#.#.......#...#.....#...#.#...#...#.#...#...#...#######...#.###...#.......#.........#.......#.....#...........#
|
||||
#.###.#.#.#.#.#.###########.#.#.#######.#.#######.###.#.#.#.#.#.#.#####.###.###########.#.#########################.#####.#.###.###########.#
|
||||
#.#...#.#...#...#.........#...#.........#.#.....#...#.#.#.#.#.#.#.#...#...#...#...###E#...#...###...........#.....#.....#.#...#.#.....#.....#
|
||||
#.#.###.#########.#######.###############.#.###.###.#.#.#.#.#.#.#.#.#.###.###.#.#.###.#####.#.###.#########.#.###.#####.#.###.#.#.###.#.#####
|
||||
#...###.....#...#.#...###.................#.###.....#.#...#.#.#.#...#.#...#...#.#.#...#.....#.#...#...#...#...###.......#.#...#.#...#.#.....#
|
||||
###########.#.#.#.#.#.#####################.#########.#####.#.#.#####.#.###.###.#.#.###.#####.#.###.#.#.#.###############.#.###.###.#.#####.#
|
||||
#...###...#...#...#.#.#...#...#...#...#...#...#.......#...#...#.....#...###...#.#...###.....#.#...#.#...#.......#.......#.#...#...#.#...#...#
|
||||
#.#.###.#.#########.#.#.#.#.#.#.#.#.#.#.#.###.#.#######.#.#########.#########.#.###########.#.###.#.###########.#.#####.#.###.###.#.###.#.###
|
||||
#.#.#...#...#...#...#...#...#...#...#...#...#...#.....#.#.........#.#.....###...#.....#...#.#.###...#...........#.#.....#.....#...#...#...###
|
||||
#.#.#.#####.#.#.#.#########################.#####.###.#.#########.#.#.###.#######.###.#.#.#.#.#######.###########.#.###########.#####.#######
|
||||
#.#.#.....#.#.#.#.......................###.#.....###.#.........#...#...#.......#...#.#.#...#.#...###.............#.....###...#...#...#...###
|
||||
#.#.#####.#.#.#.#######################.###.#.#######.#########.#######.#######.###.#.#.#####.#.#.#####################.###.#.###.#.###.#.###
|
||||
#.#.#...#.#...#.......................#...#...#.....#...........#...#...#.......#...#.#.....#.#.#.#...###.....#.......#.....#...#...#...#...#
|
||||
#.#.#.#.#.###########################.###.#####.###.#############.#.#.###.#######.###.#####.#.#.#.#.#.###.###.#.#####.#########.#####.#####.#
|
||||
#.#...#...#...#.......#.....#...#...#.....#...#.#...###...#...###.#.#...#.....###...#.###...#...#...#.....###.#.....#...#...#...#...#...#...#
|
||||
#.#########.#.#.#####.#.###.#.#.#.#.#######.#.#.#.#####.#.#.#.###.#.###.#####.#####.#.###.###################.#####.###.#.#.#.###.#.###.#.###
|
||||
#...#.....#.#.#.#.....#.#...#.#...#.....###.#.#.#.......#.#.#.#...#...#.#.....#...#.#.....#.....#...#.......#.#...#.###...#...#...#.....#...#
|
||||
###.#.###.#.#.#.#.#####.#.###.#########.###.#.#.#########.#.#.#.#####.#.#.#####.#.#.#######.###.#.#.#.#####.#.#.#.#.###########.###########.#
|
||||
#...#...#.#.#.#.#...#...#...#.#.........#...#...#...#.....#.#.#.....#.#.#.#...#.#.#.......#...#...#.#.#.....#...#.#.#...#...#...#...#.......#
|
||||
#.#####.#.#.#.#.###.#.#####.#.#.#########.#######.#.#.#####.#.#####.#.#.#.#.#.#.#.#######.###.#####.#.#.#########.#.#.#.#.#.#.###.#.#.#######
|
||||
#.......#...#...###...#####...#...........#...#...#...###...#...###.#.#.#.#.#...#...#.....#...#...#...#...#...###.#...#...#...#...#.#.......#
|
||||
###########################################.#.#.#########.#####.###.#.#.#.#.#######.#.#####.###.#.#######.#.#.###.#############.###.#######.#
|
||||
#.........#.....###.....#.......#.......#...#.#.#...#...#.....#.....#.#.#.#.#.......#.......###.#...#...#...#...#...............###.#.......#
|
||||
#.#######.#.###.###.###.#.#####.#.#####.#.###.#.#.#.#.#.#####.#######.#.#.#.#.#################.###.#.#.#######.###################.#.#######
|
||||
#.......#.#...#.....#...#.....#.#.....#.#...#...#.#.#.#.#...#.......#.#.#.#.#.....#.....#.....#...#.#.#.......#...................#...###...#
|
||||
#######.#.###.#######.#######.#.#####.#.###.#####.#.#.#.#.#.#######.#.#.#.#.#####.#.###.#.###.###.#.#.#######.###################.#######.#.#
|
||||
#.......#.###.......#.#...#...#.......#.....#...#.#.#.#.#.#...#.....#...#.#.#.....#...#.#...#.###.#.#.......#.#...............#...###...#.#.#
|
||||
#.#######.#########.#.#.#.#.#################.#.#.#.#.#.#.###.#.#########.#.#.#######.#.###.#.###.#.#######.#.#.#############.#.#####.#.#.#.#
|
||||
#.......#.#...#.....#...#...#.............###.#...#...#.#...#.#.........#.#.#.....#...#.#...#.....#.....#...#...#.......#...#...#...#.#...#.#
|
||||
#######.#.#.#.#.#############.###########.###.#########.###.#.#########.#.#.#####.#.###.#.#############.#.#######.#####.#.#.#####.#.#.#####.#
|
||||
#...#...#...#...#.............#...........#...#.......#.#...#.#...#...#.#.#.#.....#...#...#.....#.....#...###.....#.....#.#...#...#.#.#.....#
|
||||
#.#.#.###########.#############.###########.###.#####.#.#.###.#.#.#.#.#.#.#.#.#######.#####.###.#.###.#######.#####.#####.###.#.###.#.#.#####
|
||||
#.#...#.......#...###...........#...#...###...#.....#.#.#...#.#.#.#.#...#...#...#...#...#...###...#...#.......#.....#.....#...#.#...#.#.#...#
|
||||
#.#####.#####.#.#####.###########.#.#.#.#####.#####.#.#.###.#.#.#.#.###########.#.#.###.#.#########.###.#######.#####.#####.###.#.###.#.#.#.#
|
||||
#...#...#.....#.#...#...........#.#.#.#.....#.#.....#...###.#.#.#.#...#...#...#.#.#...#...#.......#.....#...#...#...#.#.....#...#.....#...#.#
|
||||
###.#.###.#####.#.#.###########.#.#.#.#####.#.#.###########.#.#.#.###.#.#.#.#.#.#.###.#####.#####.#######.#.#.###.#.#.#.#####.#############.#
|
||||
#...#.#...#...#.#.#.#.........#...#...#.....#.#...#...###...#.#.#...#...#.#.#...#.#...#...#.....#.........#...###.#...#.......#...#...#...#.#
|
||||
#.###.#.###.#.#.#.#.#.#######.#########.#####.###.#.#.###.###.#.###.#####.#.#####.#.###.#.#####.#################.#############.#.#.#.#.#.#.#
|
||||
#...#.#...#.#.#.#.#...#.....#...#.......#...#.#...#.#.#...#...#.#...#.....#...#...#...#.#.#...#...#.............#...#...........#.#.#.#.#.#.#
|
||||
###.#.###.#.#.#.#.#####.###.###.#.#######.#.#.#.###.#.#.###.###.#.###.#######.#.#####.#.#.#.#.###.#.###########.###.#.###########.#.#.#.#.#.#
|
||||
###...#...#.#.#.#.#...#...#...#.#.........#.#.#...#.#.#...#...#.#...#.......#.#.....#.#.#.#.#.###...###.........#...#...........#...#.#.#...#
|
||||
#######.###.#.#.#.#.#.###.###.#.###########.#.###.#.#.###.###.#.###.#######.#.#####.#.#.#.#.#.#########.#########.#############.#####.#.#####
|
||||
###...#.....#...#...#.....#...#.............#.#...#.#.###.#...#...#.###...#.#.#...#.#.#.#.#.#.#...#...#...........#.......#...#...###.#.....#
|
||||
###.#.#####################.#################.#.###.#.###.#.#####.#.###.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#############.#####.#.#.###.###.#####.#
|
||||
#...#.......###.......#...#.........#.......#.#.#...#...#.#...#...#...#.#.#.#.#.#.#.#.#.#.#.#.#.#...#.#.....#.......#...#...#...#...#.......#
|
||||
#.#########.###.#####.#.#.#########.#.#####.#.#.#.#####.#.###.#.#####.#.#.#.#.#.#.#.#.#.#.#.#.#.#####.#.###.#.#######.#.#######.###.#########
|
||||
#.........#.....#...#...#.........#.#...###.#.#...#...#.#...#.#.#.....#.#...#.#.#...#.#.#...#.#.###...#.#...#.........#.......#...#.#.......#
|
||||
#########.#######.#.#############.#.###.###.#.#####.#.#.###.#.#.#.#####.#####.#.#####.#.#####.#.###.###.#.###################.###.#.#.#####.#
|
||||
###.....#.......#.#.............#...#...#...#.......#.#...#.#...#...#...#.....#.#.....#.#.....#...#...#.#...#...#...........#.#...#...#.....#
|
||||
###.###.#######.#.#############.#####.###.###########.###.#.#######.#.###.#####.#.#####.#.#######.###.#.###.#.#.#.#########.#.#.#######.#####
|
||||
#...#...#.....#...###...........#.....#...#.....#.....###.#.....###.#.###...#...#.#...#.#...#.....#...#...#.#.#.#.....#...#...#.......#.....#
|
||||
#.###.###.###.#######.###########.#####.###.###.#.#######.#####.###.#.#####.#.###.#.#.#.###.#.#####.#####.#.#.#.#####.#.#.###########.#####.#
|
||||
#...#...#...#.#.......#.....#...#.#.....#...###.#.......#...#...#...#.....#.#...#.#.#...###.#...###...#...#...#.#...#...#...........#...#...#
|
||||
###.###.###.#.#.#######.###.#.#.#.#.#####.#####.#######.###.#.###.#######.#.###.#.#.#######.###.#####.#.#######.#.#.###############.###.#.###
|
||||
#...#...#...#...#...#...#...#.#.#.#.....#.....#...#.....###...###.#.....#.#...#.#.#.......#...#...#...#.#...###...#...#.....#.......#...#...#
|
||||
#.###.###.#######.#.#.###.###.#.#.#####.#####.###.#.#############.#.###.#.###.#.#.#######.###.###.#.###.#.#.#########.#.###.#.#######.#####.#
|
||||
#...#.....#...#...#.#.###...#.#...#...#.#...#.#...#.......#.......#...#.#.#...#.#.#.....#...#.#...#...#...#.....#.....#...#.#.......#...#...#
|
||||
###.#######.#.#.###.#.#####.#.#####.#.#.#.#.#.#.#########.#.#########.#.#.#.###.#.#.###.###.#.#.#####.#########.#.#######.#.#######.###.#.###
|
||||
###...#...#.#.#.###...#.....#...#...#...#.#...#...#...#...#...#...#...#.#.#...#.#...###...#.#...#...#...#.......#.#.......#.#.......#...#...#
|
||||
#####.#.#.#.#.#.#######.#######.#.#######.#######.#.#.#.#####.#.#.#.###.#.###.#.#########.#.#####.#.###.#.#######.#.#######.#.#######.#####.#
|
||||
#.....#.#.#.#.#.#.....#.....#...#...#...#.....###...#.#.....#.#.#.#.###...#...#.....#.....#...#...#.....#.......#.#.....#...#.....###.......#
|
||||
#.#####.#.#.#.#.#.###.#####.#.#####.#.#.#####.#######.#####.#.#.#.#.#######.#######.#.#######.#.###############.#.#####.#.#######.###########
|
||||
#...#...#.#.#...#...#.#.....#.#####...#.#...#.....###.#.....#...#.#...#.....#.......#.......#.#.#...#...#.......#...#...#.........#.........#
|
||||
###.#.###.#.#######.#.#.#####.#########.#.#.#####.###.#.#########.###.#.#####.#############.#.#.#.#.#.#.#.#########.#.#############.#######.#
|
||||
###.#...#.#.#.......#...#...#...#.......#.#.#.....#...#...#.......#...#.....#.....#.........#.#.#.#.#.#.#.......#...#.........###...#...#...#
|
||||
###.###.#.#.#.###########.#.###.#.#######.#.#.#####.#####.#.#######.#######.#####.#.#########.#.#.#.#.#.#######.#.###########.###.###.#.#.###
|
||||
#...#...#...#.....#...#...#...#.#...#...#.#.#.....#.#...#.#.........#...###.#...#.#.#.......#.#...#.#.#.#.......#.....#.....#.....#...#.#...#
|
||||
#.###.###########.#.#.#.#####.#.###.#.#.#.#.#####.#.#.#.#.###########.#.###.#.#.#.#.#.#####.#.#####.#.#.#.###########.#.###.#######.###.###.#
|
||||
#...#.....#####...#.#.#.....#.#.#...#.#.#.#...#...#...#.#.....#.......#.....#.#.#.#...#.....#...#...#.#.#...........#.#...#.#...#...#...#...#
|
||||
###.#####.#####.###.#.#####.#.#.#.###.#.#.###.#.#######.#####.#.#############.#.#.#####.#######.#.###.#.###########.#.###.#.#.#.#.###.###.###
|
||||
#...#...#...#...#...#.....#.#...#...#.#.#.###.#.......#...#...#.....#...#...#.#.#.....#.#...#...#...#.#.#.....#...#.#.#...#...#...###.#...###
|
||||
#.###.#.###.#.###.#######.#.#######.#.#.#.###.#######.###.#.#######.#.#.#.#.#.#.#####.#.#.#.#.#####.#.#.#.###.#.#.#.#.#.#############.#.#####
|
||||
#.....#.....#...#.......#.#.#.......#.#...#...#...#...###.#...#.....#.#...#.#.#.#.....#...#.#.#...#...#.#...#.#.#.#.#.#.............#...#...#
|
||||
###############.#######.#.#.#.#######.#####.###.#.#.#####.###.#.#####.#####.#.#.#.#########.#.#.#.#####.###.#.#.#.#.#.#############.#####.#.#
|
||||
###...#.........#...#...#...#.....#...###...#...#...###...#...#.#...#...#...#.#.#...#.......#...#.###...#...#.#.#.#.#.#...#...#...#.....#.#.#
|
||||
###.#.#.#########.#.#.###########.#.#####.###.#########.###.###.#.#.###.#.###.#.###.#.###########.###.###.###.#.#.#.#.#.#.#.#.#.#.#####.#.#.#
|
||||
#...#...#.....#...#.#...#.........#.....#...#.........#...#...#.#.#...#.#...#.#...#.#.#.....#...#.#...#...#...#.#.#.#.#.#.#.#.#.#.#...#...#.#
|
||||
#.#######.###.#.###.###.#.#############.###.#########.###.###.#.#.###.#.###.#.###.#.#.#.###.#.#.#.#.###.###.###.#.#.#.#.#.#.#.#.#.#.#.#####.#
|
||||
#.........###...###.....#...............###...........###.....#...###...###...###...#...###...#...#.....###.....#...#...#...#...#...#.......#
|
||||
#############################################################################################################################################
|
@ -1,5 +0,0 @@
|
||||
129A
|
||||
540A
|
||||
789A
|
||||
596A
|
||||
582A
|
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@ -1,313 +0,0 @@
|
||||
x00: 1
|
||||
x01: 0
|
||||
x02: 1
|
||||
x03: 1
|
||||
x04: 0
|
||||
x05: 0
|
||||
x06: 1
|
||||
x07: 1
|
||||
x08: 0
|
||||
x09: 1
|
||||
x10: 1
|
||||
x11: 1
|
||||
x12: 1
|
||||
x13: 0
|
||||
x14: 1
|
||||
x15: 1
|
||||
x16: 1
|
||||
x17: 1
|
||||
x18: 1
|
||||
x19: 1
|
||||
x20: 0
|
||||
x21: 1
|
||||
x22: 0
|
||||
x23: 1
|
||||
x24: 0
|
||||
x25: 1
|
||||
x26: 1
|
||||
x27: 1
|
||||
x28: 1
|
||||
x29: 0
|
||||
x30: 0
|
||||
x31: 1
|
||||
x32: 0
|
||||
x33: 1
|
||||
x34: 1
|
||||
x35: 0
|
||||
x36: 0
|
||||
x37: 1
|
||||
x38: 0
|
||||
x39: 1
|
||||
x40: 1
|
||||
x41: 1
|
||||
x42: 1
|
||||
x43: 0
|
||||
x44: 1
|
||||
y00: 1
|
||||
y01: 0
|
||||
y02: 0
|
||||
y03: 1
|
||||
y04: 1
|
||||
y05: 0
|
||||
y06: 0
|
||||
y07: 0
|
||||
y08: 0
|
||||
y09: 0
|
||||
y10: 0
|
||||
y11: 1
|
||||
y12: 0
|
||||
y13: 1
|
||||
y14: 0
|
||||
y15: 1
|
||||
y16: 1
|
||||
y17: 1
|
||||
y18: 1
|
||||
y19: 0
|
||||
y20: 0
|
||||
y21: 1
|
||||
y22: 1
|
||||
y23: 1
|
||||
y24: 1
|
||||
y25: 0
|
||||
y26: 0
|
||||
y27: 1
|
||||
y28: 1
|
||||
y29: 1
|
||||
y30: 1
|
||||
y31: 0
|
||||
y32: 0
|
||||
y33: 0
|
||||
y34: 1
|
||||
y35: 1
|
||||
y36: 1
|
||||
y37: 0
|
||||
y38: 1
|
||||
y39: 1
|
||||
y40: 1
|
||||
y41: 1
|
||||
y42: 0
|
||||
y43: 1
|
||||
y44: 1
|
||||
|
||||
x03 AND y03 -> htr
|
||||
gwb AND kvf -> pkd
|
||||
x04 AND y04 -> jjm
|
||||
qcm XOR twv -> z21
|
||||
rrq XOR bmp -> z44
|
||||
x43 AND y43 -> pnn
|
||||
x06 XOR y06 -> qmt
|
||||
x26 AND y26 -> z26
|
||||
y00 AND x00 -> whb
|
||||
jfq XOR fbb -> z36
|
||||
y33 AND x33 -> mmb
|
||||
x38 AND y38 -> vqt
|
||||
bbh OR qtd -> jfq
|
||||
cbs AND ttb -> qtd
|
||||
wqs OR cmf -> tpf
|
||||
x10 AND y10 -> bfm
|
||||
djp OR pfb -> qvr
|
||||
x20 XOR y20 -> vhb
|
||||
kkd XOR cjg -> z32
|
||||
qpp XOR stg -> z41
|
||||
kkd AND cjg -> mdv
|
||||
tpp OR pfj -> twv
|
||||
www AND qdf -> vjf
|
||||
y15 XOR x15 -> hmr
|
||||
mtg XOR sqm -> z09
|
||||
x33 XOR y33 -> chc
|
||||
x41 AND y41 -> pkj
|
||||
x31 AND y31 -> cvn
|
||||
x09 AND y09 -> nvw
|
||||
mtg AND sqm -> chg
|
||||
pkr AND kcv -> thc
|
||||
x07 XOR y07 -> cds
|
||||
x15 AND y15 -> fpr
|
||||
mwv AND jsg -> wdw
|
||||
mwv XOR jsg -> z38
|
||||
y16 XOR x16 -> svs
|
||||
y14 XOR x14 -> fnq
|
||||
wth OR vjf -> btv
|
||||
bvp AND gdb -> stc
|
||||
cjb XOR rjc -> z04
|
||||
x13 AND y13 -> pfb
|
||||
x30 AND y30 -> qgf
|
||||
htq AND rtk -> dsm
|
||||
x18 XOR y18 -> kvf
|
||||
y12 AND x12 -> mqn
|
||||
bcj XOR bkh -> z03
|
||||
x07 AND y07 -> sdj
|
||||
bdf OR wbw -> qkf
|
||||
y30 XOR x30 -> kbn
|
||||
tpf AND vhb -> tpp
|
||||
hqd OR fpr -> hgh
|
||||
vfm XOR hbw -> z23
|
||||
x01 AND y01 -> bdf
|
||||
nvw OR chg -> vgp
|
||||
x21 XOR y21 -> qcm
|
||||
bwg AND mfn -> djp
|
||||
dnf OR pkj -> ksp
|
||||
y44 AND x44 -> gqr
|
||||
y11 AND x11 -> smr
|
||||
smr OR dsm -> ksn
|
||||
jkm OR pkd -> rjf
|
||||
thc OR sqt -> rbd
|
||||
qvr XOR fnq -> z14
|
||||
cjb AND rjc -> fsb
|
||||
svg XOR fmt -> z31
|
||||
x06 AND y06 -> ssv
|
||||
dtj OR vvq -> jvp
|
||||
chv XOR fqf -> z34
|
||||
cvr AND hck -> pjd
|
||||
dqp AND nbm -> hvv
|
||||
x29 AND y29 -> vvq
|
||||
y13 XOR x13 -> mfn
|
||||
ksn AND nft -> z12
|
||||
jjd XOR whb -> z01
|
||||
chc AND rnq -> vjh
|
||||
y36 AND x36 -> kfn
|
||||
cwh OR vvw -> ttb
|
||||
qkf AND wsv -> pqc
|
||||
rdj OR kfv -> gdb
|
||||
x08 AND y08 -> jrr
|
||||
x02 AND y02 -> vdf
|
||||
x12 XOR y12 -> nft
|
||||
ptf OR jrr -> sqm
|
||||
tdv OR wjp -> cjw
|
||||
qvr AND fnq -> mch
|
||||
x28 XOR y28 -> cfj
|
||||
gtn XOR qmt -> z06
|
||||
mqn OR jpj -> bwg
|
||||
x36 XOR y36 -> fbb
|
||||
qht OR bfm -> htq
|
||||
y42 AND x42 -> mkg
|
||||
ksn XOR nft -> jpj
|
||||
x20 AND y20 -> pfj
|
||||
cmt AND nbq -> gmc
|
||||
rbd XOR knm -> z25
|
||||
pvj XOR ksp -> z42
|
||||
kgj OR stc -> www
|
||||
tpf XOR vhb -> z20
|
||||
pjd OR dsg -> mwv
|
||||
cbs XOR ttb -> z35
|
||||
bfk OR jvm -> gwb
|
||||
ffj XOR rpg -> z17
|
||||
vjr OR kwg -> pkr
|
||||
pvj AND ksp -> dkc
|
||||
y37 XOR x37 -> cvr
|
||||
btv XOR cfj -> z28
|
||||
gtq OR qgf -> fmt
|
||||
nbq XOR cmt -> z39
|
||||
wgq AND dqj -> tws
|
||||
x24 AND y24 -> sqt
|
||||
whj OR pnn -> bmp
|
||||
x02 XOR y02 -> wsv
|
||||
stg AND qpp -> dnf
|
||||
kbn XOR jvp -> z30
|
||||
y39 AND x39 -> gwq
|
||||
cds AND rkv -> nph
|
||||
kvf XOR gwb -> z18
|
||||
mkg OR dkc -> sch
|
||||
bqh XOR rjf -> z19
|
||||
hck XOR cvr -> z37
|
||||
jmk OR ssv -> rkv
|
||||
x21 AND y21 -> cgd
|
||||
pqc OR vdf -> bkh
|
||||
rff OR mts -> rpg
|
||||
bkh AND bcj -> rhq
|
||||
bnv OR bst -> stg
|
||||
bwg XOR mfn -> z13
|
||||
sgt AND scc -> bnv
|
||||
btv AND cfj -> tdv
|
||||
svs AND hgh -> rff
|
||||
hbw AND vfm -> kwg
|
||||
x40 XOR y40 -> scc
|
||||
y17 AND x17 -> jvm
|
||||
y34 AND x34 -> chv
|
||||
y35 AND x35 -> bbh
|
||||
mdv OR rft -> rnq
|
||||
fqf AND chv -> cwh
|
||||
y28 AND x28 -> wjp
|
||||
sch AND srj -> whj
|
||||
htr OR rhq -> rjc
|
||||
x05 XOR y05 -> dqp
|
||||
cvn OR qnk -> cjg
|
||||
y14 AND x14 -> tfr
|
||||
y11 XOR x11 -> rtk
|
||||
jfq AND fbb -> trr
|
||||
ppb AND hmr -> hqd
|
||||
gtb OR hvv -> gtn
|
||||
y44 XOR x44 -> rrq
|
||||
rtk XOR htq -> z11
|
||||
x01 XOR y01 -> jjd
|
||||
hmv XOR rts -> z08
|
||||
y10 XOR x10 -> vpc
|
||||
jvp AND kbn -> gtq
|
||||
cjw AND ntj -> dtj
|
||||
x22 AND y22 -> prp
|
||||
ppb XOR hmr -> z15
|
||||
y18 AND x18 -> jkm
|
||||
x39 XOR y39 -> nbq
|
||||
jjd AND whb -> wbw
|
||||
x34 XOR y34 -> vvw
|
||||
x19 AND y19 -> wqs
|
||||
gwq OR gmc -> sgt
|
||||
rbd AND knm -> rdj
|
||||
srj XOR sch -> z43
|
||||
y05 AND x05 -> gtb
|
||||
x08 XOR y08 -> hmv
|
||||
y25 AND x25 -> kfv
|
||||
cgd OR jth -> dqj
|
||||
vpc XOR vgp -> z10
|
||||
tws OR prp -> hbw
|
||||
jjm OR fsb -> nbm
|
||||
wdw OR vqt -> cmt
|
||||
rrq AND bmp -> cbv
|
||||
rts AND hmv -> ptf
|
||||
svs XOR hgh -> z16
|
||||
y41 XOR x41 -> qpp
|
||||
ntj XOR cjw -> z29
|
||||
ffj AND rpg -> bfk
|
||||
gqr OR cbv -> z45
|
||||
x25 XOR y25 -> knm
|
||||
chc XOR rnq -> z33
|
||||
y43 XOR x43 -> srj
|
||||
vgp AND vpc -> qht
|
||||
x00 XOR y00 -> z00
|
||||
cds XOR rkv -> rts
|
||||
x24 XOR y24 -> kcv
|
||||
x32 AND y32 -> rft
|
||||
nbm XOR dqp -> z05
|
||||
x35 XOR y35 -> cbs
|
||||
mch OR tfr -> ppb
|
||||
x16 AND y16 -> mts
|
||||
www XOR qdf -> z27
|
||||
x23 AND y23 -> vjr
|
||||
x26 XOR y26 -> bvp
|
||||
gtn AND qmt -> jmk
|
||||
x29 XOR y29 -> ntj
|
||||
y19 XOR x19 -> bqh
|
||||
rjf AND bqh -> cmf
|
||||
y38 XOR x38 -> jsg
|
||||
x32 XOR y32 -> kkd
|
||||
y03 XOR x03 -> bcj
|
||||
y31 XOR x31 -> svg
|
||||
y22 XOR x22 -> wgq
|
||||
qkf XOR wsv -> z02
|
||||
bvp XOR gdb -> kgj
|
||||
x04 XOR y04 -> cjb
|
||||
x17 XOR y17 -> ffj
|
||||
y37 AND x37 -> dsg
|
||||
y27 AND x27 -> wth
|
||||
y23 XOR x23 -> vfm
|
||||
sgt XOR scc -> z40
|
||||
mmb OR vjh -> fqf
|
||||
qcm AND twv -> jth
|
||||
y09 XOR x09 -> mtg
|
||||
sdj OR nph -> z07
|
||||
wgq XOR dqj -> z22
|
||||
trr OR kfn -> hck
|
||||
y27 XOR x27 -> qdf
|
||||
kcv XOR pkr -> z24
|
||||
x42 XOR y42 -> pvj
|
||||
x40 AND y40 -> bst
|
||||
svg AND fmt -> qnk
|
File diff suppressed because it is too large
Load Diff
@ -1,10 +0,0 @@
|
||||
########
|
||||
#..O.O.#
|
||||
##@.O..#
|
||||
#...O..#
|
||||
#.#.O..#
|
||||
#...O..#
|
||||
#......#
|
||||
########
|
||||
|
||||
<^^>>>vv<v>>v<<
|
@ -1,9 +0,0 @@
|
||||
#######
|
||||
#...#.#
|
||||
#.....#
|
||||
#..OO@#
|
||||
#..O..#
|
||||
#.....#
|
||||
#######
|
||||
|
||||
<vv<<^^<<^^
|
@ -1,25 +0,0 @@
|
||||
5,4
|
||||
4,2
|
||||
4,5
|
||||
3,0
|
||||
2,1
|
||||
6,3
|
||||
2,4
|
||||
1,5
|
||||
0,6
|
||||
3,3
|
||||
2,6
|
||||
5,1
|
||||
1,2
|
||||
5,5
|
||||
2,5
|
||||
6,5
|
||||
1,4
|
||||
0,4
|
||||
6,4
|
||||
1,1
|
||||
6,1
|
||||
1,0
|
||||
0,5
|
||||
1,6
|
||||
2,0
|
@ -1,10 +0,0 @@
|
||||
r, wr, b, g, bwu, rb, gb, br
|
||||
|
||||
brwrr
|
||||
bggr
|
||||
gbbr
|
||||
rrbgbr
|
||||
ubwu
|
||||
bwurrg
|
||||
brgr
|
||||
bbrgwb
|
@ -1,15 +0,0 @@
|
||||
###############
|
||||
#...#...#.....#
|
||||
#.#.#.#.#.###.#
|
||||
#S#...#.#.#...#
|
||||
#######.#.#.###
|
||||
#######.#.#...#
|
||||
#######.#.###.#
|
||||
###..E#...#...#
|
||||
###.#######.###
|
||||
#...###...#...#
|
||||
#.#####.#.###.#
|
||||
#.#...#.#.#...#
|
||||
#.#.#.#.#.#.###
|
||||
#...#...#...###
|
||||
###############
|
@ -1,5 +0,0 @@
|
||||
029A
|
||||
980A
|
||||
179A
|
||||
456A
|
||||
379A
|
0
src/holt59/aoc/inputs/tests/2024/day22.txt
Normal file
0
src/holt59/aoc/inputs/tests/2024/day22.txt
Normal file
@ -1,4 +0,0 @@
|
||||
1
|
||||
10
|
||||
100
|
||||
2024
|
@ -1,4 +0,0 @@
|
||||
1
|
||||
2
|
||||
3
|
||||
2024
|
@ -1,32 +0,0 @@
|
||||
kh-tc
|
||||
qp-kh
|
||||
de-cg
|
||||
ka-co
|
||||
yn-aq
|
||||
qp-ub
|
||||
cg-tb
|
||||
vc-aq
|
||||
tb-ka
|
||||
wh-tc
|
||||
yn-cg
|
||||
kh-ub
|
||||
ta-co
|
||||
de-co
|
||||
tc-td
|
||||
tb-wq
|
||||
wh-td
|
||||
ta-ka
|
||||
td-qp
|
||||
aq-cg
|
||||
wq-ub
|
||||
ub-vc
|
||||
de-ta
|
||||
wq-aq
|
||||
wq-vc
|
||||
wh-yn
|
||||
ka-de
|
||||
kh-ta
|
||||
co-tc
|
||||
wh-qp
|
||||
tb-vc
|
||||
td-yn
|
0
src/holt59/aoc/inputs/tests/2024/day24.txt
Normal file
0
src/holt59/aoc/inputs/tests/2024/day24.txt
Normal file
@ -1,10 +0,0 @@
|
||||
x00: 1
|
||||
x01: 1
|
||||
x02: 1
|
||||
y00: 0
|
||||
y01: 1
|
||||
y02: 0
|
||||
|
||||
x00 AND y00 -> z00
|
||||
x01 XOR y01 -> z01
|
||||
x02 OR y02 -> z02
|
@ -1,47 +0,0 @@
|
||||
x00: 1
|
||||
x01: 0
|
||||
x02: 1
|
||||
x03: 1
|
||||
x04: 0
|
||||
y00: 1
|
||||
y01: 1
|
||||
y02: 1
|
||||
y03: 1
|
||||
y04: 1
|
||||
|
||||
ntg XOR fgs -> mjb
|
||||
y02 OR x01 -> tnw
|
||||
kwq OR kpj -> z05
|
||||
x00 OR x03 -> fst
|
||||
tgd XOR rvg -> z01
|
||||
vdt OR tnw -> bfw
|
||||
bfw AND frj -> z10
|
||||
ffh OR nrd -> bqk
|
||||
y00 AND y03 -> djm
|
||||
y03 OR y00 -> psh
|
||||
bqk OR frj -> z08
|
||||
tnw OR fst -> frj
|
||||
gnj AND tgd -> z11
|
||||
bfw XOR mjb -> z00
|
||||
x03 OR x00 -> vdt
|
||||
gnj AND wpb -> z02
|
||||
x04 AND y00 -> kjc
|
||||
djm OR pbm -> qhw
|
||||
nrd AND vdt -> hwm
|
||||
kjc AND fst -> rvg
|
||||
y04 OR y02 -> fgs
|
||||
y01 AND x02 -> pbm
|
||||
ntg OR kjc -> kwq
|
||||
psh XOR fgs -> tgd
|
||||
qhw XOR tgd -> z09
|
||||
pbm OR djm -> kpj
|
||||
x03 XOR y03 -> ffh
|
||||
x00 XOR y04 -> ntg
|
||||
bfw OR bqk -> z06
|
||||
nrd XOR fgs -> wpb
|
||||
frj XOR qhw -> z04
|
||||
bqk OR frj -> z07
|
||||
y03 OR x01 -> nrd
|
||||
hwm AND bqk -> z03
|
||||
tgd XOR rvg -> z12
|
||||
tnw OR pbm -> gnj
|
@ -1,19 +0,0 @@
|
||||
x00: 0
|
||||
x01: 1
|
||||
x02: 0
|
||||
x03: 1
|
||||
x04: 0
|
||||
x05: 1
|
||||
y00: 0
|
||||
y01: 0
|
||||
y02: 1
|
||||
y03: 1
|
||||
y04: 0
|
||||
y05: 1
|
||||
|
||||
x00 AND y00 -> z05
|
||||
x01 AND y01 -> z02
|
||||
x02 AND y02 -> z01
|
||||
x03 AND y03 -> z03
|
||||
x04 AND y04 -> z04
|
||||
x05 AND y05 -> z00
|
@ -1,39 +0,0 @@
|
||||
#####
|
||||
.####
|
||||
.####
|
||||
.####
|
||||
.#.#.
|
||||
.#...
|
||||
.....
|
||||
|
||||
#####
|
||||
##.##
|
||||
.#.##
|
||||
...##
|
||||
...#.
|
||||
...#.
|
||||
.....
|
||||
|
||||
.....
|
||||
#....
|
||||
#....
|
||||
#...#
|
||||
#.#.#
|
||||
#.###
|
||||
#####
|
||||
|
||||
.....
|
||||
.....
|
||||
#.#..
|
||||
###..
|
||||
###.#
|
||||
###.#
|
||||
#####
|
||||
|
||||
.....
|
||||
.....
|
||||
.....
|
||||
#....
|
||||
#.#..
|
||||
#.#.#
|
||||
#####
|
@ -1,186 +0,0 @@
|
||||
import heapq
|
||||
from typing import (
|
||||
Callable,
|
||||
Iterable,
|
||||
Iterator,
|
||||
Mapping,
|
||||
TypeVar,
|
||||
cast,
|
||||
overload,
|
||||
)
|
||||
|
||||
_Node = TypeVar("_Node")
|
||||
|
||||
|
||||
def make_neighbors_grid_fn(
|
||||
rows: int | Iterable[int],
|
||||
cols: int | Iterable[int],
|
||||
excluded: Iterable[tuple[int, int]] = set(),
|
||||
diagonals: bool = False,
|
||||
):
|
||||
"""
|
||||
Create a neighbors function suitable for graph function for a simple grid.
|
||||
|
||||
Args:
|
||||
rows: Rows of the grid. If an int is specified, the rows are assumed to be
|
||||
numbered from 0 to rows - 1, otherwise the iterable should contain the list
|
||||
of valid rows.
|
||||
cols: Columns of the grid. If an int is specified, the columns are assumed to be
|
||||
numbered from 0 to cols - 1, otherwise the iterable should contain the list
|
||||
of valid columns.
|
||||
excluded: Cells of the grid that cannot be used as valid nodes for the graph.
|
||||
diagonals: If True, neighbors will include diagonal cells, otherwise, only
|
||||
horizontal and vertical neighbors will be included.
|
||||
|
||||
"""
|
||||
ds = ((-1, 0), (0, 1), (1, 0), (0, -1))
|
||||
if diagonals:
|
||||
ds = ds + ((-1, -1), (-1, 1), (1, -1), (1, 1))
|
||||
|
||||
if isinstance(rows, int):
|
||||
rows = range(rows)
|
||||
elif not isinstance(rows, range):
|
||||
rows = set(rows)
|
||||
|
||||
if isinstance(cols, int):
|
||||
cols = range(cols)
|
||||
elif not isinstance(cols, range):
|
||||
cols = set(cols)
|
||||
|
||||
excluded = set(excluded)
|
||||
|
||||
def _fn(node: tuple[int, int]):
|
||||
return (
|
||||
((row_n, col_n), 1)
|
||||
for dr, dc in ds
|
||||
if (row_n := node[0] + dr) in rows
|
||||
and (col_n := node[1] + dc) in cols
|
||||
and (row_n, col_n) not in excluded
|
||||
)
|
||||
|
||||
return _fn
|
||||
|
||||
|
||||
@overload
|
||||
def dijkstra(
|
||||
start: _Node,
|
||||
target: None,
|
||||
neighbors: Callable[[_Node], Iterable[tuple[_Node, float]]],
|
||||
) -> dict[_Node, tuple[tuple[_Node, ...], float]]: ...
|
||||
|
||||
|
||||
@overload
|
||||
def dijkstra(
|
||||
start: _Node,
|
||||
target: _Node,
|
||||
neighbors: Callable[[_Node], Iterable[tuple[_Node, float]]],
|
||||
) -> tuple[tuple[_Node, ...], float] | None: ...
|
||||
|
||||
|
||||
def dijkstra(
|
||||
start: _Node,
|
||||
target: _Node | None,
|
||||
neighbors: Callable[[_Node], Iterable[tuple[_Node, float]]],
|
||||
) -> (
|
||||
dict[_Node, tuple[tuple[_Node, ...], float]]
|
||||
| tuple[tuple[_Node, ...], float]
|
||||
| None
|
||||
):
|
||||
"""
|
||||
Solve shortest-path problem using simple Dijkstra algorithm from start to target,
|
||||
using the given neighbors function.
|
||||
|
||||
Args:
|
||||
start: Starting node of the path.
|
||||
target: Target node for the path.
|
||||
neighbors: Function that should return, for a given node, the list of
|
||||
its neighbors with the cost to go from the node to the neighbor.
|
||||
|
||||
Returns:
|
||||
One of the shortest-path from start to target with its associated cost, if one
|
||||
is found, otherwise None.
|
||||
"""
|
||||
queue: list[tuple[float, _Node, tuple[_Node, ...]]] = [(0, start, (start,))]
|
||||
preds: dict[_Node, tuple[tuple[_Node, ...], float]] = {}
|
||||
|
||||
while queue:
|
||||
dis, node, path = heapq.heappop(queue)
|
||||
|
||||
if node in preds:
|
||||
continue
|
||||
|
||||
preds[node] = (path, dis)
|
||||
|
||||
if node == target:
|
||||
break
|
||||
|
||||
for neighbor, cost in neighbors(node):
|
||||
if neighbor in preds:
|
||||
continue
|
||||
|
||||
heapq.heappush(queue, (dis + cost, neighbor, path + (neighbor,)))
|
||||
|
||||
if target is None:
|
||||
return preds
|
||||
|
||||
return preds.get(target, None)
|
||||
|
||||
|
||||
def iter_max_cliques(
|
||||
neighbors: Mapping[_Node, Iterable[_Node]], nodes: Iterable[_Node] | None = None
|
||||
) -> Iterator[list[_Node]]:
|
||||
"""
|
||||
Find max cliques from the given set of neighbors containing the given set of nodes.
|
||||
|
||||
This is simply the networkx implementation with typing (and using a simple mapping
|
||||
to avoid requiring networkx).
|
||||
"""
|
||||
if len(neighbors) == 0:
|
||||
return
|
||||
|
||||
# remove the node itself from the neighbors
|
||||
adj = {u: {v for v in neighbors[u] if v != u} for u in neighbors}
|
||||
|
||||
# Initialize Q with the given nodes and subg, cand with their nbrs
|
||||
Q: list[_Node | None] = list(nodes or [])
|
||||
cand = set(neighbors)
|
||||
for node in Q:
|
||||
if node not in cand:
|
||||
raise ValueError(f"The given `nodes` {nodes} do not form a clique")
|
||||
cand &= adj[node]
|
||||
|
||||
if not cand:
|
||||
yield cast(list[_Node], Q[:])
|
||||
return
|
||||
|
||||
subg = cand.copy()
|
||||
stack: list[tuple[set[_Node], set[_Node], set[_Node]]] = []
|
||||
Q.append(None)
|
||||
|
||||
u = max(subg, key=lambda u: len(cand & adj[u]))
|
||||
ext_u = cand - adj[u]
|
||||
|
||||
try:
|
||||
while True:
|
||||
if ext_u:
|
||||
q = ext_u.pop()
|
||||
cand.remove(q)
|
||||
Q[-1] = q
|
||||
adj_q = adj[q]
|
||||
subg_q = subg & adj_q
|
||||
if not subg_q:
|
||||
yield cast(list[_Node], Q[:])
|
||||
else:
|
||||
cand_q = cand & adj_q
|
||||
if cand_q:
|
||||
stack.append((subg, cand, ext_u))
|
||||
Q.append(None)
|
||||
subg = subg_q
|
||||
cand = cand_q
|
||||
u = max(subg, key=lambda u: len(cand & adj[u]))
|
||||
ext_u = cand - adj[u]
|
||||
else:
|
||||
Q.pop()
|
||||
subg, cand, ext_u = stack.pop()
|
||||
except IndexError:
|
||||
pass
|
Loading…
Reference in New Issue
Block a user