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
|
.ruff_cache
|
||||||
.vscode
|
.vscode
|
||||||
build
|
build
|
||||||
files
|
|
||||||
|
@ -63,6 +63,7 @@ class Solver(BaseSolver):
|
|||||||
(x, y, z), (vx, vy, vz), positions[i1], velocities[i1]
|
(x, y, z), (vx, vy, vz), positions[i1], velocities[i1]
|
||||||
):
|
):
|
||||||
equations.append(p + ti * d - pi - ti * di)
|
equations.append(p + ti * d - pi - ti * di)
|
||||||
|
print(equations)
|
||||||
|
|
||||||
r = solve(equations, [x, y, z, vx, vy, vz] + list(ts), dict=True)[0]
|
r = solve(equations, [x, y, z, vx, vy, vz] + list(ts), dict=True)[0]
|
||||||
yield r[x] + r[y] + r[z]
|
yield r[x] + r[y] + r[z]
|
||||||
|
@ -1,58 +1,7 @@
|
|||||||
from typing import Any, Iterator
|
from typing import Any, Iterator
|
||||||
|
|
||||||
from ..base import BaseSolver
|
from ..base import BaseSolver
|
||||||
from ..tools import graphs
|
|
||||||
|
|
||||||
|
|
||||||
class Solver(BaseSolver):
|
class Solver(BaseSolver):
|
||||||
def print_grid(self, grid: list[tuple[int, int]], n_rows: int, n_cols: int):
|
def solve(self, input: str) -> Iterator[Any]: ...
|
||||||
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
|
|
||||||
|
@ -1,42 +1,7 @@
|
|||||||
from functools import cache
|
|
||||||
from typing import Any, Iterator
|
from typing import Any, Iterator
|
||||||
|
|
||||||
from ..base import BaseSolver
|
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):
|
class Solver(BaseSolver):
|
||||||
def solve(self, input: str) -> Iterator[Any]:
|
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))
|
|
||||||
|
@ -1,95 +1,7 @@
|
|||||||
import itertools
|
from typing import Any, Iterator
|
||||||
from collections import Counter
|
|
||||||
from typing import Any, Callable, Iterable, Iterator, Sequence, TypeAlias
|
|
||||||
|
|
||||||
from ..base import BaseSolver
|
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):
|
class Solver(BaseSolver):
|
||||||
def find_cheats(
|
def solve(self, input: str) -> Iterator[Any]: ...
|
||||||
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())
|
|
||||||
|
@ -1,85 +1,7 @@
|
|||||||
import itertools
|
from typing import Any, Iterator
|
||||||
from functools import cache
|
|
||||||
from typing import Any, Iterator, Literal
|
|
||||||
|
|
||||||
from ..base import BaseSolver
|
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):
|
class Solver(BaseSolver):
|
||||||
def solve(self, input: str) -> Iterator[Any]:
|
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()
|
|
||||||
)
|
|
||||||
|
@ -3,57 +3,5 @@ from typing import Any, Iterator
|
|||||||
from ..base import BaseSolver
|
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):
|
class Solver(BaseSolver):
|
||||||
def solve(self, input: str) -> Iterator[Any]:
|
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)
|
|
||||||
|
@ -1,36 +1,7 @@
|
|||||||
from collections import defaultdict
|
|
||||||
from typing import Any, Iterator
|
from typing import Any, Iterator
|
||||||
|
|
||||||
from ..base import BaseSolver
|
from ..base import BaseSolver
|
||||||
from ..tools.graphs import iter_max_cliques
|
|
||||||
|
|
||||||
|
|
||||||
class Solver(BaseSolver):
|
class Solver(BaseSolver):
|
||||||
def solve(self, input: str) -> Iterator[Any]:
|
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))
|
|
||||||
|
@ -1,170 +1,7 @@
|
|||||||
from dataclasses import dataclass
|
from typing import Any, Iterator
|
||||||
from typing import Any, Iterator, Literal, TypeAlias, cast
|
|
||||||
|
|
||||||
from ..base import BaseSolver
|
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):
|
class Solver(BaseSolver):
|
||||||
def solve(self, input: str) -> Iterator[Any]:
|
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))
|
|
||||||
|
@ -1,40 +1,7 @@
|
|||||||
import itertools as it
|
|
||||||
from typing import Any, Iterator
|
from typing import Any, Iterator
|
||||||
|
|
||||||
from ..base import BaseSolver
|
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):
|
class Solver(BaseSolver):
|
||||||
def solve(self, input: str) -> Iterator[Any]:
|
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)
|
|
||||||
)
|
|
||||||
|
@ -12,29 +12,10 @@ from .utils.files import SimpleFileHandler
|
|||||||
from .utils.progress import ProgressNone, ProgressTQDM
|
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():
|
def main():
|
||||||
parser = argparse.ArgumentParser("Holt59 Advent-Of-Code Runner")
|
parser = argparse.ArgumentParser("Holt59 Advent-Of-Code Runner")
|
||||||
parser.add_argument("-v", "--verbose", action="store_true", help="verbose mode")
|
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("-t", "--test", action="store_true", help="test mode")
|
||||||
|
|
||||||
parser.add_argument("-a", "--api", action="store_true", help="API mode")
|
parser.add_argument("-a", "--api", action="store_true", help="API mode")
|
||||||
parser.add_argument(
|
parser.add_argument(
|
||||||
"-o",
|
"-o",
|
||||||
@ -80,13 +61,9 @@ def main():
|
|||||||
handlers=[LoggerAPIHandler()] if api else None,
|
handlers=[LoggerAPIHandler()] if api else None,
|
||||||
)
|
)
|
||||||
|
|
||||||
if input_path is None or not input_path.exists():
|
if input_path is None:
|
||||||
input_path = find_input_file(
|
input_path = Path(__file__).parent.joinpath(
|
||||||
Path(__file__).parent.joinpath(
|
"inputs", "tests" if test else user, str(year), f"day{day}.txt"
|
||||||
"inputs", "tests" if test else user, str(year)
|
|
||||||
),
|
|
||||||
day,
|
|
||||||
input_path,
|
|
||||||
)
|
)
|
||||||
assert input_path.exists(), f"{input_path} missing"
|
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