Add day 14.

This commit is contained in:
Mikael CAPELLE 2022-12-14 09:29:56 +01:00
parent fe3aad7ddd
commit e9d5f9747b
2 changed files with 290 additions and 0 deletions

144
2022/day14.py Normal file
View File

@ -0,0 +1,144 @@
# -*- encoding: utf-8 -*-
import sys
from collections import defaultdict
from enum import Enum, auto
from typing import Callable, cast
class Cell(Enum):
AIR = auto()
ROCK = auto()
SAND = auto()
def __str__(self) -> str:
return {Cell.AIR: ".", Cell.ROCK: "#", Cell.SAND: "O"}[self]
def print_blocks(blocks: dict[tuple[int, int], Cell]):
"""
Print the given set of blocks on a grid.
Args:
blocks: Set of blocks to print.
"""
x_min, y_min, x_max, y_max = (
min(x for x, y in blocks),
0,
max(x for x, y in blocks),
max(y for x, y in blocks),
)
for y in range(y_min, y_max + 1):
print(
"".join(str(blocks.get((x, y), Cell.AIR)) for x in range(x_min, x_max + 1))
)
def flow(
blocks: dict[tuple[int, int], Cell],
stop_fn: Callable[[int, int], bool],
fill_fn: Callable[[int, int], Cell],
) -> dict[tuple[int, int], Cell]:
"""
Flow sands onto the given set of blocks
Args:
blocks: Blocks containing ROCK position. Modified in-place.
stop_fn: Function called with the last (assumed) position of a grain of
sand BEFORE adding it to blocks. If the function returns True, the grain
is added and a new one is flowed, otherwise, the whole procedure stops
and the function returns (without adding the final grain).
fill_fn: Function called when the target position of a grain (during the
flowing process) is missing from blocks.
Returns:
The input blocks.
"""
y_max = max(y for x, y in blocks)
while True:
x, y = 500, 0
while y <= y_max:
moved = False
for cx, cy in ((x, y + 1), (x - 1, y + 1), (x + 1, y + 1)):
if (cx, cy) not in blocks and fill_fn(cx, cy) == Cell.AIR:
x, y = cx, cy
moved = True
elif blocks[cx, cy] == Cell.AIR:
x, y = cx, cy
moved = True
if moved:
break
if not moved:
break
if stop_fn(x, y):
break
blocks[x, y] = Cell.SAND
return blocks
# === inputs ===
lines = sys.stdin.read().splitlines()
paths: list[list[tuple[int, int]]] = []
for line in lines:
parts = line.split(" -> ")
paths.append(
[
cast(tuple[int, int], tuple(int(c.strip()) for c in part.split(",")))
for part in parts
]
)
blocks: dict[tuple[int, int], Cell] = {}
for path in paths:
for start, end in zip(path[:-1], path[1:]):
x_start = min(start[0], end[0])
x_end = max(start[0], end[0]) + 1
y_start = min(start[1], end[1])
y_end = max(start[1], end[1]) + 1
for x in range(x_start, x_end):
for y in range(y_start, y_end):
blocks[x, y] = Cell.ROCK
print_blocks(blocks)
print()
x_min, y_min, x_max, y_max = (
min(x for x, y in blocks),
0,
max(x for x, y in blocks),
max(y for x, y in blocks),
)
# === part 1 ===
blocks_1 = flow(
blocks.copy(), stop_fn=lambda x, y: y > y_max, fill_fn=lambda x, y: Cell.AIR
)
print_blocks(blocks_1)
print(f"answer 1 is {sum(v == Cell.SAND for v in blocks_1.values())}")
print()
# === part 2 ===
blocks_2 = flow(
blocks.copy(),
stop_fn=lambda x, y: x == 500 and y == 0,
fill_fn=lambda x, y: Cell.AIR if y < y_max + 2 else Cell.ROCK,
)
blocks_2[500, 0] = Cell.SAND
print_blocks(blocks_2)
print(f"answer 2 is {sum(v == Cell.SAND for v in blocks_2.values())}")

146
2022/inputs/day14.txt Normal file
View File

@ -0,0 +1,146 @@
477,140 -> 481,140
468,149 -> 472,149
482,30 -> 482,23 -> 482,30 -> 484,30 -> 484,20 -> 484,30 -> 486,30 -> 486,26 -> 486,30 -> 488,30 -> 488,23 -> 488,30 -> 490,30 -> 490,20 -> 490,30 -> 492,30 -> 492,25 -> 492,30 -> 494,30 -> 494,29 -> 494,30 -> 496,30 -> 496,24 -> 496,30
465,152 -> 469,152
482,30 -> 482,23 -> 482,30 -> 484,30 -> 484,20 -> 484,30 -> 486,30 -> 486,26 -> 486,30 -> 488,30 -> 488,23 -> 488,30 -> 490,30 -> 490,20 -> 490,30 -> 492,30 -> 492,25 -> 492,30 -> 494,30 -> 494,29 -> 494,30 -> 496,30 -> 496,24 -> 496,30
501,140 -> 505,140
490,43 -> 490,42 -> 490,43 -> 492,43 -> 492,35 -> 492,43 -> 494,43 -> 494,38 -> 494,43 -> 496,43 -> 496,36 -> 496,43 -> 498,43 -> 498,39 -> 498,43 -> 500,43 -> 500,35 -> 500,43 -> 502,43 -> 502,36 -> 502,43
498,17 -> 503,17
504,68 -> 504,59 -> 504,68 -> 506,68 -> 506,60 -> 506,68 -> 508,68 -> 508,63 -> 508,68 -> 510,68 -> 510,67 -> 510,68
492,131 -> 496,131
490,43 -> 490,42 -> 490,43 -> 492,43 -> 492,35 -> 492,43 -> 494,43 -> 494,38 -> 494,43 -> 496,43 -> 496,36 -> 496,43 -> 498,43 -> 498,39 -> 498,43 -> 500,43 -> 500,35 -> 500,43 -> 502,43 -> 502,36 -> 502,43
482,30 -> 482,23 -> 482,30 -> 484,30 -> 484,20 -> 484,30 -> 486,30 -> 486,26 -> 486,30 -> 488,30 -> 488,23 -> 488,30 -> 490,30 -> 490,20 -> 490,30 -> 492,30 -> 492,25 -> 492,30 -> 494,30 -> 494,29 -> 494,30 -> 496,30 -> 496,24 -> 496,30
501,116 -> 505,116
495,122 -> 499,122
486,131 -> 490,131
462,155 -> 462,157 -> 457,157 -> 457,162 -> 471,162 -> 471,157 -> 465,157 -> 465,155
514,84 -> 514,79 -> 514,84 -> 516,84 -> 516,78 -> 516,84 -> 518,84 -> 518,77 -> 518,84 -> 520,84 -> 520,82 -> 520,84 -> 522,84 -> 522,79 -> 522,84
504,104 -> 504,105 -> 521,105 -> 521,104
503,70 -> 503,71 -> 518,71
501,15 -> 506,15
514,84 -> 514,79 -> 514,84 -> 516,84 -> 516,78 -> 516,84 -> 518,84 -> 518,77 -> 518,84 -> 520,84 -> 520,82 -> 520,84 -> 522,84 -> 522,79 -> 522,84
504,119 -> 508,119
529,93 -> 529,95 -> 526,95 -> 526,100 -> 541,100 -> 541,95 -> 533,95 -> 533,93
482,30 -> 482,23 -> 482,30 -> 484,30 -> 484,20 -> 484,30 -> 486,30 -> 486,26 -> 486,30 -> 488,30 -> 488,23 -> 488,30 -> 490,30 -> 490,20 -> 490,30 -> 492,30 -> 492,25 -> 492,30 -> 494,30 -> 494,29 -> 494,30 -> 496,30 -> 496,24 -> 496,30
514,84 -> 514,79 -> 514,84 -> 516,84 -> 516,78 -> 516,84 -> 518,84 -> 518,77 -> 518,84 -> 520,84 -> 520,82 -> 520,84 -> 522,84 -> 522,79 -> 522,84
462,155 -> 462,157 -> 457,157 -> 457,162 -> 471,162 -> 471,157 -> 465,157 -> 465,155
471,146 -> 475,146
502,46 -> 502,48 -> 494,48 -> 494,55 -> 507,55 -> 507,48 -> 506,48 -> 506,46
514,84 -> 514,79 -> 514,84 -> 516,84 -> 516,78 -> 516,84 -> 518,84 -> 518,77 -> 518,84 -> 520,84 -> 520,82 -> 520,84 -> 522,84 -> 522,79 -> 522,84
502,46 -> 502,48 -> 494,48 -> 494,55 -> 507,55 -> 507,48 -> 506,48 -> 506,46
495,134 -> 499,134
482,30 -> 482,23 -> 482,30 -> 484,30 -> 484,20 -> 484,30 -> 486,30 -> 486,26 -> 486,30 -> 488,30 -> 488,23 -> 488,30 -> 490,30 -> 490,20 -> 490,30 -> 492,30 -> 492,25 -> 492,30 -> 494,30 -> 494,29 -> 494,30 -> 496,30 -> 496,24 -> 496,30
490,43 -> 490,42 -> 490,43 -> 492,43 -> 492,35 -> 492,43 -> 494,43 -> 494,38 -> 494,43 -> 496,43 -> 496,36 -> 496,43 -> 498,43 -> 498,39 -> 498,43 -> 500,43 -> 500,35 -> 500,43 -> 502,43 -> 502,36 -> 502,43
482,30 -> 482,23 -> 482,30 -> 484,30 -> 484,20 -> 484,30 -> 486,30 -> 486,26 -> 486,30 -> 488,30 -> 488,23 -> 488,30 -> 490,30 -> 490,20 -> 490,30 -> 492,30 -> 492,25 -> 492,30 -> 494,30 -> 494,29 -> 494,30 -> 496,30 -> 496,24 -> 496,30
498,125 -> 502,125
490,43 -> 490,42 -> 490,43 -> 492,43 -> 492,35 -> 492,43 -> 494,43 -> 494,38 -> 494,43 -> 496,43 -> 496,36 -> 496,43 -> 498,43 -> 498,39 -> 498,43 -> 500,43 -> 500,35 -> 500,43 -> 502,43 -> 502,36 -> 502,43
501,122 -> 505,122
495,140 -> 499,140
520,108 -> 520,110 -> 516,110 -> 516,113 -> 529,113 -> 529,110 -> 525,110 -> 525,108
490,43 -> 490,42 -> 490,43 -> 492,43 -> 492,35 -> 492,43 -> 494,43 -> 494,38 -> 494,43 -> 496,43 -> 496,36 -> 496,43 -> 498,43 -> 498,39 -> 498,43 -> 500,43 -> 500,35 -> 500,43 -> 502,43 -> 502,36 -> 502,43
502,46 -> 502,48 -> 494,48 -> 494,55 -> 507,55 -> 507,48 -> 506,48 -> 506,46
498,119 -> 502,119
482,30 -> 482,23 -> 482,30 -> 484,30 -> 484,20 -> 484,30 -> 486,30 -> 486,26 -> 486,30 -> 488,30 -> 488,23 -> 488,30 -> 490,30 -> 490,20 -> 490,30 -> 492,30 -> 492,25 -> 492,30 -> 494,30 -> 494,29 -> 494,30 -> 496,30 -> 496,24 -> 496,30
482,30 -> 482,23 -> 482,30 -> 484,30 -> 484,20 -> 484,30 -> 486,30 -> 486,26 -> 486,30 -> 488,30 -> 488,23 -> 488,30 -> 490,30 -> 490,20 -> 490,30 -> 492,30 -> 492,25 -> 492,30 -> 494,30 -> 494,29 -> 494,30 -> 496,30 -> 496,24 -> 496,30
490,43 -> 490,42 -> 490,43 -> 492,43 -> 492,35 -> 492,43 -> 494,43 -> 494,38 -> 494,43 -> 496,43 -> 496,36 -> 496,43 -> 498,43 -> 498,39 -> 498,43 -> 500,43 -> 500,35 -> 500,43 -> 502,43 -> 502,36 -> 502,43
482,30 -> 482,23 -> 482,30 -> 484,30 -> 484,20 -> 484,30 -> 486,30 -> 486,26 -> 486,30 -> 488,30 -> 488,23 -> 488,30 -> 490,30 -> 490,20 -> 490,30 -> 492,30 -> 492,25 -> 492,30 -> 494,30 -> 494,29 -> 494,30 -> 496,30 -> 496,24 -> 496,30
490,43 -> 490,42 -> 490,43 -> 492,43 -> 492,35 -> 492,43 -> 494,43 -> 494,38 -> 494,43 -> 496,43 -> 496,36 -> 496,43 -> 498,43 -> 498,39 -> 498,43 -> 500,43 -> 500,35 -> 500,43 -> 502,43 -> 502,36 -> 502,43
514,84 -> 514,79 -> 514,84 -> 516,84 -> 516,78 -> 516,84 -> 518,84 -> 518,77 -> 518,84 -> 520,84 -> 520,82 -> 520,84 -> 522,84 -> 522,79 -> 522,84
482,30 -> 482,23 -> 482,30 -> 484,30 -> 484,20 -> 484,30 -> 486,30 -> 486,26 -> 486,30 -> 488,30 -> 488,23 -> 488,30 -> 490,30 -> 490,20 -> 490,30 -> 492,30 -> 492,25 -> 492,30 -> 494,30 -> 494,29 -> 494,30 -> 496,30 -> 496,24 -> 496,30
498,137 -> 502,137
474,149 -> 478,149
514,84 -> 514,79 -> 514,84 -> 516,84 -> 516,78 -> 516,84 -> 518,84 -> 518,77 -> 518,84 -> 520,84 -> 520,82 -> 520,84 -> 522,84 -> 522,79 -> 522,84
517,90 -> 531,90
504,68 -> 504,59 -> 504,68 -> 506,68 -> 506,60 -> 506,68 -> 508,68 -> 508,63 -> 508,68 -> 510,68 -> 510,67 -> 510,68
504,68 -> 504,59 -> 504,68 -> 506,68 -> 506,60 -> 506,68 -> 508,68 -> 508,63 -> 508,68 -> 510,68 -> 510,67 -> 510,68
504,68 -> 504,59 -> 504,68 -> 506,68 -> 506,60 -> 506,68 -> 508,68 -> 508,63 -> 508,68 -> 510,68 -> 510,67 -> 510,68
514,84 -> 514,79 -> 514,84 -> 516,84 -> 516,78 -> 516,84 -> 518,84 -> 518,77 -> 518,84 -> 520,84 -> 520,82 -> 520,84 -> 522,84 -> 522,79 -> 522,84
483,152 -> 487,152
490,43 -> 490,42 -> 490,43 -> 492,43 -> 492,35 -> 492,43 -> 494,43 -> 494,38 -> 494,43 -> 496,43 -> 496,36 -> 496,43 -> 498,43 -> 498,39 -> 498,43 -> 500,43 -> 500,35 -> 500,43 -> 502,43 -> 502,36 -> 502,43
483,134 -> 487,134
490,43 -> 490,42 -> 490,43 -> 492,43 -> 492,35 -> 492,43 -> 494,43 -> 494,38 -> 494,43 -> 496,43 -> 496,36 -> 496,43 -> 498,43 -> 498,39 -> 498,43 -> 500,43 -> 500,35 -> 500,43 -> 502,43 -> 502,36 -> 502,43
489,134 -> 493,134
482,30 -> 482,23 -> 482,30 -> 484,30 -> 484,20 -> 484,30 -> 486,30 -> 486,26 -> 486,30 -> 488,30 -> 488,23 -> 488,30 -> 490,30 -> 490,20 -> 490,30 -> 492,30 -> 492,25 -> 492,30 -> 494,30 -> 494,29 -> 494,30 -> 496,30 -> 496,24 -> 496,30
477,146 -> 481,146
462,155 -> 462,157 -> 457,157 -> 457,162 -> 471,162 -> 471,157 -> 465,157 -> 465,155
514,84 -> 514,79 -> 514,84 -> 516,84 -> 516,78 -> 516,84 -> 518,84 -> 518,77 -> 518,84 -> 520,84 -> 520,82 -> 520,84 -> 522,84 -> 522,79 -> 522,84
462,167 -> 462,168 -> 474,168 -> 474,167
490,43 -> 490,42 -> 490,43 -> 492,43 -> 492,35 -> 492,43 -> 494,43 -> 494,38 -> 494,43 -> 496,43 -> 496,36 -> 496,43 -> 498,43 -> 498,39 -> 498,43 -> 500,43 -> 500,35 -> 500,43 -> 502,43 -> 502,36 -> 502,43
520,108 -> 520,110 -> 516,110 -> 516,113 -> 529,113 -> 529,110 -> 525,110 -> 525,108
490,43 -> 490,42 -> 490,43 -> 492,43 -> 492,35 -> 492,43 -> 494,43 -> 494,38 -> 494,43 -> 496,43 -> 496,36 -> 496,43 -> 498,43 -> 498,39 -> 498,43 -> 500,43 -> 500,35 -> 500,43 -> 502,43 -> 502,36 -> 502,43
504,68 -> 504,59 -> 504,68 -> 506,68 -> 506,60 -> 506,68 -> 508,68 -> 508,63 -> 508,68 -> 510,68 -> 510,67 -> 510,68
504,68 -> 504,59 -> 504,68 -> 506,68 -> 506,60 -> 506,68 -> 508,68 -> 508,63 -> 508,68 -> 510,68 -> 510,67 -> 510,68
520,108 -> 520,110 -> 516,110 -> 516,113 -> 529,113 -> 529,110 -> 525,110 -> 525,108
514,84 -> 514,79 -> 514,84 -> 516,84 -> 516,78 -> 516,84 -> 518,84 -> 518,77 -> 518,84 -> 520,84 -> 520,82 -> 520,84 -> 522,84 -> 522,79 -> 522,84
482,30 -> 482,23 -> 482,30 -> 484,30 -> 484,20 -> 484,30 -> 486,30 -> 486,26 -> 486,30 -> 488,30 -> 488,23 -> 488,30 -> 490,30 -> 490,20 -> 490,30 -> 492,30 -> 492,25 -> 492,30 -> 494,30 -> 494,29 -> 494,30 -> 496,30 -> 496,24 -> 496,30
482,30 -> 482,23 -> 482,30 -> 484,30 -> 484,20 -> 484,30 -> 486,30 -> 486,26 -> 486,30 -> 488,30 -> 488,23 -> 488,30 -> 490,30 -> 490,20 -> 490,30 -> 492,30 -> 492,25 -> 492,30 -> 494,30 -> 494,29 -> 494,30 -> 496,30 -> 496,24 -> 496,30
482,30 -> 482,23 -> 482,30 -> 484,30 -> 484,20 -> 484,30 -> 486,30 -> 486,26 -> 486,30 -> 488,30 -> 488,23 -> 488,30 -> 490,30 -> 490,20 -> 490,30 -> 492,30 -> 492,25 -> 492,30 -> 494,30 -> 494,29 -> 494,30 -> 496,30 -> 496,24 -> 496,30
529,93 -> 529,95 -> 526,95 -> 526,100 -> 541,100 -> 541,95 -> 533,95 -> 533,93
474,143 -> 478,143
497,13 -> 502,13
529,93 -> 529,95 -> 526,95 -> 526,100 -> 541,100 -> 541,95 -> 533,95 -> 533,93
482,30 -> 482,23 -> 482,30 -> 484,30 -> 484,20 -> 484,30 -> 486,30 -> 486,26 -> 486,30 -> 488,30 -> 488,23 -> 488,30 -> 490,30 -> 490,20 -> 490,30 -> 492,30 -> 492,25 -> 492,30 -> 494,30 -> 494,29 -> 494,30 -> 496,30 -> 496,24 -> 496,30
482,30 -> 482,23 -> 482,30 -> 484,30 -> 484,20 -> 484,30 -> 486,30 -> 486,26 -> 486,30 -> 488,30 -> 488,23 -> 488,30 -> 490,30 -> 490,20 -> 490,30 -> 492,30 -> 492,25 -> 492,30 -> 494,30 -> 494,29 -> 494,30 -> 496,30 -> 496,24 -> 496,30
505,17 -> 510,17
529,93 -> 529,95 -> 526,95 -> 526,100 -> 541,100 -> 541,95 -> 533,95 -> 533,93
462,155 -> 462,157 -> 457,157 -> 457,162 -> 471,162 -> 471,157 -> 465,157 -> 465,155
477,152 -> 481,152
462,167 -> 462,168 -> 474,168 -> 474,167
504,104 -> 504,105 -> 521,105 -> 521,104
489,128 -> 493,128
520,108 -> 520,110 -> 516,110 -> 516,113 -> 529,113 -> 529,110 -> 525,110 -> 525,108
482,30 -> 482,23 -> 482,30 -> 484,30 -> 484,20 -> 484,30 -> 486,30 -> 486,26 -> 486,30 -> 488,30 -> 488,23 -> 488,30 -> 490,30 -> 490,20 -> 490,30 -> 492,30 -> 492,25 -> 492,30 -> 494,30 -> 494,29 -> 494,30 -> 496,30 -> 496,24 -> 496,30
502,46 -> 502,48 -> 494,48 -> 494,55 -> 507,55 -> 507,48 -> 506,48 -> 506,46
529,93 -> 529,95 -> 526,95 -> 526,100 -> 541,100 -> 541,95 -> 533,95 -> 533,93
490,43 -> 490,42 -> 490,43 -> 492,43 -> 492,35 -> 492,43 -> 494,43 -> 494,38 -> 494,43 -> 496,43 -> 496,36 -> 496,43 -> 498,43 -> 498,39 -> 498,43 -> 500,43 -> 500,35 -> 500,43 -> 502,43 -> 502,36 -> 502,43
482,30 -> 482,23 -> 482,30 -> 484,30 -> 484,20 -> 484,30 -> 486,30 -> 486,26 -> 486,30 -> 488,30 -> 488,23 -> 488,30 -> 490,30 -> 490,20 -> 490,30 -> 492,30 -> 492,25 -> 492,30 -> 494,30 -> 494,29 -> 494,30 -> 496,30 -> 496,24 -> 496,30
514,84 -> 514,79 -> 514,84 -> 516,84 -> 516,78 -> 516,84 -> 518,84 -> 518,77 -> 518,84 -> 520,84 -> 520,82 -> 520,84 -> 522,84 -> 522,79 -> 522,84
504,68 -> 504,59 -> 504,68 -> 506,68 -> 506,60 -> 506,68 -> 508,68 -> 508,63 -> 508,68 -> 510,68 -> 510,67 -> 510,68
483,140 -> 487,140
529,93 -> 529,95 -> 526,95 -> 526,100 -> 541,100 -> 541,95 -> 533,95 -> 533,93
482,30 -> 482,23 -> 482,30 -> 484,30 -> 484,20 -> 484,30 -> 486,30 -> 486,26 -> 486,30 -> 488,30 -> 488,23 -> 488,30 -> 490,30 -> 490,20 -> 490,30 -> 492,30 -> 492,25 -> 492,30 -> 494,30 -> 494,29 -> 494,30 -> 496,30 -> 496,24 -> 496,30
514,84 -> 514,79 -> 514,84 -> 516,84 -> 516,78 -> 516,84 -> 518,84 -> 518,77 -> 518,84 -> 520,84 -> 520,82 -> 520,84 -> 522,84 -> 522,79 -> 522,84
507,122 -> 511,122
489,140 -> 493,140
510,125 -> 514,125
490,43 -> 490,42 -> 490,43 -> 492,43 -> 492,35 -> 492,43 -> 494,43 -> 494,38 -> 494,43 -> 496,43 -> 496,36 -> 496,43 -> 498,43 -> 498,39 -> 498,43 -> 500,43 -> 500,35 -> 500,43 -> 502,43 -> 502,36 -> 502,43
480,149 -> 484,149
482,30 -> 482,23 -> 482,30 -> 484,30 -> 484,20 -> 484,30 -> 486,30 -> 486,26 -> 486,30 -> 488,30 -> 488,23 -> 488,30 -> 490,30 -> 490,20 -> 490,30 -> 492,30 -> 492,25 -> 492,30 -> 494,30 -> 494,29 -> 494,30 -> 496,30 -> 496,24 -> 496,30
492,125 -> 496,125
503,70 -> 503,71 -> 518,71
520,108 -> 520,110 -> 516,110 -> 516,113 -> 529,113 -> 529,110 -> 525,110 -> 525,108
462,155 -> 462,157 -> 457,157 -> 457,162 -> 471,162 -> 471,157 -> 465,157 -> 465,155
490,43 -> 490,42 -> 490,43 -> 492,43 -> 492,35 -> 492,43 -> 494,43 -> 494,38 -> 494,43 -> 496,43 -> 496,36 -> 496,43 -> 498,43 -> 498,39 -> 498,43 -> 500,43 -> 500,35 -> 500,43 -> 502,43 -> 502,36 -> 502,43
462,167 -> 462,168 -> 474,168 -> 474,167
490,43 -> 490,42 -> 490,43 -> 492,43 -> 492,35 -> 492,43 -> 494,43 -> 494,38 -> 494,43 -> 496,43 -> 496,36 -> 496,43 -> 498,43 -> 498,39 -> 498,43 -> 500,43 -> 500,35 -> 500,43 -> 502,43 -> 502,36 -> 502,43
514,84 -> 514,79 -> 514,84 -> 516,84 -> 516,78 -> 516,84 -> 518,84 -> 518,77 -> 518,84 -> 520,84 -> 520,82 -> 520,84 -> 522,84 -> 522,79 -> 522,84
491,17 -> 496,17
504,68 -> 504,59 -> 504,68 -> 506,68 -> 506,60 -> 506,68 -> 508,68 -> 508,63 -> 508,68 -> 510,68 -> 510,67 -> 510,68
502,46 -> 502,48 -> 494,48 -> 494,55 -> 507,55 -> 507,48 -> 506,48 -> 506,46
504,68 -> 504,59 -> 504,68 -> 506,68 -> 506,60 -> 506,68 -> 508,68 -> 508,63 -> 508,68 -> 510,68 -> 510,67 -> 510,68
504,68 -> 504,59 -> 504,68 -> 506,68 -> 506,60 -> 506,68 -> 508,68 -> 508,63 -> 508,68 -> 510,68 -> 510,67 -> 510,68
490,43 -> 490,42 -> 490,43 -> 492,43 -> 492,35 -> 492,43 -> 494,43 -> 494,38 -> 494,43 -> 496,43 -> 496,36 -> 496,43 -> 498,43 -> 498,39 -> 498,43 -> 500,43 -> 500,35 -> 500,43 -> 502,43 -> 502,36 -> 502,43
482,30 -> 482,23 -> 482,30 -> 484,30 -> 484,20 -> 484,30 -> 486,30 -> 486,26 -> 486,30 -> 488,30 -> 488,23 -> 488,30 -> 490,30 -> 490,20 -> 490,30 -> 492,30 -> 492,25 -> 492,30 -> 494,30 -> 494,29 -> 494,30 -> 496,30 -> 496,24 -> 496,30
504,125 -> 508,125
462,155 -> 462,157 -> 457,157 -> 457,162 -> 471,162 -> 471,157 -> 465,157 -> 465,155
490,43 -> 490,42 -> 490,43 -> 492,43 -> 492,35 -> 492,43 -> 494,43 -> 494,38 -> 494,43 -> 496,43 -> 496,36 -> 496,43 -> 498,43 -> 498,39 -> 498,43 -> 500,43 -> 500,35 -> 500,43 -> 502,43 -> 502,36 -> 502,43
490,43 -> 490,42 -> 490,43 -> 492,43 -> 492,35 -> 492,43 -> 494,43 -> 494,38 -> 494,43 -> 496,43 -> 496,36 -> 496,43 -> 498,43 -> 498,39 -> 498,43 -> 500,43 -> 500,35 -> 500,43 -> 502,43 -> 502,36 -> 502,43
502,46 -> 502,48 -> 494,48 -> 494,55 -> 507,55 -> 507,48 -> 506,48 -> 506,46
504,68 -> 504,59 -> 504,68 -> 506,68 -> 506,60 -> 506,68 -> 508,68 -> 508,63 -> 508,68 -> 510,68 -> 510,67 -> 510,68
486,137 -> 490,137
502,46 -> 502,48 -> 494,48 -> 494,55 -> 507,55 -> 507,48 -> 506,48 -> 506,46
462,155 -> 462,157 -> 457,157 -> 457,162 -> 471,162 -> 471,157 -> 465,157 -> 465,155
529,93 -> 529,95 -> 526,95 -> 526,100 -> 541,100 -> 541,95 -> 533,95 -> 533,93
504,104 -> 504,105 -> 521,105 -> 521,104
490,43 -> 490,42 -> 490,43 -> 492,43 -> 492,35 -> 492,43 -> 494,43 -> 494,38 -> 494,43 -> 496,43 -> 496,36 -> 496,43 -> 498,43 -> 498,39 -> 498,43 -> 500,43 -> 500,35 -> 500,43 -> 502,43 -> 502,36 -> 502,43
471,152 -> 475,152
520,108 -> 520,110 -> 516,110 -> 516,113 -> 529,113 -> 529,110 -> 525,110 -> 525,108
514,84 -> 514,79 -> 514,84 -> 516,84 -> 516,78 -> 516,84 -> 518,84 -> 518,77 -> 518,84 -> 520,84 -> 520,82 -> 520,84 -> 522,84 -> 522,79 -> 522,84
494,15 -> 499,15
490,43 -> 490,42 -> 490,43 -> 492,43 -> 492,35 -> 492,43 -> 494,43 -> 494,38 -> 494,43 -> 496,43 -> 496,36 -> 496,43 -> 498,43 -> 498,39 -> 498,43 -> 500,43 -> 500,35 -> 500,43 -> 502,43 -> 502,36 -> 502,43
514,84 -> 514,79 -> 514,84 -> 516,84 -> 516,78 -> 516,84 -> 518,84 -> 518,77 -> 518,84 -> 520,84 -> 520,82 -> 520,84 -> 522,84 -> 522,79 -> 522,84
492,137 -> 496,137
480,137 -> 484,137
520,108 -> 520,110 -> 516,110 -> 516,113 -> 529,113 -> 529,110 -> 525,110 -> 525,108
482,30 -> 482,23 -> 482,30 -> 484,30 -> 484,20 -> 484,30 -> 486,30 -> 486,26 -> 486,30 -> 488,30 -> 488,23 -> 488,30 -> 490,30 -> 490,20 -> 490,30 -> 492,30 -> 492,25 -> 492,30 -> 494,30 -> 494,29 -> 494,30 -> 496,30 -> 496,24 -> 496,30
482,30 -> 482,23 -> 482,30 -> 484,30 -> 484,20 -> 484,30 -> 486,30 -> 486,26 -> 486,30 -> 488,30 -> 488,23 -> 488,30 -> 490,30 -> 490,20 -> 490,30 -> 492,30 -> 492,25 -> 492,30 -> 494,30 -> 494,29 -> 494,30 -> 496,30 -> 496,24 -> 496,30