Compare commits
100 commits
02110dfaeb
...
ef539ad5cb
| Author | SHA1 | Date | |
|---|---|---|---|
| ef539ad5cb | |||
| 656db880ab | |||
| 7b161434a5 | |||
| 013f583944 | |||
| fc5ef5f83f | |||
| ea3b670d49 | |||
| d905dcc32d | |||
| 7f9ed7325a | |||
| ea5c7d369b | |||
| 1c84f82f67 | |||
| 7d9f0ae27f | |||
| 526cb9d2e6 | |||
| 2cecebac87 | |||
| 69269e912b | |||
| 0f36a98331 | |||
| a845a4012a | |||
| 58a871b301 | |||
| 1d6c65d119 | |||
| d8eab92d59 | |||
| 0551bbe9e7 | |||
| 7dfce6e7bc | |||
| 42eb09aeca | |||
| bee5998c2e | |||
| 1d0527fc72 | |||
| c27aa66e04 | |||
| b20880b47c | |||
| 4dcbc0f431 | |||
| 507279b0e9 | |||
| 2cba347a13 | |||
| 3bb9396555 | |||
| 5bf73d5948 | |||
| a126c036f1 | |||
| f0bb869336 | |||
| 2f54858040 | |||
| 82d5566cc5 | |||
| 86aa353f5d | |||
| cfb24fc103 | |||
| 336b032520 | |||
| 13740c7423 | |||
| 16d54ff2e0 | |||
| d69f18f129 | |||
| f1d38c578f | |||
| 5939ba8fd1 | |||
| 3d4c9cb443 | |||
| f047fe1d42 | |||
| b78c0016d8 | |||
| 87ce54f838 | |||
| 2aad8aa38a | |||
| 8f9429148f | |||
| 49aa128a1e | |||
| 6c4b5d1b4a | |||
| d7b9b84b9b | |||
| 2448b7080f | |||
| 6e1ae5ce37 | |||
| 752d8100e0 | |||
| 06c3954fa4 | |||
| d263ba25f3 | |||
| 882113d60c | |||
| d1c48525c6 | |||
| fe14cd24f7 | |||
| 28f5896674 | |||
| 6077454573 | |||
| 840d9d5b67 | |||
| 5cc92903db | |||
| d0c5d60c3e | |||
| d8242fb07f | |||
| 8147a809df | |||
| 9629349421 | |||
| a913369e5b | |||
| c644a5b800 | |||
| 91d075bf1b | |||
| 0fd197c8c8 | |||
| eb1ed9547e | |||
| 45b1acf093 | |||
| 517df15185 | |||
| ca6cd04d57 | |||
| c8b28ef2ef | |||
| 80095f3ee5 | |||
| b57e8e30e8 | |||
| 328ae5cc3b | |||
| b4235a9b34 | |||
| 4188180886 | |||
| 25dbce3ee2 | |||
| e306d68e81 | |||
| 4c238e8f76 | |||
| 034e8a6e15 | |||
| dcdecaec56 | |||
| c7d54cd000 | |||
| 6c7b1ceefa | |||
| 96f0060b43 | |||
| 2805202a0d | |||
| 7539caccea | |||
| e1bec41d1d | |||
| 3f121734af | |||
| e308ed92e9 | |||
| cb8aea3bdd | |||
| 076b93e73a | |||
| 50d4959244 | |||
| 561eb1b4fe | |||
| 5f043c383c |
100 changed files with 19248 additions and 0 deletions
64
2016/d01/ex1/ex1.py
Executable file
64
2016/d01/ex1/ex1.py
Executable file
|
|
@ -0,0 +1,64 @@
|
|||
#!/usr/bin/env python
|
||||
|
||||
import enum
|
||||
import sys
|
||||
from typing import NamedTuple
|
||||
|
||||
|
||||
class Point(NamedTuple):
|
||||
x: int
|
||||
y: int
|
||||
|
||||
|
||||
class Direction(enum.Enum):
|
||||
NORTH = Point(-1, 0)
|
||||
EAST = Point(0, 1)
|
||||
SOUTH = Point(1, 0)
|
||||
WEST = Point(0, -1)
|
||||
|
||||
def left(self) -> "Direction":
|
||||
match self:
|
||||
case Direction.NORTH:
|
||||
return Direction.WEST
|
||||
case Direction.EAST:
|
||||
return Direction.NORTH
|
||||
case Direction.SOUTH:
|
||||
return Direction.EAST
|
||||
case Direction.WEST:
|
||||
return Direction.SOUTH
|
||||
|
||||
def right(self) -> "Direction":
|
||||
match self:
|
||||
case Direction.NORTH:
|
||||
return Direction.EAST
|
||||
case Direction.EAST:
|
||||
return Direction.SOUTH
|
||||
case Direction.SOUTH:
|
||||
return Direction.WEST
|
||||
case Direction.WEST:
|
||||
return Direction.NORTH
|
||||
|
||||
def apply(self, p: Point, n: int = 1) -> Point:
|
||||
dx, dy = self.value
|
||||
return Point(p.x + dx * n, p.y + dy * n)
|
||||
|
||||
|
||||
def solve(input: str) -> int:
|
||||
def parse(input: str) -> list[tuple[str, int]]:
|
||||
return [((line[0]), int(line[1:])) for line in input.split(", ")]
|
||||
|
||||
pos, dir = Point(0, 0), Direction.NORTH
|
||||
directions = parse(input)
|
||||
for turn, length in directions:
|
||||
dir = dir.left() if turn == "L" else dir.right()
|
||||
pos = dir.apply(pos, length)
|
||||
return abs(pos.x) + abs(pos.y)
|
||||
|
||||
|
||||
def main() -> None:
|
||||
input = sys.stdin.read()
|
||||
print(solve(input))
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
1
2016/d01/ex1/input
Normal file
1
2016/d01/ex1/input
Normal file
|
|
@ -0,0 +1 @@
|
|||
R1, R1, R3, R1, R1, L2, R5, L2, R5, R1, R4, L2, R3, L3, R4, L5, R4, R4, R1, L5, L4, R5, R3, L1, R4, R3, L2, L1, R3, L4, R3, L2, R5, R190, R3, R5, L5, L1, R54, L3, L4, L1, R4, R1, R3, L1, L1, R2, L2, R2, R5, L3, R4, R76, L3, R4, R191, R5, R5, L5, L4, L5, L3, R1, R3, R2, L2, L2, L4, L5, L4, R5, R4, R4, R2, R3, R4, L3, L2, R5, R3, L2, L1, R2, L3, R2, L1, L1, R1, L3, R5, L5, L1, L2, R5, R3, L3, R3, R5, R2, R5, R5, L5, L5, R2, L3, L5, L2, L1, R2, R2, L2, R2, L3, L2, R3, L5, R4, L4, L5, R3, L4, R1, R3, R2, R4, L2, L3, R2, L5, R5, R4, L2, R4, L1, L3, L1, L3, R1, R2, R1, L5, R5, R3, L3, L3, L2, R4, R2, L5, L1, L1, L5, L4, L1, L1, R1
|
||||
74
2016/d01/ex2/ex2.py
Executable file
74
2016/d01/ex2/ex2.py
Executable file
|
|
@ -0,0 +1,74 @@
|
|||
#!/usr/bin/env python
|
||||
|
||||
import enum
|
||||
import sys
|
||||
from typing import NamedTuple
|
||||
|
||||
|
||||
class Point(NamedTuple):
|
||||
x: int
|
||||
y: int
|
||||
|
||||
|
||||
class Direction(enum.Enum):
|
||||
NORTH = Point(-1, 0)
|
||||
EAST = Point(0, 1)
|
||||
SOUTH = Point(1, 0)
|
||||
WEST = Point(0, -1)
|
||||
|
||||
def left(self) -> "Direction":
|
||||
match self:
|
||||
case Direction.NORTH:
|
||||
return Direction.WEST
|
||||
case Direction.EAST:
|
||||
return Direction.NORTH
|
||||
case Direction.SOUTH:
|
||||
return Direction.EAST
|
||||
case Direction.WEST:
|
||||
return Direction.SOUTH
|
||||
|
||||
def right(self) -> "Direction":
|
||||
match self:
|
||||
case Direction.NORTH:
|
||||
return Direction.EAST
|
||||
case Direction.EAST:
|
||||
return Direction.SOUTH
|
||||
case Direction.SOUTH:
|
||||
return Direction.WEST
|
||||
case Direction.WEST:
|
||||
return Direction.NORTH
|
||||
|
||||
def apply(self, p: Point, n: int = 1) -> Point:
|
||||
dx, dy = self.value
|
||||
return Point(p.x + dx * n, p.y + dy * n)
|
||||
|
||||
|
||||
def solve(input: str) -> int:
|
||||
def parse(input: str) -> list[tuple[str, int]]:
|
||||
return [((line[0]), int(line[1:])) for line in input.split(", ")]
|
||||
|
||||
def first_repeat(directions: list[tuple[str, int]]) -> Point:
|
||||
pos, dir = Point(0, 0), Direction.NORTH
|
||||
directions = parse(input)
|
||||
seen = {pos}
|
||||
for turn, length in directions:
|
||||
dir = dir.left() if turn == "L" else dir.right()
|
||||
for _ in range(length):
|
||||
pos = dir.apply(pos)
|
||||
if pos in seen:
|
||||
return pos
|
||||
seen.add(pos)
|
||||
assert False # Sanity check
|
||||
|
||||
directions = parse(input)
|
||||
pos = first_repeat(directions)
|
||||
return abs(pos.x) + abs(pos.y)
|
||||
|
||||
|
||||
def main() -> None:
|
||||
input = sys.stdin.read()
|
||||
print(solve(input))
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
1
2016/d01/ex2/input
Normal file
1
2016/d01/ex2/input
Normal file
|
|
@ -0,0 +1 @@
|
|||
R1, R1, R3, R1, R1, L2, R5, L2, R5, R1, R4, L2, R3, L3, R4, L5, R4, R4, R1, L5, L4, R5, R3, L1, R4, R3, L2, L1, R3, L4, R3, L2, R5, R190, R3, R5, L5, L1, R54, L3, L4, L1, R4, R1, R3, L1, L1, R2, L2, R2, R5, L3, R4, R76, L3, R4, R191, R5, R5, L5, L4, L5, L3, R1, R3, R2, L2, L2, L4, L5, L4, R5, R4, R4, R2, R3, R4, L3, L2, R5, R3, L2, L1, R2, L3, R2, L1, L1, R1, L3, R5, L5, L1, L2, R5, R3, L3, R3, R5, R2, R5, R5, L5, L5, R2, L3, L5, L2, L1, R2, R2, L2, R2, L3, L2, R3, L5, R4, L4, L5, R3, L4, R1, R3, R2, R4, L2, L3, R2, L5, R5, R4, L2, R4, L1, L3, L1, L3, R1, R2, R1, L5, R5, R3, L3, L3, L2, R4, R2, L5, L1, L1, L5, L4, L1, L1, R1
|
||||
69
2016/d02/ex1/ex1.py
Executable file
69
2016/d02/ex1/ex1.py
Executable file
|
|
@ -0,0 +1,69 @@
|
|||
#!/usr/bin/env python
|
||||
|
||||
import enum
|
||||
import sys
|
||||
from typing import NamedTuple
|
||||
|
||||
|
||||
class Point(NamedTuple):
|
||||
x: int
|
||||
y: int
|
||||
|
||||
|
||||
class Direction(enum.StrEnum):
|
||||
UP = "U"
|
||||
DOWN = "D"
|
||||
LEFT = "L"
|
||||
RIGHT = "R"
|
||||
|
||||
def apply(self, p: Point) -> Point:
|
||||
match self:
|
||||
case Direction.UP:
|
||||
dx, dy = -1, 0
|
||||
case Direction.DOWN:
|
||||
dx, dy = 1, 0
|
||||
case Direction.LEFT:
|
||||
dx, dy = 0, -1
|
||||
case Direction.RIGHT:
|
||||
dx, dy = 0, 1
|
||||
return Point(p.x + dx, p.y + dy)
|
||||
|
||||
|
||||
def solve(input: str) -> int:
|
||||
def parse(input: str) -> list[list[Direction]]:
|
||||
return [[Direction(c) for c in line] for line in input.splitlines()]
|
||||
|
||||
def enter_code(directions: list[list[Direction]]) -> int:
|
||||
KEYPAD = {
|
||||
Point(-1, -1): 1,
|
||||
Point(-1, 0): 2,
|
||||
Point(-1, 1): 3,
|
||||
Point(0, -1): 4,
|
||||
Point(0, 0): 5,
|
||||
Point(0, 1): 6,
|
||||
Point(1, -1): 7,
|
||||
Point(1, 0): 8,
|
||||
Point(1, 1): 9,
|
||||
}
|
||||
res = 0
|
||||
pos = Point(0, 0)
|
||||
for line in directions:
|
||||
for d in line:
|
||||
new_pos = d.apply(pos)
|
||||
if new_pos not in KEYPAD:
|
||||
continue
|
||||
pos = new_pos
|
||||
res = res * 10 + KEYPAD[pos]
|
||||
return res
|
||||
|
||||
directions = parse(input)
|
||||
return enter_code(directions)
|
||||
|
||||
|
||||
def main() -> None:
|
||||
input = sys.stdin.read()
|
||||
print(solve(input))
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
5
2016/d02/ex1/input
Normal file
5
2016/d02/ex1/input
Normal file
|
|
@ -0,0 +1,5 @@
|
|||
DUURRDRRURUUUDLRUDDLLLURULRRLDULDRDUULULLUUUDRDUDDURRULDRDDDUDDURLDLLDDRRURRUUUDDRUDDLLDDDURLRDDDULRDUDDRDRLRDUULDLDRDLUDDDLRDRLDLUUUDLRDLRUUUDDLUURRLLLUUUUDDLDRRDRDRLDRLUUDUDLDRUDDUDLLUUURUUDLULRDRULURURDLDLLDLLDUDLDRDULLDUDDURRDDLLRLLLLDLDRLDDUULRDRURUDRRRDDDUULRULDDLRLLLLRLLLLRLURRRLRLRDLULRRLDRULDRRLRURDDLDDRLRDLDRLULLRRUDUURRULLLRLRLRRUDLRDDLLRRUDUDUURRRDRDLDRUDLDRDLUUULDLRLLDRULRULLRLRDRRLRLULLRURUULRLLRRRDRLULUDDUUULDULDUDDDUDLRLLRDRDLUDLRLRRDDDURUUUDULDLDDLDRDDDLURLDRLDURUDRURDDDDDDULLDLDLU
|
||||
LURLRUURDDLDDDLDDLULRLUUUDRDUUDDUDLDLDDLLUDURDRDRULULLRLDDUDRRDRUDLRLDDDURDUURLUURRLLDRURDRLDURUDLRLLDDLLRDRRLURLRRUULLLDRLULURULRRDLLLDLDLRDRRURUUUDUDRUULDLUDLURLRDRRLDRUDRUDURLDLDDRUULDURDUURLLUDRUUUUUURRLRULUDRDUDRLLDUDUDUULURUURURULLUUURDRLDDRLUURDLRULDRRRRLRULRDLURRUULURDRRLDLRUURUDRRRDRURRLDDURLUDLDRRLDRLLLLRDUDLULUDRLLLDULUDUULLULLRLURURURDRRDRUURDULRDDLRULLLLLLDLLURLRLLRDLLRLUDLRUDDRLLLDDUDRLDLRLDUDU
|
||||
RRDDLDLRRUULRDLLURLRURDLUURLLLUUDDULLDRURDUDRLRDRDDUUUULDLUDDLRDULDDRDDDDDLRRDDDRUULDLUDUDRRLUUDDRUDLUUDUDLUDURDURDLLLLDUUUUURUUURDURUUUUDDURULLDDLDLDLULUDRULULULLLDRLRRLLDLURULRDLULRLDRRLDDLULDDRDDRURLDLUULULRDRDRDRRLLLURLLDUUUDRRUUURDLLLRUUDDDULRDRRUUDDUUUDLRRURUDDLUDDDUDLRUDRRDLLLURRRURDRLLULDUULLURRULDLURRUURURRLRDULRLULUDUULRRULLLDDDDURLRRRDUDULLRRDURUURUUULUDLDULLUURDRDRRDURDLUDLULRULRLLURULDRUURRRRDUDULLLLLRRLRUDDUDLLURLRDDLLDLLLDDUDDDDRDURRL
|
||||
LLRURUDUULRURRUDURRDLUUUDDDDURUUDLLDLRULRUUDUURRLRRUDLLUDLDURURRDDLLRUDDUDLDUUDDLUUULUUURRURDDLUDDLULRRRUURLDLURDULULRULRLDUDLLLLDLLLLRLDLRLDLUULLDDLDRRRURDDRRDURUURLRLRDUDLLURRLDUULDRURDRRURDDDDUUUDDRDLLDDUDURDLUUDRLRDUDLLDDDDDRRDRDUULDDLLDLRUDULLRRLLDUDRRLRURRRRLRDUDDRRDDUUUDLULLRRRDDRUUUDUUURUULUDURUDLDRDRLDLRLLRLRDRDRULRURLDDULRURLRLDUURLDDLUDRLRUDDURLUDLLULDLDDULDUDDDUDRLRDRUUURDUULLDULUUULLLDLRULDULUDLRRURDLULUDUDLDDRDRUUULDLRURLRUURDLULUDLULLRD
|
||||
UURUDRRDDLRRRLULLDDDRRLDUDLRRULUUDULLDUDURRDLDRRRDLRDUUUDRDRRLLDULRLUDUUULRULULRUDURDRDDLDRULULULLDURULDRUDDDURLLDUDUUUULRUULURDDDUUUURDLDUUURUDDLDRDLLUDDDDULRDLRUDRLRUDDURDLDRLLLLRLULRDDUDLLDRURDDUDRRLRRDLDDUDRRLDLUURLRLLRRRDRLRLLLLLLURULUURRDDRRLRLRUURDLULRUUDRRRLRLRULLLLUDRULLRDDRDDLDLDRRRURLURDDURRLUDDULRRDULRURRRURLUURDDDUDLDUURRRLUDUULULURLRDDRULDLRLLUULRLLRLUUURUUDUURULRRRUULUULRULDDURLDRRULLRDURRDDDLLUDLDRRRRUULDDD
|
||||
73
2016/d02/ex2/ex2.py
Executable file
73
2016/d02/ex2/ex2.py
Executable file
|
|
@ -0,0 +1,73 @@
|
|||
#!/usr/bin/env python
|
||||
|
||||
import enum
|
||||
import sys
|
||||
from typing import NamedTuple
|
||||
|
||||
|
||||
class Point(NamedTuple):
|
||||
x: int
|
||||
y: int
|
||||
|
||||
|
||||
class Direction(enum.StrEnum):
|
||||
UP = "U"
|
||||
DOWN = "D"
|
||||
LEFT = "L"
|
||||
RIGHT = "R"
|
||||
|
||||
def apply(self, p: Point) -> Point:
|
||||
match self:
|
||||
case Direction.UP:
|
||||
dx, dy = -1, 0
|
||||
case Direction.DOWN:
|
||||
dx, dy = 1, 0
|
||||
case Direction.LEFT:
|
||||
dx, dy = 0, -1
|
||||
case Direction.RIGHT:
|
||||
dx, dy = 0, 1
|
||||
return Point(p.x + dx, p.y + dy)
|
||||
|
||||
|
||||
def solve(input: str) -> str:
|
||||
def parse(input: str) -> list[list[Direction]]:
|
||||
return [[Direction(c) for c in line] for line in input.splitlines()]
|
||||
|
||||
def enter_code(directions: list[list[Direction]]) -> str:
|
||||
KEYPAD = {
|
||||
Point(-2, 2): "1",
|
||||
Point(-1, 1): "2",
|
||||
Point(-1, 2): "3",
|
||||
Point(-1, 3): "4",
|
||||
Point(0, 0): "5",
|
||||
Point(0, 1): "6",
|
||||
Point(0, 2): "7",
|
||||
Point(0, 3): "8",
|
||||
Point(0, 4): "9",
|
||||
Point(1, 1): "A",
|
||||
Point(1, 2): "B",
|
||||
Point(1, 3): "C",
|
||||
Point(2, 2): "D",
|
||||
}
|
||||
letters = []
|
||||
pos = Point(0, 0)
|
||||
for line in directions:
|
||||
for d in line:
|
||||
new_pos = d.apply(pos)
|
||||
if new_pos not in KEYPAD:
|
||||
continue
|
||||
pos = new_pos
|
||||
letters.append(KEYPAD[pos])
|
||||
return "".join(letters)
|
||||
|
||||
directions = parse(input)
|
||||
return enter_code(directions)
|
||||
|
||||
|
||||
def main() -> None:
|
||||
input = sys.stdin.read()
|
||||
print(solve(input))
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
5
2016/d02/ex2/input
Normal file
5
2016/d02/ex2/input
Normal file
|
|
@ -0,0 +1,5 @@
|
|||
DUURRDRRURUUUDLRUDDLLLURULRRLDULDRDUULULLUUUDRDUDDURRULDRDDDUDDURLDLLDDRRURRUUUDDRUDDLLDDDURLRDDDULRDUDDRDRLRDUULDLDRDLUDDDLRDRLDLUUUDLRDLRUUUDDLUURRLLLUUUUDDLDRRDRDRLDRLUUDUDLDRUDDUDLLUUURUUDLULRDRULURURDLDLLDLLDUDLDRDULLDUDDURRDDLLRLLLLDLDRLDDUULRDRURUDRRRDDDUULRULDDLRLLLLRLLLLRLURRRLRLRDLULRRLDRULDRRLRURDDLDDRLRDLDRLULLRRUDUURRULLLRLRLRRUDLRDDLLRRUDUDUURRRDRDLDRUDLDRDLUUULDLRLLDRULRULLRLRDRRLRLULLRURUULRLLRRRDRLULUDDUUULDULDUDDDUDLRLLRDRDLUDLRLRRDDDURUUUDULDLDDLDRDDDLURLDRLDURUDRURDDDDDDULLDLDLU
|
||||
LURLRUURDDLDDDLDDLULRLUUUDRDUUDDUDLDLDDLLUDURDRDRULULLRLDDUDRRDRUDLRLDDDURDUURLUURRLLDRURDRLDURUDLRLLDDLLRDRRLURLRRUULLLDRLULURULRRDLLLDLDLRDRRURUUUDUDRUULDLUDLURLRDRRLDRUDRUDURLDLDDRUULDURDUURLLUDRUUUUUURRLRULUDRDUDRLLDUDUDUULURUURURULLUUURDRLDDRLUURDLRULDRRRRLRULRDLURRUULURDRRLDLRUURUDRRRDRURRLDDURLUDLDRRLDRLLLLRDUDLULUDRLLLDULUDUULLULLRLURURURDRRDRUURDULRDDLRULLLLLLDLLURLRLLRDLLRLUDLRUDDRLLLDDUDRLDLRLDUDU
|
||||
RRDDLDLRRUULRDLLURLRURDLUURLLLUUDDULLDRURDUDRLRDRDDUUUULDLUDDLRDULDDRDDDDDLRRDDDRUULDLUDUDRRLUUDDRUDLUUDUDLUDURDURDLLLLDUUUUURUUURDURUUUUDDURULLDDLDLDLULUDRULULULLLDRLRRLLDLURULRDLULRLDRRLDDLULDDRDDRURLDLUULULRDRDRDRRLLLURLLDUUUDRRUUURDLLLRUUDDDULRDRRUUDDUUUDLRRURUDDLUDDDUDLRUDRRDLLLURRRURDRLLULDUULLURRULDLURRUURURRLRDULRLULUDUULRRULLLDDDDURLRRRDUDULLRRDURUURUUULUDLDULLUURDRDRRDURDLUDLULRULRLLURULDRUURRRRDUDULLLLLRRLRUDDUDLLURLRDDLLDLLLDDUDDDDRDURRL
|
||||
LLRURUDUULRURRUDURRDLUUUDDDDURUUDLLDLRULRUUDUURRLRRUDLLUDLDURURRDDLLRUDDUDLDUUDDLUUULUUURRURDDLUDDLULRRRUURLDLURDULULRULRLDUDLLLLDLLLLRLDLRLDLUULLDDLDRRRURDDRRDURUURLRLRDUDLLURRLDUULDRURDRRURDDDDUUUDDRDLLDDUDURDLUUDRLRDUDLLDDDDDRRDRDUULDDLLDLRUDULLRRLLDUDRRLRURRRRLRDUDDRRDDUUUDLULLRRRDDRUUUDUUURUULUDURUDLDRDRLDLRLLRLRDRDRULRURLDDULRURLRLDUURLDDLUDRLRUDDURLUDLLULDLDDULDUDDDUDRLRDRUUURDUULLDULUUULLLDLRULDULUDLRRURDLULUDUDLDDRDRUUULDLRURLRUURDLULUDLULLRD
|
||||
UURUDRRDDLRRRLULLDDDRRLDUDLRRULUUDULLDUDURRDLDRRRDLRDUUUDRDRRLLDULRLUDUUULRULULRUDURDRDDLDRULULULLDURULDRUDDDURLLDUDUUUULRUULURDDDUUUURDLDUUURUDDLDRDLLUDDDDULRDLRUDRLRUDDURDLDRLLLLRLULRDDUDLLDRURDDUDRRLRRDLDDUDRRLDLUURLRLLRRRDRLRLLLLLLURULUURRDDRRLRLRUURDLULRUUDRRRLRLRULLLLUDRULLRDDRDDLDLDRRRURLURDDURRLUDDULRRDULRURRRURLUURDDDUDLDUURRRLUDUULULURLRDDRULDLRLLUULRLLRLUUURUUDUURULRRRUULUULRULDDURLDRRULLRDURRDDDLLUDLDRRRRUULDDD
|
||||
28
2016/d03/ex1/ex1.py
Executable file
28
2016/d03/ex1/ex1.py
Executable file
|
|
@ -0,0 +1,28 @@
|
|||
#!/usr/bin/env python
|
||||
|
||||
import sys
|
||||
|
||||
|
||||
def solve(input: str) -> int:
|
||||
def parse_triple(input: str) -> tuple[int, int, int]:
|
||||
nums = tuple(map(int, input.split()))
|
||||
assert len(nums) == 3
|
||||
return nums
|
||||
|
||||
def parse(input: str) -> list[tuple[int, int, int]]:
|
||||
return [parse_triple(line) for line in input.splitlines()]
|
||||
|
||||
def is_triangle(x: int, y: int, z: int) -> bool:
|
||||
return (x + y) > z and (x + z) > y and (y + z) > x
|
||||
|
||||
numbers = parse(input)
|
||||
return sum(is_triangle(*t) for t in numbers)
|
||||
|
||||
|
||||
def main() -> None:
|
||||
input = sys.stdin.read()
|
||||
print(solve(input))
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
1914
2016/d03/ex1/input
Normal file
1914
2016/d03/ex1/input
Normal file
File diff suppressed because it is too large
Load diff
39
2016/d03/ex2/ex2.py
Executable file
39
2016/d03/ex2/ex2.py
Executable file
|
|
@ -0,0 +1,39 @@
|
|||
#!/usr/bin/env python
|
||||
|
||||
import itertools
|
||||
import sys
|
||||
|
||||
|
||||
def solve(input: str) -> int:
|
||||
def parse_triple(input: str) -> tuple[int, int, int]:
|
||||
nums = tuple(map(int, input.split()))
|
||||
assert len(nums) == 3
|
||||
return nums
|
||||
|
||||
def parse(input: str) -> list[tuple[int, int, int]]:
|
||||
return [parse_triple(line) for line in input.splitlines()]
|
||||
|
||||
def is_triangle(x: int, y: int, z: int) -> bool:
|
||||
return (x + y) > z and (x + z) > y and (y + z) > x
|
||||
|
||||
def transpose_triples(
|
||||
numbers: list[tuple[int, int, int]],
|
||||
) -> list[tuple[int, int, int]]:
|
||||
res: list[tuple[int, int, int]] = []
|
||||
for l1, l2, l3 in itertools.batched(numbers, 3):
|
||||
for i in range(3):
|
||||
res.append((l1[i], l2[i], l3[i]))
|
||||
return res
|
||||
|
||||
numbers = parse(input)
|
||||
numbers = transpose_triples(numbers)
|
||||
return sum(is_triangle(*t) for t in numbers)
|
||||
|
||||
|
||||
def main() -> None:
|
||||
input = sys.stdin.read()
|
||||
print(solve(input))
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
1914
2016/d03/ex2/input
Normal file
1914
2016/d03/ex2/input
Normal file
File diff suppressed because it is too large
Load diff
39
2016/d04/ex1/ex1.py
Executable file
39
2016/d04/ex1/ex1.py
Executable file
|
|
@ -0,0 +1,39 @@
|
|||
#!/usr/bin/env python
|
||||
|
||||
import collections
|
||||
import sys
|
||||
from typing import NamedTuple
|
||||
|
||||
|
||||
class Room(NamedTuple):
|
||||
name: str
|
||||
sector_id: int
|
||||
checksum: str
|
||||
|
||||
def is_real(self) -> bool:
|
||||
letters = collections.Counter(self.name.replace("-", ""))
|
||||
checksum = sorted(letters.most_common(), key=lambda t: (-t[1], t[0]))[:5]
|
||||
return "".join(c for c, _ in checksum) == self.checksum
|
||||
|
||||
@classmethod
|
||||
def from_str(cls, input: str) -> "Room":
|
||||
input, checksum = map(lambda s: s.removesuffix("]"), input.split("["))
|
||||
*name, sector_id = input.split("-")
|
||||
return cls("-".join(name), int(sector_id), checksum)
|
||||
|
||||
|
||||
def solve(input: str) -> int:
|
||||
def parse(input: str) -> list[Room]:
|
||||
return [Room.from_str(line) for line in input.splitlines()]
|
||||
|
||||
rooms = parse(input)
|
||||
return sum(room.sector_id for room in rooms if room.is_real())
|
||||
|
||||
|
||||
def main() -> None:
|
||||
input = sys.stdin.read()
|
||||
print(solve(input))
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
991
2016/d04/ex1/input
Normal file
991
2016/d04/ex1/input
Normal file
|
|
@ -0,0 +1,991 @@
|
|||
aczupnetwp-dnlgpyrpc-sfye-dstaatyr-561[patyc]
|
||||
jsehsyafy-vqw-ljsafafy-866[nymla]
|
||||
tyepcyletzylw-ncjzrpytn-prr-opawzjxpye-743[cnrdl]
|
||||
foadouwbu-qvcqczohs-obozmgwg-662[lamjh]
|
||||
ckgvutofkj-pkrrehkgt-zkinturume-436[krtue]
|
||||
pelbtravp-pnaql-ernpdhvfvgvba-481[szram]
|
||||
yflexwxoalrp-ciltbo-tlohpelm-887[bmwep]
|
||||
ipvohghykvbz-ihzrla-jbzavtly-zlycpjl-253[lzhvy]
|
||||
cybyjqho-whqtu-rqiauj-fkhsxqiydw-322[syzwi]
|
||||
tipfxvezt-sleep-tljkfdvi-jvimztv-425[tveif]
|
||||
ktiaaqnqml-xtiabqk-oziaa-xczkpiaqvo-616[aiqko]
|
||||
ckgvutofkj-xghhoz-gtgreyoy-306[nyhpz]
|
||||
molgbzqfib-zovldbkfz-zxkav-lmboxqflkp-341[xlomg]
|
||||
ikhcxvmbex-vtgwr-vhtmbgz-mxvaghehzr-111[hvgmx]
|
||||
dpssptjwf-fhh-tfswjdft-805[fstdh]
|
||||
oaddaeuhq-otaoaxmfq-qzsuzqqduzs-534[qadou]
|
||||
dzczkrip-xiruv-sleep-drerxvdvek-685[erdvi]
|
||||
jvsvymbs-yhiipa-vwlyhapvuz-149[zfyqn]
|
||||
nsyjwsfyntsfq-gfxpjy-jslnsjjwnsl-853[sjnfy]
|
||||
mbiyqoxsm-lsyrkjkbnyec-nio-wkbuodsxq-614[bkosy]
|
||||
jchipqat-uadltg-hidgpvt-375[kcnop]
|
||||
jqwpihizlwca-lgm-nqvivkqvo-980[ldeay]
|
||||
xfbqpojafe-dipdpmbuf-tfswjdft-493[fdpbj]
|
||||
kwvacumz-ozilm-kpwkwtibm-lmxtwgumvb-798[mwkbi]
|
||||
eqttqukxg-ejqeqncvg-ocpcigogpv-648[sdtzl]
|
||||
dsxxw-bwc-bcnjmwkclr-678[cwbxd]
|
||||
jvuzbtly-nyhkl-ibuuf-thuhnltlua-175[ulhtb]
|
||||
rdadguja-uadltg-bpgztixcv-401[adgtu]
|
||||
atyzghrk-kmm-ktmotkkxotm-930[xzfpe]
|
||||
uwtojhynqj-ojqqdgjfs-xjwanhjx-151[waqmk]
|
||||
hwdtljsnh-uqfxynh-lwfxx-rfsfljrjsy-567[fhjls]
|
||||
xst-wigvix-gspsvjyp-gerhc-erepcwmw-724[uplfw]
|
||||
kzgwomvqk-jcvvg-zmamizkp-122[kmvzg]
|
||||
sbejpbdujwf-dboez-dpbujoh-dvtupnfs-tfswjdf-623[uxrpz]
|
||||
bxaxipgn-vgpst-rwdrdapit-prfjxhxixdc-609[xpdir]
|
||||
avw-zljyla-zjhclunly-obua-ayhpupun-981[aluyh]
|
||||
nuatmlmdpage-qss-fdmuzuzs-404[btopv]
|
||||
oaddaeuhq-otaoaxmfq-dqoquhuzs-716[aoqdu]
|
||||
myvybpev-cmkfoxqob-rexd-bomosfsxq-432[khwfc]
|
||||
oxaflxzqfsb-zelzlixqb-jxohbqfkd-471[hxkwc]
|
||||
fnjyxwrinm-snuuhknjw-anbnjalq-875[ztvnr]
|
||||
qfmcusbwq-pibbm-fsqswjwbu-922[bqswf]
|
||||
wihmogyl-aluxy-jfumncw-alumm-nluchcha-916[lmuac]
|
||||
oxaflxzqfsb-avb-bkdfkbbofkd-757[trzjy]
|
||||
ksodcbwnsr-qzoggwtwsr-gqojsbusf-vibh-fsgsofqv-818[gsdca]
|
||||
rzvkjiduzy-xcjxjgvoz-gvwjmvojmt-161[zufvq]
|
||||
nwlddtqtpo-mldvpe-dezclrp-639[zlnki]
|
||||
vkppo-rqiauj-huqsgkyiyjyed-530[yijkp]
|
||||
dfcxsqhwzs-qobrm-qcohwbu-fsoqeiwgwhwcb-688[wqbch]
|
||||
vxupkizork-xghhoz-aykx-zkyzotm-462[kzoxh]
|
||||
zotts-jfumncw-alumm-omyl-nymncha-396[bstha]
|
||||
yaxsnlcrun-npp-cajrwrwp-355[nprac]
|
||||
bkwzkqsxq-pvygob-nozkbdwoxd-822[bkodq]
|
||||
frqvxphu-judgh-fdqgb-frdwlqj-hqjlqhhulqj-595[ezyxq]
|
||||
hqtyeqsjylu-sqdto-sedjqydcudj-764[dqjsy]
|
||||
fab-eqodqf-omzpk-fdmuzuzs-430[yxkbc]
|
||||
gpewwmjmih-glsgspexi-xvemrmrk-204[cynzd]
|
||||
kwtwznct-jcvvg-wxmzibqwva-694[cdaps]
|
||||
guahyncw-wuhxs-zchuhwcha-396[xwnmj]
|
||||
pybgmyargtc-zsllw-dglylagle-912[mcrsp]
|
||||
kyelcrga-zyqicr-jyzmpyrmpw-782[yrcmp]
|
||||
wsvsdkbi-qbkno-zvkcdsm-qbkcc-myxdksxwoxd-432[kdsbc]
|
||||
ltpedcxots-rwdrdapit-advxhixrh-271[drtxa]
|
||||
elrkdcdugrxv-sodvwlf-judvv-vklsslqj-465[vdlsj]
|
||||
htwwtxnaj-hfsid-htfynsl-ywfnsnsl-281[ghfea]
|
||||
nij-mywlyn-xsy-xymcah-682[kiasm]
|
||||
zovldbkfz-yrkkv-abmilvjbkq-939[chetn]
|
||||
esyfwlau-kusnwfywj-zmfl-ghwjslagfk-398[fwlsa]
|
||||
lahxpnwrl-yujbcrl-pajbb-mnyuxhvnwc-147[tzcxk]
|
||||
rwcnawjcrxwju-lqxlxujcn-lxwcjrwvnwc-381[hxsdl]
|
||||
pbybeshy-pynffvsvrq-wryylorna-jbexfubc-143[ybfre]
|
||||
lxaaxbren-kdwwh-bqryyrwp-407[sktqh]
|
||||
pybgmyargtc-zyqicr-rpyglgle-106[vsdft]
|
||||
jfifqxov-doxab-yxphbq-obxznrfpfqflk-939[nyvhm]
|
||||
pualyuhapvuhs-jovjvshal-thuhnltlua-383[lrfob]
|
||||
gvcskirmg-tpewxmg-kveww-pskmwxmgw-438[ujily]
|
||||
lgh-kwujwl-tmffq-esfsywewfl-242[fwles]
|
||||
jyddc-fewoix-hitevxqirx-412[ixdec]
|
||||
uzfqdzmfuazmx-otaoaxmfq-ogefayqd-eqdhuoq-222[lbfru]
|
||||
ryexqpqhteki-sxesebqju-tufbeocudj-348[tjzhb]
|
||||
kfg-jvtivk-sleep-wzeretzex-477[ektvz]
|
||||
kzgwomvqk-jcvvg-bmkpvwtwog-174[vgkwm]
|
||||
odiih-kdwwh-uxprbcrlb-251[bdhir]
|
||||
htqtwkzq-xhfajsljw-mzsy-yjhmstqtld-229[thjqs]
|
||||
qjopwxha-xwogap-owhao-914[astye]
|
||||
wrs-vhfuhw-edvnhw-hqjlqhhulqj-439[vufmz]
|
||||
rdggdhxkt-xcitgcpixdcpa-rpcsn-rdpixcv-stktadebtci-609[cdtip]
|
||||
eqttqukxg-fag-eqpvckpogpv-544[jmtpx]
|
||||
kdijqrbu-sqdto-seqjydw-iuhlysui-946[bioht]
|
||||
fydelmwp-awldetn-rcldd-cplnbftdtetzy-951[kpxim]
|
||||
ubhatstkwhnl-unggr-nlxk-mxlmbgz-761[geyqm]
|
||||
ocipgvke-gii-fgxgnqrogpv-726[giopv]
|
||||
fab-eqodqf-otaoaxmfq-iadwetab-430[azmnb]
|
||||
fab-eqodqf-otaoaxmfq-pqhqxabyqzf-456[qafob]
|
||||
xekdwvwnzkqo-zua-naoawnyd-784[anwdk]
|
||||
sbejpbdujwf-fhh-tbmft-285[mbfsn]
|
||||
hwbba-eqpuwogt-itcfg-rncuvke-itcuu-ugtxkegu-648[ugtce]
|
||||
hqcfqwydw-fbqijys-whqii-cqdqwucudj-452[ztesw]
|
||||
dmpuamofuhq-nmewqf-emxqe-742[meqfu]
|
||||
iqmbazulqp-pkq-iadwetab-976[kcxmz]
|
||||
lahxpnwrl-ljwmh-lxjcrwp-bnaerlnb-927[lnrwa]
|
||||
laffe-lruckx-vaxingyotm-306[aflxc]
|
||||
forwcoqhwjs-qcffcgwjs-tzcksf-rsdzcmasbh-220[csfwh]
|
||||
yflexwxoalrp-gbiivybxk-abpfdk-731[sjtrd]
|
||||
foadouwbu-ibghopzs-pogysh-kcfygvcd-506[ogbcd]
|
||||
rtqlgevkng-hnqygt-ugtxkegu-232[zdgob]
|
||||
yrwxefpi-fyrrc-asvowlst-880[jmzfi]
|
||||
tyepcyletzylw-nlyoj-nzletyr-fdpc-epdetyr-795[jfvnq]
|
||||
rkpqxyib-yxphbq-lmboxqflkp-627[vzmla]
|
||||
xjinphzm-bmvyz-hvbizodx-ytz-gjbdnodxn-967[jmuws]
|
||||
ktfitzbgz-vtgwr-inkvatlbgz-813[tgzbi]
|
||||
hqtyeqsjylu-sbqiiyvyut-fbqijys-whqii-vydqdsydw-634[yqisd]
|
||||
hcd-gsqfsh-dzoghwq-ufogg-qcbhowbasbh-506[hgboq]
|
||||
ryexqpqhteki-uww-qdqboiyi-140[qiewy]
|
||||
bkzrrhehdc-qzaahs-cdoknxldms-625[czsmn]
|
||||
sawlkjevaz-lhwopey-cnwoo-yqopkian-oanreya-966[znhlt]
|
||||
xjgjmapg-hdgdovmt-bmvyz-zbb-yzkgjthzio-577[gzbjm]
|
||||
myxcewob-qbkno-lexxi-wkbuodsxq-250[xboek]
|
||||
nsyjwsfyntsfq-hfsid-htfynsl-wjfhvznxnynts-255[umtns]
|
||||
kpvgtpcvkqpcn-ecpfa-ewuvqogt-ugtxkeg-596[ehsca]
|
||||
vkrhzxgbv-cxeeruxtg-ftgtzxfxgm-579[ymast]
|
||||
pbeebfvir-fpniratre-uhag-genvavat-663[smznt]
|
||||
vehmsegxmzi-glsgspexi-hitpscqirx-802[jszht]
|
||||
tyepcyletzylw-nlyoj-nzletyr-cpdplcns-223[lycen]
|
||||
jxdkbqfz-oxaflxzqfsb-avb-lmboxqflkp-523[mzvny]
|
||||
tcfkqcevkxg-tcddkv-uvqtcig-336[cdsln]
|
||||
ide-htrgti-hrpktcvtg-wjci-ldgzhwde-947[tdghi]
|
||||
ojk-nzxmzo-kgvnodx-bmvnn-ozxcijgjbt-213[nojxz]
|
||||
avw-zljyla-msvdly-yljlpcpun-539[lyajp]
|
||||
rdchjbtg-vgpst-rpcsn-rdpixcv-htgkxrth-661[rtcgh]
|
||||
xlrypetn-dnlgpyrpc-sfye-dezclrp-353[pelry]
|
||||
enqvbnpgvir-enoovg-erfrnepu-455[ftlpj]
|
||||
xjinphzm-bmvyz-xviyt-xjvodib-pnzm-oznodib-291[mlybz]
|
||||
rwcnawjcrxwju-kjbtnc-bqryyrwp-511[tkyns]
|
||||
gokzyxsjon-pvygob-nofovyzwoxd-458[ndtfs]
|
||||
bjfutsneji-hfsid-htfynsl-rfwpjynsl-489[fsjnh]
|
||||
ydjuhdqjyedqb-rqiauj-qdqboiyi-452[qdijy]
|
||||
enzcntvat-rtt-genvavat-351[lznyt]
|
||||
rdadguja-qjccn-advxhixrh-791[yncim]
|
||||
fmsledevhsyw-ikk-irkmriivmrk-646[nlxzm]
|
||||
jfifqxov-doxab-mixpqfz-doxpp-obpbxoze-471[oxpbf]
|
||||
jqwpihizlwca-zijjqb-aitma-408[gzpmw]
|
||||
pyknyegle-afmamjyrc-bcqgel-808[gynip]
|
||||
zbytomdsvo-mkxni-bocokbmr-406[obmkc]
|
||||
wfummczcyx-luvvcn-fuvilunils-526[bavmt]
|
||||
hwdtljsnh-gfxpjy-rfsfljrjsy-541[gpszy]
|
||||
lsyrkjkbnyec-oqq-gybucryz-848[ybckq]
|
||||
oaddaeuhq-vqxxknqmz-xasuefuoe-378[rzmqe]
|
||||
vhglnfxk-zktwx-fbebmtkr-zktwx-wrx-vhgmtbgfxgm-813[xepwt]
|
||||
yrwxefpi-gerhc-hitevxqirx-594[eirxh]
|
||||
mvydjvxodqz-xviyt-xjvodib-rjmfncjk-265[cqirj]
|
||||
kdijqrbu-tou-kiuh-juijydw-140[uijdk]
|
||||
ugjjgkanw-usfvq-vwkayf-970[rntsw]
|
||||
froruixo-fdqgb-ilqdqflqj-569[cylni]
|
||||
gpsxdprixkt-hrpktcvtg-wjci-gtprfjxhxixdc-999[xptcg]
|
||||
kwvacumz-ozilm-akidmvomz-pcvb-nqvivkqvo-460[emnrk]
|
||||
pejji-zvkcdsm-qbkcc-domrxyvyqi-484[cdijk]
|
||||
rdadguja-xcitgcpixdcpa-qphzti-bpgztixcv-791[cipad]
|
||||
rkpqxyib-zxkav-zlxqfkd-qoxfkfkd-965[qiftn]
|
||||
bkzrrhehdc-bnmrtldq-fqzcd-atmmx-qdrdzqbg-937[dqrbm]
|
||||
eqttqukxg-rtqlgevkng-dwppa-fgxgnqrogpv-570[gxetc]
|
||||
zbytomdsvo-mkxni-myxdksxwoxd-510[xdmok]
|
||||
ymszqfuo-rxaiqd-dqmocgueufuaz-274[umtwy]
|
||||
pelbtravp-ovbunmneqbhf-qlr-znantrzrag-663[xlyio]
|
||||
rdadguja-ytaanqtpc-gtprfjxhxixdc-141[krcaf]
|
||||
etaqigpke-hnqygt-eqpvckpogpv-362[pegqk]
|
||||
rtqlgevkng-etaqigpke-ecpfa-eqcvkpi-ewuvqogt-ugtxkeg-206[gxszf]
|
||||
fubrjhqlf-fkrfrodwh-sxufkdvlqj-777[pozts]
|
||||
wfintfhynaj-wfggny-xjwanhjx-957[nfjwa]
|
||||
xcitgcpixdcpa-bpvctixr-qphzti-gthtpgrw-479[zjlmc]
|
||||
gntmfefwitzx-hfsid-fsfqdxnx-697[oanif]
|
||||
xgjougizobk-jek-jkvgxzsktz-384[kgjzo]
|
||||
nzydfxpc-rclop-mldvpe-cpdplcns-925[pcdln]
|
||||
ltpedcxots-qphzti-gtrtxkxcv-739[txcpd]
|
||||
gvaaz-fhh-mphjtujdt-233[hajtd]
|
||||
jchipqat-rpcsn-gtprfjxhxixdc-297[cpxhi]
|
||||
gsvvswmzi-gerhc-tyvglewmrk-308[zbdcy]
|
||||
dmybmsuzs-omzpk-oamfuzs-pqhqxabyqzf-508[mzqsa]
|
||||
iruzfrtkzmv-treup-tfrkzex-jkfirxv-295[rfktz]
|
||||
pdjqhwlf-mhoobehdq-vwrudjh-127[hdjoq]
|
||||
rgndvtcxr-hrpktcvtg-wjci-apqdgpidgn-375[jdrhb]
|
||||
sbqiiyvyut-isqludwuh-xkdj-efuhqjyedi-114[qjzpn]
|
||||
lahxpnwrl-npp-nwprwnnarwp-459[ontmq]
|
||||
zntargvp-onfxrg-fnyrf-871[fnrga]
|
||||
molgbzqfib-avb-absbilmjbkq-601[bailm]
|
||||
kpvgtpcvkqpcn-tcddkv-wugt-vguvkpi-492[vkpcg]
|
||||
jfifqxov-doxab-zxkav-zlkqxfkjbkq-341[kxfqa]
|
||||
qfmcusbwq-dzoghwq-ufogg-fsqswjwbu-220[zbjty]
|
||||
xjinphzm-bmvyz-mvwwdo-yzkgjthzio-785[zmhij]
|
||||
ejpanjwpekjwh-ydkykhwpa-owhao-186[hqlfd]
|
||||
nzydfxpc-rclop-prr-cplnbftdtetzy-483[pcrtd]
|
||||
kwtwznct-rmttgjmiv-amzdqkma-590[mtakw]
|
||||
muqfedyput-fbqijys-whqii-iqbui-790[gjxky]
|
||||
egdytrixat-rgndvtcxr-rpcsn-jhtg-ithixcv-115[trcgi]
|
||||
fab-eqodqf-rxaiqd-mzmxkeue-404[eqadf]
|
||||
zotts-xsy-guleyncha-708[ymnbi]
|
||||
mbiyqoxsm-pvygob-gybucryz-536[zbyxv]
|
||||
dmybmsuzs-bxmefuo-sdmee-pqhqxabyqzf-716[mbeqs]
|
||||
qspkfdujmf-ezf-fohjoffsjoh-519[fjohs]
|
||||
nwlddtqtpo-prr-xlcvpetyr-249[owkmz]
|
||||
amlqskcp-epybc-aylbw-amyrgle-bctcjmnkclr-808[clabm]
|
||||
qspkfdujmf-qmbtujd-hsbtt-eftjho-727[tigys]
|
||||
pualyuhapvuhs-thnulapj-msvdly-ylzlhyjo-877[lhuya]
|
||||
diozmivodjivg-zbb-nzmqdxzn-629[zdibm]
|
||||
yrwxefpi-qmpmxevc-kvehi-gerhc-gsexmrk-qerekiqirx-126[erixk]
|
||||
qlm-pbzobq-zxkav-zlxqfkd-zrpqljbo-pbosfzb-575[phqza]
|
||||
irgyyolokj-lruckx-aykx-zkyzotm-904[ubkvy]
|
||||
cebwrpgvyr-pnaql-pbngvat-bcrengvbaf-793[bagnp]
|
||||
wlsiayhcw-wifilzof-wuhxs-mylpcwym-630[wilyc]
|
||||
nglmtuex-ktuubm-nlxk-mxlmbgz-215[egtsz]
|
||||
sbejpbdujwf-dboez-nbobhfnfou-883[jpkmo]
|
||||
qzoggwtwsr-qobrm-gsfjwqsg-480[xkwvm]
|
||||
nwzekwypera-oywrajcan-dqjp-wymqeoepekj-472[zeydw]
|
||||
sawlkjevaz-ywjzu-yqopkian-oanreya-836[ayejk]
|
||||
pybgmyargtc-afmamjyrc-rpyglgle-470[zgmsu]
|
||||
nzwzcqfw-qwzhpc-cplnbftdtetzy-977[zctwf]
|
||||
lhkhszqx-fqzcd-okzrshb-fqzrr-cdudknoldms-651[defrs]
|
||||
ugfkmewj-yjsvw-owshgfarwv-tskcwl-wfyafwwjafy-294[wfajs]
|
||||
gpbepvxcv-gpqqxi-stktadebtci-609[npyad]
|
||||
pxtihgbsxw-vahvhetmx-hixktmbhgl-397[pvcfe]
|
||||
guahyncw-vohhs-fiacmncwm-656[chamn]
|
||||
wfruflnsl-uqfxynh-lwfxx-wjfhvznxnynts-463[fnxlw]
|
||||
lzfmdshb-cxd-dmfhmddqhmf-703[dmfhb]
|
||||
gzefmnxq-eomhqzsqd-tgzf-oazfmuzyqzf-118[zfqme]
|
||||
udskkaxawv-usfvq-ugslafy-hmjuzskafy-658[asufk]
|
||||
ugjjgkanw-vqw-ksdwk-112[kwgja]
|
||||
enqvbnpgvir-cynfgvp-tenff-fuvccvat-975[vfnce]
|
||||
fydelmwp-ojp-nfdezxpc-dpcgtnp-353[gziom]
|
||||
fmsledevhsyw-gpewwmjmih-glsgspexi-tyvglewmrk-178[egmsw]
|
||||
shmml-enoovg-freivprf-585[efmor]
|
||||
bnqqnrhud-atmmx-qdrdzqbg-651[qdbmn]
|
||||
pxtihgbsxw-vahvhetmx-nlxk-mxlmbgz-943[xhmbg]
|
||||
xfbqpojafe-dipdpmbuf-tbmft-441[wuizc]
|
||||
zsxyfgqj-uqfxynh-lwfxx-ijxnls-749[futrq]
|
||||
oaddaeuhq-nmewqf-dqmocgueufuaz-508[mwlcv]
|
||||
buzahisl-zjhclunly-obua-zavyhnl-201[kzylj]
|
||||
yhwooebeaz-iwcjapey-oywrajcan-dqjp-zaoecj-524[aejoc]
|
||||
bwx-amkzmb-qvbmzvibqwvit-lgm-zmikycqaqbqwv-772[dubva]
|
||||
oxmeeuruqp-ngzzk-fqotzaxask-638[zaeko]
|
||||
xfbqpojafe-qmbtujd-hsbtt-efwfmpqnfou-363[fbqte]
|
||||
iehepwnu-cnwza-xqjju-nayaerejc-472[eajnc]
|
||||
ytu-xjhwjy-jll-ijxnls-385[moyjn]
|
||||
nvrgfezqvu-treup-tfrkzex-wzeretzex-997[fpvnt]
|
||||
kwvacumz-ozilm-moo-camz-bmabqvo-434[sanvt]
|
||||
lxaaxbren-ouxfna-bjunb-277[abnxu]
|
||||
gpsxdprixkt-uadltg-tcvxcttgxcv-453[txcgd]
|
||||
owshgfarwv-jsttal-hmjuzskafy-658[asfhj]
|
||||
pbafhzre-tenqr-qlr-ynobengbel-403[ebnrl]
|
||||
yaxsnlcrun-mhn-jlzdrbrcrxw-121[wngsc]
|
||||
bgmxkgtmbhgte-vtgwr-vhtmbgz-tgterlbl-995[gtbme]
|
||||
nvrgfezqvu-avccpsvre-tljkfdvi-jvimztv-269[vcefi]
|
||||
apwmeclga-pyzzgr-dglylagle-158[auvsi]
|
||||
qczcftiz-pogysh-rsgwub-350[kcdvs]
|
||||
qlm-pbzobq-gbiivybxk-abpfdk-211[bikpq]
|
||||
crwwv-rkpqxyib-yrkkv-cfkxkzfkd-419[krcfv]
|
||||
sbnqbhjoh-cbtlfu-tupsbhf-285[bhfst]
|
||||
qlm-pbzobq-avb-bkdfkbbofkd-159[golnc]
|
||||
nchhg-jiasmb-lmaqov-902[dpmcw]
|
||||
tagzsrsjvgmk-jsttal-umklgewj-kwjnauw-944[fsqml]
|
||||
rkpqxyib-yxphbq-jxkxdbjbkq-601[npbtf]
|
||||
ujqgywfau-tmffq-hmjuzskafy-736[zmnlk]
|
||||
ujqgywfau-hdsklau-yjskk-umklgewj-kwjnauw-190[kujwa]
|
||||
uqtqbizg-ozilm-jcvvg-lmxizbumvb-850[mhanw]
|
||||
yhtwhnpun-ihzrla-klclsvwtlua-591[lkqzn]
|
||||
sbqiiyvyut-sqdto-seqjydw-sedjqydcudj-738[warvn]
|
||||
bwx-amkzmb-uqtqbizg-ozilm-moo-kwvbiqvumvb-746[wystg]
|
||||
tipfxvezt-vxx-cfxzjkztj-555[xtzfj]
|
||||
cjpibabsepvt-cvooz-sftfbsdi-571[myqsb]
|
||||
ymszqfuo-fab-eqodqf-pkq-xmnadmfadk-274[tkbds]
|
||||
wlqqp-treup-tfrkzex-jkfirxv-581[refkp]
|
||||
lnkfaypeha-fahhuxawj-wjwhuoeo-550[ahwef]
|
||||
lsyrkjkbnyec-oqq-ckvoc-874[azsyv]
|
||||
gvcskirmg-fewoix-wlmttmrk-360[mgikr]
|
||||
irdgrxzex-tipfxvezt-treup-tfrkzex-cfxzjkztj-607[txzer]
|
||||
avw-zljyla-zjhclunly-obua-yljlpcpun-617[lajuy]
|
||||
nwzekwypera-lhwopey-cnwoo-hkceopeyo-134[zulqp]
|
||||
vkppo-sqdto-seqjydw-jhqydydw-114[dqyjo]
|
||||
zixppfcfba-zxkav-zlkqxfkjbkq-679[txhzn]
|
||||
sbnqbhjoh-dboez-sftfbsdi-623[bsdfh]
|
||||
qjopwxha-bhksan-zalhkuiajp-316[ahjkp]
|
||||
yhtwhnpun-thnulapj-ibuuf-klzpnu-773[unhpl]
|
||||
uwtojhynqj-kqtbjw-wjfhvznxnynts-827[ntyqj]
|
||||
jef-iushuj-rkddo-ijehqwu-504[biekf]
|
||||
gspsvjyp-tpewxmg-kveww-gywxsqiv-wivzmgi-672[sryce]
|
||||
rgllk-eomhqzsqd-tgzf-etubbuzs-118[zbegl]
|
||||
shmml-pubpbyngr-ynobengbel-403[bnegl]
|
||||
gsrwyqiv-kvehi-fewoix-wivzmgiw-256[rimyz]
|
||||
iuxxuyobk-yigbktmkx-natz-xkykgxin-852[kxiyb]
|
||||
excdklvo-oqq-vklybkdybi-744[utifh]
|
||||
ojk-nzxmzo-agjrzm-xpnojhzm-nzmqdxz-915[zmjno]
|
||||
qspkfdujmf-sbccju-eftjho-103[byjhc]
|
||||
fodvvlilhg-mhoobehdq-whfkqrorjb-699[taskb]
|
||||
aflwjfslagfsd-usfvq-ogjckzgh-814[emsnh]
|
||||
sebehvkb-uww-tulubefcudj-712[ubewc]
|
||||
egdytrixat-gpbepvxcv-hrpktcvtg-wjci-hidgpvt-531[vzdcg]
|
||||
nsyjwsfyntsfq-zsxyfgqj-gzssd-wjxjfwhm-749[sgmhv]
|
||||
ktfitzbgz-yehpxk-kxvxbobgz-761[ryzea]
|
||||
tcrjjzwzvu-irsszk-rthlzjzkzfe-503[ocepg]
|
||||
dfcxsqhwzs-pibbm-sbuwbssfwbu-558[tocys]
|
||||
nwzekwypera-bhksan-odellejc-758[eakln]
|
||||
qfmcusbwq-qobrm-qcohwbu-fsoqeiwgwhwcb-402[cpzsy]
|
||||
cvabijtm-zijjqb-uizsmbqvo-434[btzma]
|
||||
irdgrxzex-srjbvk-glityrjzex-867[rxegi]
|
||||
rdadguja-tvv-gtrtxkxcv-609[tvadg]
|
||||
wdjcvuvmyjpn-zbb-mznzvmxc-213[ndmaz]
|
||||
vagreangvbany-sybjre-nanylfvf-507[bryme]
|
||||
vjpwncrl-mhn-bqryyrwp-979[rnpwy]
|
||||
jqwpihizlwca-ntwemz-abwziom-642[iyzsa]
|
||||
jchipqat-rwdrdapit-detgpixdch-921[dipta]
|
||||
vqr-ugetgv-tcddkv-eqpvckpogpv-440[vgpcd]
|
||||
ajyqqgdgcb-aylbw-amyrgle-qyjcq-756[qyagb]
|
||||
fbebmtkr-zktwx-utldxm-nlxk-mxlmbgz-553[onbvf]
|
||||
hwdtljsnh-kqtbjw-ijajqturjsy-827[jthqs]
|
||||
sedikcuh-whqtu-sxesebqju-udwyduuhydw-556[rvudf]
|
||||
ipvohghykvbz-tpspahyf-nyhkl-yhiipa-huhsfzpz-123[hpyiz]
|
||||
fubrjhqlf-mhoobehdq-oderudwrub-153[bdhor]
|
||||
mbggf-zjhclunly-obua-dvyrzovw-695[bglou]
|
||||
houngfgxjuay-igtje-aykx-zkyzotm-176[qcita]
|
||||
lugjuacha-mwupyhayl-bohn-xyjulngyhn-318[gnftc]
|
||||
rdggdhxkt-rpcsn-rdpixcv-itrwcdadvn-505[uancd]
|
||||
yaxsnlcrun-ouxfna-jwjuhbrb-199[xnmwj]
|
||||
yrwxefpi-tpewxmg-kveww-wlmttmrk-334[rfqkl]
|
||||
ktwbhtvmbox-unggr-kxtvjnblbmbhg-215[bgthk]
|
||||
amlqskcp-epybc-bwc-pcyaosgqgrgml-600[cgpab]
|
||||
ujqgywfau-usfvq-ugslafy-jwuwanafy-606[uafwy]
|
||||
nwzekwypera-lhwopey-cnwoo-lqnydwoejc-134[xithv]
|
||||
nwzekwypera-acc-naoawnyd-160[itvch]
|
||||
luxciuwncpy-ohmnuvfy-yaa-wihnuchgyhn-526[hnuyc]
|
||||
ygcrqpkbgf-ejqeqncvg-tgegkxkpi-674[gekqc]
|
||||
mtzslklcozfd-qwzhpc-nfdezxpc-dpcgtnp-223[ucwob]
|
||||
tinnm-tzcksf-zcuwghwqg-948[nmktj]
|
||||
rdchjbtg-vgpst-hrpktcvtg-wjci-itrwcdadvn-453[ngtzh]
|
||||
yrwxefpi-nippcfier-hizipstqirx-932[ipref]
|
||||
cvabijtm-xtiabqk-oziaa-kcabwumz-amzdqkm-590[mpqzo]
|
||||
dpmpsgvm-dipdpmbuf-efqmpznfou-259[pmdfu]
|
||||
ynukcajey-nwxxep-zarahkliajp-238[ytaej]
|
||||
zbytomdsvo-mkxni-mykdsxq-nocsqx-770[mosxd]
|
||||
tagzsrsjvgmk-xdgowj-jwuwanafy-814[efhpk]
|
||||
xqvwdeoh-fdqgb-rshudwlrqv-127[jpkat]
|
||||
kpvgtpcvkqpcn-fag-qrgtcvkqpu-596[pcgkq]
|
||||
zlkprjbo-doxab-gbiivybxk-obpbxoze-393[boxik]
|
||||
zbytomdsvo-mrymyvkdo-domrxyvyqi-744[ymodv]
|
||||
jvuzbtly-nyhkl-qlssfilhu-klwhyatlua-695[lhuya]
|
||||
nzydfxpc-rclop-nsznzwlep-xlylrpxpye-145[plnxy]
|
||||
atyzghrk-xghhoz-rghuxgzuxe-748[ghxzr]
|
||||
vhglnfxk-zktwx-ietlmbv-zktll-ftkdxmbgz-787[wbspa]
|
||||
njmjubsz-hsbef-dipdpmbuf-vtfs-uftujoh-623[fubjs]
|
||||
pyknyegle-aylbw-jmegqrgaq-756[egyal]
|
||||
bgmxkgtmbhgte-lvtoxgzxk-angm-vhgmtbgfxgm-137[gmtxb]
|
||||
ydjuhdqjyedqb-vbemuh-jusxdebewo-946[debju]
|
||||
jxdkbqfz-zxkav-zlxqfkd-mrozexpfkd-263[kxzdf]
|
||||
nbhofujd-dipdpmbuf-pqfsbujpot-597[pbdfu]
|
||||
wrs-vhfuhw-fdqgb-vklsslqj-647[sfhlq]
|
||||
vkrhzxgbv-vtgwr-ehzblmbvl-449[knuzb]
|
||||
gsrwyqiv-kvehi-fyrrc-pefsvexsvc-750[versc]
|
||||
hqcfqwydw-vbemuh-ixyffydw-270[fwydh]
|
||||
vetllbybxw-vkrhzxgbv-lvtoxgzxk-angm-ybgtgvbgz-527[jxrwq]
|
||||
bkzrrhehdc-eknvdq-cdrhfm-365[dhrce]
|
||||
cybyjqho-whqtu-rkddo-qsgkyiyjyed-530[ydqhj]
|
||||
ckgvutofkj-hatte-ynovvotm-332[tovka]
|
||||
sawlkjevaz-zua-iwngapejc-758[jzwql]
|
||||
mvhkvbdib-kgvnodx-bmvnn-gjbdnodxn-551[bmkyo]
|
||||
enzcntvat-fpniratre-uhag-grpuabybtl-689[sqkoh]
|
||||
bqvvu-acc-oanreyao-108[acovb]
|
||||
tyepcyletzylw-nlyoj-nzletyr-nfdezxpc-dpcgtnp-275[yelnp]
|
||||
fbebmtkr-zktwx-lvtoxgzxk-angm-kxlxtkva-839[kxtab]
|
||||
ojk-nzxmzo-wvnfzo-vivgtndn-707[mlndw]
|
||||
tpspahyf-nyhkl-qlssfilhu-klwsvftlua-487[iewds]
|
||||
shoewudys-isqludwuh-xkdj-husuylydw-868[tlyhz]
|
||||
qzoggwtwsr-qobrm-oqeiwgwhwcb-116[wgoqb]
|
||||
zlkprjbo-doxab-yxphbq-pxibp-237[ocanz]
|
||||
iruzfrtkzmv-avccpsvre-vexzevvizex-893[nyktl]
|
||||
hqtyeqsjylu-hqrryj-tulubefcudj-894[ujqye]
|
||||
zlkprjbo-doxab-fkqbokxqflkxi-mixpqfz-doxpp-xznrfpfqflk-523[fxkpo]
|
||||
dpmpsgvm-sbccju-dvtupnfs-tfswjdf-129[neysa]
|
||||
qcbgiasf-ufors-dzoghwq-ufogg-zopcfohcfm-246[yhmkz]
|
||||
esyfwlau-ugjjgkanw-usfvq-kzahhafy-242[wnzhb]
|
||||
mbiyqoxsm-lkcuod-nozkbdwoxd-432[odbkm]
|
||||
usfvq-ugslafy-vwhdgqewfl-632[fglqs]
|
||||
gokzyxsjon-zvkcdsm-qbkcc-oxqsxoobsxq-484[xrkfl]
|
||||
hdgdovmt-bmvyz-wvnfzo-gjbdnodxn-395[bwicg]
|
||||
sehheiylu-fhezusjybu-rkddo-udwyduuhydw-530[udhye]
|
||||
glrcplyrgmlyj-aylbw-amyrgle-nspafyqgle-210[dmuny]
|
||||
aflwjfslagfsd-jsttal-xafsfuafy-138[faslj]
|
||||
yuxufmdk-sdmpq-iqmbazulqp-otaoaxmfq-pqbxakyqzf-586[qamfp]
|
||||
jef-iushuj-sxesebqju-ixyffydw-270[iztnj]
|
||||
zvyvgnel-tenqr-enzcntvat-ohaal-ratvarrevat-793[atven]
|
||||
yuxufmdk-sdmpq-vqxxknqmz-ogefayqd-eqdhuoq-612[qdmux]
|
||||
yhtwhnpun-kfl-ylhjxbpzpapvu-357[phlnu]
|
||||
egdytrixat-qjccn-bpcpvtbtci-557[mtpgc]
|
||||
wsvsdkbi-qbkno-mkxni-mykdsxq-ecob-docdsxq-120[dksbo]
|
||||
xtwtelcj-rclop-ojp-dstaatyr-873[omnal]
|
||||
wifilzof-jfumncw-alumm-xypyfijgyhn-318[evfso]
|
||||
mvydjvxodqz-agjrzm-hvivbzhzio-655[vzdhi]
|
||||
jsehsyafy-usfvq-ugslafy-jwuwanafy-840[afsyu]
|
||||
myxcewob-qbkno-nio-bocokbmr-900[obckm]
|
||||
ipvohghykvbz-wshzapj-nyhzz-vwlyhapvuz-539[hzvpy]
|
||||
tbxmlkfwba-pzxsbkdbo-erkq-zrpqljbo-pbosfzb-185[bkopz]
|
||||
rdadguja-eaphixr-vgphh-itrwcdadvn-869[nfpxs]
|
||||
lugjuacha-jfumncw-alumm-zchuhwcha-734[uachm]
|
||||
jsehsyafy-jsttal-jwsuimakalagf-762[mnvlh]
|
||||
zixppfcfba-yrkkv-absbilmjbkq-393[ihgyz]
|
||||
bxaxipgn-vgpst-rdchjbtg-vgpst-rpcsn-rdpixcv-hpath-817[pgtch]
|
||||
rtqlgevkng-ejqeqncvg-hkpcpekpi-154[xpgty]
|
||||
laffe-hgyqkz-xkikobotm-488[kfoab]
|
||||
jfifqxov-doxab-zxkav-zlxqfkd-qoxfkfkd-419[ubaro]
|
||||
myxcewob-qbkno-cmkfoxqob-rexd-zebmrkcsxq-952[boxce]
|
||||
apuut-wvnfzo-rjmfncjk-447[fjnua]
|
||||
lejkrscv-tfcfiwlc-avccpsvre-fgvirkzfej-113[cfver]
|
||||
nglmtuex-cxeeruxtg-kxvxbobgz-215[xegbt]
|
||||
sgmtkzoi-kmm-xkgiwaoyozout-748[qrkst]
|
||||
amppmqgtc-djmucp-rcaflmjmew-912[bcvna]
|
||||
xst-wigvix-fyrrc-wepiw-438[ygref]
|
||||
dzczkrip-xiruv-jtrmvexvi-ylek-fgvirkzfej-295[irvek]
|
||||
diozmivodjivg-xviyt-xjvodib-zibdizzmdib-265[zmrey]
|
||||
rgndvtcxr-ytaanqtpc-stepgibtci-661[tcagi]
|
||||
xgsvgmotm-hgyqkz-jkyomt-358[ajyhb]
|
||||
zloolpfsb-yxphbq-ixyloxqlov-393[loxbp]
|
||||
zilqwikbqdm-jiasmb-uizsmbqvo-668[ibmqs]
|
||||
rtqlgevkng-rncuvke-itcuu-ucngu-206[ucgne]
|
||||
dmybmsuzs-yuxufmdk-sdmpq-eomhqzsqd-tgzf-iadwetab-482[nkqyl]
|
||||
vetllbybxw-ktuubm-hixktmbhgl-345[ikqop]
|
||||
bwx-amkzmb-jcvvg-ikycqaqbqwv-954[symcn]
|
||||
ubhatstkwhnl-ynssr-lvtoxgzxk-angm-kxlxtkva-163[ktxal]
|
||||
zlilocri-yxphbq-pefmmfkd-471[filmp]
|
||||
yflexwxoalrp-zlkprjbo-doxab-zxkav-zlxqfkd-qoxfkfkd-419[xkflo]
|
||||
oxaflxzqfsb-zelzlixqb-xznrfpfqflk-393[flxzq]
|
||||
ixccb-vfdyhqjhu-kxqw-ghyhorsphqw-101[pzgst]
|
||||
pybgmyargtc-qaytclecp-fslr-sqcp-rcqrgle-860[crglp]
|
||||
zbytomdsvo-mkxni-kmaescsdsyx-562[smdko]
|
||||
hwbba-dwppa-ocpcigogpv-570[pabcg]
|
||||
eza-dpncpe-nlyoj-nzletyr-wlmzclezcj-171[elzcn]
|
||||
tbxmlkfwba-mixpqfz-doxpp-zlkqxfkjbkq-159[kxbfp]
|
||||
vetllbybxw-yehpxk-ehzblmbvl-657[blehv]
|
||||
zuv-ykixkz-jek-lotgtiotm-852[ktioz]
|
||||
fnjyxwrinm-mhn-mnyjacvnwc-277[zgpnw]
|
||||
odiih-ljwmh-lxjcrwp-mnenuxyvnwc-615[nwchi]
|
||||
wfummczcyx-wuhxs-qilembij-838[mciuw]
|
||||
sno-rdbqds-bgnbnkzsd-bnmszhmldms-859[sbdnm]
|
||||
nvrgfezqvu-gcrjkzt-xirjj-ivjvrity-555[ylfxv]
|
||||
encuukhkgf-uecxgpigt-jwpv-ujkrrkpi-622[kugpc]
|
||||
lnkfaypeha-xqjju-qoan-paopejc-446[ajpen]
|
||||
kmjezxodgz-ytz-gvwjmvojmt-109[jmzgo]
|
||||
ygcrqpkbgf-hnqygt-octmgvkpi-128[gckpq]
|
||||
jxdkbqfz-mixpqfz-doxpp-tlohpelm-107[pxdfl]
|
||||
xjgjmapg-xviyt-xjvodib-adivixdib-759[ixdjv]
|
||||
laffe-jek-sgtgmksktz-644[vuenb]
|
||||
pbafhzre-tenqr-enoovg-ratvarrevat-975[ymshj]
|
||||
lqwhuqdwlrqdo-vfdyhqjhu-kxqw-uhvhdufk-959[kzlvy]
|
||||
rflsjynh-jll-zxjw-yjxynsl-697[jlyns]
|
||||
wrs-vhfuhw-sodvwlf-judvv-ghvljq-361[vhwdf]
|
||||
ynssr-unggr-tvjnblbmbhg-163[bgnrs]
|
||||
jyfvnlupj-jvsvymbs-yhiipa-zopwwpun-903[nrdma]
|
||||
kzeed-hfsid-uzwhmfxnsl-515[uoyvx]
|
||||
ide-htrgti-uadltg-gtprfjxhxixdc-375[tdgix]
|
||||
sorozgxe-mxgjk-hatte-vaxingyotm-358[fwxei]
|
||||
ydjuhdqjyedqb-fbqijys-whqii-jusxdebewo-582[nuzsj]
|
||||
yknnkoera-xwogap-paydjkhkcu-498[kanop]
|
||||
nzydfxpc-rclop-upwwjmply-opdtry-691[pycdl]
|
||||
dlhwvupglk-jhukf-jvhapun-zlycpjlz-409[lhjpu]
|
||||
kwvacumz-ozilm-moo-bmkpvwtwog-694[mowkv]
|
||||
kmjezxodgz-wpiit-mzxzdqdib-863[anvbu]
|
||||
xlrypetn-nsznzwlep-xlylrpxpye-587[znfwt]
|
||||
pybgmyargtc-qaytclecp-fslr-umpiqfmn-600[nzvej]
|
||||
etyyx-qzaahs-lzqjdshmf-781[ahqsy]
|
||||
ovbunmneqbhf-wryylorna-znantrzrag-221[pnazx]
|
||||
gzefmnxq-bxmefuo-sdmee-ymzmsqyqzf-352[lgvpu]
|
||||
ixeumktoi-jek-jkbkruvsktz-488[mzeun]
|
||||
dzczkrip-xiruv-avccpsvre-glityrjzex-321[eflmp]
|
||||
wfruflnsl-hfsid-fhvznxnynts-307[fnshl]
|
||||
vkppo-rkddo-iqbui-218[dikop]
|
||||
muqfedyput-zubboruqd-mehaixef-452[inbaj]
|
||||
ftzgxmbv-cxeeruxtg-nlxk-mxlmbgz-683[xgmbe]
|
||||
htsxzrjw-lwfij-uqfxynh-lwfxx-hzxytrjw-xjwanhj-827[xjwhf]
|
||||
qekrixmg-wgezirkiv-lyrx-tyvglewmrk-282[regik]
|
||||
ktiaaqnqml-jiasmb-apqxxqvo-226[asvyf]
|
||||
lejkrscv-irdgrxzex-srjbvk-kvtyefcfxp-165[rekvx]
|
||||
hvbizodx-nxvqzibzm-cpio-hvmfzodib-291[izbov]
|
||||
ltpedcxots-tvv-rjhidbtg-htgkxrt-297[tdghr]
|
||||
dlhwvupglk-mbggf-jovjvshal-zlycpjlz-565[lgjvh]
|
||||
xfbqpojafe-tdbwfohfs-ivou-sfbdrvjtjujpo-779[fjobd]
|
||||
kmjezxodgz-xviyt-gvwjmvojmt-577[flhas]
|
||||
jshzzpmplk-jhukf-jvhapun-vwlyhapvuz-669[hpjuv]
|
||||
tfejldvi-xiruv-gcrjkzt-xirjj-drerxvdvek-295[dpsef]
|
||||
zotts-yaa-lymyulwb-968[skymd]
|
||||
rmn-qcapcr-zyqicr-umpiqfmn-704[cmqri]
|
||||
xfbqpojafe-cbtlfu-qvsdibtjoh-727[bfjoq]
|
||||
ykhknbqh-nwxxep-oanreyao-732[naehk]
|
||||
raphhxuxts-hrpktcvtg-wjci-hidgpvt-921[hmzng]
|
||||
yrwxefpi-qmpmxevc-kvehi-gerhc-gsexmrk-hizipstqirx-932[mdsza]
|
||||
xjgjmapg-xviyt-vivgtndn-603[utnks]
|
||||
cxy-bnlanc-mhn-vjwjpnvnwc-745[mtsvn]
|
||||
ujoon-gpbepvxcv-eaphixr-vgphh-uxcpcrxcv-687[pcvxh]
|
||||
ykjoqian-cnwza-iwcjapey-lhwopey-cnwoo-opknwca-264[owacn]
|
||||
lnkfaypeha-oywrajcan-dqjp-zalwnpiajp-108[apjnl]
|
||||
ktwbhtvmbox-yehpxk-mktbgbgz-293[cndif]
|
||||
hqcfqwydw-cqwdujys-rqiauj-qsgkyiyjyed-738[qydjw]
|
||||
amlqskcp-epybc-zyqicr-kylyeckclr-600[sdrzj]
|
||||
bnmrtldq-fqzcd-rbzudmfdq-gtms-zbpthrhshnm-443[dmbhq]
|
||||
nwlddtqtpo-nlyoj-nzletyr-epnsyzwzrj-379[tyrzv]
|
||||
cvabijtm-kpwkwtibm-lmxtwgumvb-980[mbtwi]
|
||||
amlqskcp-epybc-afmamjyrc-jyzmpyrmpw-574[mpyac]
|
||||
aflwjfslagfsd-vqw-dstgjslgjq-424[sfgjl]
|
||||
willimcpy-zfiqyl-xymcah-110[ilycm]
|
||||
kpvgtpcvkqpcn-lgnnadgcp-ujkrrkpi-128[knmqz]
|
||||
wyvqljapsl-buzahisl-ibuuf-lunpullypun-409[wyhza]
|
||||
amlqskcp-epybc-pyzzgr-pcacgtgle-210[cpgae]
|
||||
xtwtelcj-rclop-mldvpe-dstaatyr-821[nkabu]
|
||||
pdjqhwlf-gbh-sxufkdvlqj-751[cdmbz]
|
||||
wkqxodsm-zvkcdsm-qbkcc-ecob-docdsxq-432[cdkoq]
|
||||
xjmmjndqz-wpiit-gjbdnodxn-811[djnim]
|
||||
zlkprjbo-doxab-zelzlixqb-absbilmjbkq-939[blzai]
|
||||
htqtwkzq-xhfajsljw-mzsy-ywfnsnsl-619[lfsnu]
|
||||
zhdsrqlchg-mhoobehdq-xvhu-whvwlqj-361[hqdlo]
|
||||
tcfkqcevkxg-tcorcikpi-ejqeqncvg-uvqtcig-544[lsyzm]
|
||||
kwtwznct-kivlg-zmamizkp-824[ixjen]
|
||||
bkzrrhehdc-qzaahs-rghoohmf-287[hraoz]
|
||||
lxuxaodu-mhn-cajrwrwp-303[aruwx]
|
||||
tcorcikpi-dcumgv-octmgvkpi-700[vygzd]
|
||||
crwwv-zlkprjbo-doxab-yxphbq-bkdfkbbofkd-809[bkdof]
|
||||
xgvnndadzy-xcjxjgvoz-ncdkkdib-447[dnxcg]
|
||||
elrkdcdugrxv-fkrfrodwh-xvhu-whvwlqj-179[eubfs]
|
||||
odkasqzuo-rxaiqd-eqdhuoqe-430[nlyts]
|
||||
vhglnfxk-zktwx-xzz-xgzbgxxkbgz-917[xzgkb]
|
||||
jyfvnlupj-wyvqljapsl-jovjvshal-zlycpjlz-357[jlvpy]
|
||||
gpbepvxcv-eaphixr-vgphh-gtrtxkxcv-687[pvxgh]
|
||||
jrncbavmrq-zntargvp-qlr-qrirybczrag-741[dnzpg]
|
||||
hqfxxnknji-hfsid-knsfshnsl-307[wtfhe]
|
||||
aietsrmdih-nippcfier-stivexmsrw-750[iersm]
|
||||
glrcplyrgmlyj-pyzzgr-pcqcypaf-912[nkoyv]
|
||||
ugfkmewj-yjsvw-hdsklau-yjskk-sfsdqkak-216[ksjad]
|
||||
mhi-lxvkxm-vtgwr-kxtvjnblbmbhg-917[bmvxg]
|
||||
tipfxvezt-irsszk-kvtyefcfxp-451[fteik]
|
||||
jxdkbqfz-mixpqfz-doxpp-qoxfkfkd-939[fxdkp]
|
||||
dsxxw-pyzzgr-qrmpyec-288[prxyz]
|
||||
ejpanjwpekjwh-fahhuxawj-ajcejaanejc-394[jaehw]
|
||||
pinovwgz-xgvnndadzy-xviyt-vxlpdndodji-109[dnvix]
|
||||
szfyrqriuflj-upv-rercpjzj-243[jprqg]
|
||||
dmbttjgjfe-gmpxfs-efqbsunfou-701[fbegj]
|
||||
sgmtkzoi-inuiurgzk-ykxboiky-436[qlcfs]
|
||||
slqryzjc-djmucp-ylyjwqgq-158[jqycl]
|
||||
aflwjfslagfsd-vqw-hmjuzskafy-398[fasjl]
|
||||
slqryzjc-djmucp-pcacgtgle-886[cgjlp]
|
||||
qjopwxha-ywjzu-ajcejaanejc-420[zoehr]
|
||||
amjmpdsj-njyqrga-epyqq-kylyeckclr-756[yksln]
|
||||
zlkprjbo-doxab-zxkav-zlxqfkd-abpfdk-445[kabdx]
|
||||
lhkhszqx-fqzcd-bgnbnkzsd-nodqzshnmr-989[nzdhq]
|
||||
dlhwvupglk-ibuuf-klwhyatlua-591[dzktb]
|
||||
dpotvnfs-hsbef-cbtlfu-ufdiopmphz-623[homsd]
|
||||
ajvyjprwp-npp-mnbrpw-875[pjnrw]
|
||||
lxwbdvna-pajmn-snuuhknjw-mnyuxhvnwc-251[nuwah]
|
||||
vetllbybxw-lvtoxgzxk-angm-xgzbgxxkbgz-865[mknli]
|
||||
aflwjfslagfsd-jsehsyafy-usfvq-vwkayf-268[fsayj]
|
||||
xjgjmapg-agjrzm-gvwjmvojmt-291[jgmav]
|
||||
plolwdub-judgh-iorzhu-dqdobvlv-465[dloub]
|
||||
htqtwkzq-wfggny-fsfqdxnx-645[wsznf]
|
||||
fkqbokxqflkxi-zxkav-zlxqfkd-jxohbqfkd-341[kxfqb]
|
||||
oxjmxdfkd-avb-tlohpelm-653[dlmox]
|
||||
xtwtelcj-rclop-nsznzwlep-epnsyzwzrj-873[zelnp]
|
||||
rtqlgevkng-gii-ceswkukvkqp-466[kgeiq]
|
||||
molgbzqfib-yrkkv-ixyloxqlov-237[lobik]
|
||||
zbytomdsvo-mrymyvkdo-nocsqx-848[pahef]
|
||||
szfyrqriuflj-treup-tfrkzex-ivtvzmzex-867[xejut]
|
||||
upq-tfdsfu-kfmmzcfbo-mphjtujdt-909[fmtud]
|
||||
ykhknbqh-lhwopey-cnwoo-bejwjyejc-342[hwxgn]
|
||||
qfkkj-nsznzwlep-nzyeltyxpye-327[vkmwy]
|
||||
excdklvo-zvkcdsm-qbkcc-psxkxmsxq-900[cvoiz]
|
||||
dszphfojd-dboez-dpbujoh-xpsltipq-623[zbxem]
|
||||
udpsdjlqj-iorzhu-ghsorbphqw-517[hdjop]
|
||||
xcitgcpixdcpa-ide-htrgti-gpqqxi-gthtpgrw-609[gitpc]
|
||||
cybyjqho-whqtu-uww-tuiywd-348[styfx]
|
||||
yuxufmdk-sdmpq-nmewqf-oazfmuzyqzf-924[hfsly]
|
||||
tfejldvi-xiruv-avccpsvre-crsfirkfip-997[rxygp]
|
||||
wsvsdkbi-qbkno-oqq-wkxkqowoxd-822[koqwb]
|
||||
qcbgiasf-ufors-tzcksf-sbuwbssfwbu-610[ivjsc]
|
||||
vkrhzxgbv-wrx-lmhktzx-839[xhkrv]
|
||||
xmrrq-bwddqtwsf-vwnwdghewfl-242[fpmoq]
|
||||
kmjezxodgz-nxvqzibzm-cpio-gjbdnodxn-577[isocd]
|
||||
iutyaskx-mxgjk-kmm-jkyomt-436[kmjtx]
|
||||
ide-htrgti-snt-rjhidbtg-htgkxrt-531[tghir]
|
||||
vkppo-uww-bqrehqjeho-764[xmntl]
|
||||
bdavqofuxq-pkq-ymzmsqyqzf-196[qfmyz]
|
||||
diozmivodjivg-hvbizodx-zbb-ozxcijgjbt-915[zueag]
|
||||
cybyjqho-whqtu-hqrryj-bqrehqjeho-374[hqjry]
|
||||
vcibutulxiom-vohhs-lywycpcha-630[owyks]
|
||||
chnylhuncihuf-wuhxs-fiacmncwm-786[chnuf]
|
||||
xekdwvwnzkqo-ywjzu-ykwpejc-wymqeoepekj-264[dmbln]
|
||||
etyyx-cxd-vnqjrgno-391[hntfq]
|
||||
pwcvonofrcig-dfcxsqhwzs-qobrm-qighcasf-gsfjwqs-194[scfqg]
|
||||
xgvnndadzy-ezggtwzvi-nojmvbz-837[vnsth]
|
||||
dszphfojd-qmbtujd-hsbtt-usbjojoh-467[rskch]
|
||||
npmhcargjc-aylbw-amyrgle-yaosgqgrgml-886[galmr]
|
||||
qczcftiz-gqojsbusf-vibh-twbobqwbu-350[bnsiu]
|
||||
kwvacumz-ozilm-kzgwomvqk-xtiabqk-oziaa-twoqabqka-980[akoqz]
|
||||
dsxxw-zyqicr-cleglccpgle-418[clegx]
|
||||
jrncbavmrq-cynfgvp-tenff-ynobengbel-611[nbefc]
|
||||
hqtyeqsjylu-fbqijys-whqii-tuiywd-322[mitks]
|
||||
rnqnyfwd-lwfij-wfggny-xmnuunsl-697[tseia]
|
||||
fhezusjybu-rqiauj-udwyduuhydw-868[ngyzs]
|
||||
pkl-oaynap-ywjzu-ykwpejc-opknwca-628[pakwy]
|
||||
nuatmlmdpage-vqxxknqmz-geqd-fqefuzs-508[romxa]
|
||||
awzwhofm-ufors-qobrm-qcohwbu-hsqvbczcum-948[obchm]
|
||||
dfcxsqhwzs-rms-fsgsofqv-766[sfqcd]
|
||||
wlqqp-tyftfcrkv-rercpjzj-711[rcfjp]
|
||||
clotzlnetgp-awldetn-rcldd-nzyeltyxpye-743[letdn]
|
||||
lgh-kwujwl-hdsklau-yjskk-vwhsjlewfl-788[lkwhj]
|
||||
uqtqbizg-ozilm-kivlg-kwibqvo-uizsmbqvo-512[iqbov]
|
||||
vetllbybxw-lvtoxgzxk-angm-kxlxtkva-683[xlktv]
|
||||
qyujihctyx-mwupyhayl-bohn-uwkocmcncih-760[chyui]
|
||||
crwwv-zxkav-obzbfsfkd-237[bfkvw]
|
||||
qczcftiz-pogysh-igsf-hsghwbu-610[tnjwm]
|
||||
udpsdjlqj-gbh-hqjlqhhulqj-725[hjqld]
|
||||
yuxufmdk-sdmpq-nmewqf-emxqe-326[meqdf]
|
||||
molgbzqfib-ciltbo-ildfpqfzp-653[bfilo]
|
||||
uwtojhynqj-gfxpjy-ywfnsnsl-151[jnyfs]
|
||||
qvbmzvibqwvit-jiasmb-camz-bmabqvo-330[bmvai]
|
||||
xmtjbzidx-xviyt-xjvodib-xpnojhzm-nzmqdxz-603[torgb]
|
||||
ykjoqian-cnwza-fahhuxawj-qoan-paopejc-628[ajnoc]
|
||||
gvcskirmg-veffmx-irkmriivmrk-906[imrkv]
|
||||
njmjubsz-hsbef-dboez-dpbujoh-bdrvjtjujpo-649[astyb]
|
||||
ovbunmneqbhf-pnaql-pbngvat-jbexfubc-845[yzqwm]
|
||||
joufsobujpobm-kfmmzcfbo-usbjojoh-571[mkpnw]
|
||||
lzfmdshb-cxd-lzmzfdldms-287[dlmzf]
|
||||
froruixo-mhoobehdq-pdunhwlqj-439[ohdqr]
|
||||
xcitgcpixdcpa-rpcsn-rdpixcv-bpcpvtbtci-193[cpitx]
|
||||
dfcxsqhwzs-ksodcbwnsr-xszzmpsob-rsgwub-168[sbwzc]
|
||||
iuruxlar-lruckx-sgtgmksktz-436[krugl]
|
||||
nbhofujd-dboez-fohjoffsjoh-467[ofhjb]
|
||||
pejji-tovvilokx-nozvyiwoxd-276[bzkve]
|
||||
bxaxipgn-vgpst-rpcsn-rdpixcv-rjhidbtg-htgkxrt-583[upjyv]
|
||||
bkzrrhehdc-bzmcx-bnzshmf-lzqjdshmf-443[hzbmc]
|
||||
dpssptjwf-gmpxfs-mphjtujdt-571[pjstd]
|
||||
pdjqhwlf-sodvwlf-judvv-orjlvwlfv-829[tuszv]
|
||||
mfklstdw-tmffq-wfyafwwjafy-918[wmvan]
|
||||
joufsobujpobm-ezf-gjobodjoh-779[xwadm]
|
||||
hafgnoyr-gbc-frperg-rtt-grpuabybtl-481[jcgnd]
|
||||
joufsobujpobm-fhh-tijqqjoh-233[johbf]
|
||||
zuv-ykixkz-vrgyzoi-mxgyy-yzuxgmk-150[yzgkx]
|
||||
ibghopzs-qvcqczohs-qighcasf-gsfjwqs-948[ubrmn]
|
||||
qfmcusbwq-pwcvonofrcig-foppwh-fsgsofqv-584[focpq]
|
||||
aczupnetwp-awldetn-rcldd-qtylyntyr-119[tdlny]
|
||||
dpssptjwf-ezf-sfdfjwjoh-909[znfwy]
|
||||
qxdwpopgsdjh-ytaanqtpc-pcpanhxh-297[pahcd]
|
||||
ucynmlgxcb-aylbw-rpyglgle-626[lgybc]
|
||||
oqnidbshkd-okzrshb-fqzrr-rdquhbdr-573[rdbhq]
|
||||
frqvxphu-judgh-fdqgb-vhuylfhv-647[hfuvd]
|
||||
vhehkyne-cxeeruxtg-hixktmbhgl-319[ehxgk]
|
||||
gsrwyqiv-kvehi-gerhc-gsexmrk-vigimzmrk-412[girek]
|
||||
ajmrxjlcren-yujbcrl-pajbb-bnaerlnb-719[lvzpq]
|
||||
zixppfcfba-bdd-bkdfkbbofkd-393[hnmcz]
|
||||
aflwjfslagfsd-hdsklau-yjskk-ugflsafewfl-918[flsak]
|
||||
xtwtelcj-rclop-upwwjmply-nzyeltyxpye-847[lpyet]
|
||||
oaddaeuhq-qss-dqmocgueufuaz-924[qzwti]
|
||||
tvsnigxmpi-wgezirkiv-lyrx-hitpscqirx-568[irxgp]
|
||||
ksodcbwnsr-qczcftiz-gqojsbusf-vibh-igsf-hsghwbu-272[sbcfg]
|
||||
sgmtkzoi-jek-gtgreyoy-410[tqkns]
|
||||
rzvkjiduzy-kgvnodx-bmvnn-omvdidib-109[fpsxk]
|
||||
diozmivodjivg-rzvkjiduzy-zbb-adivixdib-447[nayqm]
|
||||
froruixo-vfdyhqjhu-kxqw-rshudwlrqv-517[rhqud]
|
||||
dmpuamofuhq-dmnnuf-ymzmsqyqzf-222[mwnak]
|
||||
mybbycsfo-zvkcdsm-qbkcc-wkbuodsxq-380[bcksd]
|
||||
tcrjjzwzvu-wcfnvi-vexzevvizex-633[vzeci]
|
||||
qzoggwtwsr-gqojsbusf-vibh-hsqvbczcum-870[sbgqc]
|
||||
enzcntvat-cynfgvp-tenff-phfgbzre-freivpr-845[xnfot]
|
||||
gsvvswmzi-gerhc-gsexmrk-stivexmsrw-984[segmr]
|
||||
fhezusjybu-vbemuh-iqbui-244[iektm]
|
||||
oqnidbshkd-idkkxadzm-qdzbpthrhshnm-469[gekyh]
|
||||
pybgmyargtc-cee-nspafyqgle-574[egyac]
|
||||
jyddc-gerhc-gsexmrk-vigimzmrk-672[gmrcd]
|
||||
tipfxvezt-gcrjkzt-xirjj-rercpjzj-399[ldquc]
|
||||
bdavqofuxq-bxmefuo-sdmee-dqeqmdot-768[hwmck]
|
||||
fbebmtkr-zktwx-vtgwr-hixktmbhgl-475[tbkgh]
|
||||
irgyyolokj-igtje-iugzotm-rumoyzoiy-202[mpijw]
|
||||
fbebmtkr-zktwx-xzz-kxlxtkva-865[yicwo]
|
||||
tyepcyletzylw-dnlgpyrpc-sfye-nfdezxpc-dpcgtnp-145[badwi]
|
||||
vrurcjah-pajmn-ljwmh-anbnjalq-849[ajnhl]
|
||||
rtqlgevkng-ecpfa-fgukip-700[gefkp]
|
||||
pdjqhwlf-froruixo-udeelw-wudlqlqj-907[kymab]
|
||||
tinnm-xszzmpsob-qcbhowbasbh-688[nhcdm]
|
||||
nij-mywlyn-wuhxs-lywycpcha-318[ywchl]
|
||||
fnjyxwrinm-ouxfna-ldbcxvna-bnaerln-979[naxbf]
|
||||
ajvyjprwp-bljenwpna-qdwc-anjlzdrbrcrxw-823[jrwan]
|
||||
diozmivodjivg-wpiit-mzxzdqdib-551[kmhon]
|
||||
nij-mywlyn-dyffsvyuh-xyjfisgyhn-656[yfnhi]
|
||||
fhezusjybu-zubboruqd-vydqdsydw-504[dubyq]
|
||||
ubhatstkwhnl-lvtoxgzxk-angm-kxvxbobgz-579[xbgkt]
|
||||
xcitgcpixdcpa-rwdrdapit-htgkxrth-557[zastp]
|
||||
wfintfhynaj-jll-hzxytrjw-xjwanhj-281[jhnwa]
|
||||
irgyyolokj-vrgyzoi-mxgyy-rumoyzoiy-800[sptbo]
|
||||
jvyyvzpcl-yhkpvhjapcl-ibuuf-aljouvsvnf-227[vjlpu]
|
||||
iruzfrtkzmv-treup-kirzezex-841[rzeik]
|
||||
cxy-bnlanc-ljwmh-ujkxajcxah-979[waqkz]
|
||||
qzoggwtwsr-foppwh-difqvogwbu-948[wgofp]
|
||||
qyujihctyx-dyffsvyuh-zchuhwcha-552[hycuf]
|
||||
yknnkoera-lhwopey-cnwoo-pnwejejc-992[enowc]
|
||||
zovldbkfz-zxkav-zlxqfkd-xkxivpfp-289[vtcos]
|
||||
mrxivrexmsrep-glsgspexi-erepcwmw-750[btrnl]
|
||||
udskkaxawv-kusnwfywj-zmfl-dgyaklauk-866[xeozd]
|
||||
esyfwlau-tmffq-vwnwdghewfl-632[czoml]
|
||||
hjgbwuladw-kusnwfywj-zmfl-esfsywewfl-294[xwfie]
|
||||
hwbba-rncuvke-itcuu-ocpcigogpv-232[cubgi]
|
||||
vhkkhlbox-vtgwr-xgzbgxxkbgz-631[typnq]
|
||||
nvrgfezqvu-szfyrqriuflj-vxx-jkfirxv-139[krijl]
|
||||
iuruxlar-zuv-ykixkz-lruckx-xkykgxin-826[kxuir]
|
||||
yhwooebeaz-ywjzu-yqopkian-oanreya-966[ynwkb]
|
||||
iuxxuyobk-pkrrehkgt-xkgiwaoyozout-176[sjwtp]
|
||||
glrcplyrgmlyj-djmucp-qrmpyec-236[clmpr]
|
||||
pejji-tovvilokx-bocokbmr-588[obijk]
|
||||
hplazytkpo-upwwjmply-dpcgtnpd-119[pdltw]
|
||||
nij-mywlyn-xsy-jolwbumcha-136[yjlmn]
|
||||
pynffvsvrq-ohaal-fgbentr-923[fanrv]
|
||||
lgh-kwujwl-kusnwfywj-zmfl-kwjnauwk-736[wkjlu]
|
||||
dszphfojd-sbccju-mbcpsbupsz-727[sbcpd]
|
||||
ixeumktoi-lruckx-zkinturume-800[ktsyl]
|
||||
fmsledevhsyw-tvsnigxmpi-veffmx-viwievgl-412[veifm]
|
||||
mrxivrexmsrep-fyrrc-qevoixmrk-880[wtmdx]
|
||||
qmpmxevc-kvehi-wgezirkiv-lyrx-wlmttmrk-620[zyxjd]
|
||||
zixppfcfba-oxyyfq-qbzeklildv-289[fbilp]
|
||||
nwlddtqtpo-dnlgpyrpc-sfye-wlmzclezcj-431[jefsy]
|
||||
tinnm-foppwh-oqeiwgwhwcb-688[fzyjx]
|
||||
plolwdub-judgh-fdqgb-ghyhorsphqw-413[hystk]
|
||||
bwx-amkzmb-zijjqb-bmkpvwtwog-460[bmwjk]
|
||||
qcbgiasf-ufors-pibbm-ghcfous-896[bfscg]
|
||||
ktwbhtvmbox-vetllbybxw-cxeeruxtg-tgterlbl-215[tmybs]
|
||||
lqwhuqdwlrqdo-mhoobehdq-vwrudjh-387[dhqow]
|
||||
lgh-kwujwl-tskcwl-vwhdgqewfl-684[afnbs]
|
||||
yuxufmdk-sdmpq-rxaiqd-efadmsq-976[mczye]
|
||||
ftzgxmbv-unggr-kxlxtkva-917[ezfmx]
|
||||
rmn-qcapcr-aylbw-amyrgle-ylyjwqgq-158[prcqj]
|
||||
fhezusjybu-rqiauj-husuylydw-582[uyhjs]
|
||||
apuut-xviyt-xjvodib-yzkvmohzio-525[yomvc]
|
||||
mybbycsfo-dyz-combod-zvkcdsm-qbkcc-oxqsxoobsxq-848[obcsd]
|
||||
yhwooebeaz-lhwopey-cnwoo-zalhkuiajp-706[oaehw]
|
||||
bqxnfdmhb-bzmcx-trdq-sdrshmf-469[zdyht]
|
||||
dmpuamofuhq-vqxxknqmz-pqbmdfyqzf-924[qmfdp]
|
||||
kmjezxodgz-ytz-mzvxlpdndodji-889[gefcn]
|
||||
apuut-xviyt-xjvodib-mznzvmxc-369[vximt]
|
||||
fodvvlilhg-surmhfwloh-hjj-hqjlqhhulqj-647[hljqf]
|
||||
tipfxvezt-srjbvk-tljkfdvi-jvimztv-269[vtijf]
|
||||
ikhcxvmbex-xzz-labiibgz-423[qnzsg]
|
||||
qzchnzbshud-azrjds-lzmzfdldms-885[xubgy]
|
||||
eadalsjq-yjsvw-vqw-esjcwlafy-398[ajswe]
|
||||
oxmeeuruqp-bxmefuo-sdmee-etubbuzs-898[stupo]
|
||||
frqvxphu-judgh-xqvwdeoh-fdqgb-frdwlqj-zrunvkrs-257[dqrfh]
|
||||
ltpedcxots-gpbepvxcv-qphzti-igpxcxcv-349[jzdyi]
|
||||
vhkkhlbox-vtgwr-phkdlahi-969[tmszy]
|
||||
cvabijtm-jcvvg-lmdmtwxumvb-226[nvfca]
|
||||
sedikcuh-whqtu-sqdto-qsgkyiyjyed-790[dqsye]
|
||||
gzefmnxq-bdavqofuxq-rxaiqd-ymzmsqyqzf-690[zklij]
|
||||
zntargvp-cynfgvp-tenff-qrcyblzrag-351[sqzyh]
|
||||
xfbqpojafe-dboez-xpsltipq-857[ehgum]
|
||||
uqtqbizg-ozilm-jcvvg-lmaqov-980[xzwsi]
|
||||
xjgjmapg-ezggtwzvi-xpnojhzm-nzmqdxz-161[zgjmx]
|
||||
muqfedyput-vbemuh-fkhsxqiydw-920[udefh]
|
||||
kzeed-gfxpjy-ywfnsnsl-489[xeoyn]
|
||||
pynffvsvrq-onfxrg-ynobengbel-741[nfbeg]
|
||||
froruixo-iorzhu-rshudwlrqv-647[rouhi]
|
||||
amjmpdsj-qaytclecp-fslr-qyjcq-938[cjqal]
|
||||
otzkxtgzoutgr-jek-iayzuskx-ykxboik-826[kotxz]
|
||||
tpspahyf-nyhkl-jhukf-zavyhnl-279[hyafk]
|
||||
pualyuhapvuhs-ihzrla-ylhjxbpzpapvu-929[lbncu]
|
||||
odiih-ajkkrc-mnbrpw-355[ikrab]
|
||||
votubcmf-gmpxfs-bdrvjtjujpo-363[jbfmo]
|
||||
zgmfyxypbmsq-rmn-qcapcr-bwc-pcacgtgle-704[ztspm]
|
||||
uqtqbizg-ozilm-nchhg-jiasmb-ivitgaqa-382[snpaf]
|
||||
willimcpy-jfumncw-alumm-lyuwkocmcncih-734[cmliu]
|
||||
ibghopzs-qvcqczohs-hsqvbczcum-506[chqsz]
|
||||
ugjjgkanw-tmffq-vwkayf-216[lfrby]
|
||||
pynffvsvrq-pnaql-erprvivat-507[vpraf]
|
||||
aczupnetwp-nlyoj-nzletyr-pyrtyppctyr-197[pytnr]
|
||||
vkppo-sqdto-seqjydw-bewyijysi-686[sydei]
|
||||
dpotvnfs-hsbef-ezf-qvsdibtjoh-337[fsbde]
|
||||
wlqqp-avccpsvre-ivtvzmzex-425[vcepq]
|
||||
jfifqxov-doxab-gbiivybxk-jxohbqfkd-549[skgzo]
|
||||
rgndvtcxr-jchipqat-rpcsn-igpxcxcv-713[cprxg]
|
||||
ykhknbqh-xqjju-wymqeoepekj-576[ejkqh]
|
||||
pejji-mrymyvkdo-domrxyvyqi-536[ymdij]
|
||||
wihmogyl-aluxy-xsy-womnigyl-mylpcwy-786[ylmwg]
|
||||
jlidywncfy-zfiqyl-mbcjjcha-162[cjyfi]
|
||||
pynffvsvrq-sybjre-grpuabybtl-455[byavk]
|
||||
uqtqbizg-ozilm-uiovmbqk-akidmvomz-pcvb-bziqvqvo-694[xywnk]
|
||||
lxaaxbren-ouxfna-ydalqjbrwp-225[mibtg]
|
||||
joufsobujpobm-kfmmzcfbo-dvtupnfs-tfswjdf-675[ijokq]
|
||||
crwwv-gbiivybxk-pqloxdb-913[rtmzn]
|
||||
pkl-oaynap-nwxxep-bejwjyejc-576[jfmel]
|
||||
wfummczcyx-gcfcnuls-aluxy-wuhxs-wihnuchgyhn-786[giqsn]
|
||||
htsxzrjw-lwfij-ojqqdgjfs-ijajqturjsy-229[tjxbs]
|
||||
qczcftiz-foppwh-rsgwub-246[exnyt]
|
||||
lnkfaypeha-xwogap-naoawnyd-342[zynls]
|
||||
thnulapj-zjhclunly-obua-thuhnltlua-201[luhan]
|
||||
vkppo-fbqijys-whqii-bqrehqjeho-504[lkosn]
|
||||
eqpuwogt-itcfg-ecpfa-qrgtcvkqpu-622[cgpqt]
|
||||
odkasqzuo-oazegyqd-sdmpq-otaoaxmfq-efadmsq-222[aoqdm]
|
||||
ide-htrgti-bxaxipgn-vgpst-qjccn-pcpanhxh-453[pcghi]
|
||||
luxciuwncpy-jfumncw-alumm-xyjulngyhn-552[unclm]
|
||||
plolwdub-judgh-hjj-zrunvkrs-777[yfulq]
|
||||
pejji-lexxi-oxqsxoobsxq-458[xoeij]
|
||||
uzfqdzmfuazmx-pkq-fdmuzuzs-170[npsqv]
|
||||
bknsykmdsfo-zvkcdsm-qbkcc-cdybkqo-614[fastx]
|
||||
qfkkj-upwwjmply-qtylyntyr-873[yjklp]
|
||||
hqcfqwydw-zubboruqd-ijehqwu-218[djvhz]
|
||||
kmjezxodgz-pinovwgz-zbb-ncdkkdib-473[vimty]
|
||||
bknsykmdsfo-myvybpev-mkxni-mykdsxq-bocokbmr-562[sdwfr]
|
||||
eqttqukxg-gii-hkpcpekpi-960[yljdr]
|
||||
drxevkzt-wcfnvi-cfxzjkztj-607[twoxz]
|
||||
vkppo-rkddo-ijehqwu-504[dkope]
|
||||
rgllk-rxaiqd-dqmocgueufuaz-456[mxkzr]
|
||||
ktiaaqnqml-moo-xczkpiaqvo-122[aoqik]
|
||||
amjmpdsj-njyqrga-epyqq-pcqcypaf-600[pqajy]
|
||||
rwcnawjcrxwju-npp-ujkxajcxah-199[jacwx]
|
||||
fmsledevhsyw-gspsvjyp-gerhc-gsexmrk-ywiv-xiwxmrk-412[segmr]
|
||||
ajmrxjlcren-kdwwh-anbnjalq-745[myzet]
|
||||
aoubshwq-tinnm-suu-fsoqeiwgwhwcb-480[wsubh]
|
||||
rdggdhxkt-rpcsn-hpath-531[tsamh]
|
||||
pbafhzre-tenqr-pnaql-pbngvat-nanylfvf-715[upmid]
|
||||
zbytomdsvo-cmkfoxqob-rexd-gybucryz-562[obycd]
|
||||
bkwzkqsxq-mkxni-ecob-docdsxq-978[ksmtq]
|
||||
oknkvcta-itcfg-ecpfa-ncdqtcvqta-414[lcwjp]
|
||||
fydelmwp-clmmte-cpnptgtyr-405[jlgak]
|
||||
tcorcikpi-ecpfa-gpikpggtkpi-804[picgk]
|
||||
xtwtelcj-rclop-upwwjmply-hzcvdsza-327[clpwj]
|
||||
tcfkqcevkxg-ecpfa-eqcvkpi-ncdqtcvqta-752[cqekt]
|
||||
etaqigpke-tcddkv-uvqtcig-440[tcdeg]
|
||||
raphhxuxts-qxdwpopgsdjh-rpcsn-rdpixcv-sthxvc-843[tvexn]
|
||||
atyzghrk-xghhoz-ktmotkkxotm-748[kthog]
|
||||
fmsledevhsyw-nippcfier-asvowlst-412[zksal]
|
||||
oaxadrgx-eomhqzsqd-tgzf-eqdhuoqe-846[zfylm]
|
||||
qcbgiasf-ufors-dzoghwq-ufogg-qcbhowbasbh-194[bgofh]
|
||||
qvbmzvibqwvit-bwx-amkzmb-jiasmb-xczkpiaqvo-122[bimva]
|
||||
qfkkj-prr-hzcvdsza-639[dqmts]
|
||||
jvyyvzpcl-ibuuf-bzly-alzapun-981[mnakf]
|
||||
dsxxw-cee-pcacgtgle-626[odsgr]
|
||||
buzahisl-zjhclunly-obua-zlycpjlz-617[rsglh]
|
||||
gpewwmjmih-tpewxmg-kveww-jmrergmrk-594[mwegr]
|
||||
aietsrmdih-hci-stivexmsrw-516[hsvof]
|
||||
ujoon-ytaanqtpc-stepgibtci-219[tacin]
|
||||
kpvgtpcvkqpcn-fag-ceswkukvkqp-830[cijob]
|
||||
etaqigpke-uecxgpigt-jwpv-ocpcigogpv-154[gpcei]
|
||||
eqnqthwn-tcddkv-rwtejcukpi-674[tcdek]
|
||||
mhi-lxvkxm-ktuubm-nlxk-mxlmbgz-241[mxklb]
|
||||
avw-zljyla-wshzapj-nyhzz-ylzlhyjo-149[plqkx]
|
||||
xekdwvwnzkqo-nwxxep-odellejc-862[xyzwn]
|
||||
pkl-oaynap-bhksan-qoan-paopejc-498[ojduv]
|
||||
xjinphzm-bmvyz-xjgjmapg-ezggtwzvi-zibdizzmdib-499[zigmb]
|
||||
bdavqofuxq-rxaiqd-bgdotmeuzs-508[clbmv]
|
||||
xzwrmkbqtm-jcvvg-ewzsapwx-902[wmvxz]
|
||||
dmybmsuzs-rxaiqd-xmnadmfadk-846[dmasx]
|
||||
surmhfwloh-exqqb-vwrudjh-127[hqruw]
|
||||
gntmfefwitzx-ojqqdgjfs-xytwflj-827[xgtuv]
|
||||
tbxmlkfwba-zxkav-zlxqfkd-ildfpqfzp-965[jncig]
|
||||
sbnqbhjoh-tdbwfohfs-ivou-qvsdibtjoh-597[rftxz]
|
||||
hqcfqwydw-fbqijys-whqii-iqbui-322[iqwbf]
|
||||
forwcoqhwjs-xszzmpsob-gvwddwbu-324[ftyzu]
|
||||
zlilocri-oxjmxdfkd-ciltbo-pbosfzbp-991[gjars]
|
||||
kwzzwaqdm-rmttgjmiv-uizsmbqvo-434[mziqt]
|
||||
willimcpy-gcfcnuls-aluxy-mwupyhayl-bohn-yhachyylcha-162[kcimx]
|
||||
uqtqbizg-ozilm-kivlg-uizsmbqvo-954[pifvj]
|
||||
ugdgjxmd-tskcwl-wfyafwwjafy-762[wfadg]
|
||||
ajyqqgdgcb-bwc-qyjcq-262[qcbgj]
|
||||
yknnkoera-oywrajcan-dqjp-wjwhuoeo-602[oajnw]
|
||||
bqxnfdmhb-qzaahs-rzkdr-963[abdhq]
|
||||
dwbcjkun-mhn-jwjuhbrb-693[niusd]
|
||||
wlqqp-wcfnvi-crsfirkfip-373[nrtqs]
|
||||
guahyncw-wbiwifuny-xymcah-240[wyach]
|
||||
qfkkj-prr-opgpwzaxpye-613[pkrae]
|
||||
cqwdujys-tou-tufbeocudj-322[ucdjo]
|
||||
wfruflnsl-wfggny-ijuqtdrjsy-931[wjznm]
|
||||
bnqqnrhud-okzrshb-fqzrr-cdrhfm-105[rhqbd]
|
||||
yhtwhnpun-tpspahyf-nyhkl-jovjvshal-zlycpjlz-487[hlpyj]
|
||||
iutyaskx-mxgjk-hatte-lotgtiotm-176[shzku]
|
||||
gntmfefwitzx-kqtbjw-xfqjx-645[nmfsa]
|
||||
jvsvymbs-jhukf-jbzavtly-zlycpjl-695[frnkz]
|
||||
dlhwvupglk-zjhclunly-obua-jvuahputlua-825[ulahj]
|
||||
wyvqljapsl-jhukf-jvhapun-ylzlhyjo-487[jlhya]
|
||||
ghkmaihex-hucxvm-lmhktzx-267[hmxka]
|
||||
irgyyolokj-vrgyzoi-mxgyy-xkikobotm-670[ryfvl]
|
||||
kwzzwaqdm-zijjqb-amzdqkma-564[qzdtv]
|
||||
rflsjynh-idj-xytwflj-541[jflyd]
|
||||
emixwvqhml-ntwemz-zmkmqdqvo-200[zmbdq]
|
||||
kzgwomvqk-rmttgjmiv-abwziom-330[mtnsk]
|
||||
xjgjmapg-wpiit-vivgtndn-499[weiza]
|
||||
cebwrpgvyr-pnaql-grpuabybtl-117[xqmjc]
|
||||
egdytrixat-uadltg-uxcpcrxcv-297[ctxad]
|
||||
gvaaz-ezf-tfswjdft-623[fatzd]
|
||||
excdklvo-mkxni-mykdsxq-mecdywob-cobfsmo-692[mocdk]
|
||||
ovbunmneqbhf-pnaql-bcrengvbaf-351[mtgcw]
|
||||
nwlddtqtpo-clmmte-nzyeltyxpye-509[ydnsh]
|
||||
froruixo-udeelw-vwrudjh-309[sxgvu]
|
||||
hqcfqwydw-sxesebqju-cqhaujydw-660[fghtp]
|
||||
bpvctixr-rwdrdapit-ldgzhwde-895[sfioq]
|
||||
ajmrxjlcren-yaxsnlcrun-bljenwpna-qdwc-fxatbqxy-797[fnjis]
|
||||
lugjuacha-zfiqyl-uhufsmcm-370[uacfh]
|
||||
houngfgxjuay-pkrrehkgt-iayzuskx-ykxboik-852[kguxy]
|
||||
gcfcnuls-aluxy-luxciuwncpy-jfumncw-alumm-uhufsmcm-214[zftvs]
|
||||
oxmeeuruqp-otaoaxmfq-emxqe-794[drzyv]
|
||||
nvrgfezqvu-upv-tfekrzedvek-867[evfkr]
|
||||
uwtojhynqj-xhfajsljw-mzsy-zxjw-yjxynsl-801[jyswx]
|
||||
zixppfcfba-yxphbq-jxohbqfkd-887[zgoyn]
|
||||
qczcftiz-qvcqczohs-aobousasbh-402[coqsz]
|
||||
lejkrscv-upv-tfekrzedvek-919[ekvrc]
|
||||
chnylhuncihuf-zfiqyl-zchuhwcha-604[magtu]
|
||||
vetllbybxw-lvtoxgzxk-angm-ybgtgvbgz-605[gbltv]
|
||||
dmpuamofuhq-omzpk-qzsuzqqduzs-820[quzmd]
|
||||
rdggdhxkt-gpqqxi-rdcipxcbtci-219[yrlha]
|
||||
tfejldvi-xiruv-wcfnvi-jvimztvj-243[fqclr]
|
||||
foadouwbu-dzoghwq-ufogg-gvwddwbu-324[dgouw]
|
||||
tbxmlkfwba-pzxsbkdbo-erkq-bkdfkbbofkd-913[hgans]
|
||||
gpbepvxcv-rpcsn-itrwcdadvn-453[sbuap]
|
||||
szfyrqriuflj-srjbvk-ivrthlzjzkzfe-633[sqwil]
|
||||
jqwpihizlwca-jiasmb-ivitgaqa-122[amzud]
|
||||
bqvvu-ywjzu-qoan-paopejc-264[ajopq]
|
||||
mvydjvxodqz-wpiit-gvwjmvojmt-525[oabkn]
|
||||
ktiaaqnqml-moo-zmikycqaqbqwv-252[qamik]
|
||||
dpmpsgvm-cbtlfu-sfdfjwjoh-909[pntzm]
|
||||
nzcczdtgp-nsznzwlep-qtylyntyr-171[nztyc]
|
||||
htqtwkzq-idj-rfwpjynsl-723[ndmel]
|
||||
gzefmnxq-nmewqf-eqdhuoqe-300[eqfmn]
|
||||
qzlozfhmf-cxd-lzqjdshmf-469[fzdhl]
|
||||
pinovwgz-mvydjvxodqz-xviyt-xjvodib-yzndbi-447[pztyh]
|
||||
gspsvjyp-gerhc-gsexmrk-vieguymwmxmsr-256[gmser]
|
||||
ygcrqpkbgf-tcfkqcevkxg-hnqygt-vtckpkpi-102[puovq]
|
||||
jsehsyafy-tmffq-vwhdgqewfl-112[rnach]
|
||||
qmpmxevc-kvehi-hci-eguymwmxmsr-204[mechi]
|
||||
tcfkqcevkxg-tcorcikpi-gii-gpikpggtkpi-544[wytzs]
|
||||
pbafhzre-tenqr-enzcntvat-onfxrg-ratvarrevat-845[raten]
|
||||
shoewudys-rqiauj-bqrehqjeho-270[ehqjo]
|
||||
xjinphzm-bmvyz-ojk-nzxmzo-ezggtwzvi-zibdizzmdib-577[zimbd]
|
||||
rkpqxyib-bdd-pbosfzbp-939[bpdfi]
|
||||
vcibutulxiom-vumeyn-omyl-nymncha-786[ziwys]
|
||||
nvrgfezqvu-upv-ivrthlzjzkzfe-321[vzefr]
|
||||
krxqjijamxdb-yujbcrl-pajbb-dbna-cnbcrwp-303[bjacr]
|
||||
zixppfcfba-mixpqfz-doxpp-qbzeklildv-653[zdxgu]
|
||||
lsyrkjkbnyec-mkxni-gybucryz-640[ykbcn]
|
||||
qspkfdujmf-kfmmzcfbo-dpoubjonfou-155[fomub]
|
||||
sno-rdbqds-rbzudmfdq-gtms-cdozqsldms-755[yaubo]
|
||||
houngfgxjuay-vrgyzoi-mxgyy-ygrky-462[ygoru]
|
||||
gcfcnuls-aluxy-wifilzof-yaa-omyl-nymncha-266[alycf]
|
||||
hwdtljsnh-gzssd-xfqjx-463[fajso]
|
||||
htwwtxnaj-idj-hzxytrjw-xjwanhj-281[hzrnq]
|
||||
sorozgxe-mxgjk-lruckx-xkgiwaoyozout-176[oxgkr]
|
||||
ynssr-vtgwr-vhtmbgz-ftgtzxfxgm-475[gtfmr]
|
||||
rtqlgevkng-lgnnadgcp-yqtmujqr-648[nelzc]
|
||||
kwtwznct-rmttgjmiv-camz-bmabqvo-460[nmbls]
|
||||
surmhfwloh-fdqgb-wudlqlqj-959[lqdfh]
|
||||
iutyaskx-mxgjk-hgyqkz-rumoyzoiy-644[ykgim]
|
||||
jqwpihizlwca-kivlg-kwibqvo-wxmzibqwva-434[iwqva]
|
||||
amppmqgtc-djmucp-asqrmkcp-qcptgac-496[cpmaq]
|
||||
apuut-xjmmjndqz-wpiit-vivgtndn-187[intdj]
|
||||
ftzgxmbv-vtgwr-wxlbzg-267[gbtvw]
|
||||
eza-dpncpe-mldvpe-wlmzclezcj-171[eclpz]
|
||||
rnqnyfwd-lwfij-wfggny-ijuqtdrjsy-827[fjnwy]
|
||||
aflwjfslagfsd-xdgowj-ghwjslagfk-684[fgajl]
|
||||
lzfmdshb-eknvdq-rsnqzfd-859[ybjfz]
|
||||
hqtyeqsjylu-uww-tufbeocudj-582[uejqt]
|
||||
qfkkj-nsznzwlep-dstaatyr-223[aknst]
|
||||
ubhatstkwhnl-xzz-kxvxbobgz-267[umogq]
|
||||
xekdwvwnzkqo-oywrajcan-dqjp-ykjpwejiajp-238[mtbvo]
|
||||
cebwrpgvyr-sybjre-qrfvta-195[rbevy]
|
||||
hjgbwuladw-usfvq-esfsywewfl-710[mpiho]
|
||||
lujbbrornm-kjbtnc-fxatbqxy-823[ywamx]
|
||||
ugjjgkanw-uzgugdslw-hmjuzskafy-476[stfoh]
|
||||
fmsledevhsyw-fewoix-pefsvexsvc-724[scznt]
|
||||
zlkprjbo-doxab-bdd-obzbfsfkd-419[bdofk]
|
||||
vcibutulxiom-wuhxs-nluchcha-864[uchil]
|
||||
yhkpvhjapcl-ihzrla-dvyrzovw-305[qyhmr]
|
||||
hmsdqmzshnmzk-qzlozfhmf-qzaahs-zmzkxrhr-287[zhmqs]
|
||||
gzefmnxq-dmnnuf-etubbuzs-482[nubef]
|
||||
ejpanjwpekjwh-ywjzu-ykwpejc-nayaerejc-550[jewap]
|
||||
cxy-bnlanc-npp-mnyuxhvnwc-433[nvmyt]
|
||||
jfifqxov-doxab-gbiivybxk-obzbfsfkd-601[epyzn]
|
||||
pkl-oaynap-xqjju-wjwhuoeo-680[joapu]
|
||||
jef-iushuj-hqtyeqsjylu-rqiauj-bewyijysi-842[hyzgu]
|
||||
dfcxsqhwzs-tzcksf-aobousasbh-896[wkqxh]
|
||||
lahxpnwrl-ljwmh-bjunb-693[jtoyp]
|
||||
rnqnyfwd-lwfij-gfxpjy-wjhjnansl-931[jnfwl]
|
||||
buzahisl-jvyyvzpcl-jhukf-jvhapun-klwhyatlua-617[ahluj]
|
||||
jchipqat-eaphixr-vgphh-bpgztixcv-271[hpiac]
|
||||
zlkprjbo-doxab-avb-absbilmjbkq-107[wbymr]
|
||||
eqpuwogt-itcfg-dcumgv-fgxgnqrogpv-362[gcfop]
|
||||
rdadguja-qjccn-gtrtxkxcv-791[cadgj]
|
||||
etaqigpke-oknkvcta-itcfg-hnqygt-hkpcpekpi-674[mcoya]
|
||||
gspsvjyp-hci-wxsveki-386[myuqs]
|
||||
jef-iushuj-vbemuh-mehaixef-920[ehufi]
|
||||
encuukhkgf-fag-tgceswkukvkqp-752[kguce]
|
||||
npmhcargjc-njyqrga-epyqq-kypicrgle-444[cgpqr]
|
||||
xtwtelcj-rclop-mldvpe-dpcgtnpd-379[pcdlt]
|
||||
nchhg-kpwkwtibm-mvoqvmmzqvo-252[mvhko]
|
||||
uqtqbizg-ozilm-jiasmb-uizsmbqvo-122[ktxvs]
|
||||
nwlddtqtpo-mldvpe-fdpc-epdetyr-509[dpetl]
|
||||
wfintfhynaj-idj-qfgtwfytwd-229[efudw]
|
||||
yhwooebeaz-nwilwcejc-ydkykhwpa-owhao-160[skuyi]
|
||||
52
2016/d04/ex2/ex2.py
Executable file
52
2016/d04/ex2/ex2.py
Executable file
|
|
@ -0,0 +1,52 @@
|
|||
#!/usr/bin/env python
|
||||
|
||||
import collections
|
||||
import sys
|
||||
from typing import NamedTuple
|
||||
|
||||
|
||||
class Room(NamedTuple):
|
||||
name: str
|
||||
sector_id: int
|
||||
checksum: str
|
||||
|
||||
def is_real(self) -> bool:
|
||||
letters = collections.Counter(self.name.replace("-", ""))
|
||||
checksum = sorted(letters.most_common(), key=lambda t: (-t[1], t[0]))[:5]
|
||||
return "".join(c for c, _ in checksum) == self.checksum
|
||||
|
||||
@classmethod
|
||||
def from_str(cls, input: str) -> "Room":
|
||||
input, checksum = map(lambda s: s.removesuffix("]"), input.split("["))
|
||||
*name, sector_id = input.split("-")
|
||||
return cls("-".join(name), int(sector_id), checksum)
|
||||
|
||||
def decrypt(self) -> str:
|
||||
def rotate(c: str) -> str:
|
||||
rotated = ord(c) - ord("a") + self.sector_id
|
||||
return chr(ord("a") + rotated % 26)
|
||||
|
||||
return "".join(rotate(c) if c != "-" else " " for c in self.name)
|
||||
|
||||
|
||||
def solve(input: str) -> int:
|
||||
def parse(input: str) -> list[Room]:
|
||||
return [Room.from_str(line) for line in input.splitlines()]
|
||||
|
||||
rooms = parse(input)
|
||||
for room in rooms:
|
||||
if not room.is_real():
|
||||
continue
|
||||
if room.decrypt() != "northpole object storage":
|
||||
continue
|
||||
return room.sector_id
|
||||
assert False # Sanity check
|
||||
|
||||
|
||||
def main() -> None:
|
||||
input = sys.stdin.read()
|
||||
print(solve(input))
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
991
2016/d04/ex2/input
Normal file
991
2016/d04/ex2/input
Normal file
|
|
@ -0,0 +1,991 @@
|
|||
aczupnetwp-dnlgpyrpc-sfye-dstaatyr-561[patyc]
|
||||
jsehsyafy-vqw-ljsafafy-866[nymla]
|
||||
tyepcyletzylw-ncjzrpytn-prr-opawzjxpye-743[cnrdl]
|
||||
foadouwbu-qvcqczohs-obozmgwg-662[lamjh]
|
||||
ckgvutofkj-pkrrehkgt-zkinturume-436[krtue]
|
||||
pelbtravp-pnaql-ernpdhvfvgvba-481[szram]
|
||||
yflexwxoalrp-ciltbo-tlohpelm-887[bmwep]
|
||||
ipvohghykvbz-ihzrla-jbzavtly-zlycpjl-253[lzhvy]
|
||||
cybyjqho-whqtu-rqiauj-fkhsxqiydw-322[syzwi]
|
||||
tipfxvezt-sleep-tljkfdvi-jvimztv-425[tveif]
|
||||
ktiaaqnqml-xtiabqk-oziaa-xczkpiaqvo-616[aiqko]
|
||||
ckgvutofkj-xghhoz-gtgreyoy-306[nyhpz]
|
||||
molgbzqfib-zovldbkfz-zxkav-lmboxqflkp-341[xlomg]
|
||||
ikhcxvmbex-vtgwr-vhtmbgz-mxvaghehzr-111[hvgmx]
|
||||
dpssptjwf-fhh-tfswjdft-805[fstdh]
|
||||
oaddaeuhq-otaoaxmfq-qzsuzqqduzs-534[qadou]
|
||||
dzczkrip-xiruv-sleep-drerxvdvek-685[erdvi]
|
||||
jvsvymbs-yhiipa-vwlyhapvuz-149[zfyqn]
|
||||
nsyjwsfyntsfq-gfxpjy-jslnsjjwnsl-853[sjnfy]
|
||||
mbiyqoxsm-lsyrkjkbnyec-nio-wkbuodsxq-614[bkosy]
|
||||
jchipqat-uadltg-hidgpvt-375[kcnop]
|
||||
jqwpihizlwca-lgm-nqvivkqvo-980[ldeay]
|
||||
xfbqpojafe-dipdpmbuf-tfswjdft-493[fdpbj]
|
||||
kwvacumz-ozilm-kpwkwtibm-lmxtwgumvb-798[mwkbi]
|
||||
eqttqukxg-ejqeqncvg-ocpcigogpv-648[sdtzl]
|
||||
dsxxw-bwc-bcnjmwkclr-678[cwbxd]
|
||||
jvuzbtly-nyhkl-ibuuf-thuhnltlua-175[ulhtb]
|
||||
rdadguja-uadltg-bpgztixcv-401[adgtu]
|
||||
atyzghrk-kmm-ktmotkkxotm-930[xzfpe]
|
||||
uwtojhynqj-ojqqdgjfs-xjwanhjx-151[waqmk]
|
||||
hwdtljsnh-uqfxynh-lwfxx-rfsfljrjsy-567[fhjls]
|
||||
xst-wigvix-gspsvjyp-gerhc-erepcwmw-724[uplfw]
|
||||
kzgwomvqk-jcvvg-zmamizkp-122[kmvzg]
|
||||
sbejpbdujwf-dboez-dpbujoh-dvtupnfs-tfswjdf-623[uxrpz]
|
||||
bxaxipgn-vgpst-rwdrdapit-prfjxhxixdc-609[xpdir]
|
||||
avw-zljyla-zjhclunly-obua-ayhpupun-981[aluyh]
|
||||
nuatmlmdpage-qss-fdmuzuzs-404[btopv]
|
||||
oaddaeuhq-otaoaxmfq-dqoquhuzs-716[aoqdu]
|
||||
myvybpev-cmkfoxqob-rexd-bomosfsxq-432[khwfc]
|
||||
oxaflxzqfsb-zelzlixqb-jxohbqfkd-471[hxkwc]
|
||||
fnjyxwrinm-snuuhknjw-anbnjalq-875[ztvnr]
|
||||
qfmcusbwq-pibbm-fsqswjwbu-922[bqswf]
|
||||
wihmogyl-aluxy-jfumncw-alumm-nluchcha-916[lmuac]
|
||||
oxaflxzqfsb-avb-bkdfkbbofkd-757[trzjy]
|
||||
ksodcbwnsr-qzoggwtwsr-gqojsbusf-vibh-fsgsofqv-818[gsdca]
|
||||
rzvkjiduzy-xcjxjgvoz-gvwjmvojmt-161[zufvq]
|
||||
nwlddtqtpo-mldvpe-dezclrp-639[zlnki]
|
||||
vkppo-rqiauj-huqsgkyiyjyed-530[yijkp]
|
||||
dfcxsqhwzs-qobrm-qcohwbu-fsoqeiwgwhwcb-688[wqbch]
|
||||
vxupkizork-xghhoz-aykx-zkyzotm-462[kzoxh]
|
||||
zotts-jfumncw-alumm-omyl-nymncha-396[bstha]
|
||||
yaxsnlcrun-npp-cajrwrwp-355[nprac]
|
||||
bkwzkqsxq-pvygob-nozkbdwoxd-822[bkodq]
|
||||
frqvxphu-judgh-fdqgb-frdwlqj-hqjlqhhulqj-595[ezyxq]
|
||||
hqtyeqsjylu-sqdto-sedjqydcudj-764[dqjsy]
|
||||
fab-eqodqf-omzpk-fdmuzuzs-430[yxkbc]
|
||||
gpewwmjmih-glsgspexi-xvemrmrk-204[cynzd]
|
||||
kwtwznct-jcvvg-wxmzibqwva-694[cdaps]
|
||||
guahyncw-wuhxs-zchuhwcha-396[xwnmj]
|
||||
pybgmyargtc-zsllw-dglylagle-912[mcrsp]
|
||||
kyelcrga-zyqicr-jyzmpyrmpw-782[yrcmp]
|
||||
wsvsdkbi-qbkno-zvkcdsm-qbkcc-myxdksxwoxd-432[kdsbc]
|
||||
ltpedcxots-rwdrdapit-advxhixrh-271[drtxa]
|
||||
elrkdcdugrxv-sodvwlf-judvv-vklsslqj-465[vdlsj]
|
||||
htwwtxnaj-hfsid-htfynsl-ywfnsnsl-281[ghfea]
|
||||
nij-mywlyn-xsy-xymcah-682[kiasm]
|
||||
zovldbkfz-yrkkv-abmilvjbkq-939[chetn]
|
||||
esyfwlau-kusnwfywj-zmfl-ghwjslagfk-398[fwlsa]
|
||||
lahxpnwrl-yujbcrl-pajbb-mnyuxhvnwc-147[tzcxk]
|
||||
rwcnawjcrxwju-lqxlxujcn-lxwcjrwvnwc-381[hxsdl]
|
||||
pbybeshy-pynffvsvrq-wryylorna-jbexfubc-143[ybfre]
|
||||
lxaaxbren-kdwwh-bqryyrwp-407[sktqh]
|
||||
pybgmyargtc-zyqicr-rpyglgle-106[vsdft]
|
||||
jfifqxov-doxab-yxphbq-obxznrfpfqflk-939[nyvhm]
|
||||
pualyuhapvuhs-jovjvshal-thuhnltlua-383[lrfob]
|
||||
gvcskirmg-tpewxmg-kveww-pskmwxmgw-438[ujily]
|
||||
lgh-kwujwl-tmffq-esfsywewfl-242[fwles]
|
||||
jyddc-fewoix-hitevxqirx-412[ixdec]
|
||||
uzfqdzmfuazmx-otaoaxmfq-ogefayqd-eqdhuoq-222[lbfru]
|
||||
ryexqpqhteki-sxesebqju-tufbeocudj-348[tjzhb]
|
||||
kfg-jvtivk-sleep-wzeretzex-477[ektvz]
|
||||
kzgwomvqk-jcvvg-bmkpvwtwog-174[vgkwm]
|
||||
odiih-kdwwh-uxprbcrlb-251[bdhir]
|
||||
htqtwkzq-xhfajsljw-mzsy-yjhmstqtld-229[thjqs]
|
||||
qjopwxha-xwogap-owhao-914[astye]
|
||||
wrs-vhfuhw-edvnhw-hqjlqhhulqj-439[vufmz]
|
||||
rdggdhxkt-xcitgcpixdcpa-rpcsn-rdpixcv-stktadebtci-609[cdtip]
|
||||
eqttqukxg-fag-eqpvckpogpv-544[jmtpx]
|
||||
kdijqrbu-sqdto-seqjydw-iuhlysui-946[bioht]
|
||||
fydelmwp-awldetn-rcldd-cplnbftdtetzy-951[kpxim]
|
||||
ubhatstkwhnl-unggr-nlxk-mxlmbgz-761[geyqm]
|
||||
ocipgvke-gii-fgxgnqrogpv-726[giopv]
|
||||
fab-eqodqf-otaoaxmfq-iadwetab-430[azmnb]
|
||||
fab-eqodqf-otaoaxmfq-pqhqxabyqzf-456[qafob]
|
||||
xekdwvwnzkqo-zua-naoawnyd-784[anwdk]
|
||||
sbejpbdujwf-fhh-tbmft-285[mbfsn]
|
||||
hwbba-eqpuwogt-itcfg-rncuvke-itcuu-ugtxkegu-648[ugtce]
|
||||
hqcfqwydw-fbqijys-whqii-cqdqwucudj-452[ztesw]
|
||||
dmpuamofuhq-nmewqf-emxqe-742[meqfu]
|
||||
iqmbazulqp-pkq-iadwetab-976[kcxmz]
|
||||
lahxpnwrl-ljwmh-lxjcrwp-bnaerlnb-927[lnrwa]
|
||||
laffe-lruckx-vaxingyotm-306[aflxc]
|
||||
forwcoqhwjs-qcffcgwjs-tzcksf-rsdzcmasbh-220[csfwh]
|
||||
yflexwxoalrp-gbiivybxk-abpfdk-731[sjtrd]
|
||||
foadouwbu-ibghopzs-pogysh-kcfygvcd-506[ogbcd]
|
||||
rtqlgevkng-hnqygt-ugtxkegu-232[zdgob]
|
||||
yrwxefpi-fyrrc-asvowlst-880[jmzfi]
|
||||
tyepcyletzylw-nlyoj-nzletyr-fdpc-epdetyr-795[jfvnq]
|
||||
rkpqxyib-yxphbq-lmboxqflkp-627[vzmla]
|
||||
xjinphzm-bmvyz-hvbizodx-ytz-gjbdnodxn-967[jmuws]
|
||||
ktfitzbgz-vtgwr-inkvatlbgz-813[tgzbi]
|
||||
hqtyeqsjylu-sbqiiyvyut-fbqijys-whqii-vydqdsydw-634[yqisd]
|
||||
hcd-gsqfsh-dzoghwq-ufogg-qcbhowbasbh-506[hgboq]
|
||||
ryexqpqhteki-uww-qdqboiyi-140[qiewy]
|
||||
bkzrrhehdc-qzaahs-cdoknxldms-625[czsmn]
|
||||
sawlkjevaz-lhwopey-cnwoo-yqopkian-oanreya-966[znhlt]
|
||||
xjgjmapg-hdgdovmt-bmvyz-zbb-yzkgjthzio-577[gzbjm]
|
||||
myxcewob-qbkno-lexxi-wkbuodsxq-250[xboek]
|
||||
nsyjwsfyntsfq-hfsid-htfynsl-wjfhvznxnynts-255[umtns]
|
||||
kpvgtpcvkqpcn-ecpfa-ewuvqogt-ugtxkeg-596[ehsca]
|
||||
vkrhzxgbv-cxeeruxtg-ftgtzxfxgm-579[ymast]
|
||||
pbeebfvir-fpniratre-uhag-genvavat-663[smznt]
|
||||
vehmsegxmzi-glsgspexi-hitpscqirx-802[jszht]
|
||||
tyepcyletzylw-nlyoj-nzletyr-cpdplcns-223[lycen]
|
||||
jxdkbqfz-oxaflxzqfsb-avb-lmboxqflkp-523[mzvny]
|
||||
tcfkqcevkxg-tcddkv-uvqtcig-336[cdsln]
|
||||
ide-htrgti-hrpktcvtg-wjci-ldgzhwde-947[tdghi]
|
||||
ojk-nzxmzo-kgvnodx-bmvnn-ozxcijgjbt-213[nojxz]
|
||||
avw-zljyla-msvdly-yljlpcpun-539[lyajp]
|
||||
rdchjbtg-vgpst-rpcsn-rdpixcv-htgkxrth-661[rtcgh]
|
||||
xlrypetn-dnlgpyrpc-sfye-dezclrp-353[pelry]
|
||||
enqvbnpgvir-enoovg-erfrnepu-455[ftlpj]
|
||||
xjinphzm-bmvyz-xviyt-xjvodib-pnzm-oznodib-291[mlybz]
|
||||
rwcnawjcrxwju-kjbtnc-bqryyrwp-511[tkyns]
|
||||
gokzyxsjon-pvygob-nofovyzwoxd-458[ndtfs]
|
||||
bjfutsneji-hfsid-htfynsl-rfwpjynsl-489[fsjnh]
|
||||
ydjuhdqjyedqb-rqiauj-qdqboiyi-452[qdijy]
|
||||
enzcntvat-rtt-genvavat-351[lznyt]
|
||||
rdadguja-qjccn-advxhixrh-791[yncim]
|
||||
fmsledevhsyw-ikk-irkmriivmrk-646[nlxzm]
|
||||
jfifqxov-doxab-mixpqfz-doxpp-obpbxoze-471[oxpbf]
|
||||
jqwpihizlwca-zijjqb-aitma-408[gzpmw]
|
||||
pyknyegle-afmamjyrc-bcqgel-808[gynip]
|
||||
zbytomdsvo-mkxni-bocokbmr-406[obmkc]
|
||||
wfummczcyx-luvvcn-fuvilunils-526[bavmt]
|
||||
hwdtljsnh-gfxpjy-rfsfljrjsy-541[gpszy]
|
||||
lsyrkjkbnyec-oqq-gybucryz-848[ybckq]
|
||||
oaddaeuhq-vqxxknqmz-xasuefuoe-378[rzmqe]
|
||||
vhglnfxk-zktwx-fbebmtkr-zktwx-wrx-vhgmtbgfxgm-813[xepwt]
|
||||
yrwxefpi-gerhc-hitevxqirx-594[eirxh]
|
||||
mvydjvxodqz-xviyt-xjvodib-rjmfncjk-265[cqirj]
|
||||
kdijqrbu-tou-kiuh-juijydw-140[uijdk]
|
||||
ugjjgkanw-usfvq-vwkayf-970[rntsw]
|
||||
froruixo-fdqgb-ilqdqflqj-569[cylni]
|
||||
gpsxdprixkt-hrpktcvtg-wjci-gtprfjxhxixdc-999[xptcg]
|
||||
kwvacumz-ozilm-akidmvomz-pcvb-nqvivkqvo-460[emnrk]
|
||||
pejji-zvkcdsm-qbkcc-domrxyvyqi-484[cdijk]
|
||||
rdadguja-xcitgcpixdcpa-qphzti-bpgztixcv-791[cipad]
|
||||
rkpqxyib-zxkav-zlxqfkd-qoxfkfkd-965[qiftn]
|
||||
bkzrrhehdc-bnmrtldq-fqzcd-atmmx-qdrdzqbg-937[dqrbm]
|
||||
eqttqukxg-rtqlgevkng-dwppa-fgxgnqrogpv-570[gxetc]
|
||||
zbytomdsvo-mkxni-myxdksxwoxd-510[xdmok]
|
||||
ymszqfuo-rxaiqd-dqmocgueufuaz-274[umtwy]
|
||||
pelbtravp-ovbunmneqbhf-qlr-znantrzrag-663[xlyio]
|
||||
rdadguja-ytaanqtpc-gtprfjxhxixdc-141[krcaf]
|
||||
etaqigpke-hnqygt-eqpvckpogpv-362[pegqk]
|
||||
rtqlgevkng-etaqigpke-ecpfa-eqcvkpi-ewuvqogt-ugtxkeg-206[gxszf]
|
||||
fubrjhqlf-fkrfrodwh-sxufkdvlqj-777[pozts]
|
||||
wfintfhynaj-wfggny-xjwanhjx-957[nfjwa]
|
||||
xcitgcpixdcpa-bpvctixr-qphzti-gthtpgrw-479[zjlmc]
|
||||
gntmfefwitzx-hfsid-fsfqdxnx-697[oanif]
|
||||
xgjougizobk-jek-jkvgxzsktz-384[kgjzo]
|
||||
nzydfxpc-rclop-mldvpe-cpdplcns-925[pcdln]
|
||||
ltpedcxots-qphzti-gtrtxkxcv-739[txcpd]
|
||||
gvaaz-fhh-mphjtujdt-233[hajtd]
|
||||
jchipqat-rpcsn-gtprfjxhxixdc-297[cpxhi]
|
||||
gsvvswmzi-gerhc-tyvglewmrk-308[zbdcy]
|
||||
dmybmsuzs-omzpk-oamfuzs-pqhqxabyqzf-508[mzqsa]
|
||||
iruzfrtkzmv-treup-tfrkzex-jkfirxv-295[rfktz]
|
||||
pdjqhwlf-mhoobehdq-vwrudjh-127[hdjoq]
|
||||
rgndvtcxr-hrpktcvtg-wjci-apqdgpidgn-375[jdrhb]
|
||||
sbqiiyvyut-isqludwuh-xkdj-efuhqjyedi-114[qjzpn]
|
||||
lahxpnwrl-npp-nwprwnnarwp-459[ontmq]
|
||||
zntargvp-onfxrg-fnyrf-871[fnrga]
|
||||
molgbzqfib-avb-absbilmjbkq-601[bailm]
|
||||
kpvgtpcvkqpcn-tcddkv-wugt-vguvkpi-492[vkpcg]
|
||||
jfifqxov-doxab-zxkav-zlkqxfkjbkq-341[kxfqa]
|
||||
qfmcusbwq-dzoghwq-ufogg-fsqswjwbu-220[zbjty]
|
||||
xjinphzm-bmvyz-mvwwdo-yzkgjthzio-785[zmhij]
|
||||
ejpanjwpekjwh-ydkykhwpa-owhao-186[hqlfd]
|
||||
nzydfxpc-rclop-prr-cplnbftdtetzy-483[pcrtd]
|
||||
kwtwznct-rmttgjmiv-amzdqkma-590[mtakw]
|
||||
muqfedyput-fbqijys-whqii-iqbui-790[gjxky]
|
||||
egdytrixat-rgndvtcxr-rpcsn-jhtg-ithixcv-115[trcgi]
|
||||
fab-eqodqf-rxaiqd-mzmxkeue-404[eqadf]
|
||||
zotts-xsy-guleyncha-708[ymnbi]
|
||||
mbiyqoxsm-pvygob-gybucryz-536[zbyxv]
|
||||
dmybmsuzs-bxmefuo-sdmee-pqhqxabyqzf-716[mbeqs]
|
||||
qspkfdujmf-ezf-fohjoffsjoh-519[fjohs]
|
||||
nwlddtqtpo-prr-xlcvpetyr-249[owkmz]
|
||||
amlqskcp-epybc-aylbw-amyrgle-bctcjmnkclr-808[clabm]
|
||||
qspkfdujmf-qmbtujd-hsbtt-eftjho-727[tigys]
|
||||
pualyuhapvuhs-thnulapj-msvdly-ylzlhyjo-877[lhuya]
|
||||
diozmivodjivg-zbb-nzmqdxzn-629[zdibm]
|
||||
yrwxefpi-qmpmxevc-kvehi-gerhc-gsexmrk-qerekiqirx-126[erixk]
|
||||
qlm-pbzobq-zxkav-zlxqfkd-zrpqljbo-pbosfzb-575[phqza]
|
||||
irgyyolokj-lruckx-aykx-zkyzotm-904[ubkvy]
|
||||
cebwrpgvyr-pnaql-pbngvat-bcrengvbaf-793[bagnp]
|
||||
wlsiayhcw-wifilzof-wuhxs-mylpcwym-630[wilyc]
|
||||
nglmtuex-ktuubm-nlxk-mxlmbgz-215[egtsz]
|
||||
sbejpbdujwf-dboez-nbobhfnfou-883[jpkmo]
|
||||
qzoggwtwsr-qobrm-gsfjwqsg-480[xkwvm]
|
||||
nwzekwypera-oywrajcan-dqjp-wymqeoepekj-472[zeydw]
|
||||
sawlkjevaz-ywjzu-yqopkian-oanreya-836[ayejk]
|
||||
pybgmyargtc-afmamjyrc-rpyglgle-470[zgmsu]
|
||||
nzwzcqfw-qwzhpc-cplnbftdtetzy-977[zctwf]
|
||||
lhkhszqx-fqzcd-okzrshb-fqzrr-cdudknoldms-651[defrs]
|
||||
ugfkmewj-yjsvw-owshgfarwv-tskcwl-wfyafwwjafy-294[wfajs]
|
||||
gpbepvxcv-gpqqxi-stktadebtci-609[npyad]
|
||||
pxtihgbsxw-vahvhetmx-hixktmbhgl-397[pvcfe]
|
||||
guahyncw-vohhs-fiacmncwm-656[chamn]
|
||||
wfruflnsl-uqfxynh-lwfxx-wjfhvznxnynts-463[fnxlw]
|
||||
lzfmdshb-cxd-dmfhmddqhmf-703[dmfhb]
|
||||
gzefmnxq-eomhqzsqd-tgzf-oazfmuzyqzf-118[zfqme]
|
||||
udskkaxawv-usfvq-ugslafy-hmjuzskafy-658[asufk]
|
||||
ugjjgkanw-vqw-ksdwk-112[kwgja]
|
||||
enqvbnpgvir-cynfgvp-tenff-fuvccvat-975[vfnce]
|
||||
fydelmwp-ojp-nfdezxpc-dpcgtnp-353[gziom]
|
||||
fmsledevhsyw-gpewwmjmih-glsgspexi-tyvglewmrk-178[egmsw]
|
||||
shmml-enoovg-freivprf-585[efmor]
|
||||
bnqqnrhud-atmmx-qdrdzqbg-651[qdbmn]
|
||||
pxtihgbsxw-vahvhetmx-nlxk-mxlmbgz-943[xhmbg]
|
||||
xfbqpojafe-dipdpmbuf-tbmft-441[wuizc]
|
||||
zsxyfgqj-uqfxynh-lwfxx-ijxnls-749[futrq]
|
||||
oaddaeuhq-nmewqf-dqmocgueufuaz-508[mwlcv]
|
||||
buzahisl-zjhclunly-obua-zavyhnl-201[kzylj]
|
||||
yhwooebeaz-iwcjapey-oywrajcan-dqjp-zaoecj-524[aejoc]
|
||||
bwx-amkzmb-qvbmzvibqwvit-lgm-zmikycqaqbqwv-772[dubva]
|
||||
oxmeeuruqp-ngzzk-fqotzaxask-638[zaeko]
|
||||
xfbqpojafe-qmbtujd-hsbtt-efwfmpqnfou-363[fbqte]
|
||||
iehepwnu-cnwza-xqjju-nayaerejc-472[eajnc]
|
||||
ytu-xjhwjy-jll-ijxnls-385[moyjn]
|
||||
nvrgfezqvu-treup-tfrkzex-wzeretzex-997[fpvnt]
|
||||
kwvacumz-ozilm-moo-camz-bmabqvo-434[sanvt]
|
||||
lxaaxbren-ouxfna-bjunb-277[abnxu]
|
||||
gpsxdprixkt-uadltg-tcvxcttgxcv-453[txcgd]
|
||||
owshgfarwv-jsttal-hmjuzskafy-658[asfhj]
|
||||
pbafhzre-tenqr-qlr-ynobengbel-403[ebnrl]
|
||||
yaxsnlcrun-mhn-jlzdrbrcrxw-121[wngsc]
|
||||
bgmxkgtmbhgte-vtgwr-vhtmbgz-tgterlbl-995[gtbme]
|
||||
nvrgfezqvu-avccpsvre-tljkfdvi-jvimztv-269[vcefi]
|
||||
apwmeclga-pyzzgr-dglylagle-158[auvsi]
|
||||
qczcftiz-pogysh-rsgwub-350[kcdvs]
|
||||
qlm-pbzobq-gbiivybxk-abpfdk-211[bikpq]
|
||||
crwwv-rkpqxyib-yrkkv-cfkxkzfkd-419[krcfv]
|
||||
sbnqbhjoh-cbtlfu-tupsbhf-285[bhfst]
|
||||
qlm-pbzobq-avb-bkdfkbbofkd-159[golnc]
|
||||
nchhg-jiasmb-lmaqov-902[dpmcw]
|
||||
tagzsrsjvgmk-jsttal-umklgewj-kwjnauw-944[fsqml]
|
||||
rkpqxyib-yxphbq-jxkxdbjbkq-601[npbtf]
|
||||
ujqgywfau-tmffq-hmjuzskafy-736[zmnlk]
|
||||
ujqgywfau-hdsklau-yjskk-umklgewj-kwjnauw-190[kujwa]
|
||||
uqtqbizg-ozilm-jcvvg-lmxizbumvb-850[mhanw]
|
||||
yhtwhnpun-ihzrla-klclsvwtlua-591[lkqzn]
|
||||
sbqiiyvyut-sqdto-seqjydw-sedjqydcudj-738[warvn]
|
||||
bwx-amkzmb-uqtqbizg-ozilm-moo-kwvbiqvumvb-746[wystg]
|
||||
tipfxvezt-vxx-cfxzjkztj-555[xtzfj]
|
||||
cjpibabsepvt-cvooz-sftfbsdi-571[myqsb]
|
||||
ymszqfuo-fab-eqodqf-pkq-xmnadmfadk-274[tkbds]
|
||||
wlqqp-treup-tfrkzex-jkfirxv-581[refkp]
|
||||
lnkfaypeha-fahhuxawj-wjwhuoeo-550[ahwef]
|
||||
lsyrkjkbnyec-oqq-ckvoc-874[azsyv]
|
||||
gvcskirmg-fewoix-wlmttmrk-360[mgikr]
|
||||
irdgrxzex-tipfxvezt-treup-tfrkzex-cfxzjkztj-607[txzer]
|
||||
avw-zljyla-zjhclunly-obua-yljlpcpun-617[lajuy]
|
||||
nwzekwypera-lhwopey-cnwoo-hkceopeyo-134[zulqp]
|
||||
vkppo-sqdto-seqjydw-jhqydydw-114[dqyjo]
|
||||
zixppfcfba-zxkav-zlkqxfkjbkq-679[txhzn]
|
||||
sbnqbhjoh-dboez-sftfbsdi-623[bsdfh]
|
||||
qjopwxha-bhksan-zalhkuiajp-316[ahjkp]
|
||||
yhtwhnpun-thnulapj-ibuuf-klzpnu-773[unhpl]
|
||||
uwtojhynqj-kqtbjw-wjfhvznxnynts-827[ntyqj]
|
||||
jef-iushuj-rkddo-ijehqwu-504[biekf]
|
||||
gspsvjyp-tpewxmg-kveww-gywxsqiv-wivzmgi-672[sryce]
|
||||
rgllk-eomhqzsqd-tgzf-etubbuzs-118[zbegl]
|
||||
shmml-pubpbyngr-ynobengbel-403[bnegl]
|
||||
gsrwyqiv-kvehi-fewoix-wivzmgiw-256[rimyz]
|
||||
iuxxuyobk-yigbktmkx-natz-xkykgxin-852[kxiyb]
|
||||
excdklvo-oqq-vklybkdybi-744[utifh]
|
||||
ojk-nzxmzo-agjrzm-xpnojhzm-nzmqdxz-915[zmjno]
|
||||
qspkfdujmf-sbccju-eftjho-103[byjhc]
|
||||
fodvvlilhg-mhoobehdq-whfkqrorjb-699[taskb]
|
||||
aflwjfslagfsd-usfvq-ogjckzgh-814[emsnh]
|
||||
sebehvkb-uww-tulubefcudj-712[ubewc]
|
||||
egdytrixat-gpbepvxcv-hrpktcvtg-wjci-hidgpvt-531[vzdcg]
|
||||
nsyjwsfyntsfq-zsxyfgqj-gzssd-wjxjfwhm-749[sgmhv]
|
||||
ktfitzbgz-yehpxk-kxvxbobgz-761[ryzea]
|
||||
tcrjjzwzvu-irsszk-rthlzjzkzfe-503[ocepg]
|
||||
dfcxsqhwzs-pibbm-sbuwbssfwbu-558[tocys]
|
||||
nwzekwypera-bhksan-odellejc-758[eakln]
|
||||
qfmcusbwq-qobrm-qcohwbu-fsoqeiwgwhwcb-402[cpzsy]
|
||||
cvabijtm-zijjqb-uizsmbqvo-434[btzma]
|
||||
irdgrxzex-srjbvk-glityrjzex-867[rxegi]
|
||||
rdadguja-tvv-gtrtxkxcv-609[tvadg]
|
||||
wdjcvuvmyjpn-zbb-mznzvmxc-213[ndmaz]
|
||||
vagreangvbany-sybjre-nanylfvf-507[bryme]
|
||||
vjpwncrl-mhn-bqryyrwp-979[rnpwy]
|
||||
jqwpihizlwca-ntwemz-abwziom-642[iyzsa]
|
||||
jchipqat-rwdrdapit-detgpixdch-921[dipta]
|
||||
vqr-ugetgv-tcddkv-eqpvckpogpv-440[vgpcd]
|
||||
ajyqqgdgcb-aylbw-amyrgle-qyjcq-756[qyagb]
|
||||
fbebmtkr-zktwx-utldxm-nlxk-mxlmbgz-553[onbvf]
|
||||
hwdtljsnh-kqtbjw-ijajqturjsy-827[jthqs]
|
||||
sedikcuh-whqtu-sxesebqju-udwyduuhydw-556[rvudf]
|
||||
ipvohghykvbz-tpspahyf-nyhkl-yhiipa-huhsfzpz-123[hpyiz]
|
||||
fubrjhqlf-mhoobehdq-oderudwrub-153[bdhor]
|
||||
mbggf-zjhclunly-obua-dvyrzovw-695[bglou]
|
||||
houngfgxjuay-igtje-aykx-zkyzotm-176[qcita]
|
||||
lugjuacha-mwupyhayl-bohn-xyjulngyhn-318[gnftc]
|
||||
rdggdhxkt-rpcsn-rdpixcv-itrwcdadvn-505[uancd]
|
||||
yaxsnlcrun-ouxfna-jwjuhbrb-199[xnmwj]
|
||||
yrwxefpi-tpewxmg-kveww-wlmttmrk-334[rfqkl]
|
||||
ktwbhtvmbox-unggr-kxtvjnblbmbhg-215[bgthk]
|
||||
amlqskcp-epybc-bwc-pcyaosgqgrgml-600[cgpab]
|
||||
ujqgywfau-usfvq-ugslafy-jwuwanafy-606[uafwy]
|
||||
nwzekwypera-lhwopey-cnwoo-lqnydwoejc-134[xithv]
|
||||
nwzekwypera-acc-naoawnyd-160[itvch]
|
||||
luxciuwncpy-ohmnuvfy-yaa-wihnuchgyhn-526[hnuyc]
|
||||
ygcrqpkbgf-ejqeqncvg-tgegkxkpi-674[gekqc]
|
||||
mtzslklcozfd-qwzhpc-nfdezxpc-dpcgtnp-223[ucwob]
|
||||
tinnm-tzcksf-zcuwghwqg-948[nmktj]
|
||||
rdchjbtg-vgpst-hrpktcvtg-wjci-itrwcdadvn-453[ngtzh]
|
||||
yrwxefpi-nippcfier-hizipstqirx-932[ipref]
|
||||
cvabijtm-xtiabqk-oziaa-kcabwumz-amzdqkm-590[mpqzo]
|
||||
dpmpsgvm-dipdpmbuf-efqmpznfou-259[pmdfu]
|
||||
ynukcajey-nwxxep-zarahkliajp-238[ytaej]
|
||||
zbytomdsvo-mkxni-mykdsxq-nocsqx-770[mosxd]
|
||||
tagzsrsjvgmk-xdgowj-jwuwanafy-814[efhpk]
|
||||
xqvwdeoh-fdqgb-rshudwlrqv-127[jpkat]
|
||||
kpvgtpcvkqpcn-fag-qrgtcvkqpu-596[pcgkq]
|
||||
zlkprjbo-doxab-gbiivybxk-obpbxoze-393[boxik]
|
||||
zbytomdsvo-mrymyvkdo-domrxyvyqi-744[ymodv]
|
||||
jvuzbtly-nyhkl-qlssfilhu-klwhyatlua-695[lhuya]
|
||||
nzydfxpc-rclop-nsznzwlep-xlylrpxpye-145[plnxy]
|
||||
atyzghrk-xghhoz-rghuxgzuxe-748[ghxzr]
|
||||
vhglnfxk-zktwx-ietlmbv-zktll-ftkdxmbgz-787[wbspa]
|
||||
njmjubsz-hsbef-dipdpmbuf-vtfs-uftujoh-623[fubjs]
|
||||
pyknyegle-aylbw-jmegqrgaq-756[egyal]
|
||||
bgmxkgtmbhgte-lvtoxgzxk-angm-vhgmtbgfxgm-137[gmtxb]
|
||||
ydjuhdqjyedqb-vbemuh-jusxdebewo-946[debju]
|
||||
jxdkbqfz-zxkav-zlxqfkd-mrozexpfkd-263[kxzdf]
|
||||
nbhofujd-dipdpmbuf-pqfsbujpot-597[pbdfu]
|
||||
wrs-vhfuhw-fdqgb-vklsslqj-647[sfhlq]
|
||||
vkrhzxgbv-vtgwr-ehzblmbvl-449[knuzb]
|
||||
gsrwyqiv-kvehi-fyrrc-pefsvexsvc-750[versc]
|
||||
hqcfqwydw-vbemuh-ixyffydw-270[fwydh]
|
||||
vetllbybxw-vkrhzxgbv-lvtoxgzxk-angm-ybgtgvbgz-527[jxrwq]
|
||||
bkzrrhehdc-eknvdq-cdrhfm-365[dhrce]
|
||||
cybyjqho-whqtu-rkddo-qsgkyiyjyed-530[ydqhj]
|
||||
ckgvutofkj-hatte-ynovvotm-332[tovka]
|
||||
sawlkjevaz-zua-iwngapejc-758[jzwql]
|
||||
mvhkvbdib-kgvnodx-bmvnn-gjbdnodxn-551[bmkyo]
|
||||
enzcntvat-fpniratre-uhag-grpuabybtl-689[sqkoh]
|
||||
bqvvu-acc-oanreyao-108[acovb]
|
||||
tyepcyletzylw-nlyoj-nzletyr-nfdezxpc-dpcgtnp-275[yelnp]
|
||||
fbebmtkr-zktwx-lvtoxgzxk-angm-kxlxtkva-839[kxtab]
|
||||
ojk-nzxmzo-wvnfzo-vivgtndn-707[mlndw]
|
||||
tpspahyf-nyhkl-qlssfilhu-klwsvftlua-487[iewds]
|
||||
shoewudys-isqludwuh-xkdj-husuylydw-868[tlyhz]
|
||||
qzoggwtwsr-qobrm-oqeiwgwhwcb-116[wgoqb]
|
||||
zlkprjbo-doxab-yxphbq-pxibp-237[ocanz]
|
||||
iruzfrtkzmv-avccpsvre-vexzevvizex-893[nyktl]
|
||||
hqtyeqsjylu-hqrryj-tulubefcudj-894[ujqye]
|
||||
zlkprjbo-doxab-fkqbokxqflkxi-mixpqfz-doxpp-xznrfpfqflk-523[fxkpo]
|
||||
dpmpsgvm-sbccju-dvtupnfs-tfswjdf-129[neysa]
|
||||
qcbgiasf-ufors-dzoghwq-ufogg-zopcfohcfm-246[yhmkz]
|
||||
esyfwlau-ugjjgkanw-usfvq-kzahhafy-242[wnzhb]
|
||||
mbiyqoxsm-lkcuod-nozkbdwoxd-432[odbkm]
|
||||
usfvq-ugslafy-vwhdgqewfl-632[fglqs]
|
||||
gokzyxsjon-zvkcdsm-qbkcc-oxqsxoobsxq-484[xrkfl]
|
||||
hdgdovmt-bmvyz-wvnfzo-gjbdnodxn-395[bwicg]
|
||||
sehheiylu-fhezusjybu-rkddo-udwyduuhydw-530[udhye]
|
||||
glrcplyrgmlyj-aylbw-amyrgle-nspafyqgle-210[dmuny]
|
||||
aflwjfslagfsd-jsttal-xafsfuafy-138[faslj]
|
||||
yuxufmdk-sdmpq-iqmbazulqp-otaoaxmfq-pqbxakyqzf-586[qamfp]
|
||||
jef-iushuj-sxesebqju-ixyffydw-270[iztnj]
|
||||
zvyvgnel-tenqr-enzcntvat-ohaal-ratvarrevat-793[atven]
|
||||
yuxufmdk-sdmpq-vqxxknqmz-ogefayqd-eqdhuoq-612[qdmux]
|
||||
yhtwhnpun-kfl-ylhjxbpzpapvu-357[phlnu]
|
||||
egdytrixat-qjccn-bpcpvtbtci-557[mtpgc]
|
||||
wsvsdkbi-qbkno-mkxni-mykdsxq-ecob-docdsxq-120[dksbo]
|
||||
xtwtelcj-rclop-ojp-dstaatyr-873[omnal]
|
||||
wifilzof-jfumncw-alumm-xypyfijgyhn-318[evfso]
|
||||
mvydjvxodqz-agjrzm-hvivbzhzio-655[vzdhi]
|
||||
jsehsyafy-usfvq-ugslafy-jwuwanafy-840[afsyu]
|
||||
myxcewob-qbkno-nio-bocokbmr-900[obckm]
|
||||
ipvohghykvbz-wshzapj-nyhzz-vwlyhapvuz-539[hzvpy]
|
||||
tbxmlkfwba-pzxsbkdbo-erkq-zrpqljbo-pbosfzb-185[bkopz]
|
||||
rdadguja-eaphixr-vgphh-itrwcdadvn-869[nfpxs]
|
||||
lugjuacha-jfumncw-alumm-zchuhwcha-734[uachm]
|
||||
jsehsyafy-jsttal-jwsuimakalagf-762[mnvlh]
|
||||
zixppfcfba-yrkkv-absbilmjbkq-393[ihgyz]
|
||||
bxaxipgn-vgpst-rdchjbtg-vgpst-rpcsn-rdpixcv-hpath-817[pgtch]
|
||||
rtqlgevkng-ejqeqncvg-hkpcpekpi-154[xpgty]
|
||||
laffe-hgyqkz-xkikobotm-488[kfoab]
|
||||
jfifqxov-doxab-zxkav-zlxqfkd-qoxfkfkd-419[ubaro]
|
||||
myxcewob-qbkno-cmkfoxqob-rexd-zebmrkcsxq-952[boxce]
|
||||
apuut-wvnfzo-rjmfncjk-447[fjnua]
|
||||
lejkrscv-tfcfiwlc-avccpsvre-fgvirkzfej-113[cfver]
|
||||
nglmtuex-cxeeruxtg-kxvxbobgz-215[xegbt]
|
||||
sgmtkzoi-kmm-xkgiwaoyozout-748[qrkst]
|
||||
amppmqgtc-djmucp-rcaflmjmew-912[bcvna]
|
||||
xst-wigvix-fyrrc-wepiw-438[ygref]
|
||||
dzczkrip-xiruv-jtrmvexvi-ylek-fgvirkzfej-295[irvek]
|
||||
diozmivodjivg-xviyt-xjvodib-zibdizzmdib-265[zmrey]
|
||||
rgndvtcxr-ytaanqtpc-stepgibtci-661[tcagi]
|
||||
xgsvgmotm-hgyqkz-jkyomt-358[ajyhb]
|
||||
zloolpfsb-yxphbq-ixyloxqlov-393[loxbp]
|
||||
zilqwikbqdm-jiasmb-uizsmbqvo-668[ibmqs]
|
||||
rtqlgevkng-rncuvke-itcuu-ucngu-206[ucgne]
|
||||
dmybmsuzs-yuxufmdk-sdmpq-eomhqzsqd-tgzf-iadwetab-482[nkqyl]
|
||||
vetllbybxw-ktuubm-hixktmbhgl-345[ikqop]
|
||||
bwx-amkzmb-jcvvg-ikycqaqbqwv-954[symcn]
|
||||
ubhatstkwhnl-ynssr-lvtoxgzxk-angm-kxlxtkva-163[ktxal]
|
||||
zlilocri-yxphbq-pefmmfkd-471[filmp]
|
||||
yflexwxoalrp-zlkprjbo-doxab-zxkav-zlxqfkd-qoxfkfkd-419[xkflo]
|
||||
oxaflxzqfsb-zelzlixqb-xznrfpfqflk-393[flxzq]
|
||||
ixccb-vfdyhqjhu-kxqw-ghyhorsphqw-101[pzgst]
|
||||
pybgmyargtc-qaytclecp-fslr-sqcp-rcqrgle-860[crglp]
|
||||
zbytomdsvo-mkxni-kmaescsdsyx-562[smdko]
|
||||
hwbba-dwppa-ocpcigogpv-570[pabcg]
|
||||
eza-dpncpe-nlyoj-nzletyr-wlmzclezcj-171[elzcn]
|
||||
tbxmlkfwba-mixpqfz-doxpp-zlkqxfkjbkq-159[kxbfp]
|
||||
vetllbybxw-yehpxk-ehzblmbvl-657[blehv]
|
||||
zuv-ykixkz-jek-lotgtiotm-852[ktioz]
|
||||
fnjyxwrinm-mhn-mnyjacvnwc-277[zgpnw]
|
||||
odiih-ljwmh-lxjcrwp-mnenuxyvnwc-615[nwchi]
|
||||
wfummczcyx-wuhxs-qilembij-838[mciuw]
|
||||
sno-rdbqds-bgnbnkzsd-bnmszhmldms-859[sbdnm]
|
||||
nvrgfezqvu-gcrjkzt-xirjj-ivjvrity-555[ylfxv]
|
||||
encuukhkgf-uecxgpigt-jwpv-ujkrrkpi-622[kugpc]
|
||||
lnkfaypeha-xqjju-qoan-paopejc-446[ajpen]
|
||||
kmjezxodgz-ytz-gvwjmvojmt-109[jmzgo]
|
||||
ygcrqpkbgf-hnqygt-octmgvkpi-128[gckpq]
|
||||
jxdkbqfz-mixpqfz-doxpp-tlohpelm-107[pxdfl]
|
||||
xjgjmapg-xviyt-xjvodib-adivixdib-759[ixdjv]
|
||||
laffe-jek-sgtgmksktz-644[vuenb]
|
||||
pbafhzre-tenqr-enoovg-ratvarrevat-975[ymshj]
|
||||
lqwhuqdwlrqdo-vfdyhqjhu-kxqw-uhvhdufk-959[kzlvy]
|
||||
rflsjynh-jll-zxjw-yjxynsl-697[jlyns]
|
||||
wrs-vhfuhw-sodvwlf-judvv-ghvljq-361[vhwdf]
|
||||
ynssr-unggr-tvjnblbmbhg-163[bgnrs]
|
||||
jyfvnlupj-jvsvymbs-yhiipa-zopwwpun-903[nrdma]
|
||||
kzeed-hfsid-uzwhmfxnsl-515[uoyvx]
|
||||
ide-htrgti-uadltg-gtprfjxhxixdc-375[tdgix]
|
||||
sorozgxe-mxgjk-hatte-vaxingyotm-358[fwxei]
|
||||
ydjuhdqjyedqb-fbqijys-whqii-jusxdebewo-582[nuzsj]
|
||||
yknnkoera-xwogap-paydjkhkcu-498[kanop]
|
||||
nzydfxpc-rclop-upwwjmply-opdtry-691[pycdl]
|
||||
dlhwvupglk-jhukf-jvhapun-zlycpjlz-409[lhjpu]
|
||||
kwvacumz-ozilm-moo-bmkpvwtwog-694[mowkv]
|
||||
kmjezxodgz-wpiit-mzxzdqdib-863[anvbu]
|
||||
xlrypetn-nsznzwlep-xlylrpxpye-587[znfwt]
|
||||
pybgmyargtc-qaytclecp-fslr-umpiqfmn-600[nzvej]
|
||||
etyyx-qzaahs-lzqjdshmf-781[ahqsy]
|
||||
ovbunmneqbhf-wryylorna-znantrzrag-221[pnazx]
|
||||
gzefmnxq-bxmefuo-sdmee-ymzmsqyqzf-352[lgvpu]
|
||||
ixeumktoi-jek-jkbkruvsktz-488[mzeun]
|
||||
dzczkrip-xiruv-avccpsvre-glityrjzex-321[eflmp]
|
||||
wfruflnsl-hfsid-fhvznxnynts-307[fnshl]
|
||||
vkppo-rkddo-iqbui-218[dikop]
|
||||
muqfedyput-zubboruqd-mehaixef-452[inbaj]
|
||||
ftzgxmbv-cxeeruxtg-nlxk-mxlmbgz-683[xgmbe]
|
||||
htsxzrjw-lwfij-uqfxynh-lwfxx-hzxytrjw-xjwanhj-827[xjwhf]
|
||||
qekrixmg-wgezirkiv-lyrx-tyvglewmrk-282[regik]
|
||||
ktiaaqnqml-jiasmb-apqxxqvo-226[asvyf]
|
||||
lejkrscv-irdgrxzex-srjbvk-kvtyefcfxp-165[rekvx]
|
||||
hvbizodx-nxvqzibzm-cpio-hvmfzodib-291[izbov]
|
||||
ltpedcxots-tvv-rjhidbtg-htgkxrt-297[tdghr]
|
||||
dlhwvupglk-mbggf-jovjvshal-zlycpjlz-565[lgjvh]
|
||||
xfbqpojafe-tdbwfohfs-ivou-sfbdrvjtjujpo-779[fjobd]
|
||||
kmjezxodgz-xviyt-gvwjmvojmt-577[flhas]
|
||||
jshzzpmplk-jhukf-jvhapun-vwlyhapvuz-669[hpjuv]
|
||||
tfejldvi-xiruv-gcrjkzt-xirjj-drerxvdvek-295[dpsef]
|
||||
zotts-yaa-lymyulwb-968[skymd]
|
||||
rmn-qcapcr-zyqicr-umpiqfmn-704[cmqri]
|
||||
xfbqpojafe-cbtlfu-qvsdibtjoh-727[bfjoq]
|
||||
ykhknbqh-nwxxep-oanreyao-732[naehk]
|
||||
raphhxuxts-hrpktcvtg-wjci-hidgpvt-921[hmzng]
|
||||
yrwxefpi-qmpmxevc-kvehi-gerhc-gsexmrk-hizipstqirx-932[mdsza]
|
||||
xjgjmapg-xviyt-vivgtndn-603[utnks]
|
||||
cxy-bnlanc-mhn-vjwjpnvnwc-745[mtsvn]
|
||||
ujoon-gpbepvxcv-eaphixr-vgphh-uxcpcrxcv-687[pcvxh]
|
||||
ykjoqian-cnwza-iwcjapey-lhwopey-cnwoo-opknwca-264[owacn]
|
||||
lnkfaypeha-oywrajcan-dqjp-zalwnpiajp-108[apjnl]
|
||||
ktwbhtvmbox-yehpxk-mktbgbgz-293[cndif]
|
||||
hqcfqwydw-cqwdujys-rqiauj-qsgkyiyjyed-738[qydjw]
|
||||
amlqskcp-epybc-zyqicr-kylyeckclr-600[sdrzj]
|
||||
bnmrtldq-fqzcd-rbzudmfdq-gtms-zbpthrhshnm-443[dmbhq]
|
||||
nwlddtqtpo-nlyoj-nzletyr-epnsyzwzrj-379[tyrzv]
|
||||
cvabijtm-kpwkwtibm-lmxtwgumvb-980[mbtwi]
|
||||
amlqskcp-epybc-afmamjyrc-jyzmpyrmpw-574[mpyac]
|
||||
aflwjfslagfsd-vqw-dstgjslgjq-424[sfgjl]
|
||||
willimcpy-zfiqyl-xymcah-110[ilycm]
|
||||
kpvgtpcvkqpcn-lgnnadgcp-ujkrrkpi-128[knmqz]
|
||||
wyvqljapsl-buzahisl-ibuuf-lunpullypun-409[wyhza]
|
||||
amlqskcp-epybc-pyzzgr-pcacgtgle-210[cpgae]
|
||||
xtwtelcj-rclop-mldvpe-dstaatyr-821[nkabu]
|
||||
pdjqhwlf-gbh-sxufkdvlqj-751[cdmbz]
|
||||
wkqxodsm-zvkcdsm-qbkcc-ecob-docdsxq-432[cdkoq]
|
||||
xjmmjndqz-wpiit-gjbdnodxn-811[djnim]
|
||||
zlkprjbo-doxab-zelzlixqb-absbilmjbkq-939[blzai]
|
||||
htqtwkzq-xhfajsljw-mzsy-ywfnsnsl-619[lfsnu]
|
||||
zhdsrqlchg-mhoobehdq-xvhu-whvwlqj-361[hqdlo]
|
||||
tcfkqcevkxg-tcorcikpi-ejqeqncvg-uvqtcig-544[lsyzm]
|
||||
kwtwznct-kivlg-zmamizkp-824[ixjen]
|
||||
bkzrrhehdc-qzaahs-rghoohmf-287[hraoz]
|
||||
lxuxaodu-mhn-cajrwrwp-303[aruwx]
|
||||
tcorcikpi-dcumgv-octmgvkpi-700[vygzd]
|
||||
crwwv-zlkprjbo-doxab-yxphbq-bkdfkbbofkd-809[bkdof]
|
||||
xgvnndadzy-xcjxjgvoz-ncdkkdib-447[dnxcg]
|
||||
elrkdcdugrxv-fkrfrodwh-xvhu-whvwlqj-179[eubfs]
|
||||
odkasqzuo-rxaiqd-eqdhuoqe-430[nlyts]
|
||||
vhglnfxk-zktwx-xzz-xgzbgxxkbgz-917[xzgkb]
|
||||
jyfvnlupj-wyvqljapsl-jovjvshal-zlycpjlz-357[jlvpy]
|
||||
gpbepvxcv-eaphixr-vgphh-gtrtxkxcv-687[pvxgh]
|
||||
jrncbavmrq-zntargvp-qlr-qrirybczrag-741[dnzpg]
|
||||
hqfxxnknji-hfsid-knsfshnsl-307[wtfhe]
|
||||
aietsrmdih-nippcfier-stivexmsrw-750[iersm]
|
||||
glrcplyrgmlyj-pyzzgr-pcqcypaf-912[nkoyv]
|
||||
ugfkmewj-yjsvw-hdsklau-yjskk-sfsdqkak-216[ksjad]
|
||||
mhi-lxvkxm-vtgwr-kxtvjnblbmbhg-917[bmvxg]
|
||||
tipfxvezt-irsszk-kvtyefcfxp-451[fteik]
|
||||
jxdkbqfz-mixpqfz-doxpp-qoxfkfkd-939[fxdkp]
|
||||
dsxxw-pyzzgr-qrmpyec-288[prxyz]
|
||||
ejpanjwpekjwh-fahhuxawj-ajcejaanejc-394[jaehw]
|
||||
pinovwgz-xgvnndadzy-xviyt-vxlpdndodji-109[dnvix]
|
||||
szfyrqriuflj-upv-rercpjzj-243[jprqg]
|
||||
dmbttjgjfe-gmpxfs-efqbsunfou-701[fbegj]
|
||||
sgmtkzoi-inuiurgzk-ykxboiky-436[qlcfs]
|
||||
slqryzjc-djmucp-ylyjwqgq-158[jqycl]
|
||||
aflwjfslagfsd-vqw-hmjuzskafy-398[fasjl]
|
||||
slqryzjc-djmucp-pcacgtgle-886[cgjlp]
|
||||
qjopwxha-ywjzu-ajcejaanejc-420[zoehr]
|
||||
amjmpdsj-njyqrga-epyqq-kylyeckclr-756[yksln]
|
||||
zlkprjbo-doxab-zxkav-zlxqfkd-abpfdk-445[kabdx]
|
||||
lhkhszqx-fqzcd-bgnbnkzsd-nodqzshnmr-989[nzdhq]
|
||||
dlhwvupglk-ibuuf-klwhyatlua-591[dzktb]
|
||||
dpotvnfs-hsbef-cbtlfu-ufdiopmphz-623[homsd]
|
||||
ajvyjprwp-npp-mnbrpw-875[pjnrw]
|
||||
lxwbdvna-pajmn-snuuhknjw-mnyuxhvnwc-251[nuwah]
|
||||
vetllbybxw-lvtoxgzxk-angm-xgzbgxxkbgz-865[mknli]
|
||||
aflwjfslagfsd-jsehsyafy-usfvq-vwkayf-268[fsayj]
|
||||
xjgjmapg-agjrzm-gvwjmvojmt-291[jgmav]
|
||||
plolwdub-judgh-iorzhu-dqdobvlv-465[dloub]
|
||||
htqtwkzq-wfggny-fsfqdxnx-645[wsznf]
|
||||
fkqbokxqflkxi-zxkav-zlxqfkd-jxohbqfkd-341[kxfqb]
|
||||
oxjmxdfkd-avb-tlohpelm-653[dlmox]
|
||||
xtwtelcj-rclop-nsznzwlep-epnsyzwzrj-873[zelnp]
|
||||
rtqlgevkng-gii-ceswkukvkqp-466[kgeiq]
|
||||
molgbzqfib-yrkkv-ixyloxqlov-237[lobik]
|
||||
zbytomdsvo-mrymyvkdo-nocsqx-848[pahef]
|
||||
szfyrqriuflj-treup-tfrkzex-ivtvzmzex-867[xejut]
|
||||
upq-tfdsfu-kfmmzcfbo-mphjtujdt-909[fmtud]
|
||||
ykhknbqh-lhwopey-cnwoo-bejwjyejc-342[hwxgn]
|
||||
qfkkj-nsznzwlep-nzyeltyxpye-327[vkmwy]
|
||||
excdklvo-zvkcdsm-qbkcc-psxkxmsxq-900[cvoiz]
|
||||
dszphfojd-dboez-dpbujoh-xpsltipq-623[zbxem]
|
||||
udpsdjlqj-iorzhu-ghsorbphqw-517[hdjop]
|
||||
xcitgcpixdcpa-ide-htrgti-gpqqxi-gthtpgrw-609[gitpc]
|
||||
cybyjqho-whqtu-uww-tuiywd-348[styfx]
|
||||
yuxufmdk-sdmpq-nmewqf-oazfmuzyqzf-924[hfsly]
|
||||
tfejldvi-xiruv-avccpsvre-crsfirkfip-997[rxygp]
|
||||
wsvsdkbi-qbkno-oqq-wkxkqowoxd-822[koqwb]
|
||||
qcbgiasf-ufors-tzcksf-sbuwbssfwbu-610[ivjsc]
|
||||
vkrhzxgbv-wrx-lmhktzx-839[xhkrv]
|
||||
xmrrq-bwddqtwsf-vwnwdghewfl-242[fpmoq]
|
||||
kmjezxodgz-nxvqzibzm-cpio-gjbdnodxn-577[isocd]
|
||||
iutyaskx-mxgjk-kmm-jkyomt-436[kmjtx]
|
||||
ide-htrgti-snt-rjhidbtg-htgkxrt-531[tghir]
|
||||
vkppo-uww-bqrehqjeho-764[xmntl]
|
||||
bdavqofuxq-pkq-ymzmsqyqzf-196[qfmyz]
|
||||
diozmivodjivg-hvbizodx-zbb-ozxcijgjbt-915[zueag]
|
||||
cybyjqho-whqtu-hqrryj-bqrehqjeho-374[hqjry]
|
||||
vcibutulxiom-vohhs-lywycpcha-630[owyks]
|
||||
chnylhuncihuf-wuhxs-fiacmncwm-786[chnuf]
|
||||
xekdwvwnzkqo-ywjzu-ykwpejc-wymqeoepekj-264[dmbln]
|
||||
etyyx-cxd-vnqjrgno-391[hntfq]
|
||||
pwcvonofrcig-dfcxsqhwzs-qobrm-qighcasf-gsfjwqs-194[scfqg]
|
||||
xgvnndadzy-ezggtwzvi-nojmvbz-837[vnsth]
|
||||
dszphfojd-qmbtujd-hsbtt-usbjojoh-467[rskch]
|
||||
npmhcargjc-aylbw-amyrgle-yaosgqgrgml-886[galmr]
|
||||
qczcftiz-gqojsbusf-vibh-twbobqwbu-350[bnsiu]
|
||||
kwvacumz-ozilm-kzgwomvqk-xtiabqk-oziaa-twoqabqka-980[akoqz]
|
||||
dsxxw-zyqicr-cleglccpgle-418[clegx]
|
||||
jrncbavmrq-cynfgvp-tenff-ynobengbel-611[nbefc]
|
||||
hqtyeqsjylu-fbqijys-whqii-tuiywd-322[mitks]
|
||||
rnqnyfwd-lwfij-wfggny-xmnuunsl-697[tseia]
|
||||
fhezusjybu-rqiauj-udwyduuhydw-868[ngyzs]
|
||||
pkl-oaynap-ywjzu-ykwpejc-opknwca-628[pakwy]
|
||||
nuatmlmdpage-vqxxknqmz-geqd-fqefuzs-508[romxa]
|
||||
awzwhofm-ufors-qobrm-qcohwbu-hsqvbczcum-948[obchm]
|
||||
dfcxsqhwzs-rms-fsgsofqv-766[sfqcd]
|
||||
wlqqp-tyftfcrkv-rercpjzj-711[rcfjp]
|
||||
clotzlnetgp-awldetn-rcldd-nzyeltyxpye-743[letdn]
|
||||
lgh-kwujwl-hdsklau-yjskk-vwhsjlewfl-788[lkwhj]
|
||||
uqtqbizg-ozilm-kivlg-kwibqvo-uizsmbqvo-512[iqbov]
|
||||
vetllbybxw-lvtoxgzxk-angm-kxlxtkva-683[xlktv]
|
||||
qyujihctyx-mwupyhayl-bohn-uwkocmcncih-760[chyui]
|
||||
crwwv-zxkav-obzbfsfkd-237[bfkvw]
|
||||
qczcftiz-pogysh-igsf-hsghwbu-610[tnjwm]
|
||||
udpsdjlqj-gbh-hqjlqhhulqj-725[hjqld]
|
||||
yuxufmdk-sdmpq-nmewqf-emxqe-326[meqdf]
|
||||
molgbzqfib-ciltbo-ildfpqfzp-653[bfilo]
|
||||
uwtojhynqj-gfxpjy-ywfnsnsl-151[jnyfs]
|
||||
qvbmzvibqwvit-jiasmb-camz-bmabqvo-330[bmvai]
|
||||
xmtjbzidx-xviyt-xjvodib-xpnojhzm-nzmqdxz-603[torgb]
|
||||
ykjoqian-cnwza-fahhuxawj-qoan-paopejc-628[ajnoc]
|
||||
gvcskirmg-veffmx-irkmriivmrk-906[imrkv]
|
||||
njmjubsz-hsbef-dboez-dpbujoh-bdrvjtjujpo-649[astyb]
|
||||
ovbunmneqbhf-pnaql-pbngvat-jbexfubc-845[yzqwm]
|
||||
joufsobujpobm-kfmmzcfbo-usbjojoh-571[mkpnw]
|
||||
lzfmdshb-cxd-lzmzfdldms-287[dlmzf]
|
||||
froruixo-mhoobehdq-pdunhwlqj-439[ohdqr]
|
||||
xcitgcpixdcpa-rpcsn-rdpixcv-bpcpvtbtci-193[cpitx]
|
||||
dfcxsqhwzs-ksodcbwnsr-xszzmpsob-rsgwub-168[sbwzc]
|
||||
iuruxlar-lruckx-sgtgmksktz-436[krugl]
|
||||
nbhofujd-dboez-fohjoffsjoh-467[ofhjb]
|
||||
pejji-tovvilokx-nozvyiwoxd-276[bzkve]
|
||||
bxaxipgn-vgpst-rpcsn-rdpixcv-rjhidbtg-htgkxrt-583[upjyv]
|
||||
bkzrrhehdc-bzmcx-bnzshmf-lzqjdshmf-443[hzbmc]
|
||||
dpssptjwf-gmpxfs-mphjtujdt-571[pjstd]
|
||||
pdjqhwlf-sodvwlf-judvv-orjlvwlfv-829[tuszv]
|
||||
mfklstdw-tmffq-wfyafwwjafy-918[wmvan]
|
||||
joufsobujpobm-ezf-gjobodjoh-779[xwadm]
|
||||
hafgnoyr-gbc-frperg-rtt-grpuabybtl-481[jcgnd]
|
||||
joufsobujpobm-fhh-tijqqjoh-233[johbf]
|
||||
zuv-ykixkz-vrgyzoi-mxgyy-yzuxgmk-150[yzgkx]
|
||||
ibghopzs-qvcqczohs-qighcasf-gsfjwqs-948[ubrmn]
|
||||
qfmcusbwq-pwcvonofrcig-foppwh-fsgsofqv-584[focpq]
|
||||
aczupnetwp-awldetn-rcldd-qtylyntyr-119[tdlny]
|
||||
dpssptjwf-ezf-sfdfjwjoh-909[znfwy]
|
||||
qxdwpopgsdjh-ytaanqtpc-pcpanhxh-297[pahcd]
|
||||
ucynmlgxcb-aylbw-rpyglgle-626[lgybc]
|
||||
oqnidbshkd-okzrshb-fqzrr-rdquhbdr-573[rdbhq]
|
||||
frqvxphu-judgh-fdqgb-vhuylfhv-647[hfuvd]
|
||||
vhehkyne-cxeeruxtg-hixktmbhgl-319[ehxgk]
|
||||
gsrwyqiv-kvehi-gerhc-gsexmrk-vigimzmrk-412[girek]
|
||||
ajmrxjlcren-yujbcrl-pajbb-bnaerlnb-719[lvzpq]
|
||||
zixppfcfba-bdd-bkdfkbbofkd-393[hnmcz]
|
||||
aflwjfslagfsd-hdsklau-yjskk-ugflsafewfl-918[flsak]
|
||||
xtwtelcj-rclop-upwwjmply-nzyeltyxpye-847[lpyet]
|
||||
oaddaeuhq-qss-dqmocgueufuaz-924[qzwti]
|
||||
tvsnigxmpi-wgezirkiv-lyrx-hitpscqirx-568[irxgp]
|
||||
ksodcbwnsr-qczcftiz-gqojsbusf-vibh-igsf-hsghwbu-272[sbcfg]
|
||||
sgmtkzoi-jek-gtgreyoy-410[tqkns]
|
||||
rzvkjiduzy-kgvnodx-bmvnn-omvdidib-109[fpsxk]
|
||||
diozmivodjivg-rzvkjiduzy-zbb-adivixdib-447[nayqm]
|
||||
froruixo-vfdyhqjhu-kxqw-rshudwlrqv-517[rhqud]
|
||||
dmpuamofuhq-dmnnuf-ymzmsqyqzf-222[mwnak]
|
||||
mybbycsfo-zvkcdsm-qbkcc-wkbuodsxq-380[bcksd]
|
||||
tcrjjzwzvu-wcfnvi-vexzevvizex-633[vzeci]
|
||||
qzoggwtwsr-gqojsbusf-vibh-hsqvbczcum-870[sbgqc]
|
||||
enzcntvat-cynfgvp-tenff-phfgbzre-freivpr-845[xnfot]
|
||||
gsvvswmzi-gerhc-gsexmrk-stivexmsrw-984[segmr]
|
||||
fhezusjybu-vbemuh-iqbui-244[iektm]
|
||||
oqnidbshkd-idkkxadzm-qdzbpthrhshnm-469[gekyh]
|
||||
pybgmyargtc-cee-nspafyqgle-574[egyac]
|
||||
jyddc-gerhc-gsexmrk-vigimzmrk-672[gmrcd]
|
||||
tipfxvezt-gcrjkzt-xirjj-rercpjzj-399[ldquc]
|
||||
bdavqofuxq-bxmefuo-sdmee-dqeqmdot-768[hwmck]
|
||||
fbebmtkr-zktwx-vtgwr-hixktmbhgl-475[tbkgh]
|
||||
irgyyolokj-igtje-iugzotm-rumoyzoiy-202[mpijw]
|
||||
fbebmtkr-zktwx-xzz-kxlxtkva-865[yicwo]
|
||||
tyepcyletzylw-dnlgpyrpc-sfye-nfdezxpc-dpcgtnp-145[badwi]
|
||||
vrurcjah-pajmn-ljwmh-anbnjalq-849[ajnhl]
|
||||
rtqlgevkng-ecpfa-fgukip-700[gefkp]
|
||||
pdjqhwlf-froruixo-udeelw-wudlqlqj-907[kymab]
|
||||
tinnm-xszzmpsob-qcbhowbasbh-688[nhcdm]
|
||||
nij-mywlyn-wuhxs-lywycpcha-318[ywchl]
|
||||
fnjyxwrinm-ouxfna-ldbcxvna-bnaerln-979[naxbf]
|
||||
ajvyjprwp-bljenwpna-qdwc-anjlzdrbrcrxw-823[jrwan]
|
||||
diozmivodjivg-wpiit-mzxzdqdib-551[kmhon]
|
||||
nij-mywlyn-dyffsvyuh-xyjfisgyhn-656[yfnhi]
|
||||
fhezusjybu-zubboruqd-vydqdsydw-504[dubyq]
|
||||
ubhatstkwhnl-lvtoxgzxk-angm-kxvxbobgz-579[xbgkt]
|
||||
xcitgcpixdcpa-rwdrdapit-htgkxrth-557[zastp]
|
||||
wfintfhynaj-jll-hzxytrjw-xjwanhj-281[jhnwa]
|
||||
irgyyolokj-vrgyzoi-mxgyy-rumoyzoiy-800[sptbo]
|
||||
jvyyvzpcl-yhkpvhjapcl-ibuuf-aljouvsvnf-227[vjlpu]
|
||||
iruzfrtkzmv-treup-kirzezex-841[rzeik]
|
||||
cxy-bnlanc-ljwmh-ujkxajcxah-979[waqkz]
|
||||
qzoggwtwsr-foppwh-difqvogwbu-948[wgofp]
|
||||
qyujihctyx-dyffsvyuh-zchuhwcha-552[hycuf]
|
||||
yknnkoera-lhwopey-cnwoo-pnwejejc-992[enowc]
|
||||
zovldbkfz-zxkav-zlxqfkd-xkxivpfp-289[vtcos]
|
||||
mrxivrexmsrep-glsgspexi-erepcwmw-750[btrnl]
|
||||
udskkaxawv-kusnwfywj-zmfl-dgyaklauk-866[xeozd]
|
||||
esyfwlau-tmffq-vwnwdghewfl-632[czoml]
|
||||
hjgbwuladw-kusnwfywj-zmfl-esfsywewfl-294[xwfie]
|
||||
hwbba-rncuvke-itcuu-ocpcigogpv-232[cubgi]
|
||||
vhkkhlbox-vtgwr-xgzbgxxkbgz-631[typnq]
|
||||
nvrgfezqvu-szfyrqriuflj-vxx-jkfirxv-139[krijl]
|
||||
iuruxlar-zuv-ykixkz-lruckx-xkykgxin-826[kxuir]
|
||||
yhwooebeaz-ywjzu-yqopkian-oanreya-966[ynwkb]
|
||||
iuxxuyobk-pkrrehkgt-xkgiwaoyozout-176[sjwtp]
|
||||
glrcplyrgmlyj-djmucp-qrmpyec-236[clmpr]
|
||||
pejji-tovvilokx-bocokbmr-588[obijk]
|
||||
hplazytkpo-upwwjmply-dpcgtnpd-119[pdltw]
|
||||
nij-mywlyn-xsy-jolwbumcha-136[yjlmn]
|
||||
pynffvsvrq-ohaal-fgbentr-923[fanrv]
|
||||
lgh-kwujwl-kusnwfywj-zmfl-kwjnauwk-736[wkjlu]
|
||||
dszphfojd-sbccju-mbcpsbupsz-727[sbcpd]
|
||||
ixeumktoi-lruckx-zkinturume-800[ktsyl]
|
||||
fmsledevhsyw-tvsnigxmpi-veffmx-viwievgl-412[veifm]
|
||||
mrxivrexmsrep-fyrrc-qevoixmrk-880[wtmdx]
|
||||
qmpmxevc-kvehi-wgezirkiv-lyrx-wlmttmrk-620[zyxjd]
|
||||
zixppfcfba-oxyyfq-qbzeklildv-289[fbilp]
|
||||
nwlddtqtpo-dnlgpyrpc-sfye-wlmzclezcj-431[jefsy]
|
||||
tinnm-foppwh-oqeiwgwhwcb-688[fzyjx]
|
||||
plolwdub-judgh-fdqgb-ghyhorsphqw-413[hystk]
|
||||
bwx-amkzmb-zijjqb-bmkpvwtwog-460[bmwjk]
|
||||
qcbgiasf-ufors-pibbm-ghcfous-896[bfscg]
|
||||
ktwbhtvmbox-vetllbybxw-cxeeruxtg-tgterlbl-215[tmybs]
|
||||
lqwhuqdwlrqdo-mhoobehdq-vwrudjh-387[dhqow]
|
||||
lgh-kwujwl-tskcwl-vwhdgqewfl-684[afnbs]
|
||||
yuxufmdk-sdmpq-rxaiqd-efadmsq-976[mczye]
|
||||
ftzgxmbv-unggr-kxlxtkva-917[ezfmx]
|
||||
rmn-qcapcr-aylbw-amyrgle-ylyjwqgq-158[prcqj]
|
||||
fhezusjybu-rqiauj-husuylydw-582[uyhjs]
|
||||
apuut-xviyt-xjvodib-yzkvmohzio-525[yomvc]
|
||||
mybbycsfo-dyz-combod-zvkcdsm-qbkcc-oxqsxoobsxq-848[obcsd]
|
||||
yhwooebeaz-lhwopey-cnwoo-zalhkuiajp-706[oaehw]
|
||||
bqxnfdmhb-bzmcx-trdq-sdrshmf-469[zdyht]
|
||||
dmpuamofuhq-vqxxknqmz-pqbmdfyqzf-924[qmfdp]
|
||||
kmjezxodgz-ytz-mzvxlpdndodji-889[gefcn]
|
||||
apuut-xviyt-xjvodib-mznzvmxc-369[vximt]
|
||||
fodvvlilhg-surmhfwloh-hjj-hqjlqhhulqj-647[hljqf]
|
||||
tipfxvezt-srjbvk-tljkfdvi-jvimztv-269[vtijf]
|
||||
ikhcxvmbex-xzz-labiibgz-423[qnzsg]
|
||||
qzchnzbshud-azrjds-lzmzfdldms-885[xubgy]
|
||||
eadalsjq-yjsvw-vqw-esjcwlafy-398[ajswe]
|
||||
oxmeeuruqp-bxmefuo-sdmee-etubbuzs-898[stupo]
|
||||
frqvxphu-judgh-xqvwdeoh-fdqgb-frdwlqj-zrunvkrs-257[dqrfh]
|
||||
ltpedcxots-gpbepvxcv-qphzti-igpxcxcv-349[jzdyi]
|
||||
vhkkhlbox-vtgwr-phkdlahi-969[tmszy]
|
||||
cvabijtm-jcvvg-lmdmtwxumvb-226[nvfca]
|
||||
sedikcuh-whqtu-sqdto-qsgkyiyjyed-790[dqsye]
|
||||
gzefmnxq-bdavqofuxq-rxaiqd-ymzmsqyqzf-690[zklij]
|
||||
zntargvp-cynfgvp-tenff-qrcyblzrag-351[sqzyh]
|
||||
xfbqpojafe-dboez-xpsltipq-857[ehgum]
|
||||
uqtqbizg-ozilm-jcvvg-lmaqov-980[xzwsi]
|
||||
xjgjmapg-ezggtwzvi-xpnojhzm-nzmqdxz-161[zgjmx]
|
||||
muqfedyput-vbemuh-fkhsxqiydw-920[udefh]
|
||||
kzeed-gfxpjy-ywfnsnsl-489[xeoyn]
|
||||
pynffvsvrq-onfxrg-ynobengbel-741[nfbeg]
|
||||
froruixo-iorzhu-rshudwlrqv-647[rouhi]
|
||||
amjmpdsj-qaytclecp-fslr-qyjcq-938[cjqal]
|
||||
otzkxtgzoutgr-jek-iayzuskx-ykxboik-826[kotxz]
|
||||
tpspahyf-nyhkl-jhukf-zavyhnl-279[hyafk]
|
||||
pualyuhapvuhs-ihzrla-ylhjxbpzpapvu-929[lbncu]
|
||||
odiih-ajkkrc-mnbrpw-355[ikrab]
|
||||
votubcmf-gmpxfs-bdrvjtjujpo-363[jbfmo]
|
||||
zgmfyxypbmsq-rmn-qcapcr-bwc-pcacgtgle-704[ztspm]
|
||||
uqtqbizg-ozilm-nchhg-jiasmb-ivitgaqa-382[snpaf]
|
||||
willimcpy-jfumncw-alumm-lyuwkocmcncih-734[cmliu]
|
||||
ibghopzs-qvcqczohs-hsqvbczcum-506[chqsz]
|
||||
ugjjgkanw-tmffq-vwkayf-216[lfrby]
|
||||
pynffvsvrq-pnaql-erprvivat-507[vpraf]
|
||||
aczupnetwp-nlyoj-nzletyr-pyrtyppctyr-197[pytnr]
|
||||
vkppo-sqdto-seqjydw-bewyijysi-686[sydei]
|
||||
dpotvnfs-hsbef-ezf-qvsdibtjoh-337[fsbde]
|
||||
wlqqp-avccpsvre-ivtvzmzex-425[vcepq]
|
||||
jfifqxov-doxab-gbiivybxk-jxohbqfkd-549[skgzo]
|
||||
rgndvtcxr-jchipqat-rpcsn-igpxcxcv-713[cprxg]
|
||||
ykhknbqh-xqjju-wymqeoepekj-576[ejkqh]
|
||||
pejji-mrymyvkdo-domrxyvyqi-536[ymdij]
|
||||
wihmogyl-aluxy-xsy-womnigyl-mylpcwy-786[ylmwg]
|
||||
jlidywncfy-zfiqyl-mbcjjcha-162[cjyfi]
|
||||
pynffvsvrq-sybjre-grpuabybtl-455[byavk]
|
||||
uqtqbizg-ozilm-uiovmbqk-akidmvomz-pcvb-bziqvqvo-694[xywnk]
|
||||
lxaaxbren-ouxfna-ydalqjbrwp-225[mibtg]
|
||||
joufsobujpobm-kfmmzcfbo-dvtupnfs-tfswjdf-675[ijokq]
|
||||
crwwv-gbiivybxk-pqloxdb-913[rtmzn]
|
||||
pkl-oaynap-nwxxep-bejwjyejc-576[jfmel]
|
||||
wfummczcyx-gcfcnuls-aluxy-wuhxs-wihnuchgyhn-786[giqsn]
|
||||
htsxzrjw-lwfij-ojqqdgjfs-ijajqturjsy-229[tjxbs]
|
||||
qczcftiz-foppwh-rsgwub-246[exnyt]
|
||||
lnkfaypeha-xwogap-naoawnyd-342[zynls]
|
||||
thnulapj-zjhclunly-obua-thuhnltlua-201[luhan]
|
||||
vkppo-fbqijys-whqii-bqrehqjeho-504[lkosn]
|
||||
eqpuwogt-itcfg-ecpfa-qrgtcvkqpu-622[cgpqt]
|
||||
odkasqzuo-oazegyqd-sdmpq-otaoaxmfq-efadmsq-222[aoqdm]
|
||||
ide-htrgti-bxaxipgn-vgpst-qjccn-pcpanhxh-453[pcghi]
|
||||
luxciuwncpy-jfumncw-alumm-xyjulngyhn-552[unclm]
|
||||
plolwdub-judgh-hjj-zrunvkrs-777[yfulq]
|
||||
pejji-lexxi-oxqsxoobsxq-458[xoeij]
|
||||
uzfqdzmfuazmx-pkq-fdmuzuzs-170[npsqv]
|
||||
bknsykmdsfo-zvkcdsm-qbkcc-cdybkqo-614[fastx]
|
||||
qfkkj-upwwjmply-qtylyntyr-873[yjklp]
|
||||
hqcfqwydw-zubboruqd-ijehqwu-218[djvhz]
|
||||
kmjezxodgz-pinovwgz-zbb-ncdkkdib-473[vimty]
|
||||
bknsykmdsfo-myvybpev-mkxni-mykdsxq-bocokbmr-562[sdwfr]
|
||||
eqttqukxg-gii-hkpcpekpi-960[yljdr]
|
||||
drxevkzt-wcfnvi-cfxzjkztj-607[twoxz]
|
||||
vkppo-rkddo-ijehqwu-504[dkope]
|
||||
rgllk-rxaiqd-dqmocgueufuaz-456[mxkzr]
|
||||
ktiaaqnqml-moo-xczkpiaqvo-122[aoqik]
|
||||
amjmpdsj-njyqrga-epyqq-pcqcypaf-600[pqajy]
|
||||
rwcnawjcrxwju-npp-ujkxajcxah-199[jacwx]
|
||||
fmsledevhsyw-gspsvjyp-gerhc-gsexmrk-ywiv-xiwxmrk-412[segmr]
|
||||
ajmrxjlcren-kdwwh-anbnjalq-745[myzet]
|
||||
aoubshwq-tinnm-suu-fsoqeiwgwhwcb-480[wsubh]
|
||||
rdggdhxkt-rpcsn-hpath-531[tsamh]
|
||||
pbafhzre-tenqr-pnaql-pbngvat-nanylfvf-715[upmid]
|
||||
zbytomdsvo-cmkfoxqob-rexd-gybucryz-562[obycd]
|
||||
bkwzkqsxq-mkxni-ecob-docdsxq-978[ksmtq]
|
||||
oknkvcta-itcfg-ecpfa-ncdqtcvqta-414[lcwjp]
|
||||
fydelmwp-clmmte-cpnptgtyr-405[jlgak]
|
||||
tcorcikpi-ecpfa-gpikpggtkpi-804[picgk]
|
||||
xtwtelcj-rclop-upwwjmply-hzcvdsza-327[clpwj]
|
||||
tcfkqcevkxg-ecpfa-eqcvkpi-ncdqtcvqta-752[cqekt]
|
||||
etaqigpke-tcddkv-uvqtcig-440[tcdeg]
|
||||
raphhxuxts-qxdwpopgsdjh-rpcsn-rdpixcv-sthxvc-843[tvexn]
|
||||
atyzghrk-xghhoz-ktmotkkxotm-748[kthog]
|
||||
fmsledevhsyw-nippcfier-asvowlst-412[zksal]
|
||||
oaxadrgx-eomhqzsqd-tgzf-eqdhuoqe-846[zfylm]
|
||||
qcbgiasf-ufors-dzoghwq-ufogg-qcbhowbasbh-194[bgofh]
|
||||
qvbmzvibqwvit-bwx-amkzmb-jiasmb-xczkpiaqvo-122[bimva]
|
||||
qfkkj-prr-hzcvdsza-639[dqmts]
|
||||
jvyyvzpcl-ibuuf-bzly-alzapun-981[mnakf]
|
||||
dsxxw-cee-pcacgtgle-626[odsgr]
|
||||
buzahisl-zjhclunly-obua-zlycpjlz-617[rsglh]
|
||||
gpewwmjmih-tpewxmg-kveww-jmrergmrk-594[mwegr]
|
||||
aietsrmdih-hci-stivexmsrw-516[hsvof]
|
||||
ujoon-ytaanqtpc-stepgibtci-219[tacin]
|
||||
kpvgtpcvkqpcn-fag-ceswkukvkqp-830[cijob]
|
||||
etaqigpke-uecxgpigt-jwpv-ocpcigogpv-154[gpcei]
|
||||
eqnqthwn-tcddkv-rwtejcukpi-674[tcdek]
|
||||
mhi-lxvkxm-ktuubm-nlxk-mxlmbgz-241[mxklb]
|
||||
avw-zljyla-wshzapj-nyhzz-ylzlhyjo-149[plqkx]
|
||||
xekdwvwnzkqo-nwxxep-odellejc-862[xyzwn]
|
||||
pkl-oaynap-bhksan-qoan-paopejc-498[ojduv]
|
||||
xjinphzm-bmvyz-xjgjmapg-ezggtwzvi-zibdizzmdib-499[zigmb]
|
||||
bdavqofuxq-rxaiqd-bgdotmeuzs-508[clbmv]
|
||||
xzwrmkbqtm-jcvvg-ewzsapwx-902[wmvxz]
|
||||
dmybmsuzs-rxaiqd-xmnadmfadk-846[dmasx]
|
||||
surmhfwloh-exqqb-vwrudjh-127[hqruw]
|
||||
gntmfefwitzx-ojqqdgjfs-xytwflj-827[xgtuv]
|
||||
tbxmlkfwba-zxkav-zlxqfkd-ildfpqfzp-965[jncig]
|
||||
sbnqbhjoh-tdbwfohfs-ivou-qvsdibtjoh-597[rftxz]
|
||||
hqcfqwydw-fbqijys-whqii-iqbui-322[iqwbf]
|
||||
forwcoqhwjs-xszzmpsob-gvwddwbu-324[ftyzu]
|
||||
zlilocri-oxjmxdfkd-ciltbo-pbosfzbp-991[gjars]
|
||||
kwzzwaqdm-rmttgjmiv-uizsmbqvo-434[mziqt]
|
||||
willimcpy-gcfcnuls-aluxy-mwupyhayl-bohn-yhachyylcha-162[kcimx]
|
||||
uqtqbizg-ozilm-kivlg-uizsmbqvo-954[pifvj]
|
||||
ugdgjxmd-tskcwl-wfyafwwjafy-762[wfadg]
|
||||
ajyqqgdgcb-bwc-qyjcq-262[qcbgj]
|
||||
yknnkoera-oywrajcan-dqjp-wjwhuoeo-602[oajnw]
|
||||
bqxnfdmhb-qzaahs-rzkdr-963[abdhq]
|
||||
dwbcjkun-mhn-jwjuhbrb-693[niusd]
|
||||
wlqqp-wcfnvi-crsfirkfip-373[nrtqs]
|
||||
guahyncw-wbiwifuny-xymcah-240[wyach]
|
||||
qfkkj-prr-opgpwzaxpye-613[pkrae]
|
||||
cqwdujys-tou-tufbeocudj-322[ucdjo]
|
||||
wfruflnsl-wfggny-ijuqtdrjsy-931[wjznm]
|
||||
bnqqnrhud-okzrshb-fqzrr-cdrhfm-105[rhqbd]
|
||||
yhtwhnpun-tpspahyf-nyhkl-jovjvshal-zlycpjlz-487[hlpyj]
|
||||
iutyaskx-mxgjk-hatte-lotgtiotm-176[shzku]
|
||||
gntmfefwitzx-kqtbjw-xfqjx-645[nmfsa]
|
||||
jvsvymbs-jhukf-jbzavtly-zlycpjl-695[frnkz]
|
||||
dlhwvupglk-zjhclunly-obua-jvuahputlua-825[ulahj]
|
||||
wyvqljapsl-jhukf-jvhapun-ylzlhyjo-487[jlhya]
|
||||
ghkmaihex-hucxvm-lmhktzx-267[hmxka]
|
||||
irgyyolokj-vrgyzoi-mxgyy-xkikobotm-670[ryfvl]
|
||||
kwzzwaqdm-zijjqb-amzdqkma-564[qzdtv]
|
||||
rflsjynh-idj-xytwflj-541[jflyd]
|
||||
emixwvqhml-ntwemz-zmkmqdqvo-200[zmbdq]
|
||||
kzgwomvqk-rmttgjmiv-abwziom-330[mtnsk]
|
||||
xjgjmapg-wpiit-vivgtndn-499[weiza]
|
||||
cebwrpgvyr-pnaql-grpuabybtl-117[xqmjc]
|
||||
egdytrixat-uadltg-uxcpcrxcv-297[ctxad]
|
||||
gvaaz-ezf-tfswjdft-623[fatzd]
|
||||
excdklvo-mkxni-mykdsxq-mecdywob-cobfsmo-692[mocdk]
|
||||
ovbunmneqbhf-pnaql-bcrengvbaf-351[mtgcw]
|
||||
nwlddtqtpo-clmmte-nzyeltyxpye-509[ydnsh]
|
||||
froruixo-udeelw-vwrudjh-309[sxgvu]
|
||||
hqcfqwydw-sxesebqju-cqhaujydw-660[fghtp]
|
||||
bpvctixr-rwdrdapit-ldgzhwde-895[sfioq]
|
||||
ajmrxjlcren-yaxsnlcrun-bljenwpna-qdwc-fxatbqxy-797[fnjis]
|
||||
lugjuacha-zfiqyl-uhufsmcm-370[uacfh]
|
||||
houngfgxjuay-pkrrehkgt-iayzuskx-ykxboik-852[kguxy]
|
||||
gcfcnuls-aluxy-luxciuwncpy-jfumncw-alumm-uhufsmcm-214[zftvs]
|
||||
oxmeeuruqp-otaoaxmfq-emxqe-794[drzyv]
|
||||
nvrgfezqvu-upv-tfekrzedvek-867[evfkr]
|
||||
uwtojhynqj-xhfajsljw-mzsy-zxjw-yjxynsl-801[jyswx]
|
||||
zixppfcfba-yxphbq-jxohbqfkd-887[zgoyn]
|
||||
qczcftiz-qvcqczohs-aobousasbh-402[coqsz]
|
||||
lejkrscv-upv-tfekrzedvek-919[ekvrc]
|
||||
chnylhuncihuf-zfiqyl-zchuhwcha-604[magtu]
|
||||
vetllbybxw-lvtoxgzxk-angm-ybgtgvbgz-605[gbltv]
|
||||
dmpuamofuhq-omzpk-qzsuzqqduzs-820[quzmd]
|
||||
rdggdhxkt-gpqqxi-rdcipxcbtci-219[yrlha]
|
||||
tfejldvi-xiruv-wcfnvi-jvimztvj-243[fqclr]
|
||||
foadouwbu-dzoghwq-ufogg-gvwddwbu-324[dgouw]
|
||||
tbxmlkfwba-pzxsbkdbo-erkq-bkdfkbbofkd-913[hgans]
|
||||
gpbepvxcv-rpcsn-itrwcdadvn-453[sbuap]
|
||||
szfyrqriuflj-srjbvk-ivrthlzjzkzfe-633[sqwil]
|
||||
jqwpihizlwca-jiasmb-ivitgaqa-122[amzud]
|
||||
bqvvu-ywjzu-qoan-paopejc-264[ajopq]
|
||||
mvydjvxodqz-wpiit-gvwjmvojmt-525[oabkn]
|
||||
ktiaaqnqml-moo-zmikycqaqbqwv-252[qamik]
|
||||
dpmpsgvm-cbtlfu-sfdfjwjoh-909[pntzm]
|
||||
nzcczdtgp-nsznzwlep-qtylyntyr-171[nztyc]
|
||||
htqtwkzq-idj-rfwpjynsl-723[ndmel]
|
||||
gzefmnxq-nmewqf-eqdhuoqe-300[eqfmn]
|
||||
qzlozfhmf-cxd-lzqjdshmf-469[fzdhl]
|
||||
pinovwgz-mvydjvxodqz-xviyt-xjvodib-yzndbi-447[pztyh]
|
||||
gspsvjyp-gerhc-gsexmrk-vieguymwmxmsr-256[gmser]
|
||||
ygcrqpkbgf-tcfkqcevkxg-hnqygt-vtckpkpi-102[puovq]
|
||||
jsehsyafy-tmffq-vwhdgqewfl-112[rnach]
|
||||
qmpmxevc-kvehi-hci-eguymwmxmsr-204[mechi]
|
||||
tcfkqcevkxg-tcorcikpi-gii-gpikpggtkpi-544[wytzs]
|
||||
pbafhzre-tenqr-enzcntvat-onfxrg-ratvarrevat-845[raten]
|
||||
shoewudys-rqiauj-bqrehqjeho-270[ehqjo]
|
||||
xjinphzm-bmvyz-ojk-nzxmzo-ezggtwzvi-zibdizzmdib-577[zimbd]
|
||||
rkpqxyib-bdd-pbosfzbp-939[bpdfi]
|
||||
vcibutulxiom-vumeyn-omyl-nymncha-786[ziwys]
|
||||
nvrgfezqvu-upv-ivrthlzjzkzfe-321[vzefr]
|
||||
krxqjijamxdb-yujbcrl-pajbb-dbna-cnbcrwp-303[bjacr]
|
||||
zixppfcfba-mixpqfz-doxpp-qbzeklildv-653[zdxgu]
|
||||
lsyrkjkbnyec-mkxni-gybucryz-640[ykbcn]
|
||||
qspkfdujmf-kfmmzcfbo-dpoubjonfou-155[fomub]
|
||||
sno-rdbqds-rbzudmfdq-gtms-cdozqsldms-755[yaubo]
|
||||
houngfgxjuay-vrgyzoi-mxgyy-ygrky-462[ygoru]
|
||||
gcfcnuls-aluxy-wifilzof-yaa-omyl-nymncha-266[alycf]
|
||||
hwdtljsnh-gzssd-xfqjx-463[fajso]
|
||||
htwwtxnaj-idj-hzxytrjw-xjwanhj-281[hzrnq]
|
||||
sorozgxe-mxgjk-lruckx-xkgiwaoyozout-176[oxgkr]
|
||||
ynssr-vtgwr-vhtmbgz-ftgtzxfxgm-475[gtfmr]
|
||||
rtqlgevkng-lgnnadgcp-yqtmujqr-648[nelzc]
|
||||
kwtwznct-rmttgjmiv-camz-bmabqvo-460[nmbls]
|
||||
surmhfwloh-fdqgb-wudlqlqj-959[lqdfh]
|
||||
iutyaskx-mxgjk-hgyqkz-rumoyzoiy-644[ykgim]
|
||||
jqwpihizlwca-kivlg-kwibqvo-wxmzibqwva-434[iwqva]
|
||||
amppmqgtc-djmucp-asqrmkcp-qcptgac-496[cpmaq]
|
||||
apuut-xjmmjndqz-wpiit-vivgtndn-187[intdj]
|
||||
ftzgxmbv-vtgwr-wxlbzg-267[gbtvw]
|
||||
eza-dpncpe-mldvpe-wlmzclezcj-171[eclpz]
|
||||
rnqnyfwd-lwfij-wfggny-ijuqtdrjsy-827[fjnwy]
|
||||
aflwjfslagfsd-xdgowj-ghwjslagfk-684[fgajl]
|
||||
lzfmdshb-eknvdq-rsnqzfd-859[ybjfz]
|
||||
hqtyeqsjylu-uww-tufbeocudj-582[uejqt]
|
||||
qfkkj-nsznzwlep-dstaatyr-223[aknst]
|
||||
ubhatstkwhnl-xzz-kxvxbobgz-267[umogq]
|
||||
xekdwvwnzkqo-oywrajcan-dqjp-ykjpwejiajp-238[mtbvo]
|
||||
cebwrpgvyr-sybjre-qrfvta-195[rbevy]
|
||||
hjgbwuladw-usfvq-esfsywewfl-710[mpiho]
|
||||
lujbbrornm-kjbtnc-fxatbqxy-823[ywamx]
|
||||
ugjjgkanw-uzgugdslw-hmjuzskafy-476[stfoh]
|
||||
fmsledevhsyw-fewoix-pefsvexsvc-724[scznt]
|
||||
zlkprjbo-doxab-bdd-obzbfsfkd-419[bdofk]
|
||||
vcibutulxiom-wuhxs-nluchcha-864[uchil]
|
||||
yhkpvhjapcl-ihzrla-dvyrzovw-305[qyhmr]
|
||||
hmsdqmzshnmzk-qzlozfhmf-qzaahs-zmzkxrhr-287[zhmqs]
|
||||
gzefmnxq-dmnnuf-etubbuzs-482[nubef]
|
||||
ejpanjwpekjwh-ywjzu-ykwpejc-nayaerejc-550[jewap]
|
||||
cxy-bnlanc-npp-mnyuxhvnwc-433[nvmyt]
|
||||
jfifqxov-doxab-gbiivybxk-obzbfsfkd-601[epyzn]
|
||||
pkl-oaynap-xqjju-wjwhuoeo-680[joapu]
|
||||
jef-iushuj-hqtyeqsjylu-rqiauj-bewyijysi-842[hyzgu]
|
||||
dfcxsqhwzs-tzcksf-aobousasbh-896[wkqxh]
|
||||
lahxpnwrl-ljwmh-bjunb-693[jtoyp]
|
||||
rnqnyfwd-lwfij-gfxpjy-wjhjnansl-931[jnfwl]
|
||||
buzahisl-jvyyvzpcl-jhukf-jvhapun-klwhyatlua-617[ahluj]
|
||||
jchipqat-eaphixr-vgphh-bpgztixcv-271[hpiac]
|
||||
zlkprjbo-doxab-avb-absbilmjbkq-107[wbymr]
|
||||
eqpuwogt-itcfg-dcumgv-fgxgnqrogpv-362[gcfop]
|
||||
rdadguja-qjccn-gtrtxkxcv-791[cadgj]
|
||||
etaqigpke-oknkvcta-itcfg-hnqygt-hkpcpekpi-674[mcoya]
|
||||
gspsvjyp-hci-wxsveki-386[myuqs]
|
||||
jef-iushuj-vbemuh-mehaixef-920[ehufi]
|
||||
encuukhkgf-fag-tgceswkukvkqp-752[kguce]
|
||||
npmhcargjc-njyqrga-epyqq-kypicrgle-444[cgpqr]
|
||||
xtwtelcj-rclop-mldvpe-dpcgtnpd-379[pcdlt]
|
||||
nchhg-kpwkwtibm-mvoqvmmzqvo-252[mvhko]
|
||||
uqtqbizg-ozilm-jiasmb-uizsmbqvo-122[ktxvs]
|
||||
nwlddtqtpo-mldvpe-fdpc-epdetyr-509[dpetl]
|
||||
wfintfhynaj-idj-qfgtwfytwd-229[efudw]
|
||||
yhwooebeaz-nwilwcejc-ydkykhwpa-owhao-160[skuyi]
|
||||
29
2016/d05/ex1/ex1.py
Executable file
29
2016/d05/ex1/ex1.py
Executable file
|
|
@ -0,0 +1,29 @@
|
|||
#!/usr/bin/env python
|
||||
|
||||
import hashlib
|
||||
import itertools
|
||||
import sys
|
||||
|
||||
|
||||
def solve(input: str) -> str:
|
||||
def crack_password(door_id: str) -> str:
|
||||
password: list[str] = []
|
||||
for i in itertools.count():
|
||||
hash = hashlib.md5((door_id + str(i)).encode()).hexdigest()
|
||||
if not hash.startswith("00000"):
|
||||
continue
|
||||
password.append(hash[5])
|
||||
if len(password) == 8:
|
||||
break
|
||||
return "".join(password)
|
||||
|
||||
return crack_password(input.strip())
|
||||
|
||||
|
||||
def main() -> None:
|
||||
input = sys.stdin.read()
|
||||
print(solve(input))
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
1
2016/d05/ex1/input
Normal file
1
2016/d05/ex1/input
Normal file
|
|
@ -0,0 +1 @@
|
|||
wtnhxymk
|
||||
34
2016/d05/ex2/ex2.py
Executable file
34
2016/d05/ex2/ex2.py
Executable file
|
|
@ -0,0 +1,34 @@
|
|||
#!/usr/bin/env python
|
||||
|
||||
import hashlib
|
||||
import itertools
|
||||
import sys
|
||||
|
||||
|
||||
def solve(input: str) -> str:
|
||||
def crack_password(door_id: str) -> str:
|
||||
password = ["_"] * 8
|
||||
for i in itertools.count():
|
||||
hash = hashlib.md5((door_id + str(i)).encode()).hexdigest()
|
||||
if not hash.startswith("00000"):
|
||||
continue
|
||||
pos = hash[5]
|
||||
if pos not in ("0", "1", "2", "3", "4", "5", "6", "7"):
|
||||
continue
|
||||
if password[int(pos)] != "_":
|
||||
continue
|
||||
password[int(pos)] = hash[6]
|
||||
if all(c != "_" for c in password):
|
||||
break
|
||||
return "".join(password)
|
||||
|
||||
return crack_password(input.strip())
|
||||
|
||||
|
||||
def main() -> None:
|
||||
input = sys.stdin.read()
|
||||
print(solve(input))
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
1
2016/d05/ex2/input
Normal file
1
2016/d05/ex2/input
Normal file
|
|
@ -0,0 +1 @@
|
|||
wtnhxymk
|
||||
24
2016/d06/ex1/ex1.py
Executable file
24
2016/d06/ex1/ex1.py
Executable file
|
|
@ -0,0 +1,24 @@
|
|||
#!/usr/bin/env python
|
||||
|
||||
import collections
|
||||
import sys
|
||||
|
||||
|
||||
def solve(input: str) -> str:
|
||||
def error_correct(messages: list[str]) -> str:
|
||||
res: list[str] = []
|
||||
for i in range(len(messages[0])):
|
||||
res.append(collections.Counter(l[i] for l in messages).most_common()[0][0])
|
||||
return "".join(res)
|
||||
|
||||
messages = input.splitlines()
|
||||
return error_correct(messages)
|
||||
|
||||
|
||||
def main() -> None:
|
||||
input = sys.stdin.read()
|
||||
print(solve(input))
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
572
2016/d06/ex1/input
Normal file
572
2016/d06/ex1/input
Normal file
|
|
@ -0,0 +1,572 @@
|
|||
cqvkxhip
|
||||
tgswqbjh
|
||||
ymbqjoau
|
||||
yakqfnvb
|
||||
klwpoxak
|
||||
ebftersc
|
||||
muhqajoy
|
||||
sttjluap
|
||||
nbfrccxf
|
||||
pjtxsrdt
|
||||
pcehiulx
|
||||
imtchqqu
|
||||
shtdcptu
|
||||
gziwdtvt
|
||||
gkisoote
|
||||
dmodaoyb
|
||||
mqykfphl
|
||||
rchfhsxr
|
||||
expmfmmi
|
||||
eyyjzupd
|
||||
ysoqeeib
|
||||
phedgslu
|
||||
xmwituwf
|
||||
cibvkswh
|
||||
dusqdmkm
|
||||
oajlhpcj
|
||||
nqbvrtsv
|
||||
eytohbvb
|
||||
byjvrycg
|
||||
oorhjlll
|
||||
bflfjdaz
|
||||
wtydcsem
|
||||
xinelpsx
|
||||
bkrenkkc
|
||||
kuhljsqo
|
||||
fhkrtpkg
|
||||
qkiohori
|
||||
rzebhkwv
|
||||
prpldmyf
|
||||
dstdrxbo
|
||||
jgtenhmc
|
||||
vpibddhk
|
||||
nkytfkno
|
||||
hldsxaoq
|
||||
qgwusrkd
|
||||
xlsuudux
|
||||
buxfxaiy
|
||||
uljrvuen
|
||||
awoyppai
|
||||
igplagub
|
||||
kqfiefgc
|
||||
cqjukquf
|
||||
djxuuizu
|
||||
zvuetjli
|
||||
uwcrclvy
|
||||
gtdlktiv
|
||||
cvwbsaxj
|
||||
zpwzzepj
|
||||
vmdmkgqz
|
||||
qfsxdnrf
|
||||
mhqtikwv
|
||||
fduxoluy
|
||||
emhhanfc
|
||||
zglqrchc
|
||||
jvvjspsu
|
||||
rndsqnky
|
||||
itzjeqfr
|
||||
lnpslqsj
|
||||
yxohoogq
|
||||
oqmmzizo
|
||||
ginjbszz
|
||||
qhdnjnxs
|
||||
mjtbhrzl
|
||||
zorxielb
|
||||
xflyknux
|
||||
xrssqfpx
|
||||
tcvrpzxn
|
||||
sgnholch
|
||||
nlpbrofn
|
||||
qclukwkr
|
||||
foylzchc
|
||||
hieqxicp
|
||||
nqvwnhpt
|
||||
ssubumix
|
||||
vtbpattp
|
||||
ncgmzjmv
|
||||
wtzedksg
|
||||
mvlatfbj
|
||||
ithfpwgr
|
||||
dmqvfilt
|
||||
lbnovpit
|
||||
hqfzxflr
|
||||
pgeeancn
|
||||
rpdiwwle
|
||||
ehkipwnx
|
||||
pncgkqey
|
||||
chzakbif
|
||||
doooixwk
|
||||
xztjzzrs
|
||||
vhyqtnja
|
||||
cbzmragf
|
||||
rxqhsehw
|
||||
rxzuqnoy
|
||||
kvldlabx
|
||||
crsslumd
|
||||
cbxmypaq
|
||||
qzevgrco
|
||||
teiavilb
|
||||
yjuhsfkj
|
||||
asutrkwn
|
||||
csgkdxtw
|
||||
fbdppqjn
|
||||
ivaewkpq
|
||||
iznlnknb
|
||||
btxpvjxk
|
||||
rrpatocg
|
||||
yxgkxenm
|
||||
yrszvqpo
|
||||
olhjkcac
|
||||
dmaxpvog
|
||||
wzicsunc
|
||||
eoaozekn
|
||||
oqbcrcje
|
||||
jjpcwqae
|
||||
zlyibfto
|
||||
nkkarjbd
|
||||
rrsrbrlr
|
||||
gllxvuve
|
||||
pkanrgds
|
||||
bylfpxdm
|
||||
tzkvedot
|
||||
eidxawif
|
||||
nwvcofjz
|
||||
xkfverdu
|
||||
wgncgvvy
|
||||
epwrztow
|
||||
mybcqyza
|
||||
arxfmrfd
|
||||
utcbwrta
|
||||
iwdfihgp
|
||||
tkskahas
|
||||
vvkmupxb
|
||||
ffetjcgu
|
||||
nmaoaihp
|
||||
wilheaug
|
||||
pmshnqgg
|
||||
pzbjnbtw
|
||||
zlxbrzhz
|
||||
xwikirug
|
||||
rprmighu
|
||||
xaaaioxr
|
||||
mqxpjfgw
|
||||
ejhezvgh
|
||||
brjmtonm
|
||||
wskkweze
|
||||
kkaxuuib
|
||||
mdrbckzy
|
||||
idpwlzfg
|
||||
fqfdktuq
|
||||
jnurlaba
|
||||
bbgftoqt
|
||||
sgiuadsr
|
||||
pwzcfnir
|
||||
mytlszbv
|
||||
uxcwljqs
|
||||
lyrangoq
|
||||
lnmbpgej
|
||||
qjjugsps
|
||||
kptbbita
|
||||
sppvfzzw
|
||||
ghkleimh
|
||||
aupnupvy
|
||||
tzxtqzev
|
||||
dbcyghnu
|
||||
qaygxqjo
|
||||
vgscfmwb
|
||||
raoylhwp
|
||||
gewyhjjh
|
||||
bsozmyma
|
||||
skpkdxcx
|
||||
qcngjsxk
|
||||
xlznquqa
|
||||
tztogrtf
|
||||
bvnovdaf
|
||||
crlrvjsq
|
||||
afbpxgwl
|
||||
gwbeomez
|
||||
aezkolyv
|
||||
cooulafb
|
||||
dnrsyvda
|
||||
ljudufiz
|
||||
ctwxlryc
|
||||
djmebdhh
|
||||
ktoaoxmd
|
||||
afqaqbbj
|
||||
mobvjjyk
|
||||
yplopnti
|
||||
kwkqjzol
|
||||
fcvncctm
|
||||
pkbzlejz
|
||||
axxxbdqj
|
||||
gnjurhkl
|
||||
qakjwsvw
|
||||
vkoagapm
|
||||
tpeyuvqi
|
||||
omejmbtw
|
||||
yhitogvj
|
||||
ybpwtcvb
|
||||
xtnuyfyh
|
||||
isvpwgza
|
||||
ozdntafh
|
||||
hysgmgvh
|
||||
zbgkvytj
|
||||
fntphlnd
|
||||
xjyujmbw
|
||||
uvnhgphl
|
||||
decpnkwq
|
||||
kmkepzcp
|
||||
lwegdttv
|
||||
epkpsehc
|
||||
uouovxth
|
||||
agvppzan
|
||||
zxllwuvw
|
||||
ektemcjl
|
||||
zegwoyif
|
||||
hqhrdyzq
|
||||
qiyxumhk
|
||||
trbebaka
|
||||
etjxsihf
|
||||
yxjgfvnf
|
||||
joywcwmz
|
||||
teeqmoik
|
||||
qjknvrmq
|
||||
avpxxuni
|
||||
naemzbma
|
||||
jpbxexkk
|
||||
ifevcqzn
|
||||
tcnibepd
|
||||
yzppffml
|
||||
xhqgnbqc
|
||||
lvvopbzw
|
||||
pnzmeuon
|
||||
ovzzvvsh
|
||||
mcqmuqjp
|
||||
oadvyhfk
|
||||
tkgnxpyy
|
||||
mvbisygc
|
||||
occsftic
|
||||
fawfwbvy
|
||||
hqmqpuam
|
||||
ptjxkjtk
|
||||
hzxuosye
|
||||
zingpdhg
|
||||
jiombirp
|
||||
vjtvrses
|
||||
fdlzglxq
|
||||
ggooqynz
|
||||
fmwotljx
|
||||
mnzzmfro
|
||||
vtvjvcqu
|
||||
kmpiufet
|
||||
hwsvlelq
|
||||
wdenjddo
|
||||
gfqtffby
|
||||
cxneiwee
|
||||
wtribxye
|
||||
gvuszzzu
|
||||
pugjyrqp
|
||||
yewglqml
|
||||
beqgcrqn
|
||||
azmucset
|
||||
kicbbxtu
|
||||
bmihylgt
|
||||
edjrinqf
|
||||
vvdretyn
|
||||
zkakzfkp
|
||||
qbraqzwo
|
||||
ujpgjzdc
|
||||
hdobaxgr
|
||||
atghhhaw
|
||||
ouucgcws
|
||||
iodycvik
|
||||
ljjdonpe
|
||||
nnekdlaz
|
||||
lbrzjrkn
|
||||
jjwewnji
|
||||
tfdkekdf
|
||||
eidbjaiz
|
||||
hssryuot
|
||||
oajvmyuj
|
||||
fziqlofo
|
||||
uisyryfh
|
||||
ssucyqxa
|
||||
wyvmbyuq
|
||||
fomhuool
|
||||
scyogldx
|
||||
uznjymzz
|
||||
tnmfndhu
|
||||
wmaiqhjd
|
||||
jrtvsvys
|
||||
zpgdzcdw
|
||||
rpzjgslv
|
||||
uulfdwba
|
||||
gfctmdso
|
||||
jcqqmnxe
|
||||
hbzxgupz
|
||||
zbhofhjo
|
||||
szmkzygs
|
||||
ydsnzkwe
|
||||
djbctccs
|
||||
utqjhlzr
|
||||
dslwhsra
|
||||
ujxkxald
|
||||
panonqfl
|
||||
brhfqycu
|
||||
adewetuw
|
||||
rzsxqpyd
|
||||
ypfaxikk
|
||||
vgoncwxp
|
||||
kqcrmyil
|
||||
vwsswwlt
|
||||
bjxktjpi
|
||||
lyzyaehh
|
||||
noccjwkt
|
||||
volhauxw
|
||||
zeeaczxk
|
||||
cgiyzqtg
|
||||
wrflucju
|
||||
mupwfuwq
|
||||
tlgvwoqm
|
||||
laybkcqh
|
||||
mawgcbyq
|
||||
ofuaudem
|
||||
gtkhbeuu
|
||||
svrzwaxw
|
||||
ohqiojux
|
||||
mnmttbve
|
||||
jlluhifp
|
||||
zuhdfnaq
|
||||
hsedbspi
|
||||
rkqoshpx
|
||||
qzvdlvuc
|
||||
rwbglsly
|
||||
djpwgibn
|
||||
edzgvmws
|
||||
teacriww
|
||||
gcvzijna
|
||||
llokdnqu
|
||||
dkywadmh
|
||||
madxishe
|
||||
feharxjj
|
||||
sqzpbcgu
|
||||
ohmflgzd
|
||||
qrrsyggg
|
||||
sxxrafvs
|
||||
xnaterpk
|
||||
tdiytzmh
|
||||
wecsvxnm
|
||||
uiksxtzm
|
||||
ypqpajdd
|
||||
fyaoughg
|
||||
epvdtbni
|
||||
pyynubyw
|
||||
dpjdgbaf
|
||||
vlomtyym
|
||||
zpitxkwr
|
||||
tzclhsoz
|
||||
wduicuqg
|
||||
sltpfxwo
|
||||
iyrmivtk
|
||||
hdmfndbx
|
||||
znqwrzrs
|
||||
fxktgznx
|
||||
indnyerl
|
||||
airalvum
|
||||
jfsfyysy
|
||||
svztyezl
|
||||
qsjpktkb
|
||||
xfujksji
|
||||
jkymepzm
|
||||
lrtlztdg
|
||||
nluspned
|
||||
huwocmgk
|
||||
nygyugbk
|
||||
ryzsjezz
|
||||
uxwwczou
|
||||
awrcdzad
|
||||
tobynxxz
|
||||
swicrqsv
|
||||
jqywnfns
|
||||
kdzvcwmh
|
||||
gogmydcr
|
||||
dkcuvthh
|
||||
hkmraojf
|
||||
kcgbpskp
|
||||
qgknjgtt
|
||||
oywbqczg
|
||||
oiqpwmcv
|
||||
fxjrhvce
|
||||
laaizayr
|
||||
xfcldeuu
|
||||
govaqtom
|
||||
dbcymhvq
|
||||
yjzeuyxc
|
||||
sejtfvqn
|
||||
pbvavgov
|
||||
tpitipok
|
||||
lnfxhraz
|
||||
whbqsgli
|
||||
beuhoifp
|
||||
pojyvmuz
|
||||
yynnekkn
|
||||
nxggwods
|
||||
nkhpvkct
|
||||
rcxwiluq
|
||||
gnhsygno
|
||||
nwwgewiu
|
||||
kcbqnvcb
|
||||
jiisqtqt
|
||||
dochmmei
|
||||
cwmwfrwl
|
||||
hcautqpg
|
||||
oihxktet
|
||||
yrcekmmv
|
||||
lxoyyqxp
|
||||
vlbvilra
|
||||
uqnsdjdf
|
||||
jadyopgr
|
||||
iwunbaps
|
||||
wrplbwpj
|
||||
shfuglla
|
||||
knhgmlsg
|
||||
riknnrmg
|
||||
hoxzmvsr
|
||||
qvqdqxrv
|
||||
lyyvpffj
|
||||
ghhflirv
|
||||
khmzdart
|
||||
qixervoz
|
||||
fdgemrrn
|
||||
uvnbxxpz
|
||||
lqvanhjt
|
||||
umorijwr
|
||||
sgogttye
|
||||
jlfgdzoc
|
||||
barxtobf
|
||||
czrzjduo
|
||||
vlgkvnek
|
||||
prknsjfr
|
||||
uleiwboe
|
||||
mxaswrft
|
||||
ihqcepmh
|
||||
awfqxael
|
||||
hqvzrkbw
|
||||
zwvciodj
|
||||
czyrbdhq
|
||||
ixhfswys
|
||||
ndauoxcn
|
||||
lhhwxiry
|
||||
adpagord
|
||||
suuxfdnq
|
||||
nynlzhfj
|
||||
ffmwgpyj
|
||||
idbgnwev
|
||||
wuculiup
|
||||
cymyvkgm
|
||||
fifqbhvs
|
||||
ijxfzmrq
|
||||
hugjbhin
|
||||
aeffbcfp
|
||||
ywxtejmz
|
||||
qpprytsg
|
||||
kcmlmbeo
|
||||
ruomfeex
|
||||
vvtpcfnk
|
||||
zcihodib
|
||||
nnfoffoi
|
||||
rmldwivo
|
||||
ejrzqyln
|
||||
ifnjdpab
|
||||
abiidqmo
|
||||
aglmsjkr
|
||||
xwqghpda
|
||||
gufhhjer
|
||||
ubjzhfgj
|
||||
glhagkrm
|
||||
wiwhahqd
|
||||
lbyhcebg
|
||||
ahhhxupc
|
||||
dulzuzyi
|
||||
xxdqhiod
|
||||
ydkrksxo
|
||||
pgdazjfi
|
||||
ebrjoyrr
|
||||
maejpwkm
|
||||
xekimgsi
|
||||
jvntcosc
|
||||
wrfiyvmb
|
||||
hfgzughl
|
||||
wgbwylwl
|
||||
tpjgkkye
|
||||
wsspddss
|
||||
ctoyeuvv
|
||||
skjcqabz
|
||||
wfutxuew
|
||||
oqymawht
|
||||
xeqmpvcm
|
||||
hrmflsjx
|
||||
rstnycbh
|
||||
aavqqxcc
|
||||
ouawtykt
|
||||
kmxcjxxe
|
||||
heudiqlo
|
||||
srmiwwrw
|
||||
ufavnfdy
|
||||
xfokmkax
|
||||
vnzztetb
|
||||
goevrbmb
|
||||
wfkthpfj
|
||||
ddesetaa
|
||||
vygkqvdn
|
||||
qsyemmqr
|
||||
iqlyiqtx
|
||||
esvuchui
|
||||
pfslklic
|
||||
genqjcpi
|
||||
bumqsxkx
|
||||
msvbjoip
|
||||
lghjsxdw
|
||||
elukpmbf
|
||||
qmipavgm
|
||||
iafoaecd
|
||||
usidajnf
|
||||
vxsymknf
|
||||
oyfjsysv
|
||||
mpwtxlvv
|
||||
kogsobli
|
||||
jmgwktdj
|
||||
rgztrmby
|
||||
dnrcfisj
|
||||
ottnehjl
|
||||
zsqbinds
|
||||
zmufvgrd
|
||||
fcalplxx
|
||||
jcwqwnvm
|
||||
myjowlcd
|
||||
nodixwaa
|
||||
phfnpbve
|
||||
kexcgape
|
||||
ldmlswbk
|
||||
naxeikbg
|
||||
cgmlnbsb
|
||||
vuwbdcnb
|
||||
bwxbhmgy
|
||||
ziadnccv
|
||||
bacypeeq
|
||||
tbluknup
|
||||
btanytry
|
||||
bqddnwwl
|
||||
urieqmyv
|
||||
csrdslqa
|
||||
fsfiyiai
|
||||
ceasodly
|
||||
jetpbhos
|
||||
xcqzgosd
|
||||
ydqiuyzh
|
||||
vxpzumjp
|
||||
ruwlxvle
|
||||
exrrmafx
|
||||
kbfikzdl
|
||||
bhvvzgfn
|
||||
ivckwbga
|
||||
24
2016/d06/ex2/ex2.py
Executable file
24
2016/d06/ex2/ex2.py
Executable file
|
|
@ -0,0 +1,24 @@
|
|||
#!/usr/bin/env python
|
||||
|
||||
import collections
|
||||
import sys
|
||||
|
||||
|
||||
def solve(input: str) -> str:
|
||||
def error_correct(messages: list[str]) -> str:
|
||||
res: list[str] = []
|
||||
for i in range(len(messages[0])):
|
||||
res.append(collections.Counter(l[i] for l in messages).most_common()[-1][0])
|
||||
return "".join(res)
|
||||
|
||||
messages = input.splitlines()
|
||||
return error_correct(messages)
|
||||
|
||||
|
||||
def main() -> None:
|
||||
input = sys.stdin.read()
|
||||
print(solve(input))
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
572
2016/d06/ex2/input
Normal file
572
2016/d06/ex2/input
Normal file
|
|
@ -0,0 +1,572 @@
|
|||
cqvkxhip
|
||||
tgswqbjh
|
||||
ymbqjoau
|
||||
yakqfnvb
|
||||
klwpoxak
|
||||
ebftersc
|
||||
muhqajoy
|
||||
sttjluap
|
||||
nbfrccxf
|
||||
pjtxsrdt
|
||||
pcehiulx
|
||||
imtchqqu
|
||||
shtdcptu
|
||||
gziwdtvt
|
||||
gkisoote
|
||||
dmodaoyb
|
||||
mqykfphl
|
||||
rchfhsxr
|
||||
expmfmmi
|
||||
eyyjzupd
|
||||
ysoqeeib
|
||||
phedgslu
|
||||
xmwituwf
|
||||
cibvkswh
|
||||
dusqdmkm
|
||||
oajlhpcj
|
||||
nqbvrtsv
|
||||
eytohbvb
|
||||
byjvrycg
|
||||
oorhjlll
|
||||
bflfjdaz
|
||||
wtydcsem
|
||||
xinelpsx
|
||||
bkrenkkc
|
||||
kuhljsqo
|
||||
fhkrtpkg
|
||||
qkiohori
|
||||
rzebhkwv
|
||||
prpldmyf
|
||||
dstdrxbo
|
||||
jgtenhmc
|
||||
vpibddhk
|
||||
nkytfkno
|
||||
hldsxaoq
|
||||
qgwusrkd
|
||||
xlsuudux
|
||||
buxfxaiy
|
||||
uljrvuen
|
||||
awoyppai
|
||||
igplagub
|
||||
kqfiefgc
|
||||
cqjukquf
|
||||
djxuuizu
|
||||
zvuetjli
|
||||
uwcrclvy
|
||||
gtdlktiv
|
||||
cvwbsaxj
|
||||
zpwzzepj
|
||||
vmdmkgqz
|
||||
qfsxdnrf
|
||||
mhqtikwv
|
||||
fduxoluy
|
||||
emhhanfc
|
||||
zglqrchc
|
||||
jvvjspsu
|
||||
rndsqnky
|
||||
itzjeqfr
|
||||
lnpslqsj
|
||||
yxohoogq
|
||||
oqmmzizo
|
||||
ginjbszz
|
||||
qhdnjnxs
|
||||
mjtbhrzl
|
||||
zorxielb
|
||||
xflyknux
|
||||
xrssqfpx
|
||||
tcvrpzxn
|
||||
sgnholch
|
||||
nlpbrofn
|
||||
qclukwkr
|
||||
foylzchc
|
||||
hieqxicp
|
||||
nqvwnhpt
|
||||
ssubumix
|
||||
vtbpattp
|
||||
ncgmzjmv
|
||||
wtzedksg
|
||||
mvlatfbj
|
||||
ithfpwgr
|
||||
dmqvfilt
|
||||
lbnovpit
|
||||
hqfzxflr
|
||||
pgeeancn
|
||||
rpdiwwle
|
||||
ehkipwnx
|
||||
pncgkqey
|
||||
chzakbif
|
||||
doooixwk
|
||||
xztjzzrs
|
||||
vhyqtnja
|
||||
cbzmragf
|
||||
rxqhsehw
|
||||
rxzuqnoy
|
||||
kvldlabx
|
||||
crsslumd
|
||||
cbxmypaq
|
||||
qzevgrco
|
||||
teiavilb
|
||||
yjuhsfkj
|
||||
asutrkwn
|
||||
csgkdxtw
|
||||
fbdppqjn
|
||||
ivaewkpq
|
||||
iznlnknb
|
||||
btxpvjxk
|
||||
rrpatocg
|
||||
yxgkxenm
|
||||
yrszvqpo
|
||||
olhjkcac
|
||||
dmaxpvog
|
||||
wzicsunc
|
||||
eoaozekn
|
||||
oqbcrcje
|
||||
jjpcwqae
|
||||
zlyibfto
|
||||
nkkarjbd
|
||||
rrsrbrlr
|
||||
gllxvuve
|
||||
pkanrgds
|
||||
bylfpxdm
|
||||
tzkvedot
|
||||
eidxawif
|
||||
nwvcofjz
|
||||
xkfverdu
|
||||
wgncgvvy
|
||||
epwrztow
|
||||
mybcqyza
|
||||
arxfmrfd
|
||||
utcbwrta
|
||||
iwdfihgp
|
||||
tkskahas
|
||||
vvkmupxb
|
||||
ffetjcgu
|
||||
nmaoaihp
|
||||
wilheaug
|
||||
pmshnqgg
|
||||
pzbjnbtw
|
||||
zlxbrzhz
|
||||
xwikirug
|
||||
rprmighu
|
||||
xaaaioxr
|
||||
mqxpjfgw
|
||||
ejhezvgh
|
||||
brjmtonm
|
||||
wskkweze
|
||||
kkaxuuib
|
||||
mdrbckzy
|
||||
idpwlzfg
|
||||
fqfdktuq
|
||||
jnurlaba
|
||||
bbgftoqt
|
||||
sgiuadsr
|
||||
pwzcfnir
|
||||
mytlszbv
|
||||
uxcwljqs
|
||||
lyrangoq
|
||||
lnmbpgej
|
||||
qjjugsps
|
||||
kptbbita
|
||||
sppvfzzw
|
||||
ghkleimh
|
||||
aupnupvy
|
||||
tzxtqzev
|
||||
dbcyghnu
|
||||
qaygxqjo
|
||||
vgscfmwb
|
||||
raoylhwp
|
||||
gewyhjjh
|
||||
bsozmyma
|
||||
skpkdxcx
|
||||
qcngjsxk
|
||||
xlznquqa
|
||||
tztogrtf
|
||||
bvnovdaf
|
||||
crlrvjsq
|
||||
afbpxgwl
|
||||
gwbeomez
|
||||
aezkolyv
|
||||
cooulafb
|
||||
dnrsyvda
|
||||
ljudufiz
|
||||
ctwxlryc
|
||||
djmebdhh
|
||||
ktoaoxmd
|
||||
afqaqbbj
|
||||
mobvjjyk
|
||||
yplopnti
|
||||
kwkqjzol
|
||||
fcvncctm
|
||||
pkbzlejz
|
||||
axxxbdqj
|
||||
gnjurhkl
|
||||
qakjwsvw
|
||||
vkoagapm
|
||||
tpeyuvqi
|
||||
omejmbtw
|
||||
yhitogvj
|
||||
ybpwtcvb
|
||||
xtnuyfyh
|
||||
isvpwgza
|
||||
ozdntafh
|
||||
hysgmgvh
|
||||
zbgkvytj
|
||||
fntphlnd
|
||||
xjyujmbw
|
||||
uvnhgphl
|
||||
decpnkwq
|
||||
kmkepzcp
|
||||
lwegdttv
|
||||
epkpsehc
|
||||
uouovxth
|
||||
agvppzan
|
||||
zxllwuvw
|
||||
ektemcjl
|
||||
zegwoyif
|
||||
hqhrdyzq
|
||||
qiyxumhk
|
||||
trbebaka
|
||||
etjxsihf
|
||||
yxjgfvnf
|
||||
joywcwmz
|
||||
teeqmoik
|
||||
qjknvrmq
|
||||
avpxxuni
|
||||
naemzbma
|
||||
jpbxexkk
|
||||
ifevcqzn
|
||||
tcnibepd
|
||||
yzppffml
|
||||
xhqgnbqc
|
||||
lvvopbzw
|
||||
pnzmeuon
|
||||
ovzzvvsh
|
||||
mcqmuqjp
|
||||
oadvyhfk
|
||||
tkgnxpyy
|
||||
mvbisygc
|
||||
occsftic
|
||||
fawfwbvy
|
||||
hqmqpuam
|
||||
ptjxkjtk
|
||||
hzxuosye
|
||||
zingpdhg
|
||||
jiombirp
|
||||
vjtvrses
|
||||
fdlzglxq
|
||||
ggooqynz
|
||||
fmwotljx
|
||||
mnzzmfro
|
||||
vtvjvcqu
|
||||
kmpiufet
|
||||
hwsvlelq
|
||||
wdenjddo
|
||||
gfqtffby
|
||||
cxneiwee
|
||||
wtribxye
|
||||
gvuszzzu
|
||||
pugjyrqp
|
||||
yewglqml
|
||||
beqgcrqn
|
||||
azmucset
|
||||
kicbbxtu
|
||||
bmihylgt
|
||||
edjrinqf
|
||||
vvdretyn
|
||||
zkakzfkp
|
||||
qbraqzwo
|
||||
ujpgjzdc
|
||||
hdobaxgr
|
||||
atghhhaw
|
||||
ouucgcws
|
||||
iodycvik
|
||||
ljjdonpe
|
||||
nnekdlaz
|
||||
lbrzjrkn
|
||||
jjwewnji
|
||||
tfdkekdf
|
||||
eidbjaiz
|
||||
hssryuot
|
||||
oajvmyuj
|
||||
fziqlofo
|
||||
uisyryfh
|
||||
ssucyqxa
|
||||
wyvmbyuq
|
||||
fomhuool
|
||||
scyogldx
|
||||
uznjymzz
|
||||
tnmfndhu
|
||||
wmaiqhjd
|
||||
jrtvsvys
|
||||
zpgdzcdw
|
||||
rpzjgslv
|
||||
uulfdwba
|
||||
gfctmdso
|
||||
jcqqmnxe
|
||||
hbzxgupz
|
||||
zbhofhjo
|
||||
szmkzygs
|
||||
ydsnzkwe
|
||||
djbctccs
|
||||
utqjhlzr
|
||||
dslwhsra
|
||||
ujxkxald
|
||||
panonqfl
|
||||
brhfqycu
|
||||
adewetuw
|
||||
rzsxqpyd
|
||||
ypfaxikk
|
||||
vgoncwxp
|
||||
kqcrmyil
|
||||
vwsswwlt
|
||||
bjxktjpi
|
||||
lyzyaehh
|
||||
noccjwkt
|
||||
volhauxw
|
||||
zeeaczxk
|
||||
cgiyzqtg
|
||||
wrflucju
|
||||
mupwfuwq
|
||||
tlgvwoqm
|
||||
laybkcqh
|
||||
mawgcbyq
|
||||
ofuaudem
|
||||
gtkhbeuu
|
||||
svrzwaxw
|
||||
ohqiojux
|
||||
mnmttbve
|
||||
jlluhifp
|
||||
zuhdfnaq
|
||||
hsedbspi
|
||||
rkqoshpx
|
||||
qzvdlvuc
|
||||
rwbglsly
|
||||
djpwgibn
|
||||
edzgvmws
|
||||
teacriww
|
||||
gcvzijna
|
||||
llokdnqu
|
||||
dkywadmh
|
||||
madxishe
|
||||
feharxjj
|
||||
sqzpbcgu
|
||||
ohmflgzd
|
||||
qrrsyggg
|
||||
sxxrafvs
|
||||
xnaterpk
|
||||
tdiytzmh
|
||||
wecsvxnm
|
||||
uiksxtzm
|
||||
ypqpajdd
|
||||
fyaoughg
|
||||
epvdtbni
|
||||
pyynubyw
|
||||
dpjdgbaf
|
||||
vlomtyym
|
||||
zpitxkwr
|
||||
tzclhsoz
|
||||
wduicuqg
|
||||
sltpfxwo
|
||||
iyrmivtk
|
||||
hdmfndbx
|
||||
znqwrzrs
|
||||
fxktgznx
|
||||
indnyerl
|
||||
airalvum
|
||||
jfsfyysy
|
||||
svztyezl
|
||||
qsjpktkb
|
||||
xfujksji
|
||||
jkymepzm
|
||||
lrtlztdg
|
||||
nluspned
|
||||
huwocmgk
|
||||
nygyugbk
|
||||
ryzsjezz
|
||||
uxwwczou
|
||||
awrcdzad
|
||||
tobynxxz
|
||||
swicrqsv
|
||||
jqywnfns
|
||||
kdzvcwmh
|
||||
gogmydcr
|
||||
dkcuvthh
|
||||
hkmraojf
|
||||
kcgbpskp
|
||||
qgknjgtt
|
||||
oywbqczg
|
||||
oiqpwmcv
|
||||
fxjrhvce
|
||||
laaizayr
|
||||
xfcldeuu
|
||||
govaqtom
|
||||
dbcymhvq
|
||||
yjzeuyxc
|
||||
sejtfvqn
|
||||
pbvavgov
|
||||
tpitipok
|
||||
lnfxhraz
|
||||
whbqsgli
|
||||
beuhoifp
|
||||
pojyvmuz
|
||||
yynnekkn
|
||||
nxggwods
|
||||
nkhpvkct
|
||||
rcxwiluq
|
||||
gnhsygno
|
||||
nwwgewiu
|
||||
kcbqnvcb
|
||||
jiisqtqt
|
||||
dochmmei
|
||||
cwmwfrwl
|
||||
hcautqpg
|
||||
oihxktet
|
||||
yrcekmmv
|
||||
lxoyyqxp
|
||||
vlbvilra
|
||||
uqnsdjdf
|
||||
jadyopgr
|
||||
iwunbaps
|
||||
wrplbwpj
|
||||
shfuglla
|
||||
knhgmlsg
|
||||
riknnrmg
|
||||
hoxzmvsr
|
||||
qvqdqxrv
|
||||
lyyvpffj
|
||||
ghhflirv
|
||||
khmzdart
|
||||
qixervoz
|
||||
fdgemrrn
|
||||
uvnbxxpz
|
||||
lqvanhjt
|
||||
umorijwr
|
||||
sgogttye
|
||||
jlfgdzoc
|
||||
barxtobf
|
||||
czrzjduo
|
||||
vlgkvnek
|
||||
prknsjfr
|
||||
uleiwboe
|
||||
mxaswrft
|
||||
ihqcepmh
|
||||
awfqxael
|
||||
hqvzrkbw
|
||||
zwvciodj
|
||||
czyrbdhq
|
||||
ixhfswys
|
||||
ndauoxcn
|
||||
lhhwxiry
|
||||
adpagord
|
||||
suuxfdnq
|
||||
nynlzhfj
|
||||
ffmwgpyj
|
||||
idbgnwev
|
||||
wuculiup
|
||||
cymyvkgm
|
||||
fifqbhvs
|
||||
ijxfzmrq
|
||||
hugjbhin
|
||||
aeffbcfp
|
||||
ywxtejmz
|
||||
qpprytsg
|
||||
kcmlmbeo
|
||||
ruomfeex
|
||||
vvtpcfnk
|
||||
zcihodib
|
||||
nnfoffoi
|
||||
rmldwivo
|
||||
ejrzqyln
|
||||
ifnjdpab
|
||||
abiidqmo
|
||||
aglmsjkr
|
||||
xwqghpda
|
||||
gufhhjer
|
||||
ubjzhfgj
|
||||
glhagkrm
|
||||
wiwhahqd
|
||||
lbyhcebg
|
||||
ahhhxupc
|
||||
dulzuzyi
|
||||
xxdqhiod
|
||||
ydkrksxo
|
||||
pgdazjfi
|
||||
ebrjoyrr
|
||||
maejpwkm
|
||||
xekimgsi
|
||||
jvntcosc
|
||||
wrfiyvmb
|
||||
hfgzughl
|
||||
wgbwylwl
|
||||
tpjgkkye
|
||||
wsspddss
|
||||
ctoyeuvv
|
||||
skjcqabz
|
||||
wfutxuew
|
||||
oqymawht
|
||||
xeqmpvcm
|
||||
hrmflsjx
|
||||
rstnycbh
|
||||
aavqqxcc
|
||||
ouawtykt
|
||||
kmxcjxxe
|
||||
heudiqlo
|
||||
srmiwwrw
|
||||
ufavnfdy
|
||||
xfokmkax
|
||||
vnzztetb
|
||||
goevrbmb
|
||||
wfkthpfj
|
||||
ddesetaa
|
||||
vygkqvdn
|
||||
qsyemmqr
|
||||
iqlyiqtx
|
||||
esvuchui
|
||||
pfslklic
|
||||
genqjcpi
|
||||
bumqsxkx
|
||||
msvbjoip
|
||||
lghjsxdw
|
||||
elukpmbf
|
||||
qmipavgm
|
||||
iafoaecd
|
||||
usidajnf
|
||||
vxsymknf
|
||||
oyfjsysv
|
||||
mpwtxlvv
|
||||
kogsobli
|
||||
jmgwktdj
|
||||
rgztrmby
|
||||
dnrcfisj
|
||||
ottnehjl
|
||||
zsqbinds
|
||||
zmufvgrd
|
||||
fcalplxx
|
||||
jcwqwnvm
|
||||
myjowlcd
|
||||
nodixwaa
|
||||
phfnpbve
|
||||
kexcgape
|
||||
ldmlswbk
|
||||
naxeikbg
|
||||
cgmlnbsb
|
||||
vuwbdcnb
|
||||
bwxbhmgy
|
||||
ziadnccv
|
||||
bacypeeq
|
||||
tbluknup
|
||||
btanytry
|
||||
bqddnwwl
|
||||
urieqmyv
|
||||
csrdslqa
|
||||
fsfiyiai
|
||||
ceasodly
|
||||
jetpbhos
|
||||
xcqzgosd
|
||||
ydqiuyzh
|
||||
vxpzumjp
|
||||
ruwlxvle
|
||||
exrrmafx
|
||||
kbfikzdl
|
||||
bhvvzgfn
|
||||
ivckwbga
|
||||
47
2016/d07/ex1/ex1.py
Executable file
47
2016/d07/ex1/ex1.py
Executable file
|
|
@ -0,0 +1,47 @@
|
|||
#!/usr/bin/env python
|
||||
|
||||
import sys
|
||||
|
||||
|
||||
def solve(input: str) -> int:
|
||||
def has_abba(input: str) -> bool:
|
||||
for i in range(4, len(input) + 1):
|
||||
a, b, c, d = (input[i - j] for j in range(4, 0, -1))
|
||||
if a == b:
|
||||
continue
|
||||
if a != d:
|
||||
continue
|
||||
if b != c:
|
||||
continue
|
||||
return True
|
||||
return False
|
||||
|
||||
def supports_tls(address: str) -> bool:
|
||||
abba_found = False
|
||||
is_hypernet = False
|
||||
i = 0
|
||||
while i < len(address):
|
||||
if is_hypernet:
|
||||
j = address.find("]", i)
|
||||
else:
|
||||
j = address.find("[", i)
|
||||
if j == -1:
|
||||
j = len(address)
|
||||
if has_abba(address[i:j]):
|
||||
if is_hypernet:
|
||||
return False
|
||||
abba_found = True
|
||||
i = j
|
||||
is_hypernet = not is_hypernet
|
||||
return abba_found
|
||||
|
||||
return sum(map(supports_tls, input.splitlines()))
|
||||
|
||||
|
||||
def main() -> None:
|
||||
input = sys.stdin.read()
|
||||
print(solve(input))
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
2000
2016/d07/ex1/input
Normal file
2000
2016/d07/ex1/input
Normal file
File diff suppressed because it is too large
Load diff
52
2016/d07/ex2/ex2.py
Executable file
52
2016/d07/ex2/ex2.py
Executable file
|
|
@ -0,0 +1,52 @@
|
|||
#!/usr/bin/env python
|
||||
|
||||
import itertools
|
||||
import sys
|
||||
from collections.abc import Iterator
|
||||
|
||||
|
||||
def solve(input: str) -> int:
|
||||
def iter_aba(input: str) -> Iterator[tuple[str, str]]:
|
||||
for i in range(3, len(input) + 1):
|
||||
a, b, c = (input[i - j] for j in range(3, 0, -1))
|
||||
if a == b:
|
||||
continue
|
||||
if a != c:
|
||||
continue
|
||||
yield a, b
|
||||
|
||||
def split_address(address) -> tuple[list[str], list[str]]:
|
||||
nets: tuple[list[str], list[str]] = [], []
|
||||
i = 0
|
||||
is_hypernet = False
|
||||
while i < len(address):
|
||||
if is_hypernet:
|
||||
j = address.find("]", i)
|
||||
else:
|
||||
j = address.find("[", i)
|
||||
if j == -1:
|
||||
j = len(address)
|
||||
nets[is_hypernet].append(address[i:j])
|
||||
i = j
|
||||
is_hypernet = not is_hypernet
|
||||
return nets
|
||||
|
||||
def supports_ssl(address: str) -> bool:
|
||||
supernets, hypernets = split_address(address)
|
||||
aba_candidates = itertools.chain.from_iterable(map(iter_aba, supernets))
|
||||
for a, b in aba_candidates:
|
||||
bab = b + a + b
|
||||
if any(bab in net for net in hypernets):
|
||||
return True
|
||||
return False
|
||||
|
||||
return sum(map(supports_ssl, input.splitlines()))
|
||||
|
||||
|
||||
def main() -> None:
|
||||
input = sys.stdin.read()
|
||||
print(solve(input))
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
2000
2016/d07/ex2/input
Normal file
2000
2016/d07/ex2/input
Normal file
File diff suppressed because it is too large
Load diff
62
2016/d08/ex1/ex1.py
Executable file
62
2016/d08/ex1/ex1.py
Executable file
|
|
@ -0,0 +1,62 @@
|
|||
#!/usr/bin/env python
|
||||
|
||||
import enum
|
||||
import itertools
|
||||
import sys
|
||||
from typing import NamedTuple
|
||||
|
||||
|
||||
class Point(NamedTuple):
|
||||
x: int
|
||||
y: int
|
||||
|
||||
|
||||
class Op(enum.StrEnum):
|
||||
RECT = "rect"
|
||||
ROTATE_ROW = "row"
|
||||
ROTATE_COLUMN = "column"
|
||||
|
||||
|
||||
def solve(input: str) -> int:
|
||||
def parse_line(input: str) -> tuple[Op, int, int]:
|
||||
split_input = input.split()
|
||||
if split_input[0] == "rect":
|
||||
x, y = split_input[1].split("x")
|
||||
return Op.RECT, int(x), int(y)
|
||||
op = Op(split_input[1])
|
||||
line_col, _, shift = split_input[-3:]
|
||||
return op, int(line_col[2:]), int(shift)
|
||||
|
||||
def parse(input: str) -> list[tuple[Op, int, int]]:
|
||||
return [parse_line(line) for line in input.splitlines()]
|
||||
|
||||
def display_message(instructions: list[tuple[Op, int, int]]) -> set[Point]:
|
||||
MAX_X, MAX_Y = 50, 6
|
||||
screen: set[Point] = set()
|
||||
for op, a, b in instructions:
|
||||
match op:
|
||||
case Op.RECT:
|
||||
for x, y in itertools.product(range(a), range(b)):
|
||||
screen.add(Point(x, y))
|
||||
case Op.ROTATE_ROW:
|
||||
pixels = {p for p in screen if p.y == a}
|
||||
screen -= pixels
|
||||
screen.update(Point((x + b) % MAX_X, y) for x, y in pixels)
|
||||
case Op.ROTATE_COLUMN:
|
||||
pixels = {p for p in screen if p.x == a}
|
||||
screen -= pixels
|
||||
screen.update(Point(x, (y + b) % MAX_Y) for x, y in pixels)
|
||||
return screen
|
||||
|
||||
instructions = parse(input)
|
||||
pixels = display_message(instructions)
|
||||
return len(pixels)
|
||||
|
||||
|
||||
def main() -> None:
|
||||
input = sys.stdin.read()
|
||||
print(solve(input))
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
193
2016/d08/ex1/input
Normal file
193
2016/d08/ex1/input
Normal file
|
|
@ -0,0 +1,193 @@
|
|||
rect 1x1
|
||||
rotate row y=0 by 5
|
||||
rect 1x1
|
||||
rotate row y=0 by 5
|
||||
rect 1x1
|
||||
rotate row y=0 by 5
|
||||
rect 1x1
|
||||
rotate row y=0 by 5
|
||||
rect 1x1
|
||||
rotate row y=0 by 2
|
||||
rect 1x1
|
||||
rotate row y=0 by 2
|
||||
rect 1x1
|
||||
rotate row y=0 by 3
|
||||
rect 1x1
|
||||
rotate row y=0 by 3
|
||||
rect 2x1
|
||||
rotate row y=0 by 2
|
||||
rect 1x1
|
||||
rotate row y=0 by 3
|
||||
rect 2x1
|
||||
rotate row y=0 by 2
|
||||
rect 1x1
|
||||
rotate row y=0 by 3
|
||||
rect 2x1
|
||||
rotate row y=0 by 5
|
||||
rect 4x1
|
||||
rotate row y=0 by 5
|
||||
rotate column x=0 by 1
|
||||
rect 4x1
|
||||
rotate row y=0 by 10
|
||||
rotate column x=5 by 2
|
||||
rotate column x=0 by 1
|
||||
rect 9x1
|
||||
rotate row y=2 by 5
|
||||
rotate row y=0 by 5
|
||||
rotate column x=0 by 1
|
||||
rect 4x1
|
||||
rotate row y=2 by 5
|
||||
rotate row y=0 by 5
|
||||
rotate column x=0 by 1
|
||||
rect 4x1
|
||||
rotate column x=40 by 1
|
||||
rotate column x=27 by 1
|
||||
rotate column x=22 by 1
|
||||
rotate column x=17 by 1
|
||||
rotate column x=12 by 1
|
||||
rotate column x=7 by 1
|
||||
rotate column x=2 by 1
|
||||
rotate row y=2 by 5
|
||||
rotate row y=1 by 3
|
||||
rotate row y=0 by 5
|
||||
rect 1x3
|
||||
rotate row y=2 by 10
|
||||
rotate row y=1 by 7
|
||||
rotate row y=0 by 2
|
||||
rotate column x=3 by 2
|
||||
rotate column x=2 by 1
|
||||
rotate column x=0 by 1
|
||||
rect 4x1
|
||||
rotate row y=2 by 5
|
||||
rotate row y=1 by 3
|
||||
rotate row y=0 by 3
|
||||
rect 1x3
|
||||
rotate column x=45 by 1
|
||||
rotate row y=2 by 7
|
||||
rotate row y=1 by 10
|
||||
rotate row y=0 by 2
|
||||
rotate column x=3 by 1
|
||||
rotate column x=2 by 2
|
||||
rotate column x=0 by 1
|
||||
rect 4x1
|
||||
rotate row y=2 by 13
|
||||
rotate row y=0 by 5
|
||||
rotate column x=3 by 1
|
||||
rotate column x=0 by 1
|
||||
rect 4x1
|
||||
rotate row y=3 by 10
|
||||
rotate row y=2 by 10
|
||||
rotate row y=0 by 5
|
||||
rotate column x=3 by 1
|
||||
rotate column x=2 by 1
|
||||
rotate column x=0 by 1
|
||||
rect 4x1
|
||||
rotate row y=3 by 8
|
||||
rotate row y=0 by 5
|
||||
rotate column x=3 by 1
|
||||
rotate column x=2 by 1
|
||||
rotate column x=0 by 1
|
||||
rect 4x1
|
||||
rotate row y=3 by 17
|
||||
rotate row y=2 by 20
|
||||
rotate row y=0 by 15
|
||||
rotate column x=13 by 1
|
||||
rotate column x=12 by 3
|
||||
rotate column x=10 by 1
|
||||
rotate column x=8 by 1
|
||||
rotate column x=7 by 2
|
||||
rotate column x=6 by 1
|
||||
rotate column x=5 by 1
|
||||
rotate column x=3 by 1
|
||||
rotate column x=2 by 2
|
||||
rotate column x=0 by 1
|
||||
rect 14x1
|
||||
rotate row y=1 by 47
|
||||
rotate column x=9 by 1
|
||||
rotate column x=4 by 1
|
||||
rotate row y=3 by 3
|
||||
rotate row y=2 by 10
|
||||
rotate row y=1 by 8
|
||||
rotate row y=0 by 5
|
||||
rotate column x=2 by 2
|
||||
rotate column x=0 by 2
|
||||
rect 3x2
|
||||
rotate row y=3 by 12
|
||||
rotate row y=2 by 10
|
||||
rotate row y=0 by 10
|
||||
rotate column x=8 by 1
|
||||
rotate column x=7 by 3
|
||||
rotate column x=5 by 1
|
||||
rotate column x=3 by 1
|
||||
rotate column x=2 by 1
|
||||
rotate column x=1 by 1
|
||||
rotate column x=0 by 1
|
||||
rect 9x1
|
||||
rotate row y=0 by 20
|
||||
rotate column x=46 by 1
|
||||
rotate row y=4 by 17
|
||||
rotate row y=3 by 10
|
||||
rotate row y=2 by 10
|
||||
rotate row y=1 by 5
|
||||
rotate column x=8 by 1
|
||||
rotate column x=7 by 1
|
||||
rotate column x=6 by 1
|
||||
rotate column x=5 by 1
|
||||
rotate column x=3 by 1
|
||||
rotate column x=2 by 2
|
||||
rotate column x=1 by 1
|
||||
rotate column x=0 by 1
|
||||
rect 9x1
|
||||
rotate column x=32 by 4
|
||||
rotate row y=4 by 33
|
||||
rotate row y=3 by 5
|
||||
rotate row y=2 by 15
|
||||
rotate row y=0 by 15
|
||||
rotate column x=13 by 1
|
||||
rotate column x=12 by 3
|
||||
rotate column x=10 by 1
|
||||
rotate column x=8 by 1
|
||||
rotate column x=7 by 2
|
||||
rotate column x=6 by 1
|
||||
rotate column x=5 by 1
|
||||
rotate column x=3 by 1
|
||||
rotate column x=2 by 1
|
||||
rotate column x=1 by 1
|
||||
rotate column x=0 by 1
|
||||
rect 14x1
|
||||
rotate column x=39 by 3
|
||||
rotate column x=35 by 4
|
||||
rotate column x=20 by 4
|
||||
rotate column x=19 by 3
|
||||
rotate column x=10 by 4
|
||||
rotate column x=9 by 3
|
||||
rotate column x=8 by 3
|
||||
rotate column x=5 by 4
|
||||
rotate column x=4 by 3
|
||||
rotate row y=5 by 5
|
||||
rotate row y=4 by 5
|
||||
rotate row y=3 by 33
|
||||
rotate row y=1 by 30
|
||||
rotate column x=48 by 1
|
||||
rotate column x=47 by 5
|
||||
rotate column x=46 by 5
|
||||
rotate column x=45 by 1
|
||||
rotate column x=43 by 1
|
||||
rotate column x=38 by 3
|
||||
rotate column x=37 by 3
|
||||
rotate column x=36 by 5
|
||||
rotate column x=35 by 1
|
||||
rotate column x=33 by 1
|
||||
rotate column x=32 by 5
|
||||
rotate column x=31 by 5
|
||||
rotate column x=30 by 1
|
||||
rotate column x=23 by 4
|
||||
rotate column x=22 by 3
|
||||
rotate column x=21 by 3
|
||||
rotate column x=20 by 1
|
||||
rotate column x=12 by 2
|
||||
rotate column x=11 by 2
|
||||
rotate column x=3 by 5
|
||||
rotate column x=2 by 5
|
||||
rotate column x=1 by 3
|
||||
rotate column x=0 by 4
|
||||
70
2016/d08/ex2/ex2.py
Executable file
70
2016/d08/ex2/ex2.py
Executable file
|
|
@ -0,0 +1,70 @@
|
|||
#!/usr/bin/env python
|
||||
|
||||
import enum
|
||||
import itertools
|
||||
import sys
|
||||
from typing import NamedTuple
|
||||
|
||||
|
||||
class Point(NamedTuple):
|
||||
x: int
|
||||
y: int
|
||||
|
||||
|
||||
class Op(enum.StrEnum):
|
||||
RECT = "rect"
|
||||
ROTATE_ROW = "row"
|
||||
ROTATE_COLUMN = "column"
|
||||
|
||||
|
||||
MAX_X, MAX_Y = 50, 6
|
||||
|
||||
|
||||
def solve(input: str) -> str:
|
||||
def parse_line(input: str) -> tuple[Op, int, int]:
|
||||
split_input = input.split()
|
||||
if split_input[0] == "rect":
|
||||
x, y = split_input[1].split("x")
|
||||
return Op.RECT, int(x), int(y)
|
||||
op = Op(split_input[1])
|
||||
line_col, _, shift = split_input[-3:]
|
||||
return op, int(line_col[2:]), int(shift)
|
||||
|
||||
def parse(input: str) -> list[tuple[Op, int, int]]:
|
||||
return [parse_line(line) for line in input.splitlines()]
|
||||
|
||||
def display_message(instructions: list[tuple[Op, int, int]]) -> set[Point]:
|
||||
screen: set[Point] = set()
|
||||
for op, a, b in instructions:
|
||||
match op:
|
||||
case Op.RECT:
|
||||
for x, y in itertools.product(range(a), range(b)):
|
||||
screen.add(Point(x, y))
|
||||
case Op.ROTATE_ROW:
|
||||
pixels = {p for p in screen if p.y == a}
|
||||
screen -= pixels
|
||||
screen.update(Point((x + b) % MAX_X, y) for x, y in pixels)
|
||||
case Op.ROTATE_COLUMN:
|
||||
pixels = {p for p in screen if p.x == a}
|
||||
screen -= pixels
|
||||
screen.update(Point(x, (y + b) % MAX_Y) for x, y in pixels)
|
||||
return screen
|
||||
|
||||
def display(pixels: set[Point]) -> str:
|
||||
return "\n".join(
|
||||
"".join("#" if Point(x, y) in pixels else " " for x in range(MAX_X))
|
||||
for y in range(MAX_Y)
|
||||
)
|
||||
|
||||
instructions = parse(input)
|
||||
pixels = display_message(instructions)
|
||||
return display(pixels)
|
||||
|
||||
|
||||
def main() -> None:
|
||||
input = sys.stdin.read()
|
||||
print(solve(input))
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
193
2016/d08/ex2/input
Normal file
193
2016/d08/ex2/input
Normal file
|
|
@ -0,0 +1,193 @@
|
|||
rect 1x1
|
||||
rotate row y=0 by 5
|
||||
rect 1x1
|
||||
rotate row y=0 by 5
|
||||
rect 1x1
|
||||
rotate row y=0 by 5
|
||||
rect 1x1
|
||||
rotate row y=0 by 5
|
||||
rect 1x1
|
||||
rotate row y=0 by 2
|
||||
rect 1x1
|
||||
rotate row y=0 by 2
|
||||
rect 1x1
|
||||
rotate row y=0 by 3
|
||||
rect 1x1
|
||||
rotate row y=0 by 3
|
||||
rect 2x1
|
||||
rotate row y=0 by 2
|
||||
rect 1x1
|
||||
rotate row y=0 by 3
|
||||
rect 2x1
|
||||
rotate row y=0 by 2
|
||||
rect 1x1
|
||||
rotate row y=0 by 3
|
||||
rect 2x1
|
||||
rotate row y=0 by 5
|
||||
rect 4x1
|
||||
rotate row y=0 by 5
|
||||
rotate column x=0 by 1
|
||||
rect 4x1
|
||||
rotate row y=0 by 10
|
||||
rotate column x=5 by 2
|
||||
rotate column x=0 by 1
|
||||
rect 9x1
|
||||
rotate row y=2 by 5
|
||||
rotate row y=0 by 5
|
||||
rotate column x=0 by 1
|
||||
rect 4x1
|
||||
rotate row y=2 by 5
|
||||
rotate row y=0 by 5
|
||||
rotate column x=0 by 1
|
||||
rect 4x1
|
||||
rotate column x=40 by 1
|
||||
rotate column x=27 by 1
|
||||
rotate column x=22 by 1
|
||||
rotate column x=17 by 1
|
||||
rotate column x=12 by 1
|
||||
rotate column x=7 by 1
|
||||
rotate column x=2 by 1
|
||||
rotate row y=2 by 5
|
||||
rotate row y=1 by 3
|
||||
rotate row y=0 by 5
|
||||
rect 1x3
|
||||
rotate row y=2 by 10
|
||||
rotate row y=1 by 7
|
||||
rotate row y=0 by 2
|
||||
rotate column x=3 by 2
|
||||
rotate column x=2 by 1
|
||||
rotate column x=0 by 1
|
||||
rect 4x1
|
||||
rotate row y=2 by 5
|
||||
rotate row y=1 by 3
|
||||
rotate row y=0 by 3
|
||||
rect 1x3
|
||||
rotate column x=45 by 1
|
||||
rotate row y=2 by 7
|
||||
rotate row y=1 by 10
|
||||
rotate row y=0 by 2
|
||||
rotate column x=3 by 1
|
||||
rotate column x=2 by 2
|
||||
rotate column x=0 by 1
|
||||
rect 4x1
|
||||
rotate row y=2 by 13
|
||||
rotate row y=0 by 5
|
||||
rotate column x=3 by 1
|
||||
rotate column x=0 by 1
|
||||
rect 4x1
|
||||
rotate row y=3 by 10
|
||||
rotate row y=2 by 10
|
||||
rotate row y=0 by 5
|
||||
rotate column x=3 by 1
|
||||
rotate column x=2 by 1
|
||||
rotate column x=0 by 1
|
||||
rect 4x1
|
||||
rotate row y=3 by 8
|
||||
rotate row y=0 by 5
|
||||
rotate column x=3 by 1
|
||||
rotate column x=2 by 1
|
||||
rotate column x=0 by 1
|
||||
rect 4x1
|
||||
rotate row y=3 by 17
|
||||
rotate row y=2 by 20
|
||||
rotate row y=0 by 15
|
||||
rotate column x=13 by 1
|
||||
rotate column x=12 by 3
|
||||
rotate column x=10 by 1
|
||||
rotate column x=8 by 1
|
||||
rotate column x=7 by 2
|
||||
rotate column x=6 by 1
|
||||
rotate column x=5 by 1
|
||||
rotate column x=3 by 1
|
||||
rotate column x=2 by 2
|
||||
rotate column x=0 by 1
|
||||
rect 14x1
|
||||
rotate row y=1 by 47
|
||||
rotate column x=9 by 1
|
||||
rotate column x=4 by 1
|
||||
rotate row y=3 by 3
|
||||
rotate row y=2 by 10
|
||||
rotate row y=1 by 8
|
||||
rotate row y=0 by 5
|
||||
rotate column x=2 by 2
|
||||
rotate column x=0 by 2
|
||||
rect 3x2
|
||||
rotate row y=3 by 12
|
||||
rotate row y=2 by 10
|
||||
rotate row y=0 by 10
|
||||
rotate column x=8 by 1
|
||||
rotate column x=7 by 3
|
||||
rotate column x=5 by 1
|
||||
rotate column x=3 by 1
|
||||
rotate column x=2 by 1
|
||||
rotate column x=1 by 1
|
||||
rotate column x=0 by 1
|
||||
rect 9x1
|
||||
rotate row y=0 by 20
|
||||
rotate column x=46 by 1
|
||||
rotate row y=4 by 17
|
||||
rotate row y=3 by 10
|
||||
rotate row y=2 by 10
|
||||
rotate row y=1 by 5
|
||||
rotate column x=8 by 1
|
||||
rotate column x=7 by 1
|
||||
rotate column x=6 by 1
|
||||
rotate column x=5 by 1
|
||||
rotate column x=3 by 1
|
||||
rotate column x=2 by 2
|
||||
rotate column x=1 by 1
|
||||
rotate column x=0 by 1
|
||||
rect 9x1
|
||||
rotate column x=32 by 4
|
||||
rotate row y=4 by 33
|
||||
rotate row y=3 by 5
|
||||
rotate row y=2 by 15
|
||||
rotate row y=0 by 15
|
||||
rotate column x=13 by 1
|
||||
rotate column x=12 by 3
|
||||
rotate column x=10 by 1
|
||||
rotate column x=8 by 1
|
||||
rotate column x=7 by 2
|
||||
rotate column x=6 by 1
|
||||
rotate column x=5 by 1
|
||||
rotate column x=3 by 1
|
||||
rotate column x=2 by 1
|
||||
rotate column x=1 by 1
|
||||
rotate column x=0 by 1
|
||||
rect 14x1
|
||||
rotate column x=39 by 3
|
||||
rotate column x=35 by 4
|
||||
rotate column x=20 by 4
|
||||
rotate column x=19 by 3
|
||||
rotate column x=10 by 4
|
||||
rotate column x=9 by 3
|
||||
rotate column x=8 by 3
|
||||
rotate column x=5 by 4
|
||||
rotate column x=4 by 3
|
||||
rotate row y=5 by 5
|
||||
rotate row y=4 by 5
|
||||
rotate row y=3 by 33
|
||||
rotate row y=1 by 30
|
||||
rotate column x=48 by 1
|
||||
rotate column x=47 by 5
|
||||
rotate column x=46 by 5
|
||||
rotate column x=45 by 1
|
||||
rotate column x=43 by 1
|
||||
rotate column x=38 by 3
|
||||
rotate column x=37 by 3
|
||||
rotate column x=36 by 5
|
||||
rotate column x=35 by 1
|
||||
rotate column x=33 by 1
|
||||
rotate column x=32 by 5
|
||||
rotate column x=31 by 5
|
||||
rotate column x=30 by 1
|
||||
rotate column x=23 by 4
|
||||
rotate column x=22 by 3
|
||||
rotate column x=21 by 3
|
||||
rotate column x=20 by 1
|
||||
rotate column x=12 by 2
|
||||
rotate column x=11 by 2
|
||||
rotate column x=3 by 5
|
||||
rotate column x=2 by 5
|
||||
rotate column x=1 by 3
|
||||
rotate column x=0 by 4
|
||||
40
2016/d09/ex1/ex1.py
Executable file
40
2016/d09/ex1/ex1.py
Executable file
|
|
@ -0,0 +1,40 @@
|
|||
#!/usr/bin/env python
|
||||
|
||||
import sys
|
||||
from collections.abc import Iterator
|
||||
|
||||
|
||||
def solve(input: str) -> int:
|
||||
def decompress(input: str) -> str:
|
||||
def helper() -> Iterator[str]:
|
||||
i = 0
|
||||
is_marker = False
|
||||
while i < len(input):
|
||||
if is_marker:
|
||||
j = input.find(")", i)
|
||||
else:
|
||||
j = input.find("(", i)
|
||||
if j == -1:
|
||||
j = len(input)
|
||||
if is_marker:
|
||||
length, repeat = map(int, input[i + 1 : j].split("x"))
|
||||
yield input[j + 1 : j + length + 1] * repeat
|
||||
i = j + length + 1
|
||||
else:
|
||||
yield input[i:j]
|
||||
i = j
|
||||
is_marker = not is_marker
|
||||
|
||||
return "".join(helper())
|
||||
|
||||
decompressed = decompress(input.strip())
|
||||
return sum(not c.isspace() for c in decompressed)
|
||||
|
||||
|
||||
def main() -> None:
|
||||
input = sys.stdin.read()
|
||||
print(solve(input))
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
1
2016/d09/ex1/input
Normal file
1
2016/d09/ex1/input
Normal file
File diff suppressed because one or more lines are too long
39
2016/d09/ex2/ex2.py
Executable file
39
2016/d09/ex2/ex2.py
Executable file
|
|
@ -0,0 +1,39 @@
|
|||
#!/usr/bin/env python
|
||||
|
||||
import sys
|
||||
from collections.abc import Iterator
|
||||
|
||||
|
||||
def solve(input: str) -> int:
|
||||
def decompress(input: str) -> int:
|
||||
def helper() -> Iterator[int]:
|
||||
i = 0
|
||||
is_marker = False
|
||||
while i < len(input):
|
||||
if is_marker:
|
||||
j = input.find(")", i)
|
||||
else:
|
||||
j = input.find("(", i)
|
||||
if j == -1:
|
||||
j = len(input)
|
||||
if is_marker:
|
||||
length, repeat = map(int, input[i + 1 : j].split("x"))
|
||||
yield decompress(input[j + 1 : j + length + 1]) * repeat
|
||||
i = j + length + 1
|
||||
else:
|
||||
yield j - i
|
||||
i = j
|
||||
is_marker = not is_marker
|
||||
|
||||
return sum(helper())
|
||||
|
||||
return decompress(input.strip())
|
||||
|
||||
|
||||
def main() -> None:
|
||||
input = sys.stdin.read()
|
||||
print(solve(input))
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
1
2016/d09/ex2/input
Normal file
1
2016/d09/ex2/input
Normal file
File diff suppressed because one or more lines are too long
110
2016/d10/ex1/ex1.py
Executable file
110
2016/d10/ex1/ex1.py
Executable file
|
|
@ -0,0 +1,110 @@
|
|||
#!/usr/bin/env python
|
||||
|
||||
import collections
|
||||
import dataclasses
|
||||
import sys
|
||||
|
||||
|
||||
@dataclasses.dataclass(frozen=True)
|
||||
class Input:
|
||||
n: int
|
||||
|
||||
|
||||
@dataclasses.dataclass(frozen=True)
|
||||
class Bot:
|
||||
n: int
|
||||
|
||||
|
||||
@dataclasses.dataclass(frozen=True)
|
||||
class Output:
|
||||
n: int
|
||||
|
||||
|
||||
# Each node points to its children, to each of whom it outputs a chip
|
||||
GraphKey = Input | Bot
|
||||
GraphVal = Bot | Output
|
||||
# By convention, a bot should list its outputs in [`low`, `high`] order
|
||||
Graph = dict[GraphKey, list[GraphVal]]
|
||||
# Reverse the graph representation for an easier topo_sort (only of the keys)
|
||||
ReverseGraph = dict[GraphKey, set[GraphKey]]
|
||||
|
||||
|
||||
def solve(input: str) -> int:
|
||||
def parse_line(input: str) -> tuple[GraphKey, list[GraphVal]]:
|
||||
split_input = input.split()
|
||||
if split_input[0] == "bot":
|
||||
low_n = int(split_input[6])
|
||||
low_type: type[GraphVal] = Bot if split_input[5] == "bot" else Output
|
||||
high_n = int(split_input[11])
|
||||
high_type: type[GraphVal] = Bot if split_input[10] == "bot" else Output
|
||||
return Bot(int(split_input[1])), [low_type(low_n), high_type(high_n)]
|
||||
return Input(int(split_input[1])), [Bot(int(split_input[-1]))]
|
||||
|
||||
def parse(input: str) -> Graph:
|
||||
return {key: val for key, val in map(parse_line, input.splitlines())}
|
||||
|
||||
def run(graph: Graph) -> int:
|
||||
def reverse_graph(graph: Graph) -> ReverseGraph:
|
||||
res: ReverseGraph = {n: set() for n in graph}
|
||||
for node, children in graph.items():
|
||||
for child in children:
|
||||
# We don't care about `Output`s here
|
||||
if isinstance(child, Output):
|
||||
continue
|
||||
res[child].add(node)
|
||||
return res
|
||||
|
||||
def topo_sort(graph: ReverseGraph) -> list[GraphKey]:
|
||||
res: list[GraphKey] = []
|
||||
|
||||
queue = {n for n, deps in graph.items() if not deps}
|
||||
assert all(isinstance(n, Input) for n in queue) # Sanity check
|
||||
seen: set[GraphKey] = set()
|
||||
|
||||
while queue:
|
||||
node = queue.pop()
|
||||
|
||||
res.append(node)
|
||||
seen.add(node)
|
||||
# Iterate over all nodes as we don't have information on children
|
||||
for child, deps in graph.items():
|
||||
if child in seen:
|
||||
continue
|
||||
if deps - seen:
|
||||
continue
|
||||
queue.add(child)
|
||||
|
||||
return res
|
||||
|
||||
reversed_graph = reverse_graph(graph)
|
||||
assert len(reversed_graph) == len(graph) # Sanity check
|
||||
run_order = topo_sort(reversed_graph)
|
||||
assert len(run_order) == len(graph) # Sanity check
|
||||
CHIPS_OF_INTEREST = {17, 61}
|
||||
bots_bins: dict[GraphVal, list[int]] = collections.defaultdict(list)
|
||||
for node in run_order:
|
||||
match node:
|
||||
case Input(n):
|
||||
assert len(graph[node]) == 1 # Sanity check
|
||||
bots_bins[graph[node][0]].append(n)
|
||||
case Bot(n):
|
||||
assert len(graph[node]) == 2 # Sanity check
|
||||
assert len(bots_bins[node]) == 2 # Sanity check
|
||||
# Have we found the bot we were looking for?
|
||||
if set(bots_bins[node]) == CHIPS_OF_INTEREST:
|
||||
return n
|
||||
for out, val in zip(graph[node], sorted(bots_bins[node])):
|
||||
bots_bins[out].append(val)
|
||||
assert False # Sanity check
|
||||
|
||||
graph = parse(input)
|
||||
return run(graph)
|
||||
|
||||
|
||||
def main() -> None:
|
||||
input = sys.stdin.read()
|
||||
print(solve(input))
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
231
2016/d10/ex1/input
Normal file
231
2016/d10/ex1/input
Normal file
|
|
@ -0,0 +1,231 @@
|
|||
bot 59 gives low to bot 176 and high to bot 120
|
||||
bot 92 gives low to bot 42 and high to bot 187
|
||||
value 31 goes to bot 114
|
||||
bot 182 gives low to bot 49 and high to bot 176
|
||||
bot 17 gives low to bot 181 and high to bot 162
|
||||
bot 36 gives low to bot 118 and high to bot 121
|
||||
bot 118 gives low to bot 164 and high to bot 55
|
||||
bot 172 gives low to bot 79 and high to bot 123
|
||||
bot 51 gives low to bot 60 and high to bot 31
|
||||
bot 48 gives low to bot 107 and high to bot 58
|
||||
bot 142 gives low to output 6 and high to bot 35
|
||||
bot 133 gives low to output 4 and high to bot 47
|
||||
bot 134 gives low to bot 122 and high to bot 66
|
||||
bot 106 gives low to bot 155 and high to bot 99
|
||||
bot 77 gives low to bot 93 and high to bot 84
|
||||
bot 9 gives low to bot 173 and high to bot 197
|
||||
bot 64 gives low to bot 123 and high to bot 48
|
||||
bot 177 gives low to bot 21 and high to bot 132
|
||||
bot 94 gives low to bot 6 and high to bot 25
|
||||
bot 126 gives low to bot 193 and high to bot 56
|
||||
bot 74 gives low to bot 187 and high to bot 125
|
||||
bot 80 gives low to bot 41 and high to bot 191
|
||||
bot 62 gives low to bot 157 and high to bot 138
|
||||
bot 66 gives low to bot 1 and high to bot 209
|
||||
bot 90 gives low to bot 104 and high to bot 34
|
||||
bot 68 gives low to bot 23 and high to bot 87
|
||||
bot 121 gives low to bot 55 and high to bot 126
|
||||
bot 122 gives low to bot 137 and high to bot 1
|
||||
bot 209 gives low to bot 168 and high to bot 26
|
||||
bot 141 gives low to bot 170 and high to bot 6
|
||||
bot 149 gives low to bot 62 and high to bot 13
|
||||
bot 120 gives low to bot 179 and high to bot 71
|
||||
bot 160 gives low to bot 194 and high to bot 151
|
||||
bot 86 gives low to bot 96 and high to bot 106
|
||||
value 13 goes to bot 9
|
||||
bot 180 gives low to bot 189 and high to bot 27
|
||||
value 67 goes to bot 88
|
||||
bot 169 gives low to bot 99 and high to bot 159
|
||||
bot 56 gives low to bot 98 and high to bot 147
|
||||
bot 197 gives low to bot 174 and high to bot 81
|
||||
bot 57 gives low to bot 113 and high to bot 179
|
||||
bot 39 gives low to bot 115 and high to bot 3
|
||||
bot 79 gives low to bot 22 and high to bot 40
|
||||
bot 161 gives low to output 14 and high to bot 185
|
||||
bot 21 gives low to bot 114 and high to bot 119
|
||||
bot 136 gives low to bot 28 and high to bot 158
|
||||
bot 105 gives low to bot 89 and high to bot 19
|
||||
bot 168 gives low to bot 126 and high to bot 26
|
||||
bot 193 gives low to bot 64 and high to bot 98
|
||||
bot 186 gives low to bot 86 and high to bot 178
|
||||
value 11 goes to bot 165
|
||||
bot 33 gives low to bot 116 and high to bot 150
|
||||
bot 32 gives low to bot 154 and high to bot 206
|
||||
bot 166 gives low to bot 33 and high to bot 139
|
||||
value 7 goes to bot 63
|
||||
bot 203 gives low to bot 172 and high to bot 64
|
||||
bot 200 gives low to bot 94 and high to bot 25
|
||||
value 43 goes to bot 76
|
||||
bot 145 gives low to bot 103 and high to bot 128
|
||||
bot 119 gives low to bot 186 and high to bot 97
|
||||
bot 12 gives low to bot 31 and high to bot 4
|
||||
bot 23 gives low to bot 198 and high to bot 171
|
||||
bot 34 gives low to bot 10 and high to bot 20
|
||||
bot 198 gives low to bot 43 and high to bot 17
|
||||
bot 50 gives low to output 1 and high to bot 127
|
||||
bot 155 gives low to bot 191 and high to bot 32
|
||||
bot 206 gives low to bot 12 and high to bot 43
|
||||
bot 96 gives low to bot 80 and high to bot 155
|
||||
bot 93 gives low to bot 44 and high to bot 70
|
||||
bot 24 gives low to bot 85 and high to bot 83
|
||||
bot 30 gives low to bot 159 and high to bot 68
|
||||
bot 55 gives low to bot 203 and high to bot 193
|
||||
bot 199 gives low to bot 68 and high to bot 135
|
||||
bot 170 gives low to bot 97 and high to bot 5
|
||||
bot 65 gives low to bot 152 and high to bot 194
|
||||
bot 43 gives low to bot 4 and high to bot 181
|
||||
bot 113 gives low to output 9 and high to bot 161
|
||||
bot 81 gives low to bot 141 and high to bot 94
|
||||
value 29 goes to bot 7
|
||||
bot 46 gives low to bot 175 and high to bot 195
|
||||
value 47 goes to bot 21
|
||||
value 23 goes to bot 42
|
||||
bot 13 gives low to bot 138 and high to bot 61
|
||||
bot 135 gives low to bot 87 and high to bot 111
|
||||
bot 194 gives low to bot 190 and high to bot 82
|
||||
value 73 goes to bot 109
|
||||
bot 154 gives low to bot 51 and high to bot 12
|
||||
bot 1 gives low to bot 18 and high to bot 209
|
||||
bot 98 gives low to bot 48 and high to bot 45
|
||||
bot 147 gives low to bot 45 and high to bot 95
|
||||
bot 47 gives low to output 19 and high to bot 152
|
||||
bot 26 gives low to bot 56 and high to bot 147
|
||||
bot 179 gives low to bot 161 and high to bot 71
|
||||
bot 148 gives low to bot 204 and high to bot 137
|
||||
bot 5 gives low to bot 67 and high to bot 85
|
||||
bot 174 gives low to bot 132 and high to bot 141
|
||||
bot 8 gives low to bot 13 and high to bot 75
|
||||
bot 82 gives low to bot 146 and high to bot 22
|
||||
bot 123 gives low to bot 40 and high to bot 107
|
||||
bot 99 gives low to bot 32 and high to bot 201
|
||||
bot 41 gives low to bot 196 and high to bot 192
|
||||
bot 139 gives low to bot 150 and high to bot 153
|
||||
bot 11 gives low to output 16 and high to bot 113
|
||||
bot 72 gives low to bot 65 and high to bot 160
|
||||
bot 195 gives low to bot 133 and high to bot 183
|
||||
bot 54 gives low to output 12 and high to output 10
|
||||
bot 158 gives low to bot 102 and high to bot 110
|
||||
bot 112 gives low to bot 19 and high to bot 118
|
||||
bot 31 gives low to bot 208 and high to bot 143
|
||||
bot 167 gives low to bot 7 and high to bot 96
|
||||
bot 63 gives low to bot 92 and high to bot 74
|
||||
bot 116 gives low to bot 20 and high to bot 131
|
||||
bot 184 gives low to bot 39 and high to bot 3
|
||||
bot 162 gives low to bot 205 and high to bot 39
|
||||
bot 108 gives low to output 11 and high to bot 175
|
||||
value 53 goes to bot 207
|
||||
bot 111 gives low to bot 202 and high to bot 184
|
||||
bot 25 gives low to bot 24 and high to bot 83
|
||||
value 71 goes to bot 77
|
||||
bot 69 gives low to bot 142 and high to bot 0
|
||||
bot 146 gives low to output 13 and high to bot 53
|
||||
bot 7 gives low to bot 76 and high to bot 80
|
||||
bot 131 gives low to bot 73 and high to bot 204
|
||||
bot 102 gives low to bot 195 and high to bot 117
|
||||
bot 76 gives low to bot 165 and high to bot 41
|
||||
bot 153 gives low to bot 148 and high to bot 122
|
||||
bot 208 gives low to bot 90 and high to bot 163
|
||||
bot 70 gives low to bot 144 and high to bot 78
|
||||
bot 125 gives low to bot 8 and high to bot 156
|
||||
bot 83 gives low to bot 199 and high to bot 135
|
||||
bot 75 gives low to bot 61 and high to bot 104
|
||||
bot 67 gives low to bot 169 and high to bot 30
|
||||
bot 14 gives low to bot 81 and high to bot 200
|
||||
bot 159 gives low to bot 201 and high to bot 23
|
||||
value 3 goes to bot 93
|
||||
bot 110 gives low to bot 117 and high to bot 89
|
||||
bot 128 gives low to bot 129 and high to bot 182
|
||||
bot 87 gives low to bot 171 and high to bot 111
|
||||
bot 45 gives low to bot 58 and high to bot 95
|
||||
bot 4 gives low to bot 143 and high to bot 166
|
||||
bot 60 gives low to bot 156 and high to bot 208
|
||||
bot 27 gives low to bot 108 and high to bot 46
|
||||
bot 42 gives low to bot 207 and high to bot 149
|
||||
bot 117 gives low to bot 183 and high to bot 72
|
||||
bot 115 gives low to bot 153 and high to bot 134
|
||||
bot 140 gives low to bot 125 and high to bot 60
|
||||
bot 173 gives low to bot 177 and high to bot 174
|
||||
bot 138 gives low to bot 180 and high to bot 52
|
||||
bot 100 gives low to bot 38 and high to bot 59
|
||||
value 41 goes to bot 173
|
||||
value 59 goes to bot 177
|
||||
bot 165 gives low to bot 63 and high to bot 196
|
||||
bot 84 gives low to bot 70 and high to bot 78
|
||||
bot 2 gives low to bot 160 and high to bot 91
|
||||
value 61 goes to bot 29
|
||||
bot 114 gives low to bot 109 and high to bot 186
|
||||
bot 205 gives low to bot 139 and high to bot 115
|
||||
bot 175 gives low to output 17 and high to bot 133
|
||||
bot 176 gives low to bot 57 and high to bot 120
|
||||
bot 107 gives low to bot 124 and high to bot 15
|
||||
bot 52 gives low to bot 27 and high to bot 28
|
||||
bot 103 gives low to bot 50 and high to bot 129
|
||||
bot 150 gives low to bot 131 and high to bot 148
|
||||
bot 16 gives low to output 20 and high to bot 189
|
||||
bot 190 gives low to output 18 and high to bot 146
|
||||
bot 157 gives low to bot 16 and high to bot 180
|
||||
bot 10 gives low to bot 158 and high to bot 130
|
||||
bot 202 gives low to bot 162 and high to bot 184
|
||||
bot 88 gives low to bot 77 and high to bot 84
|
||||
bot 188 gives low to bot 128 and high to bot 38
|
||||
bot 58 gives low to bot 15 and high to bot 101
|
||||
bot 171 gives low to bot 17 and high to bot 202
|
||||
bot 97 gives low to bot 178 and high to bot 67
|
||||
bot 163 gives low to bot 34 and high to bot 116
|
||||
bot 124 gives low to bot 0 and high to bot 145
|
||||
bot 71 gives low to bot 185 and high to bot 54
|
||||
bot 78 gives low to bot 14 and high to bot 200
|
||||
bot 101 gives low to bot 188 and high to bot 100
|
||||
bot 189 gives low to output 7 and high to bot 108
|
||||
bot 95 gives low to bot 101 and high to bot 100
|
||||
bot 0 gives low to bot 35 and high to bot 103
|
||||
bot 207 gives low to bot 37 and high to bot 62
|
||||
bot 49 gives low to bot 11 and high to bot 57
|
||||
bot 85 gives low to bot 30 and high to bot 199
|
||||
bot 89 gives low to bot 72 and high to bot 2
|
||||
bot 3 gives low to bot 134 and high to bot 66
|
||||
bot 181 gives low to bot 166 and high to bot 205
|
||||
bot 91 gives low to bot 151 and high to bot 172
|
||||
value 17 goes to bot 167
|
||||
bot 20 gives low to bot 130 and high to bot 73
|
||||
bot 196 gives low to bot 74 and high to bot 140
|
||||
bot 18 gives low to bot 121 and high to bot 168
|
||||
bot 185 gives low to output 15 and high to bot 54
|
||||
bot 178 gives low to bot 106 and high to bot 169
|
||||
bot 129 gives low to bot 127 and high to bot 49
|
||||
bot 19 gives low to bot 2 and high to bot 164
|
||||
bot 15 gives low to bot 145 and high to bot 188
|
||||
bot 144 gives low to bot 197 and high to bot 14
|
||||
bot 201 gives low to bot 206 and high to bot 198
|
||||
bot 164 gives low to bot 91 and high to bot 203
|
||||
bot 73 gives low to bot 105 and high to bot 112
|
||||
bot 191 gives low to bot 192 and high to bot 154
|
||||
bot 109 gives low to bot 167 and high to bot 86
|
||||
bot 151 gives low to bot 82 and high to bot 79
|
||||
bot 53 gives low to output 2 and high to bot 142
|
||||
bot 37 gives low to bot 29 and high to bot 157
|
||||
value 2 goes to bot 44
|
||||
bot 204 gives low to bot 112 and high to bot 36
|
||||
bot 40 gives low to bot 69 and high to bot 124
|
||||
bot 22 gives low to bot 53 and high to bot 69
|
||||
bot 104 gives low to bot 136 and high to bot 10
|
||||
value 19 goes to bot 88
|
||||
bot 127 gives low to output 5 and high to bot 11
|
||||
bot 183 gives low to bot 47 and high to bot 65
|
||||
bot 192 gives low to bot 140 and high to bot 51
|
||||
bot 38 gives low to bot 182 and high to bot 59
|
||||
bot 61 gives low to bot 52 and high to bot 136
|
||||
bot 156 gives low to bot 75 and high to bot 90
|
||||
value 37 goes to bot 37
|
||||
bot 28 gives low to bot 46 and high to bot 102
|
||||
bot 187 gives low to bot 149 and high to bot 8
|
||||
bot 132 gives low to bot 119 and high to bot 170
|
||||
bot 44 gives low to bot 9 and high to bot 144
|
||||
bot 29 gives low to output 0 and high to bot 16
|
||||
bot 6 gives low to bot 5 and high to bot 24
|
||||
bot 137 gives low to bot 36 and high to bot 18
|
||||
bot 130 gives low to bot 110 and high to bot 105
|
||||
value 5 goes to bot 92
|
||||
bot 35 gives low to output 3 and high to bot 50
|
||||
bot 152 gives low to output 8 and high to bot 190
|
||||
bot 143 gives low to bot 163 and high to bot 33
|
||||
114
2016/d10/ex2/ex2.py
Executable file
114
2016/d10/ex2/ex2.py
Executable file
|
|
@ -0,0 +1,114 @@
|
|||
#!/usr/bin/env python
|
||||
|
||||
import collections
|
||||
import dataclasses
|
||||
import functools
|
||||
import itertools
|
||||
import operator
|
||||
import sys
|
||||
|
||||
|
||||
@dataclasses.dataclass(frozen=True)
|
||||
class Input:
|
||||
n: int
|
||||
|
||||
|
||||
@dataclasses.dataclass(frozen=True)
|
||||
class Bot:
|
||||
n: int
|
||||
|
||||
|
||||
@dataclasses.dataclass(frozen=True)
|
||||
class Output:
|
||||
n: int
|
||||
|
||||
|
||||
# Each node points to its children, to each of whom it outputs a chip
|
||||
GraphKey = Input | Bot
|
||||
GraphVal = Bot | Output
|
||||
# By convention, a bot should list its outputs in [`low`, `high`] order
|
||||
Graph = dict[GraphKey, list[GraphVal]]
|
||||
# Reverse the graph representation for an easier topo_sort (only of the keys)
|
||||
ReverseGraph = dict[GraphKey, set[GraphKey]]
|
||||
|
||||
|
||||
def solve(input: str) -> int:
|
||||
def parse_line(input: str) -> tuple[GraphKey, list[GraphVal]]:
|
||||
split_input = input.split()
|
||||
if split_input[0] == "bot":
|
||||
low_n = int(split_input[6])
|
||||
low_type: type[GraphVal] = Bot if split_input[5] == "bot" else Output
|
||||
high_n = int(split_input[11])
|
||||
high_type: type[GraphVal] = Bot if split_input[10] == "bot" else Output
|
||||
return Bot(int(split_input[1])), [low_type(low_n), high_type(high_n)]
|
||||
return Input(int(split_input[1])), [Bot(int(split_input[-1]))]
|
||||
|
||||
def parse(input: str) -> Graph:
|
||||
return {key: val for key, val in map(parse_line, input.splitlines())}
|
||||
|
||||
def run(graph: Graph) -> dict[GraphVal, list[int]]:
|
||||
def reverse_graph(graph: Graph) -> ReverseGraph:
|
||||
res: ReverseGraph = {n: set() for n in graph}
|
||||
for node, children in graph.items():
|
||||
for child in children:
|
||||
# We don't care about `Output`s here
|
||||
if isinstance(child, Output):
|
||||
continue
|
||||
res[child].add(node)
|
||||
return res
|
||||
|
||||
def topo_sort(graph: ReverseGraph) -> list[GraphKey]:
|
||||
res: list[GraphKey] = []
|
||||
|
||||
queue = {n for n, deps in graph.items() if not deps}
|
||||
assert all(isinstance(n, Input) for n in queue) # Sanity check
|
||||
seen: set[GraphKey] = set()
|
||||
|
||||
while queue:
|
||||
node = queue.pop()
|
||||
|
||||
res.append(node)
|
||||
seen.add(node)
|
||||
# Iterate over all nodes as we don't have information on children
|
||||
for child, deps in graph.items():
|
||||
if child in seen:
|
||||
continue
|
||||
if deps - seen:
|
||||
continue
|
||||
queue.add(child)
|
||||
|
||||
return res
|
||||
|
||||
reversed_graph = reverse_graph(graph)
|
||||
assert len(reversed_graph) == len(graph) # Sanity check
|
||||
run_order = topo_sort(reversed_graph)
|
||||
assert len(run_order) == len(graph) # Sanity check
|
||||
bots_bins: dict[GraphVal, list[int]] = collections.defaultdict(list)
|
||||
for node in run_order:
|
||||
match node:
|
||||
case Input(n):
|
||||
assert len(graph[node]) == 1 # Sanity check
|
||||
bots_bins[graph[node][0]].append(n)
|
||||
case Bot(n):
|
||||
assert len(graph[node]) == 2 # Sanity check
|
||||
assert len(bots_bins[node]) == 2 # Sanity check
|
||||
# Have we found the bot we were looking for?
|
||||
for out, val in zip(graph[node], sorted(bots_bins[node])):
|
||||
bots_bins[out].append(val)
|
||||
return bots_bins
|
||||
|
||||
graph = parse(input)
|
||||
outputs = run(graph)
|
||||
return functools.reduce(
|
||||
operator.mul,
|
||||
itertools.chain.from_iterable(outputs[Output(i)] for i in range(3)),
|
||||
)
|
||||
|
||||
|
||||
def main() -> None:
|
||||
input = sys.stdin.read()
|
||||
print(solve(input))
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
231
2016/d10/ex2/input
Normal file
231
2016/d10/ex2/input
Normal file
|
|
@ -0,0 +1,231 @@
|
|||
bot 59 gives low to bot 176 and high to bot 120
|
||||
bot 92 gives low to bot 42 and high to bot 187
|
||||
value 31 goes to bot 114
|
||||
bot 182 gives low to bot 49 and high to bot 176
|
||||
bot 17 gives low to bot 181 and high to bot 162
|
||||
bot 36 gives low to bot 118 and high to bot 121
|
||||
bot 118 gives low to bot 164 and high to bot 55
|
||||
bot 172 gives low to bot 79 and high to bot 123
|
||||
bot 51 gives low to bot 60 and high to bot 31
|
||||
bot 48 gives low to bot 107 and high to bot 58
|
||||
bot 142 gives low to output 6 and high to bot 35
|
||||
bot 133 gives low to output 4 and high to bot 47
|
||||
bot 134 gives low to bot 122 and high to bot 66
|
||||
bot 106 gives low to bot 155 and high to bot 99
|
||||
bot 77 gives low to bot 93 and high to bot 84
|
||||
bot 9 gives low to bot 173 and high to bot 197
|
||||
bot 64 gives low to bot 123 and high to bot 48
|
||||
bot 177 gives low to bot 21 and high to bot 132
|
||||
bot 94 gives low to bot 6 and high to bot 25
|
||||
bot 126 gives low to bot 193 and high to bot 56
|
||||
bot 74 gives low to bot 187 and high to bot 125
|
||||
bot 80 gives low to bot 41 and high to bot 191
|
||||
bot 62 gives low to bot 157 and high to bot 138
|
||||
bot 66 gives low to bot 1 and high to bot 209
|
||||
bot 90 gives low to bot 104 and high to bot 34
|
||||
bot 68 gives low to bot 23 and high to bot 87
|
||||
bot 121 gives low to bot 55 and high to bot 126
|
||||
bot 122 gives low to bot 137 and high to bot 1
|
||||
bot 209 gives low to bot 168 and high to bot 26
|
||||
bot 141 gives low to bot 170 and high to bot 6
|
||||
bot 149 gives low to bot 62 and high to bot 13
|
||||
bot 120 gives low to bot 179 and high to bot 71
|
||||
bot 160 gives low to bot 194 and high to bot 151
|
||||
bot 86 gives low to bot 96 and high to bot 106
|
||||
value 13 goes to bot 9
|
||||
bot 180 gives low to bot 189 and high to bot 27
|
||||
value 67 goes to bot 88
|
||||
bot 169 gives low to bot 99 and high to bot 159
|
||||
bot 56 gives low to bot 98 and high to bot 147
|
||||
bot 197 gives low to bot 174 and high to bot 81
|
||||
bot 57 gives low to bot 113 and high to bot 179
|
||||
bot 39 gives low to bot 115 and high to bot 3
|
||||
bot 79 gives low to bot 22 and high to bot 40
|
||||
bot 161 gives low to output 14 and high to bot 185
|
||||
bot 21 gives low to bot 114 and high to bot 119
|
||||
bot 136 gives low to bot 28 and high to bot 158
|
||||
bot 105 gives low to bot 89 and high to bot 19
|
||||
bot 168 gives low to bot 126 and high to bot 26
|
||||
bot 193 gives low to bot 64 and high to bot 98
|
||||
bot 186 gives low to bot 86 and high to bot 178
|
||||
value 11 goes to bot 165
|
||||
bot 33 gives low to bot 116 and high to bot 150
|
||||
bot 32 gives low to bot 154 and high to bot 206
|
||||
bot 166 gives low to bot 33 and high to bot 139
|
||||
value 7 goes to bot 63
|
||||
bot 203 gives low to bot 172 and high to bot 64
|
||||
bot 200 gives low to bot 94 and high to bot 25
|
||||
value 43 goes to bot 76
|
||||
bot 145 gives low to bot 103 and high to bot 128
|
||||
bot 119 gives low to bot 186 and high to bot 97
|
||||
bot 12 gives low to bot 31 and high to bot 4
|
||||
bot 23 gives low to bot 198 and high to bot 171
|
||||
bot 34 gives low to bot 10 and high to bot 20
|
||||
bot 198 gives low to bot 43 and high to bot 17
|
||||
bot 50 gives low to output 1 and high to bot 127
|
||||
bot 155 gives low to bot 191 and high to bot 32
|
||||
bot 206 gives low to bot 12 and high to bot 43
|
||||
bot 96 gives low to bot 80 and high to bot 155
|
||||
bot 93 gives low to bot 44 and high to bot 70
|
||||
bot 24 gives low to bot 85 and high to bot 83
|
||||
bot 30 gives low to bot 159 and high to bot 68
|
||||
bot 55 gives low to bot 203 and high to bot 193
|
||||
bot 199 gives low to bot 68 and high to bot 135
|
||||
bot 170 gives low to bot 97 and high to bot 5
|
||||
bot 65 gives low to bot 152 and high to bot 194
|
||||
bot 43 gives low to bot 4 and high to bot 181
|
||||
bot 113 gives low to output 9 and high to bot 161
|
||||
bot 81 gives low to bot 141 and high to bot 94
|
||||
value 29 goes to bot 7
|
||||
bot 46 gives low to bot 175 and high to bot 195
|
||||
value 47 goes to bot 21
|
||||
value 23 goes to bot 42
|
||||
bot 13 gives low to bot 138 and high to bot 61
|
||||
bot 135 gives low to bot 87 and high to bot 111
|
||||
bot 194 gives low to bot 190 and high to bot 82
|
||||
value 73 goes to bot 109
|
||||
bot 154 gives low to bot 51 and high to bot 12
|
||||
bot 1 gives low to bot 18 and high to bot 209
|
||||
bot 98 gives low to bot 48 and high to bot 45
|
||||
bot 147 gives low to bot 45 and high to bot 95
|
||||
bot 47 gives low to output 19 and high to bot 152
|
||||
bot 26 gives low to bot 56 and high to bot 147
|
||||
bot 179 gives low to bot 161 and high to bot 71
|
||||
bot 148 gives low to bot 204 and high to bot 137
|
||||
bot 5 gives low to bot 67 and high to bot 85
|
||||
bot 174 gives low to bot 132 and high to bot 141
|
||||
bot 8 gives low to bot 13 and high to bot 75
|
||||
bot 82 gives low to bot 146 and high to bot 22
|
||||
bot 123 gives low to bot 40 and high to bot 107
|
||||
bot 99 gives low to bot 32 and high to bot 201
|
||||
bot 41 gives low to bot 196 and high to bot 192
|
||||
bot 139 gives low to bot 150 and high to bot 153
|
||||
bot 11 gives low to output 16 and high to bot 113
|
||||
bot 72 gives low to bot 65 and high to bot 160
|
||||
bot 195 gives low to bot 133 and high to bot 183
|
||||
bot 54 gives low to output 12 and high to output 10
|
||||
bot 158 gives low to bot 102 and high to bot 110
|
||||
bot 112 gives low to bot 19 and high to bot 118
|
||||
bot 31 gives low to bot 208 and high to bot 143
|
||||
bot 167 gives low to bot 7 and high to bot 96
|
||||
bot 63 gives low to bot 92 and high to bot 74
|
||||
bot 116 gives low to bot 20 and high to bot 131
|
||||
bot 184 gives low to bot 39 and high to bot 3
|
||||
bot 162 gives low to bot 205 and high to bot 39
|
||||
bot 108 gives low to output 11 and high to bot 175
|
||||
value 53 goes to bot 207
|
||||
bot 111 gives low to bot 202 and high to bot 184
|
||||
bot 25 gives low to bot 24 and high to bot 83
|
||||
value 71 goes to bot 77
|
||||
bot 69 gives low to bot 142 and high to bot 0
|
||||
bot 146 gives low to output 13 and high to bot 53
|
||||
bot 7 gives low to bot 76 and high to bot 80
|
||||
bot 131 gives low to bot 73 and high to bot 204
|
||||
bot 102 gives low to bot 195 and high to bot 117
|
||||
bot 76 gives low to bot 165 and high to bot 41
|
||||
bot 153 gives low to bot 148 and high to bot 122
|
||||
bot 208 gives low to bot 90 and high to bot 163
|
||||
bot 70 gives low to bot 144 and high to bot 78
|
||||
bot 125 gives low to bot 8 and high to bot 156
|
||||
bot 83 gives low to bot 199 and high to bot 135
|
||||
bot 75 gives low to bot 61 and high to bot 104
|
||||
bot 67 gives low to bot 169 and high to bot 30
|
||||
bot 14 gives low to bot 81 and high to bot 200
|
||||
bot 159 gives low to bot 201 and high to bot 23
|
||||
value 3 goes to bot 93
|
||||
bot 110 gives low to bot 117 and high to bot 89
|
||||
bot 128 gives low to bot 129 and high to bot 182
|
||||
bot 87 gives low to bot 171 and high to bot 111
|
||||
bot 45 gives low to bot 58 and high to bot 95
|
||||
bot 4 gives low to bot 143 and high to bot 166
|
||||
bot 60 gives low to bot 156 and high to bot 208
|
||||
bot 27 gives low to bot 108 and high to bot 46
|
||||
bot 42 gives low to bot 207 and high to bot 149
|
||||
bot 117 gives low to bot 183 and high to bot 72
|
||||
bot 115 gives low to bot 153 and high to bot 134
|
||||
bot 140 gives low to bot 125 and high to bot 60
|
||||
bot 173 gives low to bot 177 and high to bot 174
|
||||
bot 138 gives low to bot 180 and high to bot 52
|
||||
bot 100 gives low to bot 38 and high to bot 59
|
||||
value 41 goes to bot 173
|
||||
value 59 goes to bot 177
|
||||
bot 165 gives low to bot 63 and high to bot 196
|
||||
bot 84 gives low to bot 70 and high to bot 78
|
||||
bot 2 gives low to bot 160 and high to bot 91
|
||||
value 61 goes to bot 29
|
||||
bot 114 gives low to bot 109 and high to bot 186
|
||||
bot 205 gives low to bot 139 and high to bot 115
|
||||
bot 175 gives low to output 17 and high to bot 133
|
||||
bot 176 gives low to bot 57 and high to bot 120
|
||||
bot 107 gives low to bot 124 and high to bot 15
|
||||
bot 52 gives low to bot 27 and high to bot 28
|
||||
bot 103 gives low to bot 50 and high to bot 129
|
||||
bot 150 gives low to bot 131 and high to bot 148
|
||||
bot 16 gives low to output 20 and high to bot 189
|
||||
bot 190 gives low to output 18 and high to bot 146
|
||||
bot 157 gives low to bot 16 and high to bot 180
|
||||
bot 10 gives low to bot 158 and high to bot 130
|
||||
bot 202 gives low to bot 162 and high to bot 184
|
||||
bot 88 gives low to bot 77 and high to bot 84
|
||||
bot 188 gives low to bot 128 and high to bot 38
|
||||
bot 58 gives low to bot 15 and high to bot 101
|
||||
bot 171 gives low to bot 17 and high to bot 202
|
||||
bot 97 gives low to bot 178 and high to bot 67
|
||||
bot 163 gives low to bot 34 and high to bot 116
|
||||
bot 124 gives low to bot 0 and high to bot 145
|
||||
bot 71 gives low to bot 185 and high to bot 54
|
||||
bot 78 gives low to bot 14 and high to bot 200
|
||||
bot 101 gives low to bot 188 and high to bot 100
|
||||
bot 189 gives low to output 7 and high to bot 108
|
||||
bot 95 gives low to bot 101 and high to bot 100
|
||||
bot 0 gives low to bot 35 and high to bot 103
|
||||
bot 207 gives low to bot 37 and high to bot 62
|
||||
bot 49 gives low to bot 11 and high to bot 57
|
||||
bot 85 gives low to bot 30 and high to bot 199
|
||||
bot 89 gives low to bot 72 and high to bot 2
|
||||
bot 3 gives low to bot 134 and high to bot 66
|
||||
bot 181 gives low to bot 166 and high to bot 205
|
||||
bot 91 gives low to bot 151 and high to bot 172
|
||||
value 17 goes to bot 167
|
||||
bot 20 gives low to bot 130 and high to bot 73
|
||||
bot 196 gives low to bot 74 and high to bot 140
|
||||
bot 18 gives low to bot 121 and high to bot 168
|
||||
bot 185 gives low to output 15 and high to bot 54
|
||||
bot 178 gives low to bot 106 and high to bot 169
|
||||
bot 129 gives low to bot 127 and high to bot 49
|
||||
bot 19 gives low to bot 2 and high to bot 164
|
||||
bot 15 gives low to bot 145 and high to bot 188
|
||||
bot 144 gives low to bot 197 and high to bot 14
|
||||
bot 201 gives low to bot 206 and high to bot 198
|
||||
bot 164 gives low to bot 91 and high to bot 203
|
||||
bot 73 gives low to bot 105 and high to bot 112
|
||||
bot 191 gives low to bot 192 and high to bot 154
|
||||
bot 109 gives low to bot 167 and high to bot 86
|
||||
bot 151 gives low to bot 82 and high to bot 79
|
||||
bot 53 gives low to output 2 and high to bot 142
|
||||
bot 37 gives low to bot 29 and high to bot 157
|
||||
value 2 goes to bot 44
|
||||
bot 204 gives low to bot 112 and high to bot 36
|
||||
bot 40 gives low to bot 69 and high to bot 124
|
||||
bot 22 gives low to bot 53 and high to bot 69
|
||||
bot 104 gives low to bot 136 and high to bot 10
|
||||
value 19 goes to bot 88
|
||||
bot 127 gives low to output 5 and high to bot 11
|
||||
bot 183 gives low to bot 47 and high to bot 65
|
||||
bot 192 gives low to bot 140 and high to bot 51
|
||||
bot 38 gives low to bot 182 and high to bot 59
|
||||
bot 61 gives low to bot 52 and high to bot 136
|
||||
bot 156 gives low to bot 75 and high to bot 90
|
||||
value 37 goes to bot 37
|
||||
bot 28 gives low to bot 46 and high to bot 102
|
||||
bot 187 gives low to bot 149 and high to bot 8
|
||||
bot 132 gives low to bot 119 and high to bot 170
|
||||
bot 44 gives low to bot 9 and high to bot 144
|
||||
bot 29 gives low to output 0 and high to bot 16
|
||||
bot 6 gives low to bot 5 and high to bot 24
|
||||
bot 137 gives low to bot 36 and high to bot 18
|
||||
bot 130 gives low to bot 110 and high to bot 105
|
||||
value 5 goes to bot 92
|
||||
bot 35 gives low to output 3 and high to bot 50
|
||||
bot 152 gives low to output 8 and high to bot 190
|
||||
bot 143 gives low to bot 163 and high to bot 33
|
||||
194
2016/d11/ex1/ex1.py
Executable file
194
2016/d11/ex1/ex1.py
Executable file
|
|
@ -0,0 +1,194 @@
|
|||
#!/usr/bin/env python
|
||||
|
||||
import dataclasses
|
||||
import heapq
|
||||
import itertools
|
||||
import sys
|
||||
from collections.abc import Iterator
|
||||
from typing import NamedTuple
|
||||
|
||||
NUM_FLOORS = 4
|
||||
|
||||
|
||||
@dataclasses.dataclass(frozen=True)
|
||||
class Microchip:
|
||||
element: str
|
||||
|
||||
|
||||
@dataclasses.dataclass(frozen=True)
|
||||
class Generator:
|
||||
element: str
|
||||
|
||||
|
||||
Item = Microchip | Generator
|
||||
|
||||
|
||||
@dataclasses.dataclass(frozen=True, order=True)
|
||||
class State:
|
||||
class Floor(NamedTuple):
|
||||
chip: int
|
||||
generator: int
|
||||
|
||||
elevator: int
|
||||
items: tuple[Floor, ...]
|
||||
|
||||
def __post_init__(self) -> None:
|
||||
assert self.items == tuple(sorted(self.items)) # Sanity check
|
||||
|
||||
|
||||
def solve(input: str) -> int:
|
||||
def parse_item(input: str) -> Item:
|
||||
_, element, item_type = input.split()
|
||||
if item_type == "microchip":
|
||||
return Microchip(element.removesuffix("-compatible"))
|
||||
elif item_type == "generator":
|
||||
return Generator(element)
|
||||
assert False # Sanity check
|
||||
|
||||
def parse_floor(input: str) -> list[Item]:
|
||||
# Simplify parsing, and remove `The Xth floor contains`
|
||||
input = input.removesuffix(".").replace(", and ", ", ").replace(" and ", ", ")
|
||||
input = " ".join(input.split()[4:])
|
||||
if input == "nothing relevant":
|
||||
return []
|
||||
return [parse_item(it) for it in input.split(", ")]
|
||||
|
||||
def parse(input: str) -> dict[Item, int]:
|
||||
return {
|
||||
it: i
|
||||
for i, line in enumerate(input.splitlines())
|
||||
for it in parse_floor(line)
|
||||
}
|
||||
|
||||
def to_state(elevator: int, floors: dict[Item, int]) -> State:
|
||||
elements = {it.element for it in floors}
|
||||
return State(
|
||||
elevator=elevator,
|
||||
items=tuple(
|
||||
sorted(
|
||||
State.Floor(floors[Microchip(elem)], floors[Generator(elem)])
|
||||
for elem in elements
|
||||
)
|
||||
),
|
||||
)
|
||||
|
||||
def from_state(state: State) -> tuple[int, dict[Item, int]]:
|
||||
floors: dict[Item, int] = {}
|
||||
for i, (chip, generator) in enumerate(state.items):
|
||||
floors[Microchip(str(i))] = chip
|
||||
floors[Generator(str(i))] = generator
|
||||
return state.elevator, floors
|
||||
|
||||
def solve(state: State) -> int:
|
||||
def items_at(
|
||||
item_type: type[Item],
|
||||
floor: int,
|
||||
items: dict[Item, int],
|
||||
) -> set[str]:
|
||||
return {
|
||||
it.element
|
||||
for it, it_floor in items.items()
|
||||
if it_floor == floor and isinstance(it, item_type)
|
||||
}
|
||||
|
||||
def neighbours(state: State) -> Iterator[State]:
|
||||
elevator, all_items = from_state(state)
|
||||
chips = items_at(Microchip, elevator, all_items)
|
||||
gens = items_at(Generator, elevator, all_items)
|
||||
for dest_floor in (elevator - 1, elevator + 1):
|
||||
# Don't move the elevator out of bounds
|
||||
if dest_floor < 0 or dest_floor >= NUM_FLOORS:
|
||||
continue
|
||||
|
||||
dest_chips = items_at(Microchip, dest_floor, all_items)
|
||||
dest_gens = items_at(Generator, dest_floor, all_items)
|
||||
unmatched_chips = dest_chips - dest_gens
|
||||
if unmatched_chips:
|
||||
assert not dest_gens # Sanity check
|
||||
|
||||
single_items: list[Item] = []
|
||||
# Chips
|
||||
for chip in chips:
|
||||
# can move to floors with no generator, or a matching generator
|
||||
if dest_gens and chip not in dest_gens:
|
||||
continue
|
||||
single_items.append(Microchip(chip))
|
||||
# Generators
|
||||
for gen in gens:
|
||||
# can move to floors without unmatched chips or only their chip
|
||||
if unmatched_chips - {gen}:
|
||||
continue
|
||||
# ... but only if they're not currently protecting their chip
|
||||
if gen in chips and gens - {gen}:
|
||||
continue
|
||||
single_items.append(Generator(gen))
|
||||
|
||||
double_items: list[tuple[Item, Item]] = []
|
||||
# Two chips
|
||||
for chip1, chip2 in itertools.combinations(chips, 2):
|
||||
# Can move to floors with no generator, or both matching generators
|
||||
if dest_gens and not dest_gens.issuperset({chip1, chip2}):
|
||||
continue
|
||||
double_items.append((Microchip(chip1), Microchip(chip2)))
|
||||
# Two generators
|
||||
for gen1, gen2 in itertools.combinations(gens, 2):
|
||||
# Can move to floors with unmatched chips, if they match them...
|
||||
if unmatched_chips - {gen1, gen2}:
|
||||
continue
|
||||
# ... but only if they're not currently protecting their chip
|
||||
if (gen1 in chips or gen2 in chips) and gens - {gen1, gen2}:
|
||||
continue
|
||||
double_items.append((Generator(gen1), Generator(gen2)))
|
||||
# Matching generator and chip
|
||||
for match in chips & gens:
|
||||
# Can move to floors with no unmatched chips
|
||||
if not unmatched_chips:
|
||||
double_items.append((Microchip(match), Generator(match)))
|
||||
|
||||
for item in single_items:
|
||||
new_items = all_items | {item: dest_floor}
|
||||
assert new_items.keys() == all_items.keys() # Sanity check
|
||||
yield to_state(dest_floor, new_items)
|
||||
for item1, item2 in double_items:
|
||||
new_items = all_items | {item1: dest_floor, item2: dest_floor}
|
||||
assert new_items.keys() == all_items.keys() # Sanity check
|
||||
yield to_state(dest_floor, new_items)
|
||||
|
||||
def dijkstra(start: State, end: State) -> int:
|
||||
# Priority queue of (distance, point)
|
||||
queue = [(0, start)]
|
||||
seen: set[State] = set()
|
||||
|
||||
while len(queue) > 0:
|
||||
dist, p = heapq.heappop(queue)
|
||||
if p == end:
|
||||
return dist
|
||||
# We must have seen p with a smaller distance before
|
||||
if p in seen:
|
||||
continue
|
||||
# First time encountering p, must be the smallest distance to it
|
||||
seen.add(p)
|
||||
# Add all neighbours to be visited
|
||||
for n in neighbours(p):
|
||||
heapq.heappush(queue, (dist + 1, n))
|
||||
|
||||
assert False # Sanity check
|
||||
|
||||
# On the end state, we want all items pairs on the top floor
|
||||
# The elevator must be on the top floor as well to get the last item up
|
||||
top = NUM_FLOORS - 1
|
||||
end = State(top, tuple(State.Floor(top, top) for _ in state.items))
|
||||
return dijkstra(state, end)
|
||||
|
||||
floors = parse(input)
|
||||
state = to_state(0, floors)
|
||||
return solve(state)
|
||||
|
||||
|
||||
def main() -> None:
|
||||
input = sys.stdin.read()
|
||||
print(solve(input))
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
4
2016/d11/ex1/input
Normal file
4
2016/d11/ex1/input
Normal file
|
|
@ -0,0 +1,4 @@
|
|||
The first floor contains a promethium generator and a promethium-compatible microchip.
|
||||
The second floor contains a cobalt generator, a curium generator, a ruthenium generator, and a plutonium generator.
|
||||
The third floor contains a cobalt-compatible microchip, a curium-compatible microchip, a ruthenium-compatible microchip, and a plutonium-compatible microchip.
|
||||
The fourth floor contains nothing relevant.
|
||||
197
2016/d11/ex2/ex2.py
Executable file
197
2016/d11/ex2/ex2.py
Executable file
|
|
@ -0,0 +1,197 @@
|
|||
#!/usr/bin/env python
|
||||
|
||||
import dataclasses
|
||||
import heapq
|
||||
import itertools
|
||||
import sys
|
||||
from collections.abc import Iterator
|
||||
from typing import NamedTuple
|
||||
|
||||
NUM_FLOORS = 4
|
||||
|
||||
|
||||
@dataclasses.dataclass(frozen=True)
|
||||
class Microchip:
|
||||
element: str
|
||||
|
||||
|
||||
@dataclasses.dataclass(frozen=True)
|
||||
class Generator:
|
||||
element: str
|
||||
|
||||
|
||||
Item = Microchip | Generator
|
||||
|
||||
|
||||
@dataclasses.dataclass(frozen=True, order=True)
|
||||
class State:
|
||||
class Floor(NamedTuple):
|
||||
chip: int
|
||||
generator: int
|
||||
|
||||
elevator: int
|
||||
items: tuple[Floor, ...]
|
||||
|
||||
def __post_init__(self) -> None:
|
||||
assert self.items == tuple(sorted(self.items)) # Sanity check
|
||||
|
||||
|
||||
def solve(input: str) -> int:
|
||||
def parse_item(input: str) -> Item:
|
||||
_, element, item_type = input.split()
|
||||
if item_type == "microchip":
|
||||
return Microchip(element.removesuffix("-compatible"))
|
||||
elif item_type == "generator":
|
||||
return Generator(element)
|
||||
assert False # Sanity check
|
||||
|
||||
def parse_floor(input: str) -> list[Item]:
|
||||
# Simplify parsing, and remove `The Xth floor contains`
|
||||
input = input.removesuffix(".").replace(", and ", ", ").replace(" and ", ", ")
|
||||
input = " ".join(input.split()[4:])
|
||||
if input == "nothing relevant":
|
||||
return []
|
||||
return [parse_item(it) for it in input.split(", ")]
|
||||
|
||||
def parse(input: str) -> dict[Item, int]:
|
||||
return {
|
||||
it: i
|
||||
for i, line in enumerate(input.splitlines())
|
||||
for it in parse_floor(line)
|
||||
}
|
||||
|
||||
def to_state(elevator: int, floors: dict[Item, int]) -> State:
|
||||
elements = {it.element for it in floors}
|
||||
return State(
|
||||
elevator=elevator,
|
||||
items=tuple(
|
||||
sorted(
|
||||
State.Floor(floors[Microchip(elem)], floors[Generator(elem)])
|
||||
for elem in elements
|
||||
)
|
||||
),
|
||||
)
|
||||
|
||||
def from_state(state: State) -> tuple[int, dict[Item, int]]:
|
||||
floors: dict[Item, int] = {}
|
||||
for i, (chip, generator) in enumerate(state.items):
|
||||
floors[Microchip(str(i))] = chip
|
||||
floors[Generator(str(i))] = generator
|
||||
return state.elevator, floors
|
||||
|
||||
def solve(state: State) -> int:
|
||||
def items_at(
|
||||
item_type: type[Item],
|
||||
floor: int,
|
||||
items: dict[Item, int],
|
||||
) -> set[str]:
|
||||
return {
|
||||
it.element
|
||||
for it, it_floor in items.items()
|
||||
if it_floor == floor and isinstance(it, item_type)
|
||||
}
|
||||
|
||||
def neighbours(state: State) -> Iterator[State]:
|
||||
elevator, all_items = from_state(state)
|
||||
chips = items_at(Microchip, elevator, all_items)
|
||||
gens = items_at(Generator, elevator, all_items)
|
||||
for dest_floor in (elevator - 1, elevator + 1):
|
||||
# Don't move the elevator out of bounds
|
||||
if dest_floor < 0 or dest_floor >= NUM_FLOORS:
|
||||
continue
|
||||
|
||||
dest_chips = items_at(Microchip, dest_floor, all_items)
|
||||
dest_gens = items_at(Generator, dest_floor, all_items)
|
||||
unmatched_chips = dest_chips - dest_gens
|
||||
if unmatched_chips:
|
||||
assert not dest_gens # Sanity check
|
||||
|
||||
single_items: list[Item] = []
|
||||
# Chips
|
||||
for chip in chips:
|
||||
# can move to floors with no generator, or a matching generator
|
||||
if dest_gens and chip not in dest_gens:
|
||||
continue
|
||||
single_items.append(Microchip(chip))
|
||||
# Generators
|
||||
for gen in gens:
|
||||
# can move to floors without unmatched chips or only their chip
|
||||
if unmatched_chips - {gen}:
|
||||
continue
|
||||
# ... but only if they're not currently protecting their chip
|
||||
if gen in chips and gens - {gen}:
|
||||
continue
|
||||
single_items.append(Generator(gen))
|
||||
|
||||
double_items: list[tuple[Item, Item]] = []
|
||||
# Two chips
|
||||
for chip1, chip2 in itertools.combinations(chips, 2):
|
||||
# Can move to floors with no generator, or both matching generators
|
||||
if dest_gens and not dest_gens.issuperset({chip1, chip2}):
|
||||
continue
|
||||
double_items.append((Microchip(chip1), Microchip(chip2)))
|
||||
# Two generators
|
||||
for gen1, gen2 in itertools.combinations(gens, 2):
|
||||
# Can move to floors with unmatched chips, if they match them...
|
||||
if unmatched_chips - {gen1, gen2}:
|
||||
continue
|
||||
# ... but only if they're not currently protecting their chip
|
||||
if (gen1 in chips or gen2 in chips) and gens - {gen1, gen2}:
|
||||
continue
|
||||
double_items.append((Generator(gen1), Generator(gen2)))
|
||||
# Matching generator and chip
|
||||
for match in chips & gens:
|
||||
# Can move to floors with no unmatched chips
|
||||
if not unmatched_chips:
|
||||
double_items.append((Microchip(match), Generator(match)))
|
||||
|
||||
for item in single_items:
|
||||
new_items = all_items | {item: dest_floor}
|
||||
assert new_items.keys() == all_items.keys() # Sanity check
|
||||
yield to_state(dest_floor, new_items)
|
||||
for item1, item2 in double_items:
|
||||
new_items = all_items | {item1: dest_floor, item2: dest_floor}
|
||||
assert new_items.keys() == all_items.keys() # Sanity check
|
||||
yield to_state(dest_floor, new_items)
|
||||
|
||||
def dijkstra(start: State, end: State) -> int:
|
||||
# Priority queue of (distance, point)
|
||||
queue = [(0, start)]
|
||||
seen: set[State] = set()
|
||||
|
||||
while len(queue) > 0:
|
||||
dist, p = heapq.heappop(queue)
|
||||
if p == end:
|
||||
return dist
|
||||
# We must have seen p with a smaller distance before
|
||||
if p in seen:
|
||||
continue
|
||||
# First time encountering p, must be the smallest distance to it
|
||||
seen.add(p)
|
||||
# Add all neighbours to be visited
|
||||
for n in neighbours(p):
|
||||
heapq.heappush(queue, (dist + 1, n))
|
||||
|
||||
assert False # Sanity check
|
||||
|
||||
# On the end state, we want all items pairs on the top floor
|
||||
# The elevator must be on the top floor as well to get the last item up
|
||||
top = NUM_FLOORS - 1
|
||||
end = State(top, tuple(State.Floor(top, top) for _ in state.items))
|
||||
return dijkstra(state, end)
|
||||
|
||||
floors = parse(input)
|
||||
for elem in ("elerium", "dilithium"):
|
||||
floors[Microchip(elem)] = 0
|
||||
floors[Generator(elem)] = 0
|
||||
state = to_state(0, floors)
|
||||
return solve(state)
|
||||
|
||||
|
||||
def main() -> None:
|
||||
input = sys.stdin.read()
|
||||
print(solve(input))
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
4
2016/d11/ex2/input
Normal file
4
2016/d11/ex2/input
Normal file
|
|
@ -0,0 +1,4 @@
|
|||
The first floor contains a promethium generator and a promethium-compatible microchip.
|
||||
The second floor contains a cobalt generator, a curium generator, a ruthenium generator, and a plutonium generator.
|
||||
The third floor contains a cobalt-compatible microchip, a curium-compatible microchip, a ruthenium-compatible microchip, and a plutonium-compatible microchip.
|
||||
The fourth floor contains nothing relevant.
|
||||
67
2016/d12/ex1/ex1.py
Executable file
67
2016/d12/ex1/ex1.py
Executable file
|
|
@ -0,0 +1,67 @@
|
|||
#!/usr/bin/env python
|
||||
|
||||
import collections
|
||||
import enum
|
||||
import sys
|
||||
from typing import NamedTuple
|
||||
|
||||
|
||||
class Op(enum.StrEnum):
|
||||
CPY = "cpy"
|
||||
INC = "inc"
|
||||
DEC = "dec"
|
||||
JNZ = "jnz"
|
||||
|
||||
|
||||
class Instruction(NamedTuple):
|
||||
op: Op
|
||||
x: str
|
||||
y: str | None = None
|
||||
|
||||
@classmethod
|
||||
def from_str(cls, input: str) -> "Instruction":
|
||||
op, *rest = input.split()
|
||||
return cls(Op(op), *rest)
|
||||
|
||||
|
||||
def solve(input: str) -> int:
|
||||
def parse(input: str) -> list[Instruction]:
|
||||
return [Instruction.from_str(line) for line in input.splitlines()]
|
||||
|
||||
def resolve(y: str | None, registers: dict[str, int]) -> int:
|
||||
assert y is not None # Sanity check
|
||||
try:
|
||||
return int(y)
|
||||
except ValueError:
|
||||
return registers[y]
|
||||
|
||||
instructions = parse(input)
|
||||
registers: dict[str, int] = collections.defaultdict(int)
|
||||
|
||||
ip = 0
|
||||
while True:
|
||||
if ip < 0 or ip >= len(instructions):
|
||||
break
|
||||
instr = instructions[ip]
|
||||
ip += 1
|
||||
match instr.op:
|
||||
case Op.CPY:
|
||||
assert instr.y is not None
|
||||
registers[instr.y] = resolve(instr.x, registers)
|
||||
case Op.INC:
|
||||
registers[instr.x] += 1
|
||||
case Op.DEC:
|
||||
registers[instr.x] -= 1
|
||||
case Op.JNZ:
|
||||
if resolve(instr.x, registers) != 0:
|
||||
ip += resolve(instr.y, registers) - 1 # Account auto-increment
|
||||
return registers["a"]
|
||||
|
||||
|
||||
def main() -> None:
|
||||
input = sys.stdin.read()
|
||||
print(solve(input))
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
23
2016/d12/ex1/input
Normal file
23
2016/d12/ex1/input
Normal file
|
|
@ -0,0 +1,23 @@
|
|||
cpy 1 a
|
||||
cpy 1 b
|
||||
cpy 26 d
|
||||
jnz c 2
|
||||
jnz 1 5
|
||||
cpy 7 c
|
||||
inc d
|
||||
dec c
|
||||
jnz c -2
|
||||
cpy a c
|
||||
inc a
|
||||
dec b
|
||||
jnz b -2
|
||||
cpy c b
|
||||
dec d
|
||||
jnz d -6
|
||||
cpy 13 c
|
||||
cpy 14 d
|
||||
inc a
|
||||
dec d
|
||||
jnz d -2
|
||||
dec c
|
||||
jnz c -5
|
||||
49
2016/d12/ex2/ex2.py
Executable file
49
2016/d12/ex2/ex2.py
Executable file
|
|
@ -0,0 +1,49 @@
|
|||
#!/usr/bin/env python
|
||||
|
||||
import enum
|
||||
import sys
|
||||
from typing import NamedTuple
|
||||
|
||||
|
||||
class Op(enum.StrEnum):
|
||||
CPY = "cpy"
|
||||
INC = "inc"
|
||||
DEC = "dec"
|
||||
JNZ = "jnz"
|
||||
|
||||
|
||||
class Instruction(NamedTuple):
|
||||
op: Op
|
||||
x: str
|
||||
y: str | None = None
|
||||
|
||||
@classmethod
|
||||
def from_str(cls, input: str) -> "Instruction":
|
||||
op, *rest = input.split()
|
||||
return cls(Op(op), *rest)
|
||||
|
||||
|
||||
def solve(input: str) -> int:
|
||||
def parse(input: str) -> list[Instruction]:
|
||||
return [Instruction.from_str(line) for line in input.splitlines()]
|
||||
|
||||
def fibonacci(n: int) -> int:
|
||||
a, b = 1, 1
|
||||
for _ in range(n):
|
||||
a, b = b, a + b
|
||||
return b
|
||||
|
||||
instructions = parse(input)
|
||||
fib_n = int(instructions[2].x) + int(instructions[5].x)
|
||||
mult = int(instructions[16].x)
|
||||
fact = int(instructions[17].x)
|
||||
return fibonacci(fib_n) + mult * fact
|
||||
|
||||
|
||||
def main() -> None:
|
||||
input = sys.stdin.read()
|
||||
print(solve(input))
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
23
2016/d12/ex2/input
Normal file
23
2016/d12/ex2/input
Normal file
|
|
@ -0,0 +1,23 @@
|
|||
cpy 1 a
|
||||
cpy 1 b
|
||||
cpy 26 d
|
||||
jnz c 2
|
||||
jnz 1 5
|
||||
cpy 7 c
|
||||
inc d
|
||||
dec c
|
||||
jnz c -2
|
||||
cpy a c
|
||||
inc a
|
||||
dec b
|
||||
jnz b -2
|
||||
cpy c b
|
||||
dec d
|
||||
jnz d -6
|
||||
cpy 13 c
|
||||
cpy 14 d
|
||||
inc a
|
||||
dec d
|
||||
jnz d -2
|
||||
dec c
|
||||
jnz c -5
|
||||
68
2016/d13/ex1/ex1.py
Executable file
68
2016/d13/ex1/ex1.py
Executable file
|
|
@ -0,0 +1,68 @@
|
|||
#!/usr/bin/env python
|
||||
|
||||
import functools
|
||||
import heapq
|
||||
import sys
|
||||
from collections.abc import Callable, Iterator
|
||||
from typing import NamedTuple
|
||||
|
||||
|
||||
class Point(NamedTuple):
|
||||
x: int
|
||||
y: int
|
||||
|
||||
|
||||
def solve(input: str) -> int:
|
||||
def office_location_open(p: Point, number: int) -> bool:
|
||||
x, y = p
|
||||
return (x * x + 3 * x + 2 * x * y + y + y * y + number).bit_count() % 2 == 0
|
||||
|
||||
def office_neighbours(p: Point, number: int) -> Iterator[Point]:
|
||||
for dx, dy in (
|
||||
(-1, 0),
|
||||
(1, 0),
|
||||
(0, -1),
|
||||
(0, 1),
|
||||
):
|
||||
n = Point(p.x + dx, p.y + dy)
|
||||
if n.x < 0 or n.y < 0:
|
||||
continue
|
||||
if office_location_open(n, number):
|
||||
yield n
|
||||
|
||||
def dijkstra(
|
||||
start: Point,
|
||||
end: Point,
|
||||
neighbours: Callable[[Point], Iterator[Point]],
|
||||
) -> int:
|
||||
# Priority queue of (distance, point)
|
||||
queue = [(0, start)]
|
||||
seen: set[Point] = set()
|
||||
|
||||
while len(queue) > 0:
|
||||
dist, p = heapq.heappop(queue)
|
||||
if p == end:
|
||||
return dist
|
||||
# We must have seen p with a smaller distance before
|
||||
if p in seen:
|
||||
continue
|
||||
# First time encountering p, must be the smallest distance to it
|
||||
seen.add(p)
|
||||
# Add all neighbours to be visited
|
||||
for n in neighbours(p):
|
||||
heapq.heappush(queue, (dist + 1, n))
|
||||
|
||||
assert False # Sanity check
|
||||
|
||||
favorite_number = int(input.strip())
|
||||
neighbours = functools.partial(office_neighbours, number=favorite_number)
|
||||
return dijkstra(Point(1, 1), Point(31, 39), neighbours)
|
||||
|
||||
|
||||
def main() -> None:
|
||||
input = sys.stdin.read()
|
||||
print(solve(input))
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
1
2016/d13/ex1/input
Normal file
1
2016/d13/ex1/input
Normal file
|
|
@ -0,0 +1 @@
|
|||
1358
|
||||
67
2016/d13/ex2/ex2.py
Executable file
67
2016/d13/ex2/ex2.py
Executable file
|
|
@ -0,0 +1,67 @@
|
|||
#!/usr/bin/env python
|
||||
|
||||
import functools
|
||||
import heapq
|
||||
import sys
|
||||
from collections.abc import Callable, Iterator
|
||||
from typing import NamedTuple
|
||||
|
||||
|
||||
class Point(NamedTuple):
|
||||
x: int
|
||||
y: int
|
||||
|
||||
|
||||
def solve(input: str) -> int:
|
||||
def office_location_open(p: Point, number: int) -> bool:
|
||||
x, y = p
|
||||
return (x * x + 3 * x + 2 * x * y + y + y * y + number).bit_count() % 2 == 0
|
||||
|
||||
def office_neighbours(p: Point, number: int) -> Iterator[Point]:
|
||||
for dx, dy in (
|
||||
(-1, 0),
|
||||
(1, 0),
|
||||
(0, -1),
|
||||
(0, 1),
|
||||
):
|
||||
n = Point(p.x + dx, p.y + dy)
|
||||
if n.x < 0 or n.y < 0:
|
||||
continue
|
||||
if office_location_open(n, number):
|
||||
yield n
|
||||
|
||||
def explore(
|
||||
start: Point,
|
||||
max_steps: int,
|
||||
neighbours: Callable[[Point], Iterator[Point]],
|
||||
) -> int:
|
||||
queue = [(0, start)]
|
||||
seen: set[Point] = set()
|
||||
|
||||
while len(queue) > 0:
|
||||
dist, p = heapq.heappop(queue)
|
||||
if dist > max_steps:
|
||||
continue
|
||||
# We must have seen p with a smaller distance before
|
||||
if p in seen:
|
||||
continue
|
||||
# First time encountering p, must be the smallest distance to it
|
||||
seen.add(p)
|
||||
# Add all neighbours to be visited
|
||||
for n in neighbours(p):
|
||||
heapq.heappush(queue, (dist + 1, n))
|
||||
|
||||
return len(seen)
|
||||
|
||||
favorite_number = int(input.strip())
|
||||
neighbours = functools.partial(office_neighbours, number=favorite_number)
|
||||
return explore(Point(1, 1), 50, neighbours)
|
||||
|
||||
|
||||
def main() -> None:
|
||||
input = sys.stdin.read()
|
||||
print(solve(input))
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
1
2016/d13/ex2/input
Normal file
1
2016/d13/ex2/input
Normal file
|
|
@ -0,0 +1 @@
|
|||
1358
|
||||
42
2016/d14/ex1/ex1.py
Executable file
42
2016/d14/ex1/ex1.py
Executable file
|
|
@ -0,0 +1,42 @@
|
|||
#!/usr/bin/env python
|
||||
|
||||
import functools
|
||||
import hashlib
|
||||
import itertools
|
||||
import sys
|
||||
|
||||
|
||||
def solve(input: str) -> int:
|
||||
def hash(n: int, salt: str) -> str:
|
||||
return hashlib.md5((salt + str(n)).encode()).hexdigest()
|
||||
|
||||
def find_triplet_char(input: str) -> str | None:
|
||||
for i in range(0, len(input) - 2):
|
||||
a, b, c = input[i], input[i + 1], input[i + 2]
|
||||
if a == b and b == c:
|
||||
return a
|
||||
return None
|
||||
|
||||
salt = input.strip()
|
||||
hashed_salt = functools.cache(functools.partial(hash, salt=salt))
|
||||
cur_key = 0
|
||||
for i in itertools.count():
|
||||
candidate = hashed_salt(i)
|
||||
if (triplet_char := find_triplet_char(candidate)) is None:
|
||||
continue
|
||||
for j in range(i + 1, i + 1000 + 1):
|
||||
if (triplet_char * 5) in hashed_salt(j):
|
||||
cur_key += 1
|
||||
if cur_key == 64:
|
||||
return i
|
||||
break
|
||||
assert False # Sanity check
|
||||
|
||||
|
||||
def main() -> None:
|
||||
input = sys.stdin.read()
|
||||
print(solve(input))
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
1
2016/d14/ex1/input
Normal file
1
2016/d14/ex1/input
Normal file
|
|
@ -0,0 +1 @@
|
|||
ihaygndm
|
||||
45
2016/d14/ex2/ex2.py
Executable file
45
2016/d14/ex2/ex2.py
Executable file
|
|
@ -0,0 +1,45 @@
|
|||
#!/usr/bin/env python
|
||||
|
||||
import functools
|
||||
import hashlib
|
||||
import itertools
|
||||
import sys
|
||||
|
||||
|
||||
def solve(input: str) -> int:
|
||||
def hash(n: int, salt: str) -> str:
|
||||
key = salt + str(n)
|
||||
for _ in range(2016 + 1):
|
||||
key = hashlib.md5(key.encode()).hexdigest()
|
||||
return key
|
||||
|
||||
def find_triplet_char(input: str) -> str | None:
|
||||
for i in range(0, len(input) - 2):
|
||||
a, b, c = input[i], input[i + 1], input[i + 2]
|
||||
if a == b and b == c:
|
||||
return a
|
||||
return None
|
||||
|
||||
salt = input.strip()
|
||||
hashed_salt = functools.cache(functools.partial(hash, salt=salt))
|
||||
cur_key = 0
|
||||
for i in itertools.count():
|
||||
candidate = hashed_salt(i)
|
||||
if (triplet_char := find_triplet_char(candidate)) is None:
|
||||
continue
|
||||
for j in range(i + 1, i + 1000 + 1):
|
||||
if (triplet_char * 5) in hashed_salt(j):
|
||||
cur_key += 1
|
||||
if cur_key == 64:
|
||||
return i
|
||||
break
|
||||
assert False # Sanity check
|
||||
|
||||
|
||||
def main() -> None:
|
||||
input = sys.stdin.read()
|
||||
print(solve(input))
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
1
2016/d14/ex2/input
Normal file
1
2016/d14/ex2/input
Normal file
|
|
@ -0,0 +1 @@
|
|||
ihaygndm
|
||||
61
2016/d15/ex1/ex1.py
Executable file
61
2016/d15/ex1/ex1.py
Executable file
|
|
@ -0,0 +1,61 @@
|
|||
#!/usr/bin/env python
|
||||
|
||||
import math
|
||||
import sys
|
||||
from typing import NamedTuple
|
||||
|
||||
|
||||
class Disc(NamedTuple):
|
||||
num: int
|
||||
positions: int
|
||||
start_offset: int
|
||||
|
||||
@classmethod
|
||||
def from_str(cls, input: str) -> "Disc":
|
||||
input = input.removeprefix("Disc #").removesuffix(".")
|
||||
split_input = input.split()
|
||||
return Disc(
|
||||
int(split_input[0]),
|
||||
int(split_input[2]),
|
||||
int(split_input[-1]),
|
||||
)
|
||||
|
||||
|
||||
def solve(input: str) -> int:
|
||||
def parse(input: str) -> list[Disc]:
|
||||
return [Disc.from_str(line) for line in input.splitlines()]
|
||||
|
||||
# https://rosettacode.org/wiki/Chinese_remainder_theorem#Python_3.6
|
||||
def mul_inv(a: int, b: int) -> int:
|
||||
b0 = b
|
||||
x0, x1 = 0, 1
|
||||
if b == 1:
|
||||
return 1
|
||||
while a > 1:
|
||||
q = a // b
|
||||
a, b = b, a % b
|
||||
x0, x1 = x1 - q * x0, x0
|
||||
if x1 < 0:
|
||||
x1 += b0
|
||||
return x1
|
||||
|
||||
def chinese_remainder(residue_mapping: dict[int, int]) -> int:
|
||||
res = 0
|
||||
prod = math.prod(residue_mapping)
|
||||
for n_i, a_i in residue_mapping.items():
|
||||
p = prod // n_i
|
||||
res += a_i * mul_inv(p, n_i) * p
|
||||
return res % prod
|
||||
|
||||
discs = parse(input)
|
||||
residues = {disc.positions: -(disc.start_offset + disc.num) for disc in discs}
|
||||
return chinese_remainder(residues)
|
||||
|
||||
|
||||
def main() -> None:
|
||||
input = sys.stdin.read()
|
||||
print(solve(input))
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
6
2016/d15/ex1/input
Normal file
6
2016/d15/ex1/input
Normal file
|
|
@ -0,0 +1,6 @@
|
|||
Disc #1 has 17 positions; at time=0, it is at position 1.
|
||||
Disc #2 has 7 positions; at time=0, it is at position 0.
|
||||
Disc #3 has 19 positions; at time=0, it is at position 2.
|
||||
Disc #4 has 5 positions; at time=0, it is at position 0.
|
||||
Disc #5 has 3 positions; at time=0, it is at position 0.
|
||||
Disc #6 has 13 positions; at time=0, it is at position 5.
|
||||
62
2016/d15/ex2/ex2.py
Executable file
62
2016/d15/ex2/ex2.py
Executable file
|
|
@ -0,0 +1,62 @@
|
|||
#!/usr/bin/env python
|
||||
|
||||
import math
|
||||
import sys
|
||||
from typing import NamedTuple
|
||||
|
||||
|
||||
class Disc(NamedTuple):
|
||||
num: int
|
||||
positions: int
|
||||
start_offset: int
|
||||
|
||||
@classmethod
|
||||
def from_str(cls, input: str) -> "Disc":
|
||||
input = input.removeprefix("Disc #").removesuffix(".")
|
||||
split_input = input.split()
|
||||
return Disc(
|
||||
int(split_input[0]),
|
||||
int(split_input[2]),
|
||||
int(split_input[-1]),
|
||||
)
|
||||
|
||||
|
||||
def solve(input: str) -> int:
|
||||
def parse(input: str) -> list[Disc]:
|
||||
return [Disc.from_str(line) for line in input.splitlines()]
|
||||
|
||||
# https://rosettacode.org/wiki/Chinese_remainder_theorem#Python_3.6
|
||||
def mul_inv(a: int, b: int) -> int:
|
||||
b0 = b
|
||||
x0, x1 = 0, 1
|
||||
if b == 1:
|
||||
return 1
|
||||
while a > 1:
|
||||
q = a // b
|
||||
a, b = b, a % b
|
||||
x0, x1 = x1 - q * x0, x0
|
||||
if x1 < 0:
|
||||
x1 += b0
|
||||
return x1
|
||||
|
||||
def chinese_remainder(residue_mapping: dict[int, int]) -> int:
|
||||
res = 0
|
||||
prod = math.prod(residue_mapping)
|
||||
for n_i, a_i in residue_mapping.items():
|
||||
p = prod // n_i
|
||||
res += a_i * mul_inv(p, n_i) * p
|
||||
return res % prod
|
||||
|
||||
discs = parse(input)
|
||||
discs.append(Disc(len(discs) + 1, 11, 0))
|
||||
residues = {disc.positions: -(disc.start_offset + disc.num) for disc in discs}
|
||||
return chinese_remainder(residues)
|
||||
|
||||
|
||||
def main() -> None:
|
||||
input = sys.stdin.read()
|
||||
print(solve(input))
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
6
2016/d15/ex2/input
Normal file
6
2016/d15/ex2/input
Normal file
|
|
@ -0,0 +1,6 @@
|
|||
Disc #1 has 17 positions; at time=0, it is at position 1.
|
||||
Disc #2 has 7 positions; at time=0, it is at position 0.
|
||||
Disc #3 has 19 positions; at time=0, it is at position 2.
|
||||
Disc #4 has 5 positions; at time=0, it is at position 0.
|
||||
Disc #5 has 3 positions; at time=0, it is at position 0.
|
||||
Disc #6 has 13 positions; at time=0, it is at position 5.
|
||||
30
2016/d16/ex1/ex1.py
Executable file
30
2016/d16/ex1/ex1.py
Executable file
|
|
@ -0,0 +1,30 @@
|
|||
#!/usr/bin/env python
|
||||
|
||||
import itertools
|
||||
import sys
|
||||
|
||||
|
||||
def solve(input: str) -> str:
|
||||
def curve_step(input: str) -> str:
|
||||
b = input.translate(str.maketrans("01", "10"))[::-1]
|
||||
return input + "0" + b
|
||||
|
||||
def checksum(state: str) -> str:
|
||||
while len(state) % 2 == 0:
|
||||
state = "".join(str(int(a == b)) for a, b in itertools.batched(state, 2))
|
||||
return state
|
||||
|
||||
state = input.strip()
|
||||
disk_size = 272
|
||||
while len(state) < disk_size:
|
||||
state = curve_step(state)
|
||||
return checksum(state[:disk_size])
|
||||
|
||||
|
||||
def main() -> None:
|
||||
input = sys.stdin.read()
|
||||
print(solve(input))
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
1
2016/d16/ex1/input
Normal file
1
2016/d16/ex1/input
Normal file
|
|
@ -0,0 +1 @@
|
|||
00101000101111010
|
||||
30
2016/d16/ex2/ex2.py
Executable file
30
2016/d16/ex2/ex2.py
Executable file
|
|
@ -0,0 +1,30 @@
|
|||
#!/usr/bin/env python
|
||||
|
||||
import itertools
|
||||
import sys
|
||||
|
||||
|
||||
def solve(input: str) -> str:
|
||||
def curve_step(input: str) -> str:
|
||||
b = input.translate(str.maketrans("01", "10"))[::-1]
|
||||
return input + "0" + b
|
||||
|
||||
def checksum(state: str) -> str:
|
||||
while len(state) % 2 == 0:
|
||||
state = "".join(str(int(a == b)) for a, b in itertools.batched(state, 2))
|
||||
return state
|
||||
|
||||
state = input.strip()
|
||||
disk_size = 35651584
|
||||
while len(state) < disk_size:
|
||||
state = curve_step(state)
|
||||
return checksum(state[:disk_size])
|
||||
|
||||
|
||||
def main() -> None:
|
||||
input = sys.stdin.read()
|
||||
print(solve(input))
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
1
2016/d16/ex2/input
Normal file
1
2016/d16/ex2/input
Normal file
|
|
@ -0,0 +1 @@
|
|||
00101000101111010
|
||||
81
2016/d17/ex1/ex1.py
Executable file
81
2016/d17/ex1/ex1.py
Executable file
|
|
@ -0,0 +1,81 @@
|
|||
#!/usr/bin/env python
|
||||
|
||||
import enum
|
||||
import functools
|
||||
import hashlib
|
||||
import sys
|
||||
from collections.abc import Callable, Iterator
|
||||
from typing import NamedTuple
|
||||
|
||||
|
||||
class Point(NamedTuple):
|
||||
x: int
|
||||
y: int
|
||||
|
||||
|
||||
# Iteration order of `Direction` is relevant to the solution
|
||||
class Direction(enum.StrEnum):
|
||||
UP = "U"
|
||||
DOWN = "D"
|
||||
LEFT = "L"
|
||||
RIGHT = "R"
|
||||
|
||||
def apply(self, p: Point) -> Point:
|
||||
match self:
|
||||
case Direction.UP:
|
||||
dx, dy = -1, 0
|
||||
case Direction.DOWN:
|
||||
dx, dy = 1, 0
|
||||
case Direction.LEFT:
|
||||
dx, dy = 0, -1
|
||||
case Direction.RIGHT:
|
||||
dx, dy = 0, 1
|
||||
return Point(p.x + dx, p.y + dy)
|
||||
|
||||
|
||||
Path = tuple[Direction, ...]
|
||||
|
||||
|
||||
def solve(input: str) -> str:
|
||||
def doors_at_passcode(path: Path, passcode: str) -> Iterator[Direction]:
|
||||
hashed = hashlib.md5((passcode + "".join(path)).encode()).hexdigest()[:4]
|
||||
for c, dir in zip(hashed, Direction):
|
||||
if c.isdigit() or c == "a":
|
||||
continue
|
||||
yield Direction(dir) # Satisfy Mypy to use the correct return type...
|
||||
|
||||
def bfs(
|
||||
start: Point,
|
||||
end: Point,
|
||||
doors_at: Callable[[Path], Iterator[Direction]],
|
||||
) -> Path:
|
||||
queue: list[tuple[Point, Path]] = [(start, ())]
|
||||
|
||||
while queue:
|
||||
new_queue: list[tuple[Point, Path]] = []
|
||||
for p, path in queue:
|
||||
if p == end:
|
||||
return path
|
||||
for dir in doors_at(path):
|
||||
new_pos = dir.apply(p)
|
||||
if new_pos.x < 0 or new_pos.x > end.x:
|
||||
continue
|
||||
if new_pos.y < 0 or new_pos.y > end.y:
|
||||
continue
|
||||
new_queue.append((dir.apply(p), path + (dir,)))
|
||||
queue = new_queue
|
||||
|
||||
assert False # Sanity check
|
||||
|
||||
passcode = input.strip()
|
||||
doors_at = functools.partial(doors_at_passcode, passcode=passcode)
|
||||
return "".join(bfs(Point(0, 0), Point(3, 3), doors_at))
|
||||
|
||||
|
||||
def main() -> None:
|
||||
input = sys.stdin.read()
|
||||
print(solve(input))
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
1
2016/d17/ex1/input
Normal file
1
2016/d17/ex1/input
Normal file
|
|
@ -0,0 +1 @@
|
|||
pgflpeqp
|
||||
83
2016/d17/ex2/ex2.py
Executable file
83
2016/d17/ex2/ex2.py
Executable file
|
|
@ -0,0 +1,83 @@
|
|||
#!/usr/bin/env python
|
||||
|
||||
import enum
|
||||
import functools
|
||||
import hashlib
|
||||
import sys
|
||||
from collections.abc import Callable, Iterator
|
||||
from typing import NamedTuple
|
||||
|
||||
|
||||
class Point(NamedTuple):
|
||||
x: int
|
||||
y: int
|
||||
|
||||
|
||||
# Iteration order of `Direction` is relevant to the solution
|
||||
class Direction(enum.StrEnum):
|
||||
UP = "U"
|
||||
DOWN = "D"
|
||||
LEFT = "L"
|
||||
RIGHT = "R"
|
||||
|
||||
def apply(self, p: Point) -> Point:
|
||||
match self:
|
||||
case Direction.UP:
|
||||
dx, dy = -1, 0
|
||||
case Direction.DOWN:
|
||||
dx, dy = 1, 0
|
||||
case Direction.LEFT:
|
||||
dx, dy = 0, -1
|
||||
case Direction.RIGHT:
|
||||
dx, dy = 0, 1
|
||||
return Point(p.x + dx, p.y + dy)
|
||||
|
||||
|
||||
Path = tuple[Direction, ...]
|
||||
|
||||
|
||||
def solve(input: str) -> int:
|
||||
def doors_at_passcode(path: Path, passcode: str) -> Iterator[Direction]:
|
||||
hashed = hashlib.md5((passcode + "".join(path)).encode()).hexdigest()[:4]
|
||||
for c, dir in zip(hashed, Direction):
|
||||
if c.isdigit() or c == "a":
|
||||
continue
|
||||
yield Direction(dir) # Satisfy Mypy to use the correct return type...
|
||||
|
||||
def bfs(
|
||||
start: Point,
|
||||
end: Point,
|
||||
doors_at: Callable[[Path], Iterator[Direction]],
|
||||
) -> int:
|
||||
queue: list[tuple[Point, Path]] = [(start, ())]
|
||||
max_dist = -1
|
||||
|
||||
while queue:
|
||||
new_queue: list[tuple[Point, Path]] = []
|
||||
for p, path in queue:
|
||||
if p == end:
|
||||
max_dist = max(max_dist, len(path))
|
||||
continue
|
||||
for dir in doors_at(path):
|
||||
new_pos = dir.apply(p)
|
||||
if new_pos.x < 0 or new_pos.x > end.x:
|
||||
continue
|
||||
if new_pos.y < 0 or new_pos.y > end.y:
|
||||
continue
|
||||
new_queue.append((dir.apply(p), path + (dir,)))
|
||||
queue = new_queue
|
||||
|
||||
return max_dist
|
||||
|
||||
passcode = input.strip()
|
||||
doors_at = functools.partial(doors_at_passcode, passcode=passcode)
|
||||
return bfs(Point(0, 0), Point(3, 3), doors_at)
|
||||
|
||||
|
||||
def main() -> None:
|
||||
input = sys.stdin.read()
|
||||
print(solve(input))
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
1
2016/d17/ex2/input
Normal file
1
2016/d17/ex2/input
Normal file
|
|
@ -0,0 +1 @@
|
|||
pgflpeqp
|
||||
41
2016/d18/ex1/ex1.py
Executable file
41
2016/d18/ex1/ex1.py
Executable file
|
|
@ -0,0 +1,41 @@
|
|||
#!/usr/bin/env python
|
||||
|
||||
import sys
|
||||
|
||||
|
||||
def solve(input: str) -> int:
|
||||
def parse(input: str) -> set[int]:
|
||||
return {i for i, c in enumerate(input.strip()) if c == "^"}
|
||||
|
||||
def is_trap(tile: int, traps: set[int]) -> bool:
|
||||
match ((tile - 1) in traps, tile in traps, (tile + 1) in traps):
|
||||
case (True, True, False):
|
||||
return True
|
||||
case (False, True, True):
|
||||
return True
|
||||
case (True, False, False):
|
||||
return True
|
||||
case (False, False, True):
|
||||
return True
|
||||
case _:
|
||||
return False
|
||||
|
||||
def step_row(traps: set[int], row_length: int) -> set[int]:
|
||||
return {i for i in range(row_length) if is_trap(i, traps)}
|
||||
|
||||
traps = parse(input)
|
||||
row_length = len(input.strip())
|
||||
safe_tiles = row_length - len(traps)
|
||||
for _ in range(40 - 1):
|
||||
traps = step_row(traps, row_length)
|
||||
safe_tiles += row_length - len(traps)
|
||||
return safe_tiles
|
||||
|
||||
|
||||
def main() -> None:
|
||||
input = sys.stdin.read()
|
||||
print(solve(input))
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
1
2016/d18/ex1/input
Normal file
1
2016/d18/ex1/input
Normal file
|
|
@ -0,0 +1 @@
|
|||
^..^^.^^^..^^.^...^^^^^....^.^..^^^.^.^.^^...^.^.^.^.^^.....^.^^.^.^.^.^.^.^^..^^^^^...^.....^....^.
|
||||
42
2016/d18/ex2/ex2.py
Executable file
42
2016/d18/ex2/ex2.py
Executable file
|
|
@ -0,0 +1,42 @@
|
|||
#!/usr/bin/env python
|
||||
|
||||
import sys
|
||||
|
||||
|
||||
def solve(input: str) -> int:
|
||||
def parse(input: str) -> set[int]:
|
||||
return {i for i, c in enumerate(input.strip()) if c == "^"}
|
||||
|
||||
def is_trap(tile: int, traps: set[int]) -> bool:
|
||||
match ((tile - 1) in traps, tile in traps, (tile + 1) in traps):
|
||||
case (True, True, False):
|
||||
return True
|
||||
case (False, True, True):
|
||||
return True
|
||||
case (True, False, False):
|
||||
return True
|
||||
case (False, False, True):
|
||||
return True
|
||||
case _:
|
||||
return False
|
||||
|
||||
def step_row(traps: set[int], row_length: int) -> set[int]:
|
||||
return {i for i in range(row_length) if is_trap(i, traps)}
|
||||
|
||||
traps = parse(input)
|
||||
row_length = len(input.strip())
|
||||
safe_tiles = row_length - len(traps)
|
||||
# No cycles, we really need to iterate though all steps
|
||||
for _ in range(400000 - 1):
|
||||
traps = step_row(traps, row_length)
|
||||
safe_tiles += row_length - len(traps)
|
||||
return safe_tiles
|
||||
|
||||
|
||||
def main() -> None:
|
||||
input = sys.stdin.read()
|
||||
print(solve(input))
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
1
2016/d18/ex2/input
Normal file
1
2016/d18/ex2/input
Normal file
|
|
@ -0,0 +1 @@
|
|||
^..^^.^^^..^^.^...^^^^^....^.^..^^^.^.^.^^...^.^.^.^.^^.....^.^^.^.^.^.^.^.^^..^^^^^...^.....^....^.
|
||||
25
2016/d19/ex1/ex1.py
Executable file
25
2016/d19/ex1/ex1.py
Executable file
|
|
@ -0,0 +1,25 @@
|
|||
#!/usr/bin/env python
|
||||
|
||||
import sys
|
||||
|
||||
|
||||
def solve(input: str) -> int:
|
||||
def msb(n: int) -> int:
|
||||
assert n # Sanity check
|
||||
return n.bit_length() - 1
|
||||
|
||||
# https://en.wikipedia.org/wiki/Josephus_problem
|
||||
def josephus(n: int) -> int:
|
||||
return 2 * (n - (1 << msb(n))) + 1
|
||||
|
||||
num_elves = int(input.strip())
|
||||
return josephus(num_elves)
|
||||
|
||||
|
||||
def main() -> None:
|
||||
input = sys.stdin.read()
|
||||
print(solve(input))
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
1
2016/d19/ex1/input
Normal file
1
2016/d19/ex1/input
Normal file
|
|
@ -0,0 +1 @@
|
|||
3014387
|
||||
31
2016/d19/ex2/ex2.py
Executable file
31
2016/d19/ex2/ex2.py
Executable file
|
|
@ -0,0 +1,31 @@
|
|||
#!/usr/bin/env python
|
||||
|
||||
import collections
|
||||
import sys
|
||||
|
||||
|
||||
def solve(input: str) -> int:
|
||||
def white_elephant(num_elves: int) -> int:
|
||||
left = collections.deque(range(1, (num_elves // 2) + 1))
|
||||
right = collections.deque(range(num_elves, (num_elves // 2), -1))
|
||||
|
||||
while left and right:
|
||||
if len(left) > len(right):
|
||||
left.pop()
|
||||
else:
|
||||
right.pop()
|
||||
right.appendleft(left.popleft())
|
||||
left.append(right.pop())
|
||||
return (left + right)[0]
|
||||
|
||||
num_elves = int(input.strip())
|
||||
return white_elephant(num_elves)
|
||||
|
||||
|
||||
def main() -> None:
|
||||
input = sys.stdin.read()
|
||||
print(solve(input))
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
1
2016/d19/ex2/input
Normal file
1
2016/d19/ex2/input
Normal file
|
|
@ -0,0 +1 @@
|
|||
3014387
|
||||
44
2016/d20/ex1/ex1.py
Executable file
44
2016/d20/ex1/ex1.py
Executable file
|
|
@ -0,0 +1,44 @@
|
|||
#!/usr/bin/env python
|
||||
|
||||
import sys
|
||||
from typing import NamedTuple
|
||||
|
||||
|
||||
class Interval(NamedTuple):
|
||||
start: int
|
||||
end: int
|
||||
|
||||
@classmethod
|
||||
def from_str(cls, input: str) -> "Interval":
|
||||
start, end = input.split("-")
|
||||
return cls(int(start), int(end))
|
||||
|
||||
|
||||
def solve(input: str) -> int:
|
||||
def parse(input: str) -> list[Interval]:
|
||||
return [Interval.from_str(line) for line in input.splitlines()]
|
||||
|
||||
def merge_overlaps(intervals: list[Interval]) -> list[Interval]:
|
||||
# Sort intervals by start, then merge overlapping ones
|
||||
intervals = sorted(intervals)
|
||||
res = [intervals[0]]
|
||||
for interval in intervals[1:]:
|
||||
# `+ 1` to merge [0, 2] and [2, 5]
|
||||
if interval.start <= (res[-1].end + 1):
|
||||
res[-1] = Interval(res[-1].start, max(interval.end, res[-1].end))
|
||||
else:
|
||||
res.append(interval)
|
||||
return res
|
||||
|
||||
intervals = parse(input)
|
||||
intervals = merge_overlaps(intervals)
|
||||
return 0 if intervals[0].start else intervals[0].end + 1
|
||||
|
||||
|
||||
def main() -> None:
|
||||
input = sys.stdin.read()
|
||||
print(solve(input))
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
1029
2016/d20/ex1/input
Normal file
1029
2016/d20/ex1/input
Normal file
File diff suppressed because it is too large
Load diff
44
2016/d20/ex2/ex2.py
Executable file
44
2016/d20/ex2/ex2.py
Executable file
|
|
@ -0,0 +1,44 @@
|
|||
#!/usr/bin/env python
|
||||
|
||||
import sys
|
||||
from typing import NamedTuple
|
||||
|
||||
|
||||
class Interval(NamedTuple):
|
||||
start: int
|
||||
end: int
|
||||
|
||||
@classmethod
|
||||
def from_str(cls, input: str) -> "Interval":
|
||||
start, end = input.split("-")
|
||||
return cls(int(start), int(end))
|
||||
|
||||
|
||||
def solve(input: str) -> int:
|
||||
def parse(input: str) -> list[Interval]:
|
||||
return [Interval.from_str(line) for line in input.splitlines()]
|
||||
|
||||
def merge_overlaps(intervals: list[Interval]) -> list[Interval]:
|
||||
# Sort intervals by start, then merge overlapping ones
|
||||
intervals = sorted(intervals)
|
||||
res = [intervals[0]]
|
||||
for interval in intervals[1:]:
|
||||
# `+ 1` to merge [0, 2] and [2, 5]
|
||||
if interval.start <= (res[-1].end + 1):
|
||||
res[-1] = Interval(res[-1].start, max(interval.end, res[-1].end))
|
||||
else:
|
||||
res.append(interval)
|
||||
return res
|
||||
|
||||
intervals = parse(input)
|
||||
intervals = merge_overlaps(intervals)
|
||||
return (1 << 32) - sum((end - start + 1) for start, end in intervals)
|
||||
|
||||
|
||||
def main() -> None:
|
||||
input = sys.stdin.read()
|
||||
print(solve(input))
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
1029
2016/d20/ex2/input
Normal file
1029
2016/d20/ex2/input
Normal file
File diff suppressed because it is too large
Load diff
92
2016/d21/ex1/ex1.py
Executable file
92
2016/d21/ex1/ex1.py
Executable file
|
|
@ -0,0 +1,92 @@
|
|||
#!/usr/bin/env python
|
||||
|
||||
import enum
|
||||
import sys
|
||||
from typing import NamedTuple
|
||||
|
||||
|
||||
class Op(enum.StrEnum):
|
||||
SWAP_POSITION = "swap position"
|
||||
SWAP_LETTER = "swap letter"
|
||||
ROTATE_LEFT = "rotate left"
|
||||
ROTATE_RIGHT = "rotate right"
|
||||
ROTATE_BASED = "rotate based"
|
||||
REVERSE_POSITION = "reverse positions"
|
||||
MOVE_POSITION = "move position"
|
||||
|
||||
|
||||
class Instruction(NamedTuple):
|
||||
op: Op
|
||||
x: str
|
||||
y: str | None
|
||||
|
||||
@classmethod
|
||||
def from_str(cls, input: str) -> "Instruction":
|
||||
split_input = input.split()
|
||||
op = Op(" ".join(split_input[:2]))
|
||||
x: str
|
||||
y: str | None
|
||||
match op:
|
||||
case Op.ROTATE_LEFT | Op.ROTATE_RIGHT:
|
||||
x, y = split_input[2], None
|
||||
case Op.ROTATE_BASED:
|
||||
x, y = split_input[-1], None
|
||||
case _:
|
||||
x, y = split_input[2], split_input[-1]
|
||||
return cls(op, x, y)
|
||||
|
||||
def apply(self, password: str) -> str:
|
||||
letters = list(password)
|
||||
match self.op:
|
||||
case Op.SWAP_POSITION:
|
||||
assert self.y is not None # Sanity check
|
||||
x, y = int(self.x), int(self.y)
|
||||
letters[x], letters[y] = letters[y], letters[x]
|
||||
case Op.SWAP_LETTER:
|
||||
assert self.y is not None # Sanity check
|
||||
x, y = letters.index(self.x), letters.index(self.y)
|
||||
letters[x], letters[y] = letters[y], letters[x]
|
||||
case Op.ROTATE_LEFT:
|
||||
x = int(self.x)
|
||||
x %= len(letters)
|
||||
letters = letters[x:] + letters[:x]
|
||||
case Op.ROTATE_RIGHT:
|
||||
x = int(self.x)
|
||||
x %= len(letters)
|
||||
letters = letters[-x:] + letters[:-x]
|
||||
case Op.ROTATE_BASED:
|
||||
x = letters.index(self.x)
|
||||
x += x >= 4
|
||||
x += 1
|
||||
x %= len(letters)
|
||||
letters = letters[-x:] + letters[:-x]
|
||||
case Op.REVERSE_POSITION:
|
||||
assert self.y is not None # Sanity check
|
||||
x, y = int(self.x), int(self.y)
|
||||
letters[x : y + 1] = letters[x : y + 1][::-1]
|
||||
case Op.MOVE_POSITION:
|
||||
assert self.y is not None # Sanity check
|
||||
x, y = int(self.x), int(self.y)
|
||||
letter = letters.pop(x)
|
||||
letters.insert(y, letter)
|
||||
return "".join(letters)
|
||||
|
||||
|
||||
def solve(input: str) -> str:
|
||||
def parse(input: str) -> list[Instruction]:
|
||||
return [Instruction.from_str(line) for line in input.splitlines()]
|
||||
|
||||
instructions = parse(input)
|
||||
password = "abcdefgh"
|
||||
for instruction in instructions:
|
||||
password = instruction.apply(password)
|
||||
return password
|
||||
|
||||
|
||||
def main() -> None:
|
||||
input = sys.stdin.read()
|
||||
print(solve(input))
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
100
2016/d21/ex1/input
Normal file
100
2016/d21/ex1/input
Normal file
|
|
@ -0,0 +1,100 @@
|
|||
swap letter a with letter d
|
||||
move position 6 to position 4
|
||||
move position 5 to position 1
|
||||
swap letter h with letter e
|
||||
rotate based on position of letter a
|
||||
move position 6 to position 2
|
||||
reverse positions 0 through 1
|
||||
rotate based on position of letter h
|
||||
rotate based on position of letter g
|
||||
rotate based on position of letter h
|
||||
reverse positions 4 through 7
|
||||
swap letter a with letter f
|
||||
swap position 2 with position 7
|
||||
move position 7 to position 5
|
||||
reverse positions 0 through 5
|
||||
rotate based on position of letter f
|
||||
rotate right 4 steps
|
||||
swap position 3 with position 0
|
||||
move position 1 to position 2
|
||||
reverse positions 4 through 6
|
||||
swap position 3 with position 5
|
||||
swap letter a with letter c
|
||||
swap position 5 with position 2
|
||||
swap position 7 with position 2
|
||||
move position 2 to position 5
|
||||
rotate based on position of letter h
|
||||
rotate right 2 steps
|
||||
swap position 3 with position 4
|
||||
move position 0 to position 1
|
||||
reverse positions 1 through 7
|
||||
reverse positions 1 through 4
|
||||
rotate based on position of letter b
|
||||
rotate right 7 steps
|
||||
rotate left 0 steps
|
||||
swap position 6 with position 1
|
||||
reverse positions 1 through 3
|
||||
reverse positions 0 through 3
|
||||
move position 0 to position 4
|
||||
rotate based on position of letter f
|
||||
reverse positions 0 through 7
|
||||
reverse positions 0 through 1
|
||||
move position 1 to position 7
|
||||
move position 7 to position 6
|
||||
rotate based on position of letter b
|
||||
reverse positions 3 through 5
|
||||
reverse positions 0 through 3
|
||||
swap letter c with letter h
|
||||
reverse positions 3 through 5
|
||||
swap position 3 with position 6
|
||||
swap letter d with letter g
|
||||
move position 5 to position 6
|
||||
swap position 6 with position 2
|
||||
rotate right 5 steps
|
||||
swap letter e with letter g
|
||||
rotate based on position of letter e
|
||||
rotate based on position of letter c
|
||||
swap letter g with letter e
|
||||
rotate based on position of letter b
|
||||
rotate based on position of letter b
|
||||
swap position 0 with position 2
|
||||
move position 6 to position 0
|
||||
move position 5 to position 0
|
||||
rotate left 2 steps
|
||||
move position 0 to position 5
|
||||
rotate left 7 steps
|
||||
swap letter b with letter g
|
||||
rotate based on position of letter d
|
||||
swap letter h with letter e
|
||||
swap letter d with letter c
|
||||
rotate based on position of letter f
|
||||
move position 5 to position 0
|
||||
rotate left 5 steps
|
||||
swap position 0 with position 7
|
||||
swap position 0 with position 3
|
||||
rotate left 4 steps
|
||||
rotate left 1 step
|
||||
rotate right 6 steps
|
||||
swap position 0 with position 1
|
||||
reverse positions 4 through 6
|
||||
reverse positions 4 through 6
|
||||
move position 6 to position 3
|
||||
move position 7 to position 4
|
||||
rotate right 4 steps
|
||||
swap letter g with letter d
|
||||
swap letter c with letter e
|
||||
swap letter e with letter h
|
||||
rotate right 5 steps
|
||||
rotate based on position of letter g
|
||||
rotate based on position of letter g
|
||||
rotate left 3 steps
|
||||
swap letter h with letter g
|
||||
reverse positions 0 through 4
|
||||
rotate right 4 steps
|
||||
move position 6 to position 4
|
||||
rotate based on position of letter c
|
||||
swap position 2 with position 6
|
||||
swap position 7 with position 2
|
||||
rotate right 1 step
|
||||
swap position 3 with position 1
|
||||
swap position 4 with position 6
|
||||
101
2016/d21/ex2/ex2.py
Executable file
101
2016/d21/ex2/ex2.py
Executable file
|
|
@ -0,0 +1,101 @@
|
|||
#!/usr/bin/env python
|
||||
|
||||
import enum
|
||||
import sys
|
||||
from typing import NamedTuple
|
||||
|
||||
|
||||
class Op(enum.StrEnum):
|
||||
SWAP_POSITION = "swap position"
|
||||
SWAP_LETTER = "swap letter"
|
||||
ROTATE_LEFT = "rotate left"
|
||||
ROTATE_RIGHT = "rotate right"
|
||||
ROTATE_BASED = "rotate based"
|
||||
REVERSE_POSITION = "reverse positions"
|
||||
MOVE_POSITION = "move position"
|
||||
|
||||
|
||||
class Instruction(NamedTuple):
|
||||
op: Op
|
||||
x: str
|
||||
y: str | None
|
||||
|
||||
@classmethod
|
||||
def from_str(cls, input: str) -> "Instruction":
|
||||
split_input = input.split()
|
||||
op = Op(" ".join(split_input[:2]))
|
||||
x: str
|
||||
y: str | None
|
||||
match op:
|
||||
case Op.ROTATE_LEFT | Op.ROTATE_RIGHT:
|
||||
x, y = split_input[2], None
|
||||
case Op.ROTATE_BASED:
|
||||
x, y = split_input[-1], None
|
||||
case _:
|
||||
x, y = split_input[2], split_input[-1]
|
||||
return cls(op, x, y)
|
||||
|
||||
def undo(self, password: str) -> str:
|
||||
letters = list(password)
|
||||
match self.op:
|
||||
case Op.SWAP_POSITION:
|
||||
assert self.y is not None # Sanity check
|
||||
x, y = int(self.x), int(self.y)
|
||||
letters[x], letters[y] = letters[y], letters[x]
|
||||
case Op.SWAP_LETTER:
|
||||
assert self.y is not None # Sanity check
|
||||
x, y = letters.index(self.x), letters.index(self.y)
|
||||
letters[x], letters[y] = letters[y], letters[x]
|
||||
case Op.ROTATE_LEFT:
|
||||
x = int(self.x)
|
||||
x %= len(letters)
|
||||
letters = letters[-x:] + letters[:-x]
|
||||
case Op.ROTATE_RIGHT:
|
||||
x = int(self.x)
|
||||
x %= len(letters)
|
||||
letters = letters[x:] + letters[:x]
|
||||
case Op.ROTATE_BASED:
|
||||
# original: 0 1 2 3 4 5 6 7
|
||||
# result: 1 3 5 7 2 4 6 0
|
||||
# rotation: 1 2 3 4 6 7 0 1
|
||||
x = {
|
||||
1: 1,
|
||||
3: 2,
|
||||
5: 3,
|
||||
7: 4,
|
||||
2: 6,
|
||||
4: 7,
|
||||
6: 0,
|
||||
0: 1,
|
||||
}[letters.index(self.x)]
|
||||
letters = letters[x:] + letters[:x]
|
||||
case Op.REVERSE_POSITION:
|
||||
assert self.y is not None # Sanity check
|
||||
x, y = int(self.x), int(self.y)
|
||||
letters[x : y + 1] = letters[x : y + 1][::-1]
|
||||
case Op.MOVE_POSITION:
|
||||
assert self.y is not None # Sanity check
|
||||
x, y = int(self.x), int(self.y)
|
||||
letter = letters.pop(y)
|
||||
letters.insert(x, letter)
|
||||
return "".join(letters)
|
||||
|
||||
|
||||
def solve(input: str) -> str:
|
||||
def parse(input: str) -> list[Instruction]:
|
||||
return [Instruction.from_str(line) for line in input.splitlines()]
|
||||
|
||||
instructions = parse(input)
|
||||
password = "fbgdceah"
|
||||
for instruction in instructions[::-1]:
|
||||
password = instruction.undo(password)
|
||||
return password
|
||||
|
||||
|
||||
def main() -> None:
|
||||
input = sys.stdin.read()
|
||||
print(solve(input))
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
100
2016/d21/ex2/input
Normal file
100
2016/d21/ex2/input
Normal file
|
|
@ -0,0 +1,100 @@
|
|||
swap letter a with letter d
|
||||
move position 6 to position 4
|
||||
move position 5 to position 1
|
||||
swap letter h with letter e
|
||||
rotate based on position of letter a
|
||||
move position 6 to position 2
|
||||
reverse positions 0 through 1
|
||||
rotate based on position of letter h
|
||||
rotate based on position of letter g
|
||||
rotate based on position of letter h
|
||||
reverse positions 4 through 7
|
||||
swap letter a with letter f
|
||||
swap position 2 with position 7
|
||||
move position 7 to position 5
|
||||
reverse positions 0 through 5
|
||||
rotate based on position of letter f
|
||||
rotate right 4 steps
|
||||
swap position 3 with position 0
|
||||
move position 1 to position 2
|
||||
reverse positions 4 through 6
|
||||
swap position 3 with position 5
|
||||
swap letter a with letter c
|
||||
swap position 5 with position 2
|
||||
swap position 7 with position 2
|
||||
move position 2 to position 5
|
||||
rotate based on position of letter h
|
||||
rotate right 2 steps
|
||||
swap position 3 with position 4
|
||||
move position 0 to position 1
|
||||
reverse positions 1 through 7
|
||||
reverse positions 1 through 4
|
||||
rotate based on position of letter b
|
||||
rotate right 7 steps
|
||||
rotate left 0 steps
|
||||
swap position 6 with position 1
|
||||
reverse positions 1 through 3
|
||||
reverse positions 0 through 3
|
||||
move position 0 to position 4
|
||||
rotate based on position of letter f
|
||||
reverse positions 0 through 7
|
||||
reverse positions 0 through 1
|
||||
move position 1 to position 7
|
||||
move position 7 to position 6
|
||||
rotate based on position of letter b
|
||||
reverse positions 3 through 5
|
||||
reverse positions 0 through 3
|
||||
swap letter c with letter h
|
||||
reverse positions 3 through 5
|
||||
swap position 3 with position 6
|
||||
swap letter d with letter g
|
||||
move position 5 to position 6
|
||||
swap position 6 with position 2
|
||||
rotate right 5 steps
|
||||
swap letter e with letter g
|
||||
rotate based on position of letter e
|
||||
rotate based on position of letter c
|
||||
swap letter g with letter e
|
||||
rotate based on position of letter b
|
||||
rotate based on position of letter b
|
||||
swap position 0 with position 2
|
||||
move position 6 to position 0
|
||||
move position 5 to position 0
|
||||
rotate left 2 steps
|
||||
move position 0 to position 5
|
||||
rotate left 7 steps
|
||||
swap letter b with letter g
|
||||
rotate based on position of letter d
|
||||
swap letter h with letter e
|
||||
swap letter d with letter c
|
||||
rotate based on position of letter f
|
||||
move position 5 to position 0
|
||||
rotate left 5 steps
|
||||
swap position 0 with position 7
|
||||
swap position 0 with position 3
|
||||
rotate left 4 steps
|
||||
rotate left 1 step
|
||||
rotate right 6 steps
|
||||
swap position 0 with position 1
|
||||
reverse positions 4 through 6
|
||||
reverse positions 4 through 6
|
||||
move position 6 to position 3
|
||||
move position 7 to position 4
|
||||
rotate right 4 steps
|
||||
swap letter g with letter d
|
||||
swap letter c with letter e
|
||||
swap letter e with letter h
|
||||
rotate right 5 steps
|
||||
rotate based on position of letter g
|
||||
rotate based on position of letter g
|
||||
rotate left 3 steps
|
||||
swap letter h with letter g
|
||||
reverse positions 0 through 4
|
||||
rotate right 4 steps
|
||||
move position 6 to position 4
|
||||
rotate based on position of letter c
|
||||
swap position 2 with position 6
|
||||
swap position 7 with position 2
|
||||
rotate right 1 step
|
||||
swap position 3 with position 1
|
||||
swap position 4 with position 6
|
||||
49
2016/d22/ex1/ex1.py
Executable file
49
2016/d22/ex1/ex1.py
Executable file
|
|
@ -0,0 +1,49 @@
|
|||
#!/usr/bin/env python
|
||||
|
||||
import itertools
|
||||
import sys
|
||||
from typing import NamedTuple
|
||||
|
||||
|
||||
class Point(NamedTuple):
|
||||
x: int
|
||||
y: int
|
||||
|
||||
|
||||
class Filesystem(NamedTuple):
|
||||
size: int
|
||||
used: int
|
||||
|
||||
@property
|
||||
def avail(self) -> int:
|
||||
return self.size - self.used
|
||||
|
||||
|
||||
def solve(input: str) -> int:
|
||||
def parse_line(input: str) -> tuple[Point, Filesystem]:
|
||||
raw_fs, raw_size, raw_used, raw_avail, _ = input.split()
|
||||
size = int(raw_size.removesuffix("T"))
|
||||
used = int(raw_used.removesuffix("T"))
|
||||
avail = int(raw_avail.removesuffix("T"))
|
||||
assert size == (used + avail) # Sanity check
|
||||
*_, x, y = raw_fs.split("-")
|
||||
return Point(int(x[1:]), int(y[1:])), Filesystem(size, used)
|
||||
|
||||
def parse(input: str) -> dict[Point, Filesystem]:
|
||||
return {node: fs for node, fs in map(parse_line, input.splitlines()[2:])}
|
||||
|
||||
df = parse(input)
|
||||
return sum(
|
||||
a.used <= b.avail
|
||||
for a, b in itertools.permutations(df.values(), 2)
|
||||
if a.used > 0
|
||||
)
|
||||
|
||||
|
||||
def main() -> None:
|
||||
input = sys.stdin.read()
|
||||
print(solve(input))
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
877
2016/d22/ex1/input
Normal file
877
2016/d22/ex1/input
Normal file
|
|
@ -0,0 +1,877 @@
|
|||
root@ebhq-gridcenter# df -h
|
||||
Filesystem Size Used Avail Use%
|
||||
/dev/grid/node-x0-y0 94T 65T 29T 69%
|
||||
/dev/grid/node-x0-y1 88T 69T 19T 78%
|
||||
/dev/grid/node-x0-y2 92T 72T 20T 78%
|
||||
/dev/grid/node-x0-y3 93T 73T 20T 78%
|
||||
/dev/grid/node-x0-y4 85T 73T 12T 85%
|
||||
/dev/grid/node-x0-y5 94T 70T 24T 74%
|
||||
/dev/grid/node-x0-y6 93T 66T 27T 70%
|
||||
/dev/grid/node-x0-y7 90T 68T 22T 75%
|
||||
/dev/grid/node-x0-y8 87T 73T 14T 83%
|
||||
/dev/grid/node-x0-y9 92T 66T 26T 71%
|
||||
/dev/grid/node-x0-y10 90T 72T 18T 80%
|
||||
/dev/grid/node-x0-y11 86T 71T 15T 82%
|
||||
/dev/grid/node-x0-y12 86T 73T 13T 84%
|
||||
/dev/grid/node-x0-y13 88T 71T 17T 80%
|
||||
/dev/grid/node-x0-y14 93T 70T 23T 75%
|
||||
/dev/grid/node-x0-y15 88T 70T 18T 79%
|
||||
/dev/grid/node-x0-y16 88T 71T 17T 80%
|
||||
/dev/grid/node-x0-y17 93T 73T 20T 78%
|
||||
/dev/grid/node-x0-y18 86T 69T 17T 80%
|
||||
/dev/grid/node-x0-y19 92T 71T 21T 77%
|
||||
/dev/grid/node-x0-y20 93T 64T 29T 68%
|
||||
/dev/grid/node-x0-y21 90T 73T 17T 81%
|
||||
/dev/grid/node-x0-y22 94T 64T 30T 68%
|
||||
/dev/grid/node-x0-y23 90T 72T 18T 80%
|
||||
/dev/grid/node-x0-y24 87T 72T 15T 82%
|
||||
/dev/grid/node-x1-y0 94T 66T 28T 70%
|
||||
/dev/grid/node-x1-y1 88T 68T 20T 77%
|
||||
/dev/grid/node-x1-y2 93T 64T 29T 68%
|
||||
/dev/grid/node-x1-y3 85T 70T 15T 82%
|
||||
/dev/grid/node-x1-y4 88T 72T 16T 81%
|
||||
/dev/grid/node-x1-y5 89T 65T 24T 73%
|
||||
/dev/grid/node-x1-y6 88T 67T 21T 76%
|
||||
/dev/grid/node-x1-y7 88T 64T 24T 72%
|
||||
/dev/grid/node-x1-y8 94T 65T 29T 69%
|
||||
/dev/grid/node-x1-y9 85T 73T 12T 85%
|
||||
/dev/grid/node-x1-y10 86T 65T 21T 75%
|
||||
/dev/grid/node-x1-y11 91T 66T 25T 72%
|
||||
/dev/grid/node-x1-y12 92T 70T 22T 76%
|
||||
/dev/grid/node-x1-y13 94T 67T 27T 71%
|
||||
/dev/grid/node-x1-y14 89T 71T 18T 79%
|
||||
/dev/grid/node-x1-y15 90T 69T 21T 76%
|
||||
/dev/grid/node-x1-y16 90T 71T 19T 78%
|
||||
/dev/grid/node-x1-y17 90T 70T 20T 77%
|
||||
/dev/grid/node-x1-y18 92T 66T 26T 71%
|
||||
/dev/grid/node-x1-y19 91T 70T 21T 76%
|
||||
/dev/grid/node-x1-y20 89T 70T 19T 78%
|
||||
/dev/grid/node-x1-y21 93T 64T 29T 68%
|
||||
/dev/grid/node-x1-y22 92T 69T 23T 75%
|
||||
/dev/grid/node-x1-y23 90T 64T 26T 71%
|
||||
/dev/grid/node-x1-y24 85T 72T 13T 84%
|
||||
/dev/grid/node-x2-y0 89T 64T 25T 71%
|
||||
/dev/grid/node-x2-y1 88T 71T 17T 80%
|
||||
/dev/grid/node-x2-y2 85T 64T 21T 75%
|
||||
/dev/grid/node-x2-y3 85T 66T 19T 77%
|
||||
/dev/grid/node-x2-y4 93T 69T 24T 74%
|
||||
/dev/grid/node-x2-y5 94T 73T 21T 77%
|
||||
/dev/grid/node-x2-y6 91T 65T 26T 71%
|
||||
/dev/grid/node-x2-y7 91T 68T 23T 74%
|
||||
/dev/grid/node-x2-y8 93T 72T 21T 77%
|
||||
/dev/grid/node-x2-y9 92T 73T 19T 79%
|
||||
/dev/grid/node-x2-y10 93T 68T 25T 73%
|
||||
/dev/grid/node-x2-y11 92T 73T 19T 79%
|
||||
/dev/grid/node-x2-y12 91T 70T 21T 76%
|
||||
/dev/grid/node-x2-y13 94T 73T 21T 77%
|
||||
/dev/grid/node-x2-y14 86T 70T 16T 81%
|
||||
/dev/grid/node-x2-y15 91T 66T 25T 72%
|
||||
/dev/grid/node-x2-y16 94T 64T 30T 68%
|
||||
/dev/grid/node-x2-y17 92T 65T 27T 70%
|
||||
/dev/grid/node-x2-y18 87T 72T 15T 82%
|
||||
/dev/grid/node-x2-y19 91T 64T 27T 70%
|
||||
/dev/grid/node-x2-y20 89T 70T 19T 78%
|
||||
/dev/grid/node-x2-y21 86T 65T 21T 75%
|
||||
/dev/grid/node-x2-y22 94T 64T 30T 68%
|
||||
/dev/grid/node-x2-y23 88T 67T 21T 76%
|
||||
/dev/grid/node-x2-y24 92T 64T 28T 69%
|
||||
/dev/grid/node-x3-y0 85T 66T 19T 77%
|
||||
/dev/grid/node-x3-y1 88T 64T 24T 72%
|
||||
/dev/grid/node-x3-y2 93T 71T 22T 76%
|
||||
/dev/grid/node-x3-y3 90T 68T 22T 75%
|
||||
/dev/grid/node-x3-y4 87T 73T 14T 83%
|
||||
/dev/grid/node-x3-y5 94T 64T 30T 68%
|
||||
/dev/grid/node-x3-y6 92T 72T 20T 78%
|
||||
/dev/grid/node-x3-y7 89T 69T 20T 77%
|
||||
/dev/grid/node-x3-y8 91T 69T 22T 75%
|
||||
/dev/grid/node-x3-y9 92T 66T 26T 71%
|
||||
/dev/grid/node-x3-y10 93T 73T 20T 78%
|
||||
/dev/grid/node-x3-y11 93T 67T 26T 72%
|
||||
/dev/grid/node-x3-y12 88T 69T 19T 78%
|
||||
/dev/grid/node-x3-y13 92T 68T 24T 73%
|
||||
/dev/grid/node-x3-y14 91T 73T 18T 80%
|
||||
/dev/grid/node-x3-y15 94T 64T 30T 68%
|
||||
/dev/grid/node-x3-y16 85T 69T 16T 81%
|
||||
/dev/grid/node-x3-y17 87T 68T 19T 78%
|
||||
/dev/grid/node-x3-y18 88T 66T 22T 75%
|
||||
/dev/grid/node-x3-y19 90T 72T 18T 80%
|
||||
/dev/grid/node-x3-y20 90T 73T 17T 81%
|
||||
/dev/grid/node-x3-y21 86T 73T 13T 84%
|
||||
/dev/grid/node-x3-y22 86T 64T 22T 74%
|
||||
/dev/grid/node-x3-y23 93T 69T 24T 74%
|
||||
/dev/grid/node-x3-y24 89T 66T 23T 74%
|
||||
/dev/grid/node-x4-y0 92T 71T 21T 77%
|
||||
/dev/grid/node-x4-y1 89T 70T 19T 78%
|
||||
/dev/grid/node-x4-y2 90T 69T 21T 76%
|
||||
/dev/grid/node-x4-y3 86T 65T 21T 75%
|
||||
/dev/grid/node-x4-y4 86T 67T 19T 77%
|
||||
/dev/grid/node-x4-y5 94T 67T 27T 71%
|
||||
/dev/grid/node-x4-y6 91T 66T 25T 72%
|
||||
/dev/grid/node-x4-y7 94T 69T 25T 73%
|
||||
/dev/grid/node-x4-y8 88T 64T 24T 72%
|
||||
/dev/grid/node-x4-y9 88T 73T 15T 82%
|
||||
/dev/grid/node-x4-y10 91T 72T 19T 79%
|
||||
/dev/grid/node-x4-y11 86T 65T 21T 75%
|
||||
/dev/grid/node-x4-y12 92T 72T 20T 78%
|
||||
/dev/grid/node-x4-y13 92T 66T 26T 71%
|
||||
/dev/grid/node-x4-y14 89T 67T 22T 75%
|
||||
/dev/grid/node-x4-y15 92T 64T 28T 69%
|
||||
/dev/grid/node-x4-y16 94T 67T 27T 71%
|
||||
/dev/grid/node-x4-y17 85T 65T 20T 76%
|
||||
/dev/grid/node-x4-y18 94T 72T 22T 76%
|
||||
/dev/grid/node-x4-y19 94T 64T 30T 68%
|
||||
/dev/grid/node-x4-y20 87T 72T 15T 82%
|
||||
/dev/grid/node-x4-y21 93T 71T 22T 76%
|
||||
/dev/grid/node-x4-y22 86T 69T 17T 80%
|
||||
/dev/grid/node-x4-y23 90T 67T 23T 74%
|
||||
/dev/grid/node-x4-y24 88T 71T 17T 80%
|
||||
/dev/grid/node-x5-y0 89T 70T 19T 78%
|
||||
/dev/grid/node-x5-y1 88T 72T 16T 81%
|
||||
/dev/grid/node-x5-y2 85T 71T 14T 83%
|
||||
/dev/grid/node-x5-y3 85T 68T 17T 80%
|
||||
/dev/grid/node-x5-y4 86T 67T 19T 77%
|
||||
/dev/grid/node-x5-y5 86T 65T 21T 75%
|
||||
/dev/grid/node-x5-y6 87T 64T 23T 73%
|
||||
/dev/grid/node-x5-y7 93T 68T 25T 73%
|
||||
/dev/grid/node-x5-y8 94T 69T 25T 73%
|
||||
/dev/grid/node-x5-y9 91T 69T 22T 75%
|
||||
/dev/grid/node-x5-y10 89T 69T 20T 77%
|
||||
/dev/grid/node-x5-y11 89T 65T 24T 73%
|
||||
/dev/grid/node-x5-y12 86T 68T 18T 79%
|
||||
/dev/grid/node-x5-y13 85T 68T 17T 80%
|
||||
/dev/grid/node-x5-y14 89T 72T 17T 80%
|
||||
/dev/grid/node-x5-y15 92T 66T 26T 71%
|
||||
/dev/grid/node-x5-y16 89T 66T 23T 74%
|
||||
/dev/grid/node-x5-y17 90T 67T 23T 74%
|
||||
/dev/grid/node-x5-y18 93T 70T 23T 75%
|
||||
/dev/grid/node-x5-y19 89T 67T 22T 75%
|
||||
/dev/grid/node-x5-y20 87T 64T 23T 73%
|
||||
/dev/grid/node-x5-y21 90T 67T 23T 74%
|
||||
/dev/grid/node-x5-y22 94T 65T 29T 69%
|
||||
/dev/grid/node-x5-y23 90T 67T 23T 74%
|
||||
/dev/grid/node-x5-y24 89T 67T 22T 75%
|
||||
/dev/grid/node-x6-y0 90T 69T 21T 76%
|
||||
/dev/grid/node-x6-y1 89T 67T 22T 75%
|
||||
/dev/grid/node-x6-y2 93T 69T 24T 74%
|
||||
/dev/grid/node-x6-y3 92T 69T 23T 75%
|
||||
/dev/grid/node-x6-y4 93T 64T 29T 68%
|
||||
/dev/grid/node-x6-y5 91T 69T 22T 75%
|
||||
/dev/grid/node-x6-y6 90T 65T 25T 72%
|
||||
/dev/grid/node-x6-y7 93T 64T 29T 68%
|
||||
/dev/grid/node-x6-y8 93T 72T 21T 77%
|
||||
/dev/grid/node-x6-y9 88T 64T 24T 72%
|
||||
/dev/grid/node-x6-y10 86T 68T 18T 79%
|
||||
/dev/grid/node-x6-y11 92T 73T 19T 79%
|
||||
/dev/grid/node-x6-y12 88T 65T 23T 73%
|
||||
/dev/grid/node-x6-y13 93T 67T 26T 72%
|
||||
/dev/grid/node-x6-y14 85T 67T 18T 78%
|
||||
/dev/grid/node-x6-y15 87T 65T 22T 74%
|
||||
/dev/grid/node-x6-y16 87T 67T 20T 77%
|
||||
/dev/grid/node-x6-y17 86T 67T 19T 77%
|
||||
/dev/grid/node-x6-y18 90T 65T 25T 72%
|
||||
/dev/grid/node-x6-y19 92T 71T 21T 77%
|
||||
/dev/grid/node-x6-y20 91T 69T 22T 75%
|
||||
/dev/grid/node-x6-y21 91T 69T 22T 75%
|
||||
/dev/grid/node-x6-y22 86T 71T 15T 82%
|
||||
/dev/grid/node-x6-y23 92T 66T 26T 71%
|
||||
/dev/grid/node-x6-y24 93T 69T 24T 74%
|
||||
/dev/grid/node-x7-y0 87T 66T 21T 75%
|
||||
/dev/grid/node-x7-y1 91T 64T 27T 70%
|
||||
/dev/grid/node-x7-y2 94T 69T 25T 73%
|
||||
/dev/grid/node-x7-y3 87T 68T 19T 78%
|
||||
/dev/grid/node-x7-y4 94T 66T 28T 70%
|
||||
/dev/grid/node-x7-y5 92T 72T 20T 78%
|
||||
/dev/grid/node-x7-y6 92T 67T 25T 72%
|
||||
/dev/grid/node-x7-y7 94T 67T 27T 71%
|
||||
/dev/grid/node-x7-y8 91T 65T 26T 71%
|
||||
/dev/grid/node-x7-y9 88T 66T 22T 75%
|
||||
/dev/grid/node-x7-y10 85T 72T 13T 84%
|
||||
/dev/grid/node-x7-y11 93T 64T 29T 68%
|
||||
/dev/grid/node-x7-y12 90T 65T 25T 72%
|
||||
/dev/grid/node-x7-y13 94T 64T 30T 68%
|
||||
/dev/grid/node-x7-y14 94T 69T 25T 73%
|
||||
/dev/grid/node-x7-y15 87T 68T 19T 78%
|
||||
/dev/grid/node-x7-y16 88T 71T 17T 80%
|
||||
/dev/grid/node-x7-y17 89T 64T 25T 71%
|
||||
/dev/grid/node-x7-y18 87T 70T 17T 80%
|
||||
/dev/grid/node-x7-y19 91T 72T 19T 79%
|
||||
/dev/grid/node-x7-y20 94T 65T 29T 69%
|
||||
/dev/grid/node-x7-y21 87T 69T 18T 79%
|
||||
/dev/grid/node-x7-y22 91T 72T 19T 79%
|
||||
/dev/grid/node-x7-y23 93T 64T 29T 68%
|
||||
/dev/grid/node-x7-y24 85T 69T 16T 81%
|
||||
/dev/grid/node-x8-y0 90T 68T 22T 75%
|
||||
/dev/grid/node-x8-y1 88T 66T 22T 75%
|
||||
/dev/grid/node-x8-y2 91T 67T 24T 73%
|
||||
/dev/grid/node-x8-y3 86T 64T 22T 74%
|
||||
/dev/grid/node-x8-y4 91T 73T 18T 80%
|
||||
/dev/grid/node-x8-y5 92T 64T 28T 69%
|
||||
/dev/grid/node-x8-y6 89T 64T 25T 71%
|
||||
/dev/grid/node-x8-y7 87T 66T 21T 75%
|
||||
/dev/grid/node-x8-y8 85T 71T 14T 83%
|
||||
/dev/grid/node-x8-y9 88T 71T 17T 80%
|
||||
/dev/grid/node-x8-y10 89T 71T 18T 79%
|
||||
/dev/grid/node-x8-y11 89T 67T 22T 75%
|
||||
/dev/grid/node-x8-y12 91T 66T 25T 72%
|
||||
/dev/grid/node-x8-y13 88T 64T 24T 72%
|
||||
/dev/grid/node-x8-y14 86T 71T 15T 82%
|
||||
/dev/grid/node-x8-y15 93T 72T 21T 77%
|
||||
/dev/grid/node-x8-y16 90T 69T 21T 76%
|
||||
/dev/grid/node-x8-y17 86T 73T 13T 84%
|
||||
/dev/grid/node-x8-y18 88T 64T 24T 72%
|
||||
/dev/grid/node-x8-y19 88T 64T 24T 72%
|
||||
/dev/grid/node-x8-y20 87T 73T 14T 83%
|
||||
/dev/grid/node-x8-y21 85T 70T 15T 82%
|
||||
/dev/grid/node-x8-y22 85T 70T 15T 82%
|
||||
/dev/grid/node-x8-y23 90T 68T 22T 75%
|
||||
/dev/grid/node-x8-y24 88T 73T 15T 82%
|
||||
/dev/grid/node-x9-y0 89T 66T 23T 74%
|
||||
/dev/grid/node-x9-y1 89T 65T 24T 73%
|
||||
/dev/grid/node-x9-y2 85T 71T 14T 83%
|
||||
/dev/grid/node-x9-y3 92T 69T 23T 75%
|
||||
/dev/grid/node-x9-y4 92T 64T 28T 69%
|
||||
/dev/grid/node-x9-y5 89T 67T 22T 75%
|
||||
/dev/grid/node-x9-y6 93T 72T 21T 77%
|
||||
/dev/grid/node-x9-y7 94T 65T 29T 69%
|
||||
/dev/grid/node-x9-y8 87T 71T 16T 81%
|
||||
/dev/grid/node-x9-y9 85T 65T 20T 76%
|
||||
/dev/grid/node-x9-y10 92T 70T 22T 76%
|
||||
/dev/grid/node-x9-y11 87T 73T 14T 83%
|
||||
/dev/grid/node-x9-y12 88T 71T 17T 80%
|
||||
/dev/grid/node-x9-y13 93T 71T 22T 76%
|
||||
/dev/grid/node-x9-y14 91T 67T 24T 73%
|
||||
/dev/grid/node-x9-y15 92T 64T 28T 69%
|
||||
/dev/grid/node-x9-y16 87T 65T 22T 74%
|
||||
/dev/grid/node-x9-y17 94T 65T 29T 69%
|
||||
/dev/grid/node-x9-y18 94T 71T 23T 75%
|
||||
/dev/grid/node-x9-y19 85T 64T 21T 75%
|
||||
/dev/grid/node-x9-y20 92T 65T 27T 70%
|
||||
/dev/grid/node-x9-y21 92T 73T 19T 79%
|
||||
/dev/grid/node-x9-y22 91T 73T 18T 80%
|
||||
/dev/grid/node-x9-y23 90T 64T 26T 71%
|
||||
/dev/grid/node-x9-y24 85T 73T 12T 85%
|
||||
/dev/grid/node-x10-y0 94T 71T 23T 75%
|
||||
/dev/grid/node-x10-y1 86T 69T 17T 80%
|
||||
/dev/grid/node-x10-y2 88T 71T 17T 80%
|
||||
/dev/grid/node-x10-y3 93T 69T 24T 74%
|
||||
/dev/grid/node-x10-y4 92T 72T 20T 78%
|
||||
/dev/grid/node-x10-y5 85T 66T 19T 77%
|
||||
/dev/grid/node-x10-y6 93T 66T 27T 70%
|
||||
/dev/grid/node-x10-y7 89T 73T 16T 82%
|
||||
/dev/grid/node-x10-y8 86T 66T 20T 76%
|
||||
/dev/grid/node-x10-y9 90T 68T 22T 75%
|
||||
/dev/grid/node-x10-y10 94T 68T 26T 72%
|
||||
/dev/grid/node-x10-y11 92T 70T 22T 76%
|
||||
/dev/grid/node-x10-y12 86T 65T 21T 75%
|
||||
/dev/grid/node-x10-y13 91T 69T 22T 75%
|
||||
/dev/grid/node-x10-y14 89T 69T 20T 77%
|
||||
/dev/grid/node-x10-y15 88T 67T 21T 76%
|
||||
/dev/grid/node-x10-y16 89T 70T 19T 78%
|
||||
/dev/grid/node-x10-y17 93T 68T 25T 73%
|
||||
/dev/grid/node-x10-y18 90T 66T 24T 73%
|
||||
/dev/grid/node-x10-y19 85T 70T 15T 82%
|
||||
/dev/grid/node-x10-y20 88T 71T 17T 80%
|
||||
/dev/grid/node-x10-y21 89T 68T 21T 76%
|
||||
/dev/grid/node-x10-y22 88T 72T 16T 81%
|
||||
/dev/grid/node-x10-y23 89T 68T 21T 76%
|
||||
/dev/grid/node-x10-y24 91T 64T 27T 70%
|
||||
/dev/grid/node-x11-y0 86T 67T 19T 77%
|
||||
/dev/grid/node-x11-y1 86T 73T 13T 84%
|
||||
/dev/grid/node-x11-y2 86T 65T 21T 75%
|
||||
/dev/grid/node-x11-y3 87T 69T 18T 79%
|
||||
/dev/grid/node-x11-y4 86T 70T 16T 81%
|
||||
/dev/grid/node-x11-y5 90T 73T 17T 81%
|
||||
/dev/grid/node-x11-y6 94T 69T 25T 73%
|
||||
/dev/grid/node-x11-y7 86T 72T 14T 83%
|
||||
/dev/grid/node-x11-y8 91T 72T 19T 79%
|
||||
/dev/grid/node-x11-y9 90T 67T 23T 74%
|
||||
/dev/grid/node-x11-y10 89T 72T 17T 80%
|
||||
/dev/grid/node-x11-y11 86T 67T 19T 77%
|
||||
/dev/grid/node-x11-y12 88T 65T 23T 73%
|
||||
/dev/grid/node-x11-y13 93T 72T 21T 77%
|
||||
/dev/grid/node-x11-y14 91T 70T 21T 76%
|
||||
/dev/grid/node-x11-y15 91T 64T 27T 70%
|
||||
/dev/grid/node-x11-y16 91T 64T 27T 70%
|
||||
/dev/grid/node-x11-y17 85T 67T 18T 78%
|
||||
/dev/grid/node-x11-y18 90T 69T 21T 76%
|
||||
/dev/grid/node-x11-y19 85T 71T 14T 83%
|
||||
/dev/grid/node-x11-y20 86T 71T 15T 82%
|
||||
/dev/grid/node-x11-y21 87T 73T 14T 83%
|
||||
/dev/grid/node-x11-y22 91T 70T 21T 76%
|
||||
/dev/grid/node-x11-y23 90T 69T 21T 76%
|
||||
/dev/grid/node-x11-y24 86T 73T 13T 84%
|
||||
/dev/grid/node-x12-y0 93T 65T 28T 69%
|
||||
/dev/grid/node-x12-y1 88T 72T 16T 81%
|
||||
/dev/grid/node-x12-y2 92T 65T 27T 70%
|
||||
/dev/grid/node-x12-y3 94T 71T 23T 75%
|
||||
/dev/grid/node-x12-y4 94T 64T 30T 68%
|
||||
/dev/grid/node-x12-y5 91T 64T 27T 70%
|
||||
/dev/grid/node-x12-y6 91T 65T 26T 71%
|
||||
/dev/grid/node-x12-y7 93T 70T 23T 75%
|
||||
/dev/grid/node-x12-y8 88T 69T 19T 78%
|
||||
/dev/grid/node-x12-y9 89T 66T 23T 74%
|
||||
/dev/grid/node-x12-y10 90T 70T 20T 77%
|
||||
/dev/grid/node-x12-y11 89T 64T 25T 71%
|
||||
/dev/grid/node-x12-y12 87T 70T 17T 80%
|
||||
/dev/grid/node-x12-y13 86T 72T 14T 83%
|
||||
/dev/grid/node-x12-y14 88T 67T 21T 76%
|
||||
/dev/grid/node-x12-y15 88T 66T 22T 75%
|
||||
/dev/grid/node-x12-y16 86T 69T 17T 80%
|
||||
/dev/grid/node-x12-y17 90T 65T 25T 72%
|
||||
/dev/grid/node-x12-y18 85T 73T 12T 85%
|
||||
/dev/grid/node-x12-y19 94T 67T 27T 71%
|
||||
/dev/grid/node-x12-y20 85T 66T 19T 77%
|
||||
/dev/grid/node-x12-y21 86T 67T 19T 77%
|
||||
/dev/grid/node-x12-y22 86T 67T 19T 77%
|
||||
/dev/grid/node-x12-y23 87T 64T 23T 73%
|
||||
/dev/grid/node-x12-y24 87T 64T 23T 73%
|
||||
/dev/grid/node-x13-y0 85T 71T 14T 83%
|
||||
/dev/grid/node-x13-y1 90T 71T 19T 78%
|
||||
/dev/grid/node-x13-y2 86T 66T 20T 76%
|
||||
/dev/grid/node-x13-y3 90T 67T 23T 74%
|
||||
/dev/grid/node-x13-y4 92T 69T 23T 75%
|
||||
/dev/grid/node-x13-y5 86T 68T 18T 79%
|
||||
/dev/grid/node-x13-y6 94T 64T 30T 68%
|
||||
/dev/grid/node-x13-y7 89T 67T 22T 75%
|
||||
/dev/grid/node-x13-y8 88T 67T 21T 76%
|
||||
/dev/grid/node-x13-y9 90T 68T 22T 75%
|
||||
/dev/grid/node-x13-y10 88T 65T 23T 73%
|
||||
/dev/grid/node-x13-y11 86T 67T 19T 77%
|
||||
/dev/grid/node-x13-y12 94T 65T 29T 69%
|
||||
/dev/grid/node-x13-y13 87T 67T 20T 77%
|
||||
/dev/grid/node-x13-y14 86T 71T 15T 82%
|
||||
/dev/grid/node-x13-y15 87T 73T 14T 83%
|
||||
/dev/grid/node-x13-y16 91T 69T 22T 75%
|
||||
/dev/grid/node-x13-y17 91T 67T 24T 73%
|
||||
/dev/grid/node-x13-y18 91T 70T 21T 76%
|
||||
/dev/grid/node-x13-y19 90T 73T 17T 81%
|
||||
/dev/grid/node-x13-y20 91T 64T 27T 70%
|
||||
/dev/grid/node-x13-y21 91T 68T 23T 74%
|
||||
/dev/grid/node-x13-y22 88T 65T 23T 73%
|
||||
/dev/grid/node-x13-y23 85T 67T 18T 78%
|
||||
/dev/grid/node-x13-y24 93T 66T 27T 70%
|
||||
/dev/grid/node-x14-y0 91T 67T 24T 73%
|
||||
/dev/grid/node-x14-y1 94T 66T 28T 70%
|
||||
/dev/grid/node-x14-y2 89T 70T 19T 78%
|
||||
/dev/grid/node-x14-y3 85T 71T 14T 83%
|
||||
/dev/grid/node-x14-y4 88T 68T 20T 77%
|
||||
/dev/grid/node-x14-y5 88T 68T 20T 77%
|
||||
/dev/grid/node-x14-y6 92T 73T 19T 79%
|
||||
/dev/grid/node-x14-y7 86T 67T 19T 77%
|
||||
/dev/grid/node-x14-y8 87T 71T 16T 81%
|
||||
/dev/grid/node-x14-y9 85T 71T 14T 83%
|
||||
/dev/grid/node-x14-y10 94T 64T 30T 68%
|
||||
/dev/grid/node-x14-y11 92T 67T 25T 72%
|
||||
/dev/grid/node-x14-y12 94T 73T 21T 77%
|
||||
/dev/grid/node-x14-y13 92T 71T 21T 77%
|
||||
/dev/grid/node-x14-y14 88T 71T 17T 80%
|
||||
/dev/grid/node-x14-y15 89T 65T 24T 73%
|
||||
/dev/grid/node-x14-y16 94T 71T 23T 75%
|
||||
/dev/grid/node-x14-y17 94T 66T 28T 70%
|
||||
/dev/grid/node-x14-y18 92T 69T 23T 75%
|
||||
/dev/grid/node-x14-y19 93T 64T 29T 68%
|
||||
/dev/grid/node-x14-y20 91T 72T 19T 79%
|
||||
/dev/grid/node-x14-y21 89T 73T 16T 82%
|
||||
/dev/grid/node-x14-y22 90T 72T 18T 80%
|
||||
/dev/grid/node-x14-y23 86T 64T 22T 74%
|
||||
/dev/grid/node-x14-y24 93T 72T 21T 77%
|
||||
/dev/grid/node-x15-y0 90T 69T 21T 76%
|
||||
/dev/grid/node-x15-y1 88T 70T 18T 79%
|
||||
/dev/grid/node-x15-y2 93T 64T 29T 68%
|
||||
/dev/grid/node-x15-y3 85T 73T 12T 85%
|
||||
/dev/grid/node-x15-y4 88T 65T 23T 73%
|
||||
/dev/grid/node-x15-y5 86T 65T 21T 75%
|
||||
/dev/grid/node-x15-y6 85T 67T 18T 78%
|
||||
/dev/grid/node-x15-y7 92T 64T 28T 69%
|
||||
/dev/grid/node-x15-y8 90T 73T 17T 81%
|
||||
/dev/grid/node-x15-y9 94T 70T 24T 74%
|
||||
/dev/grid/node-x15-y10 90T 70T 20T 77%
|
||||
/dev/grid/node-x15-y11 86T 67T 19T 77%
|
||||
/dev/grid/node-x15-y12 86T 73T 13T 84%
|
||||
/dev/grid/node-x15-y13 94T 73T 21T 77%
|
||||
/dev/grid/node-x15-y14 85T 71T 14T 83%
|
||||
/dev/grid/node-x15-y15 86T 70T 16T 81%
|
||||
/dev/grid/node-x15-y16 87T 68T 19T 78%
|
||||
/dev/grid/node-x15-y17 92T 68T 24T 73%
|
||||
/dev/grid/node-x15-y18 86T 65T 21T 75%
|
||||
/dev/grid/node-x15-y19 89T 65T 24T 73%
|
||||
/dev/grid/node-x15-y20 89T 72T 17T 80%
|
||||
/dev/grid/node-x15-y21 85T 72T 13T 84%
|
||||
/dev/grid/node-x15-y22 89T 71T 18T 79%
|
||||
/dev/grid/node-x15-y23 87T 72T 15T 82%
|
||||
/dev/grid/node-x15-y24 85T 69T 16T 81%
|
||||
/dev/grid/node-x16-y0 92T 68T 24T 73%
|
||||
/dev/grid/node-x16-y1 90T 68T 22T 75%
|
||||
/dev/grid/node-x16-y2 86T 66T 20T 76%
|
||||
/dev/grid/node-x16-y3 89T 71T 18T 79%
|
||||
/dev/grid/node-x16-y4 87T 71T 16T 81%
|
||||
/dev/grid/node-x16-y5 88T 65T 23T 73%
|
||||
/dev/grid/node-x16-y6 92T 72T 20T 78%
|
||||
/dev/grid/node-x16-y7 88T 64T 24T 72%
|
||||
/dev/grid/node-x16-y8 89T 68T 21T 76%
|
||||
/dev/grid/node-x16-y9 85T 72T 13T 84%
|
||||
/dev/grid/node-x16-y10 94T 67T 27T 71%
|
||||
/dev/grid/node-x16-y11 85T 68T 17T 80%
|
||||
/dev/grid/node-x16-y12 92T 70T 22T 76%
|
||||
/dev/grid/node-x16-y13 94T 70T 24T 74%
|
||||
/dev/grid/node-x16-y14 94T 72T 22T 76%
|
||||
/dev/grid/node-x16-y15 89T 72T 17T 80%
|
||||
/dev/grid/node-x16-y16 88T 66T 22T 75%
|
||||
/dev/grid/node-x16-y17 90T 70T 20T 77%
|
||||
/dev/grid/node-x16-y18 91T 67T 24T 73%
|
||||
/dev/grid/node-x16-y19 88T 73T 15T 82%
|
||||
/dev/grid/node-x16-y20 86T 66T 20T 76%
|
||||
/dev/grid/node-x16-y21 90T 67T 23T 74%
|
||||
/dev/grid/node-x16-y22 94T 71T 23T 75%
|
||||
/dev/grid/node-x16-y23 85T 71T 14T 83%
|
||||
/dev/grid/node-x16-y24 87T 68T 19T 78%
|
||||
/dev/grid/node-x17-y0 91T 69T 22T 75%
|
||||
/dev/grid/node-x17-y1 85T 68T 17T 80%
|
||||
/dev/grid/node-x17-y2 89T 69T 20T 77%
|
||||
/dev/grid/node-x17-y3 91T 68T 23T 74%
|
||||
/dev/grid/node-x17-y4 87T 69T 18T 79%
|
||||
/dev/grid/node-x17-y5 92T 70T 22T 76%
|
||||
/dev/grid/node-x17-y6 85T 67T 18T 78%
|
||||
/dev/grid/node-x17-y7 92T 72T 20T 78%
|
||||
/dev/grid/node-x17-y8 92T 65T 27T 70%
|
||||
/dev/grid/node-x17-y9 92T 67T 25T 72%
|
||||
/dev/grid/node-x17-y10 86T 69T 17T 80%
|
||||
/dev/grid/node-x17-y11 94T 70T 24T 74%
|
||||
/dev/grid/node-x17-y12 94T 69T 25T 73%
|
||||
/dev/grid/node-x17-y13 94T 73T 21T 77%
|
||||
/dev/grid/node-x17-y14 87T 73T 14T 83%
|
||||
/dev/grid/node-x17-y15 86T 67T 19T 77%
|
||||
/dev/grid/node-x17-y16 85T 68T 17T 80%
|
||||
/dev/grid/node-x17-y17 87T 71T 16T 81%
|
||||
/dev/grid/node-x17-y18 89T 64T 25T 71%
|
||||
/dev/grid/node-x17-y19 88T 70T 18T 79%
|
||||
/dev/grid/node-x17-y20 86T 65T 21T 75%
|
||||
/dev/grid/node-x17-y21 86T 64T 22T 74%
|
||||
/dev/grid/node-x17-y22 93T 70T 23T 75%
|
||||
/dev/grid/node-x17-y23 86T 66T 20T 76%
|
||||
/dev/grid/node-x17-y24 89T 66T 23T 74%
|
||||
/dev/grid/node-x18-y0 91T 73T 18T 80%
|
||||
/dev/grid/node-x18-y1 90T 73T 17T 81%
|
||||
/dev/grid/node-x18-y2 94T 68T 26T 72%
|
||||
/dev/grid/node-x18-y3 85T 71T 14T 83%
|
||||
/dev/grid/node-x18-y4 94T 73T 21T 77%
|
||||
/dev/grid/node-x18-y5 93T 65T 28T 69%
|
||||
/dev/grid/node-x18-y6 91T 70T 21T 76%
|
||||
/dev/grid/node-x18-y7 86T 68T 18T 79%
|
||||
/dev/grid/node-x18-y8 94T 68T 26T 72%
|
||||
/dev/grid/node-x18-y9 85T 67T 18T 78%
|
||||
/dev/grid/node-x18-y10 89T 70T 19T 78%
|
||||
/dev/grid/node-x18-y11 90T 68T 22T 75%
|
||||
/dev/grid/node-x18-y12 89T 67T 22T 75%
|
||||
/dev/grid/node-x18-y13 92T 64T 28T 69%
|
||||
/dev/grid/node-x18-y14 93T 65T 28T 69%
|
||||
/dev/grid/node-x18-y15 89T 65T 24T 73%
|
||||
/dev/grid/node-x18-y16 92T 66T 26T 71%
|
||||
/dev/grid/node-x18-y17 86T 64T 22T 74%
|
||||
/dev/grid/node-x18-y18 91T 68T 23T 74%
|
||||
/dev/grid/node-x18-y19 85T 73T 12T 85%
|
||||
/dev/grid/node-x18-y20 91T 67T 24T 73%
|
||||
/dev/grid/node-x18-y21 90T 73T 17T 81%
|
||||
/dev/grid/node-x18-y22 89T 68T 21T 76%
|
||||
/dev/grid/node-x18-y23 88T 68T 20T 77%
|
||||
/dev/grid/node-x18-y24 92T 67T 25T 72%
|
||||
/dev/grid/node-x19-y0 92T 67T 25T 72%
|
||||
/dev/grid/node-x19-y1 90T 64T 26T 71%
|
||||
/dev/grid/node-x19-y2 92T 72T 20T 78%
|
||||
/dev/grid/node-x19-y3 94T 64T 30T 68%
|
||||
/dev/grid/node-x19-y4 89T 70T 19T 78%
|
||||
/dev/grid/node-x19-y5 90T 66T 24T 73%
|
||||
/dev/grid/node-x19-y6 86T 67T 19T 77%
|
||||
/dev/grid/node-x19-y7 88T 72T 16T 81%
|
||||
/dev/grid/node-x19-y8 94T 69T 25T 73%
|
||||
/dev/grid/node-x19-y9 87T 65T 22T 74%
|
||||
/dev/grid/node-x19-y10 90T 67T 23T 74%
|
||||
/dev/grid/node-x19-y11 90T 64T 26T 71%
|
||||
/dev/grid/node-x19-y12 89T 72T 17T 80%
|
||||
/dev/grid/node-x19-y13 88T 66T 22T 75%
|
||||
/dev/grid/node-x19-y14 85T 68T 17T 80%
|
||||
/dev/grid/node-x19-y15 92T 73T 19T 79%
|
||||
/dev/grid/node-x19-y16 93T 71T 22T 76%
|
||||
/dev/grid/node-x19-y17 85T 70T 15T 82%
|
||||
/dev/grid/node-x19-y18 91T 64T 27T 70%
|
||||
/dev/grid/node-x19-y19 88T 68T 20T 77%
|
||||
/dev/grid/node-x19-y20 90T 71T 19T 78%
|
||||
/dev/grid/node-x19-y21 94T 67T 27T 71%
|
||||
/dev/grid/node-x19-y22 87T 72T 15T 82%
|
||||
/dev/grid/node-x19-y23 89T 68T 21T 76%
|
||||
/dev/grid/node-x19-y24 93T 64T 29T 68%
|
||||
/dev/grid/node-x20-y0 92T 68T 24T 73%
|
||||
/dev/grid/node-x20-y1 89T 73T 16T 82%
|
||||
/dev/grid/node-x20-y2 93T 64T 29T 68%
|
||||
/dev/grid/node-x20-y3 90T 72T 18T 80%
|
||||
/dev/grid/node-x20-y4 91T 64T 27T 70%
|
||||
/dev/grid/node-x20-y5 90T 73T 17T 81%
|
||||
/dev/grid/node-x20-y6 94T 69T 25T 73%
|
||||
/dev/grid/node-x20-y7 88T 66T 22T 75%
|
||||
/dev/grid/node-x20-y8 89T 68T 21T 76%
|
||||
/dev/grid/node-x20-y9 91T 71T 20T 78%
|
||||
/dev/grid/node-x20-y10 91T 67T 24T 73%
|
||||
/dev/grid/node-x20-y11 94T 64T 30T 68%
|
||||
/dev/grid/node-x20-y12 90T 71T 19T 78%
|
||||
/dev/grid/node-x20-y13 88T 72T 16T 81%
|
||||
/dev/grid/node-x20-y14 86T 70T 16T 81%
|
||||
/dev/grid/node-x20-y15 89T 65T 24T 73%
|
||||
/dev/grid/node-x20-y16 85T 67T 18T 78%
|
||||
/dev/grid/node-x20-y17 92T 65T 27T 70%
|
||||
/dev/grid/node-x20-y18 91T 67T 24T 73%
|
||||
/dev/grid/node-x20-y19 86T 71T 15T 82%
|
||||
/dev/grid/node-x20-y20 91T 70T 21T 76%
|
||||
/dev/grid/node-x20-y21 85T 71T 14T 83%
|
||||
/dev/grid/node-x20-y22 91T 70T 21T 76%
|
||||
/dev/grid/node-x20-y23 93T 70T 23T 75%
|
||||
/dev/grid/node-x20-y24 93T 66T 27T 70%
|
||||
/dev/grid/node-x21-y0 87T 65T 22T 74%
|
||||
/dev/grid/node-x21-y1 85T 65T 20T 76%
|
||||
/dev/grid/node-x21-y2 92T 72T 20T 78%
|
||||
/dev/grid/node-x21-y3 88T 68T 20T 77%
|
||||
/dev/grid/node-x21-y4 87T 67T 20T 77%
|
||||
/dev/grid/node-x21-y5 93T 68T 25T 73%
|
||||
/dev/grid/node-x21-y6 93T 70T 23T 75%
|
||||
/dev/grid/node-x21-y7 92T 65T 27T 70%
|
||||
/dev/grid/node-x21-y8 91T 70T 21T 76%
|
||||
/dev/grid/node-x21-y9 89T 64T 25T 71%
|
||||
/dev/grid/node-x21-y10 87T 67T 20T 77%
|
||||
/dev/grid/node-x21-y11 504T 496T 8T 98%
|
||||
/dev/grid/node-x21-y12 88T 70T 18T 79%
|
||||
/dev/grid/node-x21-y13 86T 70T 16T 81%
|
||||
/dev/grid/node-x21-y14 92T 66T 26T 71%
|
||||
/dev/grid/node-x21-y15 93T 64T 29T 68%
|
||||
/dev/grid/node-x21-y16 93T 71T 22T 76%
|
||||
/dev/grid/node-x21-y17 94T 65T 29T 69%
|
||||
/dev/grid/node-x21-y18 87T 70T 17T 80%
|
||||
/dev/grid/node-x21-y19 85T 64T 21T 75%
|
||||
/dev/grid/node-x21-y20 86T 70T 16T 81%
|
||||
/dev/grid/node-x21-y21 93T 66T 27T 70%
|
||||
/dev/grid/node-x21-y22 92T 70T 22T 76%
|
||||
/dev/grid/node-x21-y23 94T 68T 26T 72%
|
||||
/dev/grid/node-x21-y24 90T 73T 17T 81%
|
||||
/dev/grid/node-x22-y0 93T 72T 21T 77%
|
||||
/dev/grid/node-x22-y1 91T 70T 21T 76%
|
||||
/dev/grid/node-x22-y2 94T 64T 30T 68%
|
||||
/dev/grid/node-x22-y3 92T 67T 25T 72%
|
||||
/dev/grid/node-x22-y4 87T 68T 19T 78%
|
||||
/dev/grid/node-x22-y5 87T 67T 20T 77%
|
||||
/dev/grid/node-x22-y6 92T 69T 23T 75%
|
||||
/dev/grid/node-x22-y7 85T 67T 18T 78%
|
||||
/dev/grid/node-x22-y8 94T 73T 21T 77%
|
||||
/dev/grid/node-x22-y9 89T 65T 24T 73%
|
||||
/dev/grid/node-x22-y10 94T 68T 26T 72%
|
||||
/dev/grid/node-x22-y11 508T 492T 16T 96%
|
||||
/dev/grid/node-x22-y12 92T 70T 22T 76%
|
||||
/dev/grid/node-x22-y13 88T 69T 19T 78%
|
||||
/dev/grid/node-x22-y14 90T 65T 25T 72%
|
||||
/dev/grid/node-x22-y15 91T 65T 26T 71%
|
||||
/dev/grid/node-x22-y16 90T 73T 17T 81%
|
||||
/dev/grid/node-x22-y17 93T 72T 21T 77%
|
||||
/dev/grid/node-x22-y18 92T 65T 27T 70%
|
||||
/dev/grid/node-x22-y19 89T 70T 19T 78%
|
||||
/dev/grid/node-x22-y20 89T 69T 20T 77%
|
||||
/dev/grid/node-x22-y21 91T 71T 20T 78%
|
||||
/dev/grid/node-x22-y22 88T 73T 15T 82%
|
||||
/dev/grid/node-x22-y23 88T 65T 23T 73%
|
||||
/dev/grid/node-x22-y24 91T 72T 19T 79%
|
||||
/dev/grid/node-x23-y0 92T 64T 28T 69%
|
||||
/dev/grid/node-x23-y1 85T 72T 13T 84%
|
||||
/dev/grid/node-x23-y2 89T 70T 19T 78%
|
||||
/dev/grid/node-x23-y3 85T 70T 15T 82%
|
||||
/dev/grid/node-x23-y4 94T 64T 30T 68%
|
||||
/dev/grid/node-x23-y5 89T 67T 22T 75%
|
||||
/dev/grid/node-x23-y6 89T 71T 18T 79%
|
||||
/dev/grid/node-x23-y7 85T 64T 21T 75%
|
||||
/dev/grid/node-x23-y8 90T 66T 24T 73%
|
||||
/dev/grid/node-x23-y9 85T 67T 18T 78%
|
||||
/dev/grid/node-x23-y10 85T 71T 14T 83%
|
||||
/dev/grid/node-x23-y11 509T 491T 18T 96%
|
||||
/dev/grid/node-x23-y12 89T 66T 23T 74%
|
||||
/dev/grid/node-x23-y13 90T 64T 26T 71%
|
||||
/dev/grid/node-x23-y14 91T 65T 26T 71%
|
||||
/dev/grid/node-x23-y15 85T 68T 17T 80%
|
||||
/dev/grid/node-x23-y16 86T 73T 13T 84%
|
||||
/dev/grid/node-x23-y17 89T 65T 24T 73%
|
||||
/dev/grid/node-x23-y18 92T 71T 21T 77%
|
||||
/dev/grid/node-x23-y19 86T 73T 13T 84%
|
||||
/dev/grid/node-x23-y20 94T 71T 23T 75%
|
||||
/dev/grid/node-x23-y21 85T 69T 16T 81%
|
||||
/dev/grid/node-x23-y22 85T 71T 14T 83%
|
||||
/dev/grid/node-x23-y23 94T 70T 24T 74%
|
||||
/dev/grid/node-x23-y24 90T 70T 20T 77%
|
||||
/dev/grid/node-x24-y0 89T 71T 18T 79%
|
||||
/dev/grid/node-x24-y1 88T 70T 18T 79%
|
||||
/dev/grid/node-x24-y2 87T 73T 14T 83%
|
||||
/dev/grid/node-x24-y3 90T 64T 26T 71%
|
||||
/dev/grid/node-x24-y4 86T 71T 15T 82%
|
||||
/dev/grid/node-x24-y5 85T 72T 13T 84%
|
||||
/dev/grid/node-x24-y6 86T 71T 15T 82%
|
||||
/dev/grid/node-x24-y7 92T 67T 25T 72%
|
||||
/dev/grid/node-x24-y8 85T 71T 14T 83%
|
||||
/dev/grid/node-x24-y9 90T 71T 19T 78%
|
||||
/dev/grid/node-x24-y10 90T 67T 23T 74%
|
||||
/dev/grid/node-x24-y11 503T 492T 11T 97%
|
||||
/dev/grid/node-x24-y12 86T 65T 21T 75%
|
||||
/dev/grid/node-x24-y13 87T 65T 22T 74%
|
||||
/dev/grid/node-x24-y14 93T 70T 23T 75%
|
||||
/dev/grid/node-x24-y15 87T 73T 14T 83%
|
||||
/dev/grid/node-x24-y16 88T 66T 22T 75%
|
||||
/dev/grid/node-x24-y17 85T 72T 13T 84%
|
||||
/dev/grid/node-x24-y18 90T 69T 21T 76%
|
||||
/dev/grid/node-x24-y19 89T 70T 19T 78%
|
||||
/dev/grid/node-x24-y20 91T 72T 19T 79%
|
||||
/dev/grid/node-x24-y21 87T 73T 14T 83%
|
||||
/dev/grid/node-x24-y22 94T 64T 30T 68%
|
||||
/dev/grid/node-x24-y23 88T 72T 16T 81%
|
||||
/dev/grid/node-x24-y24 86T 65T 21T 75%
|
||||
/dev/grid/node-x25-y0 90T 69T 21T 76%
|
||||
/dev/grid/node-x25-y1 92T 68T 24T 73%
|
||||
/dev/grid/node-x25-y2 88T 65T 23T 73%
|
||||
/dev/grid/node-x25-y3 86T 67T 19T 77%
|
||||
/dev/grid/node-x25-y4 86T 67T 19T 77%
|
||||
/dev/grid/node-x25-y5 86T 68T 18T 79%
|
||||
/dev/grid/node-x25-y6 88T 65T 23T 73%
|
||||
/dev/grid/node-x25-y7 85T 66T 19T 77%
|
||||
/dev/grid/node-x25-y8 89T 65T 24T 73%
|
||||
/dev/grid/node-x25-y9 92T 66T 26T 71%
|
||||
/dev/grid/node-x25-y10 94T 71T 23T 75%
|
||||
/dev/grid/node-x25-y11 503T 491T 12T 97%
|
||||
/dev/grid/node-x25-y12 90T 70T 20T 77%
|
||||
/dev/grid/node-x25-y13 94T 65T 29T 69%
|
||||
/dev/grid/node-x25-y14 92T 66T 26T 71%
|
||||
/dev/grid/node-x25-y15 89T 65T 24T 73%
|
||||
/dev/grid/node-x25-y16 85T 67T 18T 78%
|
||||
/dev/grid/node-x25-y17 91T 67T 24T 73%
|
||||
/dev/grid/node-x25-y18 92T 66T 26T 71%
|
||||
/dev/grid/node-x25-y19 89T 73T 16T 82%
|
||||
/dev/grid/node-x25-y20 93T 70T 23T 75%
|
||||
/dev/grid/node-x25-y21 94T 73T 21T 77%
|
||||
/dev/grid/node-x25-y22 93T 73T 20T 78%
|
||||
/dev/grid/node-x25-y23 89T 66T 23T 74%
|
||||
/dev/grid/node-x25-y24 86T 70T 16T 81%
|
||||
/dev/grid/node-x26-y0 90T 64T 26T 71%
|
||||
/dev/grid/node-x26-y1 92T 69T 23T 75%
|
||||
/dev/grid/node-x26-y2 93T 69T 24T 74%
|
||||
/dev/grid/node-x26-y3 85T 69T 16T 81%
|
||||
/dev/grid/node-x26-y4 91T 65T 26T 71%
|
||||
/dev/grid/node-x26-y5 93T 71T 22T 76%
|
||||
/dev/grid/node-x26-y6 85T 72T 13T 84%
|
||||
/dev/grid/node-x26-y7 94T 71T 23T 75%
|
||||
/dev/grid/node-x26-y8 94T 68T 26T 72%
|
||||
/dev/grid/node-x26-y9 90T 65T 25T 72%
|
||||
/dev/grid/node-x26-y10 86T 69T 17T 80%
|
||||
/dev/grid/node-x26-y11 508T 496T 12T 97%
|
||||
/dev/grid/node-x26-y12 89T 65T 24T 73%
|
||||
/dev/grid/node-x26-y13 91T 72T 19T 79%
|
||||
/dev/grid/node-x26-y14 91T 67T 24T 73%
|
||||
/dev/grid/node-x26-y15 87T 72T 15T 82%
|
||||
/dev/grid/node-x26-y16 90T 64T 26T 71%
|
||||
/dev/grid/node-x26-y17 93T 66T 27T 70%
|
||||
/dev/grid/node-x26-y18 93T 73T 20T 78%
|
||||
/dev/grid/node-x26-y19 91T 73T 18T 80%
|
||||
/dev/grid/node-x26-y20 86T 65T 21T 75%
|
||||
/dev/grid/node-x26-y21 94T 64T 30T 68%
|
||||
/dev/grid/node-x26-y22 91T 65T 26T 71%
|
||||
/dev/grid/node-x26-y23 89T 69T 20T 77%
|
||||
/dev/grid/node-x26-y24 87T 65T 22T 74%
|
||||
/dev/grid/node-x27-y0 94T 69T 25T 73%
|
||||
/dev/grid/node-x27-y1 94T 73T 21T 77%
|
||||
/dev/grid/node-x27-y2 91T 67T 24T 73%
|
||||
/dev/grid/node-x27-y3 93T 73T 20T 78%
|
||||
/dev/grid/node-x27-y4 85T 69T 16T 81%
|
||||
/dev/grid/node-x27-y5 85T 67T 18T 78%
|
||||
/dev/grid/node-x27-y6 87T 73T 14T 83%
|
||||
/dev/grid/node-x27-y7 90T 66T 24T 73%
|
||||
/dev/grid/node-x27-y8 94T 68T 26T 72%
|
||||
/dev/grid/node-x27-y9 92T 66T 26T 71%
|
||||
/dev/grid/node-x27-y10 94T 70T 24T 74%
|
||||
/dev/grid/node-x27-y11 501T 494T 7T 98%
|
||||
/dev/grid/node-x27-y12 87T 64T 23T 73%
|
||||
/dev/grid/node-x27-y13 92T 72T 20T 78%
|
||||
/dev/grid/node-x27-y14 90T 0T 90T 0%
|
||||
/dev/grid/node-x27-y15 86T 71T 15T 82%
|
||||
/dev/grid/node-x27-y16 85T 66T 19T 77%
|
||||
/dev/grid/node-x27-y17 87T 68T 19T 78%
|
||||
/dev/grid/node-x27-y18 89T 71T 18T 79%
|
||||
/dev/grid/node-x27-y19 94T 72T 22T 76%
|
||||
/dev/grid/node-x27-y20 85T 67T 18T 78%
|
||||
/dev/grid/node-x27-y21 91T 69T 22T 75%
|
||||
/dev/grid/node-x27-y22 87T 69T 18T 79%
|
||||
/dev/grid/node-x27-y23 91T 65T 26T 71%
|
||||
/dev/grid/node-x27-y24 92T 69T 23T 75%
|
||||
/dev/grid/node-x28-y0 88T 71T 17T 80%
|
||||
/dev/grid/node-x28-y1 88T 69T 19T 78%
|
||||
/dev/grid/node-x28-y2 85T 68T 17T 80%
|
||||
/dev/grid/node-x28-y3 89T 73T 16T 82%
|
||||
/dev/grid/node-x28-y4 86T 67T 19T 77%
|
||||
/dev/grid/node-x28-y5 89T 73T 16T 82%
|
||||
/dev/grid/node-x28-y6 91T 69T 22T 75%
|
||||
/dev/grid/node-x28-y7 88T 66T 22T 75%
|
||||
/dev/grid/node-x28-y8 93T 64T 29T 68%
|
||||
/dev/grid/node-x28-y9 89T 73T 16T 82%
|
||||
/dev/grid/node-x28-y10 89T 69T 20T 77%
|
||||
/dev/grid/node-x28-y11 505T 493T 12T 97%
|
||||
/dev/grid/node-x28-y12 88T 67T 21T 76%
|
||||
/dev/grid/node-x28-y13 92T 69T 23T 75%
|
||||
/dev/grid/node-x28-y14 85T 65T 20T 76%
|
||||
/dev/grid/node-x28-y15 92T 70T 22T 76%
|
||||
/dev/grid/node-x28-y16 86T 68T 18T 79%
|
||||
/dev/grid/node-x28-y17 88T 72T 16T 81%
|
||||
/dev/grid/node-x28-y18 87T 72T 15T 82%
|
||||
/dev/grid/node-x28-y19 85T 66T 19T 77%
|
||||
/dev/grid/node-x28-y20 90T 72T 18T 80%
|
||||
/dev/grid/node-x28-y21 86T 70T 16T 81%
|
||||
/dev/grid/node-x28-y22 88T 69T 19T 78%
|
||||
/dev/grid/node-x28-y23 93T 64T 29T 68%
|
||||
/dev/grid/node-x28-y24 90T 67T 23T 74%
|
||||
/dev/grid/node-x29-y0 91T 68T 23T 74%
|
||||
/dev/grid/node-x29-y1 89T 67T 22T 75%
|
||||
/dev/grid/node-x29-y2 86T 66T 20T 76%
|
||||
/dev/grid/node-x29-y3 92T 66T 26T 71%
|
||||
/dev/grid/node-x29-y4 88T 71T 17T 80%
|
||||
/dev/grid/node-x29-y5 89T 72T 17T 80%
|
||||
/dev/grid/node-x29-y6 92T 67T 25T 72%
|
||||
/dev/grid/node-x29-y7 89T 64T 25T 71%
|
||||
/dev/grid/node-x29-y8 91T 68T 23T 74%
|
||||
/dev/grid/node-x29-y9 86T 73T 13T 84%
|
||||
/dev/grid/node-x29-y10 85T 67T 18T 78%
|
||||
/dev/grid/node-x29-y11 510T 497T 13T 97%
|
||||
/dev/grid/node-x29-y12 86T 70T 16T 81%
|
||||
/dev/grid/node-x29-y13 90T 69T 21T 76%
|
||||
/dev/grid/node-x29-y14 85T 67T 18T 78%
|
||||
/dev/grid/node-x29-y15 90T 71T 19T 78%
|
||||
/dev/grid/node-x29-y16 94T 66T 28T 70%
|
||||
/dev/grid/node-x29-y17 93T 69T 24T 74%
|
||||
/dev/grid/node-x29-y18 90T 67T 23T 74%
|
||||
/dev/grid/node-x29-y19 90T 69T 21T 76%
|
||||
/dev/grid/node-x29-y20 89T 68T 21T 76%
|
||||
/dev/grid/node-x29-y21 92T 71T 21T 77%
|
||||
/dev/grid/node-x29-y22 94T 68T 26T 72%
|
||||
/dev/grid/node-x29-y23 87T 64T 23T 73%
|
||||
/dev/grid/node-x29-y24 91T 65T 26T 71%
|
||||
/dev/grid/node-x30-y0 88T 70T 18T 79%
|
||||
/dev/grid/node-x30-y1 94T 71T 23T 75%
|
||||
/dev/grid/node-x30-y2 94T 65T 29T 69%
|
||||
/dev/grid/node-x30-y3 93T 66T 27T 70%
|
||||
/dev/grid/node-x30-y4 85T 73T 12T 85%
|
||||
/dev/grid/node-x30-y5 90T 66T 24T 73%
|
||||
/dev/grid/node-x30-y6 91T 69T 22T 75%
|
||||
/dev/grid/node-x30-y7 88T 69T 19T 78%
|
||||
/dev/grid/node-x30-y8 93T 68T 25T 73%
|
||||
/dev/grid/node-x30-y9 89T 64T 25T 71%
|
||||
/dev/grid/node-x30-y10 87T 66T 21T 75%
|
||||
/dev/grid/node-x30-y11 501T 490T 11T 97%
|
||||
/dev/grid/node-x30-y12 90T 69T 21T 76%
|
||||
/dev/grid/node-x30-y13 91T 71T 20T 78%
|
||||
/dev/grid/node-x30-y14 91T 73T 18T 80%
|
||||
/dev/grid/node-x30-y15 87T 73T 14T 83%
|
||||
/dev/grid/node-x30-y16 88T 72T 16T 81%
|
||||
/dev/grid/node-x30-y17 90T 65T 25T 72%
|
||||
/dev/grid/node-x30-y18 89T 73T 16T 82%
|
||||
/dev/grid/node-x30-y19 89T 66T 23T 74%
|
||||
/dev/grid/node-x30-y20 91T 71T 20T 78%
|
||||
/dev/grid/node-x30-y21 92T 68T 24T 73%
|
||||
/dev/grid/node-x30-y22 94T 71T 23T 75%
|
||||
/dev/grid/node-x30-y23 91T 72T 19T 79%
|
||||
/dev/grid/node-x30-y24 88T 67T 21T 76%
|
||||
/dev/grid/node-x31-y0 93T 73T 20T 78%
|
||||
/dev/grid/node-x31-y1 89T 64T 25T 71%
|
||||
/dev/grid/node-x31-y2 90T 67T 23T 74%
|
||||
/dev/grid/node-x31-y3 86T 67T 19T 77%
|
||||
/dev/grid/node-x31-y4 89T 68T 21T 76%
|
||||
/dev/grid/node-x31-y5 91T 70T 21T 76%
|
||||
/dev/grid/node-x31-y6 91T 69T 22T 75%
|
||||
/dev/grid/node-x31-y7 90T 71T 19T 78%
|
||||
/dev/grid/node-x31-y8 93T 72T 21T 77%
|
||||
/dev/grid/node-x31-y9 87T 65T 22T 74%
|
||||
/dev/grid/node-x31-y10 90T 65T 25T 72%
|
||||
/dev/grid/node-x31-y11 506T 494T 12T 97%
|
||||
/dev/grid/node-x31-y12 89T 70T 19T 78%
|
||||
/dev/grid/node-x31-y13 93T 65T 28T 69%
|
||||
/dev/grid/node-x31-y14 93T 65T 28T 69%
|
||||
/dev/grid/node-x31-y15 90T 72T 18T 80%
|
||||
/dev/grid/node-x31-y16 87T 71T 16T 81%
|
||||
/dev/grid/node-x31-y17 89T 65T 24T 73%
|
||||
/dev/grid/node-x31-y18 86T 68T 18T 79%
|
||||
/dev/grid/node-x31-y19 87T 73T 14T 83%
|
||||
/dev/grid/node-x31-y20 85T 73T 12T 85%
|
||||
/dev/grid/node-x31-y21 86T 72T 14T 83%
|
||||
/dev/grid/node-x31-y22 94T 65T 29T 69%
|
||||
/dev/grid/node-x31-y23 91T 68T 23T 74%
|
||||
/dev/grid/node-x31-y24 87T 68T 19T 78%
|
||||
/dev/grid/node-x32-y0 92T 67T 25T 72%
|
||||
/dev/grid/node-x32-y1 85T 69T 16T 81%
|
||||
/dev/grid/node-x32-y2 92T 72T 20T 78%
|
||||
/dev/grid/node-x32-y3 92T 68T 24T 73%
|
||||
/dev/grid/node-x32-y4 85T 69T 16T 81%
|
||||
/dev/grid/node-x32-y5 85T 69T 16T 81%
|
||||
/dev/grid/node-x32-y6 85T 72T 13T 84%
|
||||
/dev/grid/node-x32-y7 86T 66T 20T 76%
|
||||
/dev/grid/node-x32-y8 85T 69T 16T 81%
|
||||
/dev/grid/node-x32-y9 92T 64T 28T 69%
|
||||
/dev/grid/node-x32-y10 86T 64T 22T 74%
|
||||
/dev/grid/node-x32-y11 508T 491T 17T 96%
|
||||
/dev/grid/node-x32-y12 89T 66T 23T 74%
|
||||
/dev/grid/node-x32-y13 89T 73T 16T 82%
|
||||
/dev/grid/node-x32-y14 94T 70T 24T 74%
|
||||
/dev/grid/node-x32-y15 93T 68T 25T 73%
|
||||
/dev/grid/node-x32-y16 88T 73T 15T 82%
|
||||
/dev/grid/node-x32-y17 87T 66T 21T 75%
|
||||
/dev/grid/node-x32-y18 85T 73T 12T 85%
|
||||
/dev/grid/node-x32-y19 94T 64T 30T 68%
|
||||
/dev/grid/node-x32-y20 86T 73T 13T 84%
|
||||
/dev/grid/node-x32-y21 93T 72T 21T 77%
|
||||
/dev/grid/node-x32-y22 93T 67T 26T 72%
|
||||
/dev/grid/node-x32-y23 94T 65T 29T 69%
|
||||
/dev/grid/node-x32-y24 85T 71T 14T 83%
|
||||
/dev/grid/node-x33-y0 88T 67T 21T 76%
|
||||
/dev/grid/node-x33-y1 90T 69T 21T 76%
|
||||
/dev/grid/node-x33-y2 85T 68T 17T 80%
|
||||
/dev/grid/node-x33-y3 87T 73T 14T 83%
|
||||
/dev/grid/node-x33-y4 93T 66T 27T 70%
|
||||
/dev/grid/node-x33-y5 88T 68T 20T 77%
|
||||
/dev/grid/node-x33-y6 85T 67T 18T 78%
|
||||
/dev/grid/node-x33-y7 86T 69T 17T 80%
|
||||
/dev/grid/node-x33-y8 86T 65T 21T 75%
|
||||
/dev/grid/node-x33-y9 93T 68T 25T 73%
|
||||
/dev/grid/node-x33-y10 85T 70T 15T 82%
|
||||
/dev/grid/node-x33-y11 507T 491T 16T 96%
|
||||
/dev/grid/node-x33-y12 91T 73T 18T 80%
|
||||
/dev/grid/node-x33-y13 89T 72T 17T 80%
|
||||
/dev/grid/node-x33-y14 94T 71T 23T 75%
|
||||
/dev/grid/node-x33-y15 86T 66T 20T 76%
|
||||
/dev/grid/node-x33-y16 86T 70T 16T 81%
|
||||
/dev/grid/node-x33-y17 87T 69T 18T 79%
|
||||
/dev/grid/node-x33-y18 89T 64T 25T 71%
|
||||
/dev/grid/node-x33-y19 92T 67T 25T 72%
|
||||
/dev/grid/node-x33-y20 86T 71T 15T 82%
|
||||
/dev/grid/node-x33-y21 90T 70T 20T 77%
|
||||
/dev/grid/node-x33-y22 86T 65T 21T 75%
|
||||
/dev/grid/node-x33-y23 92T 70T 22T 76%
|
||||
/dev/grid/node-x33-y24 92T 64T 28T 69%
|
||||
/dev/grid/node-x34-y0 88T 69T 19T 78%
|
||||
/dev/grid/node-x34-y1 93T 67T 26T 72%
|
||||
/dev/grid/node-x34-y2 88T 65T 23T 73%
|
||||
/dev/grid/node-x34-y3 90T 71T 19T 78%
|
||||
/dev/grid/node-x34-y4 90T 67T 23T 74%
|
||||
/dev/grid/node-x34-y5 85T 70T 15T 82%
|
||||
/dev/grid/node-x34-y6 87T 72T 15T 82%
|
||||
/dev/grid/node-x34-y7 92T 66T 26T 71%
|
||||
/dev/grid/node-x34-y8 93T 65T 28T 69%
|
||||
/dev/grid/node-x34-y9 90T 73T 17T 81%
|
||||
/dev/grid/node-x34-y10 90T 64T 26T 71%
|
||||
/dev/grid/node-x34-y11 504T 496T 8T 98%
|
||||
/dev/grid/node-x34-y12 87T 73T 14T 83%
|
||||
/dev/grid/node-x34-y13 92T 67T 25T 72%
|
||||
/dev/grid/node-x34-y14 90T 70T 20T 77%
|
||||
/dev/grid/node-x34-y15 88T 68T 20T 77%
|
||||
/dev/grid/node-x34-y16 87T 73T 14T 83%
|
||||
/dev/grid/node-x34-y17 90T 65T 25T 72%
|
||||
/dev/grid/node-x34-y18 90T 73T 17T 81%
|
||||
/dev/grid/node-x34-y19 91T 73T 18T 80%
|
||||
/dev/grid/node-x34-y20 92T 72T 20T 78%
|
||||
/dev/grid/node-x34-y21 85T 66T 19T 77%
|
||||
/dev/grid/node-x34-y22 94T 66T 28T 70%
|
||||
/dev/grid/node-x34-y23 87T 64T 23T 73%
|
||||
/dev/grid/node-x34-y24 92T 71T 21T 77%
|
||||
101
2016/d22/ex2/ex2.py
Executable file
101
2016/d22/ex2/ex2.py
Executable file
|
|
@ -0,0 +1,101 @@
|
|||
#!/usr/bin/env python
|
||||
|
||||
import heapq
|
||||
import sys
|
||||
from collections.abc import Iterable
|
||||
from typing import NamedTuple
|
||||
|
||||
|
||||
class Point(NamedTuple):
|
||||
x: int
|
||||
y: int
|
||||
|
||||
|
||||
class Filesystem(NamedTuple):
|
||||
size: int
|
||||
used: int
|
||||
|
||||
@property
|
||||
def avail(self) -> int:
|
||||
return self.size - self.used
|
||||
|
||||
|
||||
def solve(input: str) -> int:
|
||||
def parse_line(input: str) -> tuple[Point, Filesystem]:
|
||||
raw_fs, raw_size, raw_used, raw_avail, _ = input.split()
|
||||
size = int(raw_size.removesuffix("T"))
|
||||
used = int(raw_used.removesuffix("T"))
|
||||
avail = int(raw_avail.removesuffix("T"))
|
||||
assert size == (used + avail) # Sanity check
|
||||
*_, x, y = raw_fs.split("-")
|
||||
return Point(int(x[1:]), int(y[1:])), Filesystem(size, used)
|
||||
|
||||
def parse(input: str) -> dict[Point, Filesystem]:
|
||||
return {node: fs for node, fs in map(parse_line, input.splitlines()[2:])}
|
||||
|
||||
def neighbours(p: Point) -> Iterable[Point]:
|
||||
for dx, dy in (
|
||||
(-1, 0),
|
||||
(1, 0),
|
||||
(0, -1),
|
||||
(0, 1),
|
||||
):
|
||||
yield Point(p.x + dx, p.y + dy)
|
||||
|
||||
def dijkstra(start: Point, end: Point, points: set[Point]) -> int:
|
||||
# Priority queue of (distance, point)
|
||||
queue = [(0, start)]
|
||||
seen: set[Point] = set()
|
||||
|
||||
while len(queue) > 0:
|
||||
dist, p = heapq.heappop(queue)
|
||||
if p == end:
|
||||
return dist
|
||||
# We must have seen p with a smaller distance before
|
||||
if p in seen:
|
||||
continue
|
||||
# First time encountering p, must be the smallest distance to it
|
||||
seen.add(p)
|
||||
# Add all neighbours to be visited
|
||||
for n in neighbours(p):
|
||||
if n not in points:
|
||||
continue
|
||||
heapq.heappush(queue, (dist + 1, n))
|
||||
|
||||
assert False # Sanity check
|
||||
|
||||
def dist(p: Point, other: Point) -> int:
|
||||
return abs(p.x - other.x) + abs(p.y - other.y)
|
||||
|
||||
def has_angle(p: Point, other: Point) -> int:
|
||||
return p.x != other.x and p.y != other.y
|
||||
|
||||
def data_migration(start: Point, end: Point) -> int:
|
||||
# Moving the data once is a 5 step move, unless it is on an angle, where it is 3
|
||||
# Assumes there's no wall between either points
|
||||
return 5 * dist(start, end) - 2 * has_angle(start, end)
|
||||
|
||||
df = parse(input)
|
||||
# The data moves from the goal to us, hence `start` and `end` are "reversed"
|
||||
start = max(p for p in df.keys() if p.y == 0)
|
||||
end = Point(0, 0)
|
||||
# The "hole" must be used to migrate the data to us
|
||||
hole = next(p for p, fs in df.items() if fs.used == 0)
|
||||
# The "walls" are nodes which are too big to move, effectively blocking us
|
||||
walls = {p for p, fs in df.items() if fs.used > df[hole].avail}
|
||||
accessible = df.keys() - walls
|
||||
|
||||
return min(
|
||||
dijkstra(hole, n, accessible) + 1 + data_migration(n, end)
|
||||
for n in neighbours(start)
|
||||
if n in accessible
|
||||
)
|
||||
|
||||
|
||||
def main() -> None:
|
||||
input = sys.stdin.read()
|
||||
print(solve(input))
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
877
2016/d22/ex2/input
Normal file
877
2016/d22/ex2/input
Normal file
|
|
@ -0,0 +1,877 @@
|
|||
root@ebhq-gridcenter# df -h
|
||||
Filesystem Size Used Avail Use%
|
||||
/dev/grid/node-x0-y0 94T 65T 29T 69%
|
||||
/dev/grid/node-x0-y1 88T 69T 19T 78%
|
||||
/dev/grid/node-x0-y2 92T 72T 20T 78%
|
||||
/dev/grid/node-x0-y3 93T 73T 20T 78%
|
||||
/dev/grid/node-x0-y4 85T 73T 12T 85%
|
||||
/dev/grid/node-x0-y5 94T 70T 24T 74%
|
||||
/dev/grid/node-x0-y6 93T 66T 27T 70%
|
||||
/dev/grid/node-x0-y7 90T 68T 22T 75%
|
||||
/dev/grid/node-x0-y8 87T 73T 14T 83%
|
||||
/dev/grid/node-x0-y9 92T 66T 26T 71%
|
||||
/dev/grid/node-x0-y10 90T 72T 18T 80%
|
||||
/dev/grid/node-x0-y11 86T 71T 15T 82%
|
||||
/dev/grid/node-x0-y12 86T 73T 13T 84%
|
||||
/dev/grid/node-x0-y13 88T 71T 17T 80%
|
||||
/dev/grid/node-x0-y14 93T 70T 23T 75%
|
||||
/dev/grid/node-x0-y15 88T 70T 18T 79%
|
||||
/dev/grid/node-x0-y16 88T 71T 17T 80%
|
||||
/dev/grid/node-x0-y17 93T 73T 20T 78%
|
||||
/dev/grid/node-x0-y18 86T 69T 17T 80%
|
||||
/dev/grid/node-x0-y19 92T 71T 21T 77%
|
||||
/dev/grid/node-x0-y20 93T 64T 29T 68%
|
||||
/dev/grid/node-x0-y21 90T 73T 17T 81%
|
||||
/dev/grid/node-x0-y22 94T 64T 30T 68%
|
||||
/dev/grid/node-x0-y23 90T 72T 18T 80%
|
||||
/dev/grid/node-x0-y24 87T 72T 15T 82%
|
||||
/dev/grid/node-x1-y0 94T 66T 28T 70%
|
||||
/dev/grid/node-x1-y1 88T 68T 20T 77%
|
||||
/dev/grid/node-x1-y2 93T 64T 29T 68%
|
||||
/dev/grid/node-x1-y3 85T 70T 15T 82%
|
||||
/dev/grid/node-x1-y4 88T 72T 16T 81%
|
||||
/dev/grid/node-x1-y5 89T 65T 24T 73%
|
||||
/dev/grid/node-x1-y6 88T 67T 21T 76%
|
||||
/dev/grid/node-x1-y7 88T 64T 24T 72%
|
||||
/dev/grid/node-x1-y8 94T 65T 29T 69%
|
||||
/dev/grid/node-x1-y9 85T 73T 12T 85%
|
||||
/dev/grid/node-x1-y10 86T 65T 21T 75%
|
||||
/dev/grid/node-x1-y11 91T 66T 25T 72%
|
||||
/dev/grid/node-x1-y12 92T 70T 22T 76%
|
||||
/dev/grid/node-x1-y13 94T 67T 27T 71%
|
||||
/dev/grid/node-x1-y14 89T 71T 18T 79%
|
||||
/dev/grid/node-x1-y15 90T 69T 21T 76%
|
||||
/dev/grid/node-x1-y16 90T 71T 19T 78%
|
||||
/dev/grid/node-x1-y17 90T 70T 20T 77%
|
||||
/dev/grid/node-x1-y18 92T 66T 26T 71%
|
||||
/dev/grid/node-x1-y19 91T 70T 21T 76%
|
||||
/dev/grid/node-x1-y20 89T 70T 19T 78%
|
||||
/dev/grid/node-x1-y21 93T 64T 29T 68%
|
||||
/dev/grid/node-x1-y22 92T 69T 23T 75%
|
||||
/dev/grid/node-x1-y23 90T 64T 26T 71%
|
||||
/dev/grid/node-x1-y24 85T 72T 13T 84%
|
||||
/dev/grid/node-x2-y0 89T 64T 25T 71%
|
||||
/dev/grid/node-x2-y1 88T 71T 17T 80%
|
||||
/dev/grid/node-x2-y2 85T 64T 21T 75%
|
||||
/dev/grid/node-x2-y3 85T 66T 19T 77%
|
||||
/dev/grid/node-x2-y4 93T 69T 24T 74%
|
||||
/dev/grid/node-x2-y5 94T 73T 21T 77%
|
||||
/dev/grid/node-x2-y6 91T 65T 26T 71%
|
||||
/dev/grid/node-x2-y7 91T 68T 23T 74%
|
||||
/dev/grid/node-x2-y8 93T 72T 21T 77%
|
||||
/dev/grid/node-x2-y9 92T 73T 19T 79%
|
||||
/dev/grid/node-x2-y10 93T 68T 25T 73%
|
||||
/dev/grid/node-x2-y11 92T 73T 19T 79%
|
||||
/dev/grid/node-x2-y12 91T 70T 21T 76%
|
||||
/dev/grid/node-x2-y13 94T 73T 21T 77%
|
||||
/dev/grid/node-x2-y14 86T 70T 16T 81%
|
||||
/dev/grid/node-x2-y15 91T 66T 25T 72%
|
||||
/dev/grid/node-x2-y16 94T 64T 30T 68%
|
||||
/dev/grid/node-x2-y17 92T 65T 27T 70%
|
||||
/dev/grid/node-x2-y18 87T 72T 15T 82%
|
||||
/dev/grid/node-x2-y19 91T 64T 27T 70%
|
||||
/dev/grid/node-x2-y20 89T 70T 19T 78%
|
||||
/dev/grid/node-x2-y21 86T 65T 21T 75%
|
||||
/dev/grid/node-x2-y22 94T 64T 30T 68%
|
||||
/dev/grid/node-x2-y23 88T 67T 21T 76%
|
||||
/dev/grid/node-x2-y24 92T 64T 28T 69%
|
||||
/dev/grid/node-x3-y0 85T 66T 19T 77%
|
||||
/dev/grid/node-x3-y1 88T 64T 24T 72%
|
||||
/dev/grid/node-x3-y2 93T 71T 22T 76%
|
||||
/dev/grid/node-x3-y3 90T 68T 22T 75%
|
||||
/dev/grid/node-x3-y4 87T 73T 14T 83%
|
||||
/dev/grid/node-x3-y5 94T 64T 30T 68%
|
||||
/dev/grid/node-x3-y6 92T 72T 20T 78%
|
||||
/dev/grid/node-x3-y7 89T 69T 20T 77%
|
||||
/dev/grid/node-x3-y8 91T 69T 22T 75%
|
||||
/dev/grid/node-x3-y9 92T 66T 26T 71%
|
||||
/dev/grid/node-x3-y10 93T 73T 20T 78%
|
||||
/dev/grid/node-x3-y11 93T 67T 26T 72%
|
||||
/dev/grid/node-x3-y12 88T 69T 19T 78%
|
||||
/dev/grid/node-x3-y13 92T 68T 24T 73%
|
||||
/dev/grid/node-x3-y14 91T 73T 18T 80%
|
||||
/dev/grid/node-x3-y15 94T 64T 30T 68%
|
||||
/dev/grid/node-x3-y16 85T 69T 16T 81%
|
||||
/dev/grid/node-x3-y17 87T 68T 19T 78%
|
||||
/dev/grid/node-x3-y18 88T 66T 22T 75%
|
||||
/dev/grid/node-x3-y19 90T 72T 18T 80%
|
||||
/dev/grid/node-x3-y20 90T 73T 17T 81%
|
||||
/dev/grid/node-x3-y21 86T 73T 13T 84%
|
||||
/dev/grid/node-x3-y22 86T 64T 22T 74%
|
||||
/dev/grid/node-x3-y23 93T 69T 24T 74%
|
||||
/dev/grid/node-x3-y24 89T 66T 23T 74%
|
||||
/dev/grid/node-x4-y0 92T 71T 21T 77%
|
||||
/dev/grid/node-x4-y1 89T 70T 19T 78%
|
||||
/dev/grid/node-x4-y2 90T 69T 21T 76%
|
||||
/dev/grid/node-x4-y3 86T 65T 21T 75%
|
||||
/dev/grid/node-x4-y4 86T 67T 19T 77%
|
||||
/dev/grid/node-x4-y5 94T 67T 27T 71%
|
||||
/dev/grid/node-x4-y6 91T 66T 25T 72%
|
||||
/dev/grid/node-x4-y7 94T 69T 25T 73%
|
||||
/dev/grid/node-x4-y8 88T 64T 24T 72%
|
||||
/dev/grid/node-x4-y9 88T 73T 15T 82%
|
||||
/dev/grid/node-x4-y10 91T 72T 19T 79%
|
||||
/dev/grid/node-x4-y11 86T 65T 21T 75%
|
||||
/dev/grid/node-x4-y12 92T 72T 20T 78%
|
||||
/dev/grid/node-x4-y13 92T 66T 26T 71%
|
||||
/dev/grid/node-x4-y14 89T 67T 22T 75%
|
||||
/dev/grid/node-x4-y15 92T 64T 28T 69%
|
||||
/dev/grid/node-x4-y16 94T 67T 27T 71%
|
||||
/dev/grid/node-x4-y17 85T 65T 20T 76%
|
||||
/dev/grid/node-x4-y18 94T 72T 22T 76%
|
||||
/dev/grid/node-x4-y19 94T 64T 30T 68%
|
||||
/dev/grid/node-x4-y20 87T 72T 15T 82%
|
||||
/dev/grid/node-x4-y21 93T 71T 22T 76%
|
||||
/dev/grid/node-x4-y22 86T 69T 17T 80%
|
||||
/dev/grid/node-x4-y23 90T 67T 23T 74%
|
||||
/dev/grid/node-x4-y24 88T 71T 17T 80%
|
||||
/dev/grid/node-x5-y0 89T 70T 19T 78%
|
||||
/dev/grid/node-x5-y1 88T 72T 16T 81%
|
||||
/dev/grid/node-x5-y2 85T 71T 14T 83%
|
||||
/dev/grid/node-x5-y3 85T 68T 17T 80%
|
||||
/dev/grid/node-x5-y4 86T 67T 19T 77%
|
||||
/dev/grid/node-x5-y5 86T 65T 21T 75%
|
||||
/dev/grid/node-x5-y6 87T 64T 23T 73%
|
||||
/dev/grid/node-x5-y7 93T 68T 25T 73%
|
||||
/dev/grid/node-x5-y8 94T 69T 25T 73%
|
||||
/dev/grid/node-x5-y9 91T 69T 22T 75%
|
||||
/dev/grid/node-x5-y10 89T 69T 20T 77%
|
||||
/dev/grid/node-x5-y11 89T 65T 24T 73%
|
||||
/dev/grid/node-x5-y12 86T 68T 18T 79%
|
||||
/dev/grid/node-x5-y13 85T 68T 17T 80%
|
||||
/dev/grid/node-x5-y14 89T 72T 17T 80%
|
||||
/dev/grid/node-x5-y15 92T 66T 26T 71%
|
||||
/dev/grid/node-x5-y16 89T 66T 23T 74%
|
||||
/dev/grid/node-x5-y17 90T 67T 23T 74%
|
||||
/dev/grid/node-x5-y18 93T 70T 23T 75%
|
||||
/dev/grid/node-x5-y19 89T 67T 22T 75%
|
||||
/dev/grid/node-x5-y20 87T 64T 23T 73%
|
||||
/dev/grid/node-x5-y21 90T 67T 23T 74%
|
||||
/dev/grid/node-x5-y22 94T 65T 29T 69%
|
||||
/dev/grid/node-x5-y23 90T 67T 23T 74%
|
||||
/dev/grid/node-x5-y24 89T 67T 22T 75%
|
||||
/dev/grid/node-x6-y0 90T 69T 21T 76%
|
||||
/dev/grid/node-x6-y1 89T 67T 22T 75%
|
||||
/dev/grid/node-x6-y2 93T 69T 24T 74%
|
||||
/dev/grid/node-x6-y3 92T 69T 23T 75%
|
||||
/dev/grid/node-x6-y4 93T 64T 29T 68%
|
||||
/dev/grid/node-x6-y5 91T 69T 22T 75%
|
||||
/dev/grid/node-x6-y6 90T 65T 25T 72%
|
||||
/dev/grid/node-x6-y7 93T 64T 29T 68%
|
||||
/dev/grid/node-x6-y8 93T 72T 21T 77%
|
||||
/dev/grid/node-x6-y9 88T 64T 24T 72%
|
||||
/dev/grid/node-x6-y10 86T 68T 18T 79%
|
||||
/dev/grid/node-x6-y11 92T 73T 19T 79%
|
||||
/dev/grid/node-x6-y12 88T 65T 23T 73%
|
||||
/dev/grid/node-x6-y13 93T 67T 26T 72%
|
||||
/dev/grid/node-x6-y14 85T 67T 18T 78%
|
||||
/dev/grid/node-x6-y15 87T 65T 22T 74%
|
||||
/dev/grid/node-x6-y16 87T 67T 20T 77%
|
||||
/dev/grid/node-x6-y17 86T 67T 19T 77%
|
||||
/dev/grid/node-x6-y18 90T 65T 25T 72%
|
||||
/dev/grid/node-x6-y19 92T 71T 21T 77%
|
||||
/dev/grid/node-x6-y20 91T 69T 22T 75%
|
||||
/dev/grid/node-x6-y21 91T 69T 22T 75%
|
||||
/dev/grid/node-x6-y22 86T 71T 15T 82%
|
||||
/dev/grid/node-x6-y23 92T 66T 26T 71%
|
||||
/dev/grid/node-x6-y24 93T 69T 24T 74%
|
||||
/dev/grid/node-x7-y0 87T 66T 21T 75%
|
||||
/dev/grid/node-x7-y1 91T 64T 27T 70%
|
||||
/dev/grid/node-x7-y2 94T 69T 25T 73%
|
||||
/dev/grid/node-x7-y3 87T 68T 19T 78%
|
||||
/dev/grid/node-x7-y4 94T 66T 28T 70%
|
||||
/dev/grid/node-x7-y5 92T 72T 20T 78%
|
||||
/dev/grid/node-x7-y6 92T 67T 25T 72%
|
||||
/dev/grid/node-x7-y7 94T 67T 27T 71%
|
||||
/dev/grid/node-x7-y8 91T 65T 26T 71%
|
||||
/dev/grid/node-x7-y9 88T 66T 22T 75%
|
||||
/dev/grid/node-x7-y10 85T 72T 13T 84%
|
||||
/dev/grid/node-x7-y11 93T 64T 29T 68%
|
||||
/dev/grid/node-x7-y12 90T 65T 25T 72%
|
||||
/dev/grid/node-x7-y13 94T 64T 30T 68%
|
||||
/dev/grid/node-x7-y14 94T 69T 25T 73%
|
||||
/dev/grid/node-x7-y15 87T 68T 19T 78%
|
||||
/dev/grid/node-x7-y16 88T 71T 17T 80%
|
||||
/dev/grid/node-x7-y17 89T 64T 25T 71%
|
||||
/dev/grid/node-x7-y18 87T 70T 17T 80%
|
||||
/dev/grid/node-x7-y19 91T 72T 19T 79%
|
||||
/dev/grid/node-x7-y20 94T 65T 29T 69%
|
||||
/dev/grid/node-x7-y21 87T 69T 18T 79%
|
||||
/dev/grid/node-x7-y22 91T 72T 19T 79%
|
||||
/dev/grid/node-x7-y23 93T 64T 29T 68%
|
||||
/dev/grid/node-x7-y24 85T 69T 16T 81%
|
||||
/dev/grid/node-x8-y0 90T 68T 22T 75%
|
||||
/dev/grid/node-x8-y1 88T 66T 22T 75%
|
||||
/dev/grid/node-x8-y2 91T 67T 24T 73%
|
||||
/dev/grid/node-x8-y3 86T 64T 22T 74%
|
||||
/dev/grid/node-x8-y4 91T 73T 18T 80%
|
||||
/dev/grid/node-x8-y5 92T 64T 28T 69%
|
||||
/dev/grid/node-x8-y6 89T 64T 25T 71%
|
||||
/dev/grid/node-x8-y7 87T 66T 21T 75%
|
||||
/dev/grid/node-x8-y8 85T 71T 14T 83%
|
||||
/dev/grid/node-x8-y9 88T 71T 17T 80%
|
||||
/dev/grid/node-x8-y10 89T 71T 18T 79%
|
||||
/dev/grid/node-x8-y11 89T 67T 22T 75%
|
||||
/dev/grid/node-x8-y12 91T 66T 25T 72%
|
||||
/dev/grid/node-x8-y13 88T 64T 24T 72%
|
||||
/dev/grid/node-x8-y14 86T 71T 15T 82%
|
||||
/dev/grid/node-x8-y15 93T 72T 21T 77%
|
||||
/dev/grid/node-x8-y16 90T 69T 21T 76%
|
||||
/dev/grid/node-x8-y17 86T 73T 13T 84%
|
||||
/dev/grid/node-x8-y18 88T 64T 24T 72%
|
||||
/dev/grid/node-x8-y19 88T 64T 24T 72%
|
||||
/dev/grid/node-x8-y20 87T 73T 14T 83%
|
||||
/dev/grid/node-x8-y21 85T 70T 15T 82%
|
||||
/dev/grid/node-x8-y22 85T 70T 15T 82%
|
||||
/dev/grid/node-x8-y23 90T 68T 22T 75%
|
||||
/dev/grid/node-x8-y24 88T 73T 15T 82%
|
||||
/dev/grid/node-x9-y0 89T 66T 23T 74%
|
||||
/dev/grid/node-x9-y1 89T 65T 24T 73%
|
||||
/dev/grid/node-x9-y2 85T 71T 14T 83%
|
||||
/dev/grid/node-x9-y3 92T 69T 23T 75%
|
||||
/dev/grid/node-x9-y4 92T 64T 28T 69%
|
||||
/dev/grid/node-x9-y5 89T 67T 22T 75%
|
||||
/dev/grid/node-x9-y6 93T 72T 21T 77%
|
||||
/dev/grid/node-x9-y7 94T 65T 29T 69%
|
||||
/dev/grid/node-x9-y8 87T 71T 16T 81%
|
||||
/dev/grid/node-x9-y9 85T 65T 20T 76%
|
||||
/dev/grid/node-x9-y10 92T 70T 22T 76%
|
||||
/dev/grid/node-x9-y11 87T 73T 14T 83%
|
||||
/dev/grid/node-x9-y12 88T 71T 17T 80%
|
||||
/dev/grid/node-x9-y13 93T 71T 22T 76%
|
||||
/dev/grid/node-x9-y14 91T 67T 24T 73%
|
||||
/dev/grid/node-x9-y15 92T 64T 28T 69%
|
||||
/dev/grid/node-x9-y16 87T 65T 22T 74%
|
||||
/dev/grid/node-x9-y17 94T 65T 29T 69%
|
||||
/dev/grid/node-x9-y18 94T 71T 23T 75%
|
||||
/dev/grid/node-x9-y19 85T 64T 21T 75%
|
||||
/dev/grid/node-x9-y20 92T 65T 27T 70%
|
||||
/dev/grid/node-x9-y21 92T 73T 19T 79%
|
||||
/dev/grid/node-x9-y22 91T 73T 18T 80%
|
||||
/dev/grid/node-x9-y23 90T 64T 26T 71%
|
||||
/dev/grid/node-x9-y24 85T 73T 12T 85%
|
||||
/dev/grid/node-x10-y0 94T 71T 23T 75%
|
||||
/dev/grid/node-x10-y1 86T 69T 17T 80%
|
||||
/dev/grid/node-x10-y2 88T 71T 17T 80%
|
||||
/dev/grid/node-x10-y3 93T 69T 24T 74%
|
||||
/dev/grid/node-x10-y4 92T 72T 20T 78%
|
||||
/dev/grid/node-x10-y5 85T 66T 19T 77%
|
||||
/dev/grid/node-x10-y6 93T 66T 27T 70%
|
||||
/dev/grid/node-x10-y7 89T 73T 16T 82%
|
||||
/dev/grid/node-x10-y8 86T 66T 20T 76%
|
||||
/dev/grid/node-x10-y9 90T 68T 22T 75%
|
||||
/dev/grid/node-x10-y10 94T 68T 26T 72%
|
||||
/dev/grid/node-x10-y11 92T 70T 22T 76%
|
||||
/dev/grid/node-x10-y12 86T 65T 21T 75%
|
||||
/dev/grid/node-x10-y13 91T 69T 22T 75%
|
||||
/dev/grid/node-x10-y14 89T 69T 20T 77%
|
||||
/dev/grid/node-x10-y15 88T 67T 21T 76%
|
||||
/dev/grid/node-x10-y16 89T 70T 19T 78%
|
||||
/dev/grid/node-x10-y17 93T 68T 25T 73%
|
||||
/dev/grid/node-x10-y18 90T 66T 24T 73%
|
||||
/dev/grid/node-x10-y19 85T 70T 15T 82%
|
||||
/dev/grid/node-x10-y20 88T 71T 17T 80%
|
||||
/dev/grid/node-x10-y21 89T 68T 21T 76%
|
||||
/dev/grid/node-x10-y22 88T 72T 16T 81%
|
||||
/dev/grid/node-x10-y23 89T 68T 21T 76%
|
||||
/dev/grid/node-x10-y24 91T 64T 27T 70%
|
||||
/dev/grid/node-x11-y0 86T 67T 19T 77%
|
||||
/dev/grid/node-x11-y1 86T 73T 13T 84%
|
||||
/dev/grid/node-x11-y2 86T 65T 21T 75%
|
||||
/dev/grid/node-x11-y3 87T 69T 18T 79%
|
||||
/dev/grid/node-x11-y4 86T 70T 16T 81%
|
||||
/dev/grid/node-x11-y5 90T 73T 17T 81%
|
||||
/dev/grid/node-x11-y6 94T 69T 25T 73%
|
||||
/dev/grid/node-x11-y7 86T 72T 14T 83%
|
||||
/dev/grid/node-x11-y8 91T 72T 19T 79%
|
||||
/dev/grid/node-x11-y9 90T 67T 23T 74%
|
||||
/dev/grid/node-x11-y10 89T 72T 17T 80%
|
||||
/dev/grid/node-x11-y11 86T 67T 19T 77%
|
||||
/dev/grid/node-x11-y12 88T 65T 23T 73%
|
||||
/dev/grid/node-x11-y13 93T 72T 21T 77%
|
||||
/dev/grid/node-x11-y14 91T 70T 21T 76%
|
||||
/dev/grid/node-x11-y15 91T 64T 27T 70%
|
||||
/dev/grid/node-x11-y16 91T 64T 27T 70%
|
||||
/dev/grid/node-x11-y17 85T 67T 18T 78%
|
||||
/dev/grid/node-x11-y18 90T 69T 21T 76%
|
||||
/dev/grid/node-x11-y19 85T 71T 14T 83%
|
||||
/dev/grid/node-x11-y20 86T 71T 15T 82%
|
||||
/dev/grid/node-x11-y21 87T 73T 14T 83%
|
||||
/dev/grid/node-x11-y22 91T 70T 21T 76%
|
||||
/dev/grid/node-x11-y23 90T 69T 21T 76%
|
||||
/dev/grid/node-x11-y24 86T 73T 13T 84%
|
||||
/dev/grid/node-x12-y0 93T 65T 28T 69%
|
||||
/dev/grid/node-x12-y1 88T 72T 16T 81%
|
||||
/dev/grid/node-x12-y2 92T 65T 27T 70%
|
||||
/dev/grid/node-x12-y3 94T 71T 23T 75%
|
||||
/dev/grid/node-x12-y4 94T 64T 30T 68%
|
||||
/dev/grid/node-x12-y5 91T 64T 27T 70%
|
||||
/dev/grid/node-x12-y6 91T 65T 26T 71%
|
||||
/dev/grid/node-x12-y7 93T 70T 23T 75%
|
||||
/dev/grid/node-x12-y8 88T 69T 19T 78%
|
||||
/dev/grid/node-x12-y9 89T 66T 23T 74%
|
||||
/dev/grid/node-x12-y10 90T 70T 20T 77%
|
||||
/dev/grid/node-x12-y11 89T 64T 25T 71%
|
||||
/dev/grid/node-x12-y12 87T 70T 17T 80%
|
||||
/dev/grid/node-x12-y13 86T 72T 14T 83%
|
||||
/dev/grid/node-x12-y14 88T 67T 21T 76%
|
||||
/dev/grid/node-x12-y15 88T 66T 22T 75%
|
||||
/dev/grid/node-x12-y16 86T 69T 17T 80%
|
||||
/dev/grid/node-x12-y17 90T 65T 25T 72%
|
||||
/dev/grid/node-x12-y18 85T 73T 12T 85%
|
||||
/dev/grid/node-x12-y19 94T 67T 27T 71%
|
||||
/dev/grid/node-x12-y20 85T 66T 19T 77%
|
||||
/dev/grid/node-x12-y21 86T 67T 19T 77%
|
||||
/dev/grid/node-x12-y22 86T 67T 19T 77%
|
||||
/dev/grid/node-x12-y23 87T 64T 23T 73%
|
||||
/dev/grid/node-x12-y24 87T 64T 23T 73%
|
||||
/dev/grid/node-x13-y0 85T 71T 14T 83%
|
||||
/dev/grid/node-x13-y1 90T 71T 19T 78%
|
||||
/dev/grid/node-x13-y2 86T 66T 20T 76%
|
||||
/dev/grid/node-x13-y3 90T 67T 23T 74%
|
||||
/dev/grid/node-x13-y4 92T 69T 23T 75%
|
||||
/dev/grid/node-x13-y5 86T 68T 18T 79%
|
||||
/dev/grid/node-x13-y6 94T 64T 30T 68%
|
||||
/dev/grid/node-x13-y7 89T 67T 22T 75%
|
||||
/dev/grid/node-x13-y8 88T 67T 21T 76%
|
||||
/dev/grid/node-x13-y9 90T 68T 22T 75%
|
||||
/dev/grid/node-x13-y10 88T 65T 23T 73%
|
||||
/dev/grid/node-x13-y11 86T 67T 19T 77%
|
||||
/dev/grid/node-x13-y12 94T 65T 29T 69%
|
||||
/dev/grid/node-x13-y13 87T 67T 20T 77%
|
||||
/dev/grid/node-x13-y14 86T 71T 15T 82%
|
||||
/dev/grid/node-x13-y15 87T 73T 14T 83%
|
||||
/dev/grid/node-x13-y16 91T 69T 22T 75%
|
||||
/dev/grid/node-x13-y17 91T 67T 24T 73%
|
||||
/dev/grid/node-x13-y18 91T 70T 21T 76%
|
||||
/dev/grid/node-x13-y19 90T 73T 17T 81%
|
||||
/dev/grid/node-x13-y20 91T 64T 27T 70%
|
||||
/dev/grid/node-x13-y21 91T 68T 23T 74%
|
||||
/dev/grid/node-x13-y22 88T 65T 23T 73%
|
||||
/dev/grid/node-x13-y23 85T 67T 18T 78%
|
||||
/dev/grid/node-x13-y24 93T 66T 27T 70%
|
||||
/dev/grid/node-x14-y0 91T 67T 24T 73%
|
||||
/dev/grid/node-x14-y1 94T 66T 28T 70%
|
||||
/dev/grid/node-x14-y2 89T 70T 19T 78%
|
||||
/dev/grid/node-x14-y3 85T 71T 14T 83%
|
||||
/dev/grid/node-x14-y4 88T 68T 20T 77%
|
||||
/dev/grid/node-x14-y5 88T 68T 20T 77%
|
||||
/dev/grid/node-x14-y6 92T 73T 19T 79%
|
||||
/dev/grid/node-x14-y7 86T 67T 19T 77%
|
||||
/dev/grid/node-x14-y8 87T 71T 16T 81%
|
||||
/dev/grid/node-x14-y9 85T 71T 14T 83%
|
||||
/dev/grid/node-x14-y10 94T 64T 30T 68%
|
||||
/dev/grid/node-x14-y11 92T 67T 25T 72%
|
||||
/dev/grid/node-x14-y12 94T 73T 21T 77%
|
||||
/dev/grid/node-x14-y13 92T 71T 21T 77%
|
||||
/dev/grid/node-x14-y14 88T 71T 17T 80%
|
||||
/dev/grid/node-x14-y15 89T 65T 24T 73%
|
||||
/dev/grid/node-x14-y16 94T 71T 23T 75%
|
||||
/dev/grid/node-x14-y17 94T 66T 28T 70%
|
||||
/dev/grid/node-x14-y18 92T 69T 23T 75%
|
||||
/dev/grid/node-x14-y19 93T 64T 29T 68%
|
||||
/dev/grid/node-x14-y20 91T 72T 19T 79%
|
||||
/dev/grid/node-x14-y21 89T 73T 16T 82%
|
||||
/dev/grid/node-x14-y22 90T 72T 18T 80%
|
||||
/dev/grid/node-x14-y23 86T 64T 22T 74%
|
||||
/dev/grid/node-x14-y24 93T 72T 21T 77%
|
||||
/dev/grid/node-x15-y0 90T 69T 21T 76%
|
||||
/dev/grid/node-x15-y1 88T 70T 18T 79%
|
||||
/dev/grid/node-x15-y2 93T 64T 29T 68%
|
||||
/dev/grid/node-x15-y3 85T 73T 12T 85%
|
||||
/dev/grid/node-x15-y4 88T 65T 23T 73%
|
||||
/dev/grid/node-x15-y5 86T 65T 21T 75%
|
||||
/dev/grid/node-x15-y6 85T 67T 18T 78%
|
||||
/dev/grid/node-x15-y7 92T 64T 28T 69%
|
||||
/dev/grid/node-x15-y8 90T 73T 17T 81%
|
||||
/dev/grid/node-x15-y9 94T 70T 24T 74%
|
||||
/dev/grid/node-x15-y10 90T 70T 20T 77%
|
||||
/dev/grid/node-x15-y11 86T 67T 19T 77%
|
||||
/dev/grid/node-x15-y12 86T 73T 13T 84%
|
||||
/dev/grid/node-x15-y13 94T 73T 21T 77%
|
||||
/dev/grid/node-x15-y14 85T 71T 14T 83%
|
||||
/dev/grid/node-x15-y15 86T 70T 16T 81%
|
||||
/dev/grid/node-x15-y16 87T 68T 19T 78%
|
||||
/dev/grid/node-x15-y17 92T 68T 24T 73%
|
||||
/dev/grid/node-x15-y18 86T 65T 21T 75%
|
||||
/dev/grid/node-x15-y19 89T 65T 24T 73%
|
||||
/dev/grid/node-x15-y20 89T 72T 17T 80%
|
||||
/dev/grid/node-x15-y21 85T 72T 13T 84%
|
||||
/dev/grid/node-x15-y22 89T 71T 18T 79%
|
||||
/dev/grid/node-x15-y23 87T 72T 15T 82%
|
||||
/dev/grid/node-x15-y24 85T 69T 16T 81%
|
||||
/dev/grid/node-x16-y0 92T 68T 24T 73%
|
||||
/dev/grid/node-x16-y1 90T 68T 22T 75%
|
||||
/dev/grid/node-x16-y2 86T 66T 20T 76%
|
||||
/dev/grid/node-x16-y3 89T 71T 18T 79%
|
||||
/dev/grid/node-x16-y4 87T 71T 16T 81%
|
||||
/dev/grid/node-x16-y5 88T 65T 23T 73%
|
||||
/dev/grid/node-x16-y6 92T 72T 20T 78%
|
||||
/dev/grid/node-x16-y7 88T 64T 24T 72%
|
||||
/dev/grid/node-x16-y8 89T 68T 21T 76%
|
||||
/dev/grid/node-x16-y9 85T 72T 13T 84%
|
||||
/dev/grid/node-x16-y10 94T 67T 27T 71%
|
||||
/dev/grid/node-x16-y11 85T 68T 17T 80%
|
||||
/dev/grid/node-x16-y12 92T 70T 22T 76%
|
||||
/dev/grid/node-x16-y13 94T 70T 24T 74%
|
||||
/dev/grid/node-x16-y14 94T 72T 22T 76%
|
||||
/dev/grid/node-x16-y15 89T 72T 17T 80%
|
||||
/dev/grid/node-x16-y16 88T 66T 22T 75%
|
||||
/dev/grid/node-x16-y17 90T 70T 20T 77%
|
||||
/dev/grid/node-x16-y18 91T 67T 24T 73%
|
||||
/dev/grid/node-x16-y19 88T 73T 15T 82%
|
||||
/dev/grid/node-x16-y20 86T 66T 20T 76%
|
||||
/dev/grid/node-x16-y21 90T 67T 23T 74%
|
||||
/dev/grid/node-x16-y22 94T 71T 23T 75%
|
||||
/dev/grid/node-x16-y23 85T 71T 14T 83%
|
||||
/dev/grid/node-x16-y24 87T 68T 19T 78%
|
||||
/dev/grid/node-x17-y0 91T 69T 22T 75%
|
||||
/dev/grid/node-x17-y1 85T 68T 17T 80%
|
||||
/dev/grid/node-x17-y2 89T 69T 20T 77%
|
||||
/dev/grid/node-x17-y3 91T 68T 23T 74%
|
||||
/dev/grid/node-x17-y4 87T 69T 18T 79%
|
||||
/dev/grid/node-x17-y5 92T 70T 22T 76%
|
||||
/dev/grid/node-x17-y6 85T 67T 18T 78%
|
||||
/dev/grid/node-x17-y7 92T 72T 20T 78%
|
||||
/dev/grid/node-x17-y8 92T 65T 27T 70%
|
||||
/dev/grid/node-x17-y9 92T 67T 25T 72%
|
||||
/dev/grid/node-x17-y10 86T 69T 17T 80%
|
||||
/dev/grid/node-x17-y11 94T 70T 24T 74%
|
||||
/dev/grid/node-x17-y12 94T 69T 25T 73%
|
||||
/dev/grid/node-x17-y13 94T 73T 21T 77%
|
||||
/dev/grid/node-x17-y14 87T 73T 14T 83%
|
||||
/dev/grid/node-x17-y15 86T 67T 19T 77%
|
||||
/dev/grid/node-x17-y16 85T 68T 17T 80%
|
||||
/dev/grid/node-x17-y17 87T 71T 16T 81%
|
||||
/dev/grid/node-x17-y18 89T 64T 25T 71%
|
||||
/dev/grid/node-x17-y19 88T 70T 18T 79%
|
||||
/dev/grid/node-x17-y20 86T 65T 21T 75%
|
||||
/dev/grid/node-x17-y21 86T 64T 22T 74%
|
||||
/dev/grid/node-x17-y22 93T 70T 23T 75%
|
||||
/dev/grid/node-x17-y23 86T 66T 20T 76%
|
||||
/dev/grid/node-x17-y24 89T 66T 23T 74%
|
||||
/dev/grid/node-x18-y0 91T 73T 18T 80%
|
||||
/dev/grid/node-x18-y1 90T 73T 17T 81%
|
||||
/dev/grid/node-x18-y2 94T 68T 26T 72%
|
||||
/dev/grid/node-x18-y3 85T 71T 14T 83%
|
||||
/dev/grid/node-x18-y4 94T 73T 21T 77%
|
||||
/dev/grid/node-x18-y5 93T 65T 28T 69%
|
||||
/dev/grid/node-x18-y6 91T 70T 21T 76%
|
||||
/dev/grid/node-x18-y7 86T 68T 18T 79%
|
||||
/dev/grid/node-x18-y8 94T 68T 26T 72%
|
||||
/dev/grid/node-x18-y9 85T 67T 18T 78%
|
||||
/dev/grid/node-x18-y10 89T 70T 19T 78%
|
||||
/dev/grid/node-x18-y11 90T 68T 22T 75%
|
||||
/dev/grid/node-x18-y12 89T 67T 22T 75%
|
||||
/dev/grid/node-x18-y13 92T 64T 28T 69%
|
||||
/dev/grid/node-x18-y14 93T 65T 28T 69%
|
||||
/dev/grid/node-x18-y15 89T 65T 24T 73%
|
||||
/dev/grid/node-x18-y16 92T 66T 26T 71%
|
||||
/dev/grid/node-x18-y17 86T 64T 22T 74%
|
||||
/dev/grid/node-x18-y18 91T 68T 23T 74%
|
||||
/dev/grid/node-x18-y19 85T 73T 12T 85%
|
||||
/dev/grid/node-x18-y20 91T 67T 24T 73%
|
||||
/dev/grid/node-x18-y21 90T 73T 17T 81%
|
||||
/dev/grid/node-x18-y22 89T 68T 21T 76%
|
||||
/dev/grid/node-x18-y23 88T 68T 20T 77%
|
||||
/dev/grid/node-x18-y24 92T 67T 25T 72%
|
||||
/dev/grid/node-x19-y0 92T 67T 25T 72%
|
||||
/dev/grid/node-x19-y1 90T 64T 26T 71%
|
||||
/dev/grid/node-x19-y2 92T 72T 20T 78%
|
||||
/dev/grid/node-x19-y3 94T 64T 30T 68%
|
||||
/dev/grid/node-x19-y4 89T 70T 19T 78%
|
||||
/dev/grid/node-x19-y5 90T 66T 24T 73%
|
||||
/dev/grid/node-x19-y6 86T 67T 19T 77%
|
||||
/dev/grid/node-x19-y7 88T 72T 16T 81%
|
||||
/dev/grid/node-x19-y8 94T 69T 25T 73%
|
||||
/dev/grid/node-x19-y9 87T 65T 22T 74%
|
||||
/dev/grid/node-x19-y10 90T 67T 23T 74%
|
||||
/dev/grid/node-x19-y11 90T 64T 26T 71%
|
||||
/dev/grid/node-x19-y12 89T 72T 17T 80%
|
||||
/dev/grid/node-x19-y13 88T 66T 22T 75%
|
||||
/dev/grid/node-x19-y14 85T 68T 17T 80%
|
||||
/dev/grid/node-x19-y15 92T 73T 19T 79%
|
||||
/dev/grid/node-x19-y16 93T 71T 22T 76%
|
||||
/dev/grid/node-x19-y17 85T 70T 15T 82%
|
||||
/dev/grid/node-x19-y18 91T 64T 27T 70%
|
||||
/dev/grid/node-x19-y19 88T 68T 20T 77%
|
||||
/dev/grid/node-x19-y20 90T 71T 19T 78%
|
||||
/dev/grid/node-x19-y21 94T 67T 27T 71%
|
||||
/dev/grid/node-x19-y22 87T 72T 15T 82%
|
||||
/dev/grid/node-x19-y23 89T 68T 21T 76%
|
||||
/dev/grid/node-x19-y24 93T 64T 29T 68%
|
||||
/dev/grid/node-x20-y0 92T 68T 24T 73%
|
||||
/dev/grid/node-x20-y1 89T 73T 16T 82%
|
||||
/dev/grid/node-x20-y2 93T 64T 29T 68%
|
||||
/dev/grid/node-x20-y3 90T 72T 18T 80%
|
||||
/dev/grid/node-x20-y4 91T 64T 27T 70%
|
||||
/dev/grid/node-x20-y5 90T 73T 17T 81%
|
||||
/dev/grid/node-x20-y6 94T 69T 25T 73%
|
||||
/dev/grid/node-x20-y7 88T 66T 22T 75%
|
||||
/dev/grid/node-x20-y8 89T 68T 21T 76%
|
||||
/dev/grid/node-x20-y9 91T 71T 20T 78%
|
||||
/dev/grid/node-x20-y10 91T 67T 24T 73%
|
||||
/dev/grid/node-x20-y11 94T 64T 30T 68%
|
||||
/dev/grid/node-x20-y12 90T 71T 19T 78%
|
||||
/dev/grid/node-x20-y13 88T 72T 16T 81%
|
||||
/dev/grid/node-x20-y14 86T 70T 16T 81%
|
||||
/dev/grid/node-x20-y15 89T 65T 24T 73%
|
||||
/dev/grid/node-x20-y16 85T 67T 18T 78%
|
||||
/dev/grid/node-x20-y17 92T 65T 27T 70%
|
||||
/dev/grid/node-x20-y18 91T 67T 24T 73%
|
||||
/dev/grid/node-x20-y19 86T 71T 15T 82%
|
||||
/dev/grid/node-x20-y20 91T 70T 21T 76%
|
||||
/dev/grid/node-x20-y21 85T 71T 14T 83%
|
||||
/dev/grid/node-x20-y22 91T 70T 21T 76%
|
||||
/dev/grid/node-x20-y23 93T 70T 23T 75%
|
||||
/dev/grid/node-x20-y24 93T 66T 27T 70%
|
||||
/dev/grid/node-x21-y0 87T 65T 22T 74%
|
||||
/dev/grid/node-x21-y1 85T 65T 20T 76%
|
||||
/dev/grid/node-x21-y2 92T 72T 20T 78%
|
||||
/dev/grid/node-x21-y3 88T 68T 20T 77%
|
||||
/dev/grid/node-x21-y4 87T 67T 20T 77%
|
||||
/dev/grid/node-x21-y5 93T 68T 25T 73%
|
||||
/dev/grid/node-x21-y6 93T 70T 23T 75%
|
||||
/dev/grid/node-x21-y7 92T 65T 27T 70%
|
||||
/dev/grid/node-x21-y8 91T 70T 21T 76%
|
||||
/dev/grid/node-x21-y9 89T 64T 25T 71%
|
||||
/dev/grid/node-x21-y10 87T 67T 20T 77%
|
||||
/dev/grid/node-x21-y11 504T 496T 8T 98%
|
||||
/dev/grid/node-x21-y12 88T 70T 18T 79%
|
||||
/dev/grid/node-x21-y13 86T 70T 16T 81%
|
||||
/dev/grid/node-x21-y14 92T 66T 26T 71%
|
||||
/dev/grid/node-x21-y15 93T 64T 29T 68%
|
||||
/dev/grid/node-x21-y16 93T 71T 22T 76%
|
||||
/dev/grid/node-x21-y17 94T 65T 29T 69%
|
||||
/dev/grid/node-x21-y18 87T 70T 17T 80%
|
||||
/dev/grid/node-x21-y19 85T 64T 21T 75%
|
||||
/dev/grid/node-x21-y20 86T 70T 16T 81%
|
||||
/dev/grid/node-x21-y21 93T 66T 27T 70%
|
||||
/dev/grid/node-x21-y22 92T 70T 22T 76%
|
||||
/dev/grid/node-x21-y23 94T 68T 26T 72%
|
||||
/dev/grid/node-x21-y24 90T 73T 17T 81%
|
||||
/dev/grid/node-x22-y0 93T 72T 21T 77%
|
||||
/dev/grid/node-x22-y1 91T 70T 21T 76%
|
||||
/dev/grid/node-x22-y2 94T 64T 30T 68%
|
||||
/dev/grid/node-x22-y3 92T 67T 25T 72%
|
||||
/dev/grid/node-x22-y4 87T 68T 19T 78%
|
||||
/dev/grid/node-x22-y5 87T 67T 20T 77%
|
||||
/dev/grid/node-x22-y6 92T 69T 23T 75%
|
||||
/dev/grid/node-x22-y7 85T 67T 18T 78%
|
||||
/dev/grid/node-x22-y8 94T 73T 21T 77%
|
||||
/dev/grid/node-x22-y9 89T 65T 24T 73%
|
||||
/dev/grid/node-x22-y10 94T 68T 26T 72%
|
||||
/dev/grid/node-x22-y11 508T 492T 16T 96%
|
||||
/dev/grid/node-x22-y12 92T 70T 22T 76%
|
||||
/dev/grid/node-x22-y13 88T 69T 19T 78%
|
||||
/dev/grid/node-x22-y14 90T 65T 25T 72%
|
||||
/dev/grid/node-x22-y15 91T 65T 26T 71%
|
||||
/dev/grid/node-x22-y16 90T 73T 17T 81%
|
||||
/dev/grid/node-x22-y17 93T 72T 21T 77%
|
||||
/dev/grid/node-x22-y18 92T 65T 27T 70%
|
||||
/dev/grid/node-x22-y19 89T 70T 19T 78%
|
||||
/dev/grid/node-x22-y20 89T 69T 20T 77%
|
||||
/dev/grid/node-x22-y21 91T 71T 20T 78%
|
||||
/dev/grid/node-x22-y22 88T 73T 15T 82%
|
||||
/dev/grid/node-x22-y23 88T 65T 23T 73%
|
||||
/dev/grid/node-x22-y24 91T 72T 19T 79%
|
||||
/dev/grid/node-x23-y0 92T 64T 28T 69%
|
||||
/dev/grid/node-x23-y1 85T 72T 13T 84%
|
||||
/dev/grid/node-x23-y2 89T 70T 19T 78%
|
||||
/dev/grid/node-x23-y3 85T 70T 15T 82%
|
||||
/dev/grid/node-x23-y4 94T 64T 30T 68%
|
||||
/dev/grid/node-x23-y5 89T 67T 22T 75%
|
||||
/dev/grid/node-x23-y6 89T 71T 18T 79%
|
||||
/dev/grid/node-x23-y7 85T 64T 21T 75%
|
||||
/dev/grid/node-x23-y8 90T 66T 24T 73%
|
||||
/dev/grid/node-x23-y9 85T 67T 18T 78%
|
||||
/dev/grid/node-x23-y10 85T 71T 14T 83%
|
||||
/dev/grid/node-x23-y11 509T 491T 18T 96%
|
||||
/dev/grid/node-x23-y12 89T 66T 23T 74%
|
||||
/dev/grid/node-x23-y13 90T 64T 26T 71%
|
||||
/dev/grid/node-x23-y14 91T 65T 26T 71%
|
||||
/dev/grid/node-x23-y15 85T 68T 17T 80%
|
||||
/dev/grid/node-x23-y16 86T 73T 13T 84%
|
||||
/dev/grid/node-x23-y17 89T 65T 24T 73%
|
||||
/dev/grid/node-x23-y18 92T 71T 21T 77%
|
||||
/dev/grid/node-x23-y19 86T 73T 13T 84%
|
||||
/dev/grid/node-x23-y20 94T 71T 23T 75%
|
||||
/dev/grid/node-x23-y21 85T 69T 16T 81%
|
||||
/dev/grid/node-x23-y22 85T 71T 14T 83%
|
||||
/dev/grid/node-x23-y23 94T 70T 24T 74%
|
||||
/dev/grid/node-x23-y24 90T 70T 20T 77%
|
||||
/dev/grid/node-x24-y0 89T 71T 18T 79%
|
||||
/dev/grid/node-x24-y1 88T 70T 18T 79%
|
||||
/dev/grid/node-x24-y2 87T 73T 14T 83%
|
||||
/dev/grid/node-x24-y3 90T 64T 26T 71%
|
||||
/dev/grid/node-x24-y4 86T 71T 15T 82%
|
||||
/dev/grid/node-x24-y5 85T 72T 13T 84%
|
||||
/dev/grid/node-x24-y6 86T 71T 15T 82%
|
||||
/dev/grid/node-x24-y7 92T 67T 25T 72%
|
||||
/dev/grid/node-x24-y8 85T 71T 14T 83%
|
||||
/dev/grid/node-x24-y9 90T 71T 19T 78%
|
||||
/dev/grid/node-x24-y10 90T 67T 23T 74%
|
||||
/dev/grid/node-x24-y11 503T 492T 11T 97%
|
||||
/dev/grid/node-x24-y12 86T 65T 21T 75%
|
||||
/dev/grid/node-x24-y13 87T 65T 22T 74%
|
||||
/dev/grid/node-x24-y14 93T 70T 23T 75%
|
||||
/dev/grid/node-x24-y15 87T 73T 14T 83%
|
||||
/dev/grid/node-x24-y16 88T 66T 22T 75%
|
||||
/dev/grid/node-x24-y17 85T 72T 13T 84%
|
||||
/dev/grid/node-x24-y18 90T 69T 21T 76%
|
||||
/dev/grid/node-x24-y19 89T 70T 19T 78%
|
||||
/dev/grid/node-x24-y20 91T 72T 19T 79%
|
||||
/dev/grid/node-x24-y21 87T 73T 14T 83%
|
||||
/dev/grid/node-x24-y22 94T 64T 30T 68%
|
||||
/dev/grid/node-x24-y23 88T 72T 16T 81%
|
||||
/dev/grid/node-x24-y24 86T 65T 21T 75%
|
||||
/dev/grid/node-x25-y0 90T 69T 21T 76%
|
||||
/dev/grid/node-x25-y1 92T 68T 24T 73%
|
||||
/dev/grid/node-x25-y2 88T 65T 23T 73%
|
||||
/dev/grid/node-x25-y3 86T 67T 19T 77%
|
||||
/dev/grid/node-x25-y4 86T 67T 19T 77%
|
||||
/dev/grid/node-x25-y5 86T 68T 18T 79%
|
||||
/dev/grid/node-x25-y6 88T 65T 23T 73%
|
||||
/dev/grid/node-x25-y7 85T 66T 19T 77%
|
||||
/dev/grid/node-x25-y8 89T 65T 24T 73%
|
||||
/dev/grid/node-x25-y9 92T 66T 26T 71%
|
||||
/dev/grid/node-x25-y10 94T 71T 23T 75%
|
||||
/dev/grid/node-x25-y11 503T 491T 12T 97%
|
||||
/dev/grid/node-x25-y12 90T 70T 20T 77%
|
||||
/dev/grid/node-x25-y13 94T 65T 29T 69%
|
||||
/dev/grid/node-x25-y14 92T 66T 26T 71%
|
||||
/dev/grid/node-x25-y15 89T 65T 24T 73%
|
||||
/dev/grid/node-x25-y16 85T 67T 18T 78%
|
||||
/dev/grid/node-x25-y17 91T 67T 24T 73%
|
||||
/dev/grid/node-x25-y18 92T 66T 26T 71%
|
||||
/dev/grid/node-x25-y19 89T 73T 16T 82%
|
||||
/dev/grid/node-x25-y20 93T 70T 23T 75%
|
||||
/dev/grid/node-x25-y21 94T 73T 21T 77%
|
||||
/dev/grid/node-x25-y22 93T 73T 20T 78%
|
||||
/dev/grid/node-x25-y23 89T 66T 23T 74%
|
||||
/dev/grid/node-x25-y24 86T 70T 16T 81%
|
||||
/dev/grid/node-x26-y0 90T 64T 26T 71%
|
||||
/dev/grid/node-x26-y1 92T 69T 23T 75%
|
||||
/dev/grid/node-x26-y2 93T 69T 24T 74%
|
||||
/dev/grid/node-x26-y3 85T 69T 16T 81%
|
||||
/dev/grid/node-x26-y4 91T 65T 26T 71%
|
||||
/dev/grid/node-x26-y5 93T 71T 22T 76%
|
||||
/dev/grid/node-x26-y6 85T 72T 13T 84%
|
||||
/dev/grid/node-x26-y7 94T 71T 23T 75%
|
||||
/dev/grid/node-x26-y8 94T 68T 26T 72%
|
||||
/dev/grid/node-x26-y9 90T 65T 25T 72%
|
||||
/dev/grid/node-x26-y10 86T 69T 17T 80%
|
||||
/dev/grid/node-x26-y11 508T 496T 12T 97%
|
||||
/dev/grid/node-x26-y12 89T 65T 24T 73%
|
||||
/dev/grid/node-x26-y13 91T 72T 19T 79%
|
||||
/dev/grid/node-x26-y14 91T 67T 24T 73%
|
||||
/dev/grid/node-x26-y15 87T 72T 15T 82%
|
||||
/dev/grid/node-x26-y16 90T 64T 26T 71%
|
||||
/dev/grid/node-x26-y17 93T 66T 27T 70%
|
||||
/dev/grid/node-x26-y18 93T 73T 20T 78%
|
||||
/dev/grid/node-x26-y19 91T 73T 18T 80%
|
||||
/dev/grid/node-x26-y20 86T 65T 21T 75%
|
||||
/dev/grid/node-x26-y21 94T 64T 30T 68%
|
||||
/dev/grid/node-x26-y22 91T 65T 26T 71%
|
||||
/dev/grid/node-x26-y23 89T 69T 20T 77%
|
||||
/dev/grid/node-x26-y24 87T 65T 22T 74%
|
||||
/dev/grid/node-x27-y0 94T 69T 25T 73%
|
||||
/dev/grid/node-x27-y1 94T 73T 21T 77%
|
||||
/dev/grid/node-x27-y2 91T 67T 24T 73%
|
||||
/dev/grid/node-x27-y3 93T 73T 20T 78%
|
||||
/dev/grid/node-x27-y4 85T 69T 16T 81%
|
||||
/dev/grid/node-x27-y5 85T 67T 18T 78%
|
||||
/dev/grid/node-x27-y6 87T 73T 14T 83%
|
||||
/dev/grid/node-x27-y7 90T 66T 24T 73%
|
||||
/dev/grid/node-x27-y8 94T 68T 26T 72%
|
||||
/dev/grid/node-x27-y9 92T 66T 26T 71%
|
||||
/dev/grid/node-x27-y10 94T 70T 24T 74%
|
||||
/dev/grid/node-x27-y11 501T 494T 7T 98%
|
||||
/dev/grid/node-x27-y12 87T 64T 23T 73%
|
||||
/dev/grid/node-x27-y13 92T 72T 20T 78%
|
||||
/dev/grid/node-x27-y14 90T 0T 90T 0%
|
||||
/dev/grid/node-x27-y15 86T 71T 15T 82%
|
||||
/dev/grid/node-x27-y16 85T 66T 19T 77%
|
||||
/dev/grid/node-x27-y17 87T 68T 19T 78%
|
||||
/dev/grid/node-x27-y18 89T 71T 18T 79%
|
||||
/dev/grid/node-x27-y19 94T 72T 22T 76%
|
||||
/dev/grid/node-x27-y20 85T 67T 18T 78%
|
||||
/dev/grid/node-x27-y21 91T 69T 22T 75%
|
||||
/dev/grid/node-x27-y22 87T 69T 18T 79%
|
||||
/dev/grid/node-x27-y23 91T 65T 26T 71%
|
||||
/dev/grid/node-x27-y24 92T 69T 23T 75%
|
||||
/dev/grid/node-x28-y0 88T 71T 17T 80%
|
||||
/dev/grid/node-x28-y1 88T 69T 19T 78%
|
||||
/dev/grid/node-x28-y2 85T 68T 17T 80%
|
||||
/dev/grid/node-x28-y3 89T 73T 16T 82%
|
||||
/dev/grid/node-x28-y4 86T 67T 19T 77%
|
||||
/dev/grid/node-x28-y5 89T 73T 16T 82%
|
||||
/dev/grid/node-x28-y6 91T 69T 22T 75%
|
||||
/dev/grid/node-x28-y7 88T 66T 22T 75%
|
||||
/dev/grid/node-x28-y8 93T 64T 29T 68%
|
||||
/dev/grid/node-x28-y9 89T 73T 16T 82%
|
||||
/dev/grid/node-x28-y10 89T 69T 20T 77%
|
||||
/dev/grid/node-x28-y11 505T 493T 12T 97%
|
||||
/dev/grid/node-x28-y12 88T 67T 21T 76%
|
||||
/dev/grid/node-x28-y13 92T 69T 23T 75%
|
||||
/dev/grid/node-x28-y14 85T 65T 20T 76%
|
||||
/dev/grid/node-x28-y15 92T 70T 22T 76%
|
||||
/dev/grid/node-x28-y16 86T 68T 18T 79%
|
||||
/dev/grid/node-x28-y17 88T 72T 16T 81%
|
||||
/dev/grid/node-x28-y18 87T 72T 15T 82%
|
||||
/dev/grid/node-x28-y19 85T 66T 19T 77%
|
||||
/dev/grid/node-x28-y20 90T 72T 18T 80%
|
||||
/dev/grid/node-x28-y21 86T 70T 16T 81%
|
||||
/dev/grid/node-x28-y22 88T 69T 19T 78%
|
||||
/dev/grid/node-x28-y23 93T 64T 29T 68%
|
||||
/dev/grid/node-x28-y24 90T 67T 23T 74%
|
||||
/dev/grid/node-x29-y0 91T 68T 23T 74%
|
||||
/dev/grid/node-x29-y1 89T 67T 22T 75%
|
||||
/dev/grid/node-x29-y2 86T 66T 20T 76%
|
||||
/dev/grid/node-x29-y3 92T 66T 26T 71%
|
||||
/dev/grid/node-x29-y4 88T 71T 17T 80%
|
||||
/dev/grid/node-x29-y5 89T 72T 17T 80%
|
||||
/dev/grid/node-x29-y6 92T 67T 25T 72%
|
||||
/dev/grid/node-x29-y7 89T 64T 25T 71%
|
||||
/dev/grid/node-x29-y8 91T 68T 23T 74%
|
||||
/dev/grid/node-x29-y9 86T 73T 13T 84%
|
||||
/dev/grid/node-x29-y10 85T 67T 18T 78%
|
||||
/dev/grid/node-x29-y11 510T 497T 13T 97%
|
||||
/dev/grid/node-x29-y12 86T 70T 16T 81%
|
||||
/dev/grid/node-x29-y13 90T 69T 21T 76%
|
||||
/dev/grid/node-x29-y14 85T 67T 18T 78%
|
||||
/dev/grid/node-x29-y15 90T 71T 19T 78%
|
||||
/dev/grid/node-x29-y16 94T 66T 28T 70%
|
||||
/dev/grid/node-x29-y17 93T 69T 24T 74%
|
||||
/dev/grid/node-x29-y18 90T 67T 23T 74%
|
||||
/dev/grid/node-x29-y19 90T 69T 21T 76%
|
||||
/dev/grid/node-x29-y20 89T 68T 21T 76%
|
||||
/dev/grid/node-x29-y21 92T 71T 21T 77%
|
||||
/dev/grid/node-x29-y22 94T 68T 26T 72%
|
||||
/dev/grid/node-x29-y23 87T 64T 23T 73%
|
||||
/dev/grid/node-x29-y24 91T 65T 26T 71%
|
||||
/dev/grid/node-x30-y0 88T 70T 18T 79%
|
||||
/dev/grid/node-x30-y1 94T 71T 23T 75%
|
||||
/dev/grid/node-x30-y2 94T 65T 29T 69%
|
||||
/dev/grid/node-x30-y3 93T 66T 27T 70%
|
||||
/dev/grid/node-x30-y4 85T 73T 12T 85%
|
||||
/dev/grid/node-x30-y5 90T 66T 24T 73%
|
||||
/dev/grid/node-x30-y6 91T 69T 22T 75%
|
||||
/dev/grid/node-x30-y7 88T 69T 19T 78%
|
||||
/dev/grid/node-x30-y8 93T 68T 25T 73%
|
||||
/dev/grid/node-x30-y9 89T 64T 25T 71%
|
||||
/dev/grid/node-x30-y10 87T 66T 21T 75%
|
||||
/dev/grid/node-x30-y11 501T 490T 11T 97%
|
||||
/dev/grid/node-x30-y12 90T 69T 21T 76%
|
||||
/dev/grid/node-x30-y13 91T 71T 20T 78%
|
||||
/dev/grid/node-x30-y14 91T 73T 18T 80%
|
||||
/dev/grid/node-x30-y15 87T 73T 14T 83%
|
||||
/dev/grid/node-x30-y16 88T 72T 16T 81%
|
||||
/dev/grid/node-x30-y17 90T 65T 25T 72%
|
||||
/dev/grid/node-x30-y18 89T 73T 16T 82%
|
||||
/dev/grid/node-x30-y19 89T 66T 23T 74%
|
||||
/dev/grid/node-x30-y20 91T 71T 20T 78%
|
||||
/dev/grid/node-x30-y21 92T 68T 24T 73%
|
||||
/dev/grid/node-x30-y22 94T 71T 23T 75%
|
||||
/dev/grid/node-x30-y23 91T 72T 19T 79%
|
||||
/dev/grid/node-x30-y24 88T 67T 21T 76%
|
||||
/dev/grid/node-x31-y0 93T 73T 20T 78%
|
||||
/dev/grid/node-x31-y1 89T 64T 25T 71%
|
||||
/dev/grid/node-x31-y2 90T 67T 23T 74%
|
||||
/dev/grid/node-x31-y3 86T 67T 19T 77%
|
||||
/dev/grid/node-x31-y4 89T 68T 21T 76%
|
||||
/dev/grid/node-x31-y5 91T 70T 21T 76%
|
||||
/dev/grid/node-x31-y6 91T 69T 22T 75%
|
||||
/dev/grid/node-x31-y7 90T 71T 19T 78%
|
||||
/dev/grid/node-x31-y8 93T 72T 21T 77%
|
||||
/dev/grid/node-x31-y9 87T 65T 22T 74%
|
||||
/dev/grid/node-x31-y10 90T 65T 25T 72%
|
||||
/dev/grid/node-x31-y11 506T 494T 12T 97%
|
||||
/dev/grid/node-x31-y12 89T 70T 19T 78%
|
||||
/dev/grid/node-x31-y13 93T 65T 28T 69%
|
||||
/dev/grid/node-x31-y14 93T 65T 28T 69%
|
||||
/dev/grid/node-x31-y15 90T 72T 18T 80%
|
||||
/dev/grid/node-x31-y16 87T 71T 16T 81%
|
||||
/dev/grid/node-x31-y17 89T 65T 24T 73%
|
||||
/dev/grid/node-x31-y18 86T 68T 18T 79%
|
||||
/dev/grid/node-x31-y19 87T 73T 14T 83%
|
||||
/dev/grid/node-x31-y20 85T 73T 12T 85%
|
||||
/dev/grid/node-x31-y21 86T 72T 14T 83%
|
||||
/dev/grid/node-x31-y22 94T 65T 29T 69%
|
||||
/dev/grid/node-x31-y23 91T 68T 23T 74%
|
||||
/dev/grid/node-x31-y24 87T 68T 19T 78%
|
||||
/dev/grid/node-x32-y0 92T 67T 25T 72%
|
||||
/dev/grid/node-x32-y1 85T 69T 16T 81%
|
||||
/dev/grid/node-x32-y2 92T 72T 20T 78%
|
||||
/dev/grid/node-x32-y3 92T 68T 24T 73%
|
||||
/dev/grid/node-x32-y4 85T 69T 16T 81%
|
||||
/dev/grid/node-x32-y5 85T 69T 16T 81%
|
||||
/dev/grid/node-x32-y6 85T 72T 13T 84%
|
||||
/dev/grid/node-x32-y7 86T 66T 20T 76%
|
||||
/dev/grid/node-x32-y8 85T 69T 16T 81%
|
||||
/dev/grid/node-x32-y9 92T 64T 28T 69%
|
||||
/dev/grid/node-x32-y10 86T 64T 22T 74%
|
||||
/dev/grid/node-x32-y11 508T 491T 17T 96%
|
||||
/dev/grid/node-x32-y12 89T 66T 23T 74%
|
||||
/dev/grid/node-x32-y13 89T 73T 16T 82%
|
||||
/dev/grid/node-x32-y14 94T 70T 24T 74%
|
||||
/dev/grid/node-x32-y15 93T 68T 25T 73%
|
||||
/dev/grid/node-x32-y16 88T 73T 15T 82%
|
||||
/dev/grid/node-x32-y17 87T 66T 21T 75%
|
||||
/dev/grid/node-x32-y18 85T 73T 12T 85%
|
||||
/dev/grid/node-x32-y19 94T 64T 30T 68%
|
||||
/dev/grid/node-x32-y20 86T 73T 13T 84%
|
||||
/dev/grid/node-x32-y21 93T 72T 21T 77%
|
||||
/dev/grid/node-x32-y22 93T 67T 26T 72%
|
||||
/dev/grid/node-x32-y23 94T 65T 29T 69%
|
||||
/dev/grid/node-x32-y24 85T 71T 14T 83%
|
||||
/dev/grid/node-x33-y0 88T 67T 21T 76%
|
||||
/dev/grid/node-x33-y1 90T 69T 21T 76%
|
||||
/dev/grid/node-x33-y2 85T 68T 17T 80%
|
||||
/dev/grid/node-x33-y3 87T 73T 14T 83%
|
||||
/dev/grid/node-x33-y4 93T 66T 27T 70%
|
||||
/dev/grid/node-x33-y5 88T 68T 20T 77%
|
||||
/dev/grid/node-x33-y6 85T 67T 18T 78%
|
||||
/dev/grid/node-x33-y7 86T 69T 17T 80%
|
||||
/dev/grid/node-x33-y8 86T 65T 21T 75%
|
||||
/dev/grid/node-x33-y9 93T 68T 25T 73%
|
||||
/dev/grid/node-x33-y10 85T 70T 15T 82%
|
||||
/dev/grid/node-x33-y11 507T 491T 16T 96%
|
||||
/dev/grid/node-x33-y12 91T 73T 18T 80%
|
||||
/dev/grid/node-x33-y13 89T 72T 17T 80%
|
||||
/dev/grid/node-x33-y14 94T 71T 23T 75%
|
||||
/dev/grid/node-x33-y15 86T 66T 20T 76%
|
||||
/dev/grid/node-x33-y16 86T 70T 16T 81%
|
||||
/dev/grid/node-x33-y17 87T 69T 18T 79%
|
||||
/dev/grid/node-x33-y18 89T 64T 25T 71%
|
||||
/dev/grid/node-x33-y19 92T 67T 25T 72%
|
||||
/dev/grid/node-x33-y20 86T 71T 15T 82%
|
||||
/dev/grid/node-x33-y21 90T 70T 20T 77%
|
||||
/dev/grid/node-x33-y22 86T 65T 21T 75%
|
||||
/dev/grid/node-x33-y23 92T 70T 22T 76%
|
||||
/dev/grid/node-x33-y24 92T 64T 28T 69%
|
||||
/dev/grid/node-x34-y0 88T 69T 19T 78%
|
||||
/dev/grid/node-x34-y1 93T 67T 26T 72%
|
||||
/dev/grid/node-x34-y2 88T 65T 23T 73%
|
||||
/dev/grid/node-x34-y3 90T 71T 19T 78%
|
||||
/dev/grid/node-x34-y4 90T 67T 23T 74%
|
||||
/dev/grid/node-x34-y5 85T 70T 15T 82%
|
||||
/dev/grid/node-x34-y6 87T 72T 15T 82%
|
||||
/dev/grid/node-x34-y7 92T 66T 26T 71%
|
||||
/dev/grid/node-x34-y8 93T 65T 28T 69%
|
||||
/dev/grid/node-x34-y9 90T 73T 17T 81%
|
||||
/dev/grid/node-x34-y10 90T 64T 26T 71%
|
||||
/dev/grid/node-x34-y11 504T 496T 8T 98%
|
||||
/dev/grid/node-x34-y12 87T 73T 14T 83%
|
||||
/dev/grid/node-x34-y13 92T 67T 25T 72%
|
||||
/dev/grid/node-x34-y14 90T 70T 20T 77%
|
||||
/dev/grid/node-x34-y15 88T 68T 20T 77%
|
||||
/dev/grid/node-x34-y16 87T 73T 14T 83%
|
||||
/dev/grid/node-x34-y17 90T 65T 25T 72%
|
||||
/dev/grid/node-x34-y18 90T 73T 17T 81%
|
||||
/dev/grid/node-x34-y19 91T 73T 18T 80%
|
||||
/dev/grid/node-x34-y20 92T 72T 20T 78%
|
||||
/dev/grid/node-x34-y21 85T 66T 19T 77%
|
||||
/dev/grid/node-x34-y22 94T 66T 28T 70%
|
||||
/dev/grid/node-x34-y23 87T 64T 23T 73%
|
||||
/dev/grid/node-x34-y24 92T 71T 21T 77%
|
||||
87
2016/d23/ex1/ex1.py
Executable file
87
2016/d23/ex1/ex1.py
Executable file
|
|
@ -0,0 +1,87 @@
|
|||
#!/usr/bin/env python
|
||||
|
||||
import collections
|
||||
import enum
|
||||
import sys
|
||||
from typing import NamedTuple
|
||||
|
||||
|
||||
class Op(enum.StrEnum):
|
||||
CPY = "cpy"
|
||||
INC = "inc"
|
||||
DEC = "dec"
|
||||
JNZ = "jnz"
|
||||
TGL = "tgl"
|
||||
|
||||
|
||||
class Instruction(NamedTuple):
|
||||
op: Op
|
||||
x: str
|
||||
y: str | None = None
|
||||
|
||||
@classmethod
|
||||
def from_str(cls, input: str) -> "Instruction":
|
||||
op, *rest = input.split()
|
||||
return cls(Op(op), *rest)
|
||||
|
||||
def toggle(self) -> "Instruction":
|
||||
if self.y is None:
|
||||
op = Op.DEC if self.op == Op.INC else Op.INC
|
||||
else:
|
||||
op = Op.CPY if self.op == Op.JNZ else Op.JNZ
|
||||
return Instruction(op, self.x, self.y)
|
||||
|
||||
|
||||
def solve(input: str) -> int:
|
||||
def parse(input: str) -> list[Instruction]:
|
||||
return [Instruction.from_str(line) for line in input.splitlines()]
|
||||
|
||||
def resolve(y: str | None, registers: dict[str, int]) -> int:
|
||||
assert y is not None # Sanity check
|
||||
try:
|
||||
return int(y)
|
||||
except ValueError:
|
||||
return registers[y]
|
||||
|
||||
instructions = parse(input)
|
||||
registers: dict[str, int] = collections.defaultdict(int)
|
||||
|
||||
ip = 0
|
||||
registers["a"] = 7
|
||||
while True:
|
||||
if ip < 0 or ip >= len(instructions):
|
||||
break
|
||||
instr = instructions[ip]
|
||||
ip += 1
|
||||
match instr.op:
|
||||
case Op.CPY:
|
||||
assert instr.y is not None
|
||||
if instr.y.isdigit():
|
||||
continue
|
||||
registers[instr.y] = resolve(instr.x, registers)
|
||||
case Op.INC:
|
||||
if instr.x.isdigit():
|
||||
continue
|
||||
registers[instr.x] += 1
|
||||
case Op.DEC:
|
||||
if instr.x.isdigit():
|
||||
continue
|
||||
registers[instr.x] -= 1
|
||||
case Op.JNZ:
|
||||
if resolve(instr.x, registers) != 0:
|
||||
ip += resolve(instr.y, registers) - 1 # Account auto-increment
|
||||
case Op.TGL:
|
||||
target = ip + resolve(instr.x, registers) - 1 # Account auto-increment
|
||||
if target < 0 or target >= len(instructions):
|
||||
continue
|
||||
instructions[target] = instructions[target].toggle()
|
||||
return registers["a"]
|
||||
|
||||
|
||||
def main() -> None:
|
||||
input = sys.stdin.read()
|
||||
print(solve(input))
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
26
2016/d23/ex1/input
Normal file
26
2016/d23/ex1/input
Normal file
|
|
@ -0,0 +1,26 @@
|
|||
cpy a b
|
||||
dec b
|
||||
cpy a d
|
||||
cpy 0 a
|
||||
cpy b c
|
||||
inc a
|
||||
dec c
|
||||
jnz c -2
|
||||
dec d
|
||||
jnz d -5
|
||||
dec b
|
||||
cpy b c
|
||||
cpy c d
|
||||
dec d
|
||||
inc c
|
||||
jnz d -2
|
||||
tgl c
|
||||
cpy -16 c
|
||||
jnz 1 c
|
||||
cpy 95 c
|
||||
jnz 95 d
|
||||
inc a
|
||||
inc d
|
||||
jnz d -2
|
||||
inc c
|
||||
jnz c -5
|
||||
53
2016/d23/ex2/ex2.py
Executable file
53
2016/d23/ex2/ex2.py
Executable file
|
|
@ -0,0 +1,53 @@
|
|||
#!/usr/bin/env python
|
||||
|
||||
import enum
|
||||
import math
|
||||
import sys
|
||||
from typing import NamedTuple
|
||||
|
||||
|
||||
class Op(enum.StrEnum):
|
||||
CPY = "cpy"
|
||||
INC = "inc"
|
||||
DEC = "dec"
|
||||
JNZ = "jnz"
|
||||
TGL = "tgl"
|
||||
|
||||
|
||||
class Instruction(NamedTuple):
|
||||
op: Op
|
||||
x: str
|
||||
y: str | None = None
|
||||
|
||||
@classmethod
|
||||
def from_str(cls, input: str) -> "Instruction":
|
||||
op, *rest = input.split()
|
||||
return cls(Op(op), *rest)
|
||||
|
||||
def toggle(self) -> "Instruction":
|
||||
if self.y is None:
|
||||
op = Op.DEC if self.op == Op.INC else Op.INC
|
||||
else:
|
||||
op = Op.CPY if self.op == Op.JNZ else Op.JNZ
|
||||
return Instruction(op, self.x, self.y)
|
||||
|
||||
|
||||
def solve(input: str) -> int:
|
||||
def parse(input: str) -> list[Instruction]:
|
||||
return [Instruction.from_str(line) for line in input.splitlines()]
|
||||
|
||||
instructions = parse(input)
|
||||
|
||||
num_eggs = 12
|
||||
c = int(instructions[19].x)
|
||||
d = int(instructions[20].x)
|
||||
return math.factorial(num_eggs) + c * d
|
||||
|
||||
|
||||
def main() -> None:
|
||||
input = sys.stdin.read()
|
||||
print(solve(input))
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
26
2016/d23/ex2/input
Normal file
26
2016/d23/ex2/input
Normal file
|
|
@ -0,0 +1,26 @@
|
|||
cpy a b
|
||||
dec b
|
||||
cpy a d
|
||||
cpy 0 a
|
||||
cpy b c
|
||||
inc a
|
||||
dec c
|
||||
jnz c -2
|
||||
dec d
|
||||
jnz d -5
|
||||
dec b
|
||||
cpy b c
|
||||
cpy c d
|
||||
dec d
|
||||
inc c
|
||||
jnz d -2
|
||||
tgl c
|
||||
cpy -16 c
|
||||
jnz 1 c
|
||||
cpy 95 c
|
||||
jnz 95 d
|
||||
inc a
|
||||
inc d
|
||||
jnz d -2
|
||||
inc c
|
||||
jnz c -5
|
||||
96
2016/d24/ex1/ex1.py
Executable file
96
2016/d24/ex1/ex1.py
Executable file
|
|
@ -0,0 +1,96 @@
|
|||
#!/usr/bin/env python
|
||||
|
||||
import collections
|
||||
import heapq
|
||||
import itertools
|
||||
import sys
|
||||
from collections.abc import Iterator
|
||||
from typing import NamedTuple
|
||||
|
||||
|
||||
class Point(NamedTuple):
|
||||
x: int
|
||||
y: int
|
||||
|
||||
|
||||
def solve(input: str) -> int:
|
||||
def parse(input: str) -> tuple[set[Point], dict[int, Point]]:
|
||||
spaces: set[Point] = set()
|
||||
waypoints: dict[int, Point] = {}
|
||||
for x, line in enumerate(input.splitlines()):
|
||||
for y, c in enumerate(line):
|
||||
if c == "#":
|
||||
continue
|
||||
p = Point(x, y)
|
||||
spaces.add(p)
|
||||
if c != ".":
|
||||
waypoints[int(c)] = p
|
||||
return spaces, waypoints
|
||||
|
||||
def neighbours(p: Point) -> Iterator[Point]:
|
||||
for dx, dy in (
|
||||
(-1, 0),
|
||||
(1, 0),
|
||||
(0, -1),
|
||||
(0, 1),
|
||||
):
|
||||
yield Point(p.x + dx, p.y + dy)
|
||||
|
||||
def dijkstra(start: Point, end: Point, points: set[Point]) -> int:
|
||||
# Priority queue of (distance, point)
|
||||
queue = [(0, start)]
|
||||
seen: set[Point] = set()
|
||||
|
||||
while len(queue) > 0:
|
||||
dist, p = heapq.heappop(queue)
|
||||
if p == end:
|
||||
return dist
|
||||
# We must have seen p with a smaller distance before
|
||||
if p in seen:
|
||||
continue
|
||||
# First time encountering p, must be the smallest distance to it
|
||||
seen.add(p)
|
||||
# Add all neighbours to be visited
|
||||
for n in neighbours(p):
|
||||
if n not in points:
|
||||
continue
|
||||
heapq.heappush(queue, (dist + 1, n))
|
||||
|
||||
assert False # Sanity check
|
||||
|
||||
def waypoint_distances(
|
||||
points: set[Point], waypoints: dict[int, Point]
|
||||
) -> dict[int, dict[int, int]]:
|
||||
res: dict[int, dict[int, int]] = collections.defaultdict(dict)
|
||||
for p1, p2 in itertools.combinations(waypoints.keys(), 2):
|
||||
dist = dijkstra(waypoints[p1], waypoints[p2], points)
|
||||
res[p1][p2] = dist
|
||||
res[p2][p1] = dist
|
||||
return res
|
||||
|
||||
def traveling_salesman(
|
||||
start: int,
|
||||
points: set[Point],
|
||||
waypoints: dict[int, Point],
|
||||
) -> int:
|
||||
def list_travels() -> Iterator[Iterator[int]]:
|
||||
for destinations in itertools.permutations(waypoints.keys() - {start}):
|
||||
yield itertools.chain([start], destinations)
|
||||
|
||||
distances = waypoint_distances(points, waypoints)
|
||||
return min(
|
||||
sum(distances[s][e] for s, e in itertools.pairwise(travel_plan))
|
||||
for travel_plan in list_travels()
|
||||
)
|
||||
|
||||
points, waypoints = parse(input)
|
||||
return traveling_salesman(0, points, waypoints)
|
||||
|
||||
|
||||
def main() -> None:
|
||||
input = sys.stdin.read()
|
||||
print(solve(input))
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
39
2016/d24/ex1/input
Normal file
39
2016/d24/ex1/input
Normal file
|
|
@ -0,0 +1,39 @@
|
|||
###################################################################################################################################################################################
|
||||
#.#.........#.#.....#.#.#.#.#.........#...#.......#.....#.#.....#...#.......#.#...#.#.....#...#.....#.................#.#...#.....#.....#.....#.............#.........#.#.....#0#.#
|
||||
#.###.#.#.#.#.#.#.#.#.#.#.#.#####.#.#.#.#.#.###.#.#.###.#.#.#.#.#.###.#.#.#.#.#.#.#.#.#.#.#.#.#.#.###.#.#.#.#.###.#.#.#.#.#.#.#.###.#.#.#.#.#####.#####.#.#.#.#.#.#.#.#.###.#.#.#.#
|
||||
#.......#.......#.#...#.....#...#.#...#...#.....#2#.#...#.#.....#...#...#.......#...#...#.....#.#.#.....#...#.#.....#.........#.#.#.....#.......#...#.....#.......#.....#...#...#.#
|
||||
#.###.#.#.#.###.#####.#.#.#.###.#.###.#.#.###.#.#####.#.#####.#.#.#.#########.#.#.#######.###.#.#.#.#.#.###.#.#.#.#.###.#.#.#.#.#.#.#.###.###.#.#.###.#####.#.#.#####.#.###.#.#.#.#
|
||||
#.....#...........#...#.......................#...........#.#...#.#.#.#.....#.#...#...#.#...#.#.........#...#.....#...#...#.....#.....#.....#...#.....#.#...#...........#.....#.#.#
|
||||
#####.###.#########.###.#.#########.###.###.#.#####.#####.#.#.#####.#.#.#.###.#.#.#.#.#.###.#.###########.#.#.#.#.#.#####.#######.###.#.###.#.###.#####.#.#.#####.#.#.###.###.#.#.#
|
||||
#...#.#1..#...........#.#.....#...#.#.....#...#...#...........#...#.......#...............#...#.......#.....#.....#.#...#.....#...#.#.#.......#.......#.............#...........#.#
|
||||
#.#.#.#.###.#.#.#.#.###.#.#.#.#.#.#.#.###.#.#.#.#.#.#.#.#####.#####.###.#.#.#######.#####.###.#.###.#.#.###.#.#.###.#.#.#.#.#.#.###.#.#.###.#.#.#.#.#.#.#.#.#.###.#######.#.#######
|
||||
#...#...#...#.....#...#...........#...#.#...#...#.#.#.#...#...#...#...#.#...#.#.......#...#...#.#.....#.#.....#.....#.....#.....#.#.#...#...#.#.....#.....#.....#.......#.#.#.....#
|
||||
#.#.#.#.###.#.#####.#.#.#.#.#####.#.#.#.#.###.#.#.#.#.#####.#.#.#.#.#.#.###.#.#.#.#.#.#####.#.#.#.#.###.###.#.###.###.###.#.#.#.#.#.###.###.#.###.#.#.###.#.###.#.#.###.#.###.#.###
|
||||
#...#...#...#...........#.........#.#.#.#.....#.#.#.#.#.........#.....#.#.......#.#.#...#.....#...#...#.......#.#.....#.#.....#.......#...#.#.#...#.#.#...#.#...#.#...#.#.#...#.#.#
|
||||
#.###.###.#.#.#.#.#.###.#.#.#.#.#.#.#.#.###.#.#####.#.#.#.#.#####.#.#.#.#.#.###.#.#.###.###.###.#######.#.#####.###.#.#.#.###.#.#.###.#.#.#.#.#.#.#.###.#.###.#.#.#.#####.#.#.#.#.#
|
||||
#...#.#...#.#.#.............#.......#.#...............#.#.#.....#...#.#...#.....#...#...................#.....#.#.#.....#.........#...#.#...#.......#...#...#...#.#.......#.....#.#
|
||||
###.#.#.#.#.#.#######.#.#.#.#.#.###.#####.###.#.#.###.#.###.###.#.#.#.#.#.#.#########.###.#.#.###.#.#.#.#.#.#.#.#.#.###.###########.#.#.#####.#.#####.#.#.#.###.#.#.###.#.###.#.#.#
|
||||
#...#.....#...#...#...#.#...#.....#.#.......#.....#...#...#.#.....#...#...#...#.......#.............#.....#...#.....#.......#.....#.#.#.......#.....#...#.....#...#.....#.#...#...#
|
||||
#.#.#####.#########.#.#.#.#.###########.###.###.#.#.#.#.#.#.#####.#.###.#.#.###.#####.#.#.#####.###.#.#.###.#.#.###.#.###.#.#.#.###.#.#.#.#####.#.#.#.#.#.#.#.#.#.#.#####.#.#.#.###
|
||||
#.........#.#...........#.#.#...#.#.....#.....#...........#.#.....#.....#...#.#...#.#.......#...#.#.......#.....#...#...#...#.......#.#.......#.#.....#...#...#.#.#.#4........#...#
|
||||
#.###.#.###.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#############.#.#.#######.#.#.#.#.###.#.#.#####.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.###.###.#.#.###.#.#.#.#.#.#.#.#.#.#.#.###.#.#####.#.#
|
||||
#3........#...#...#.#.#.#...#...#.....#...#.#...#...#.#.#.#...#.....#.#.#.#.............#.........#.#.....#.....#.#.............#.#.#.#...#...#...#.#.............#.#...#.....#...#
|
||||
###.###.#.#.###.###.###.#.#####.#####.#####.#.#.#.#.#.#.###.#.#.#.#.#.#####.###.###.#.###.#.#.#.#.#.#.#.###.#.###.###########.###.#.#.#.#.#.#.#.#####.###.#.#.#.#.#.###.###.#.#.#.#
|
||||
#...#.......#.#.#...............#.........#...#.....#.#...........#.#.........#.....#.........#...#...#.........#.......#.......#.........#.....#.#...#...#.#.#.....#.............#
|
||||
#.#.###.#####.###.###.#.###.#.###.#.#.###.###.#.#####.#######.###.#.#.###.#####.#.#.#.#.#.#.###.#.#####.#.#.#######.#.#.###.###.#.#.###.#.###.#.#.###.#############.#.###.#.#####.#
|
||||
#.#.#...#...#.#...#.#...#...#.....#.#.........#.......#.............#.#...#.........#.#.....#.....#.....#...#.....#...#...#.....#...#...#.........#...#.....#.........#...#.....#.#
|
||||
#.#####.#.#.#.#.#.#.#.#.#.#.#.#####.#.#.#.#.###.#.###.#.#.###.###.#.###.#.#.#.#.###.#.#####.###.#.###.#########.#.#.#####.#.#.#.#.#.###.###.###.#.#.#.#.###.#.#.#.#.###.#.#.#.#.#.#
|
||||
#.................#...#...#.#...........#.#.#.......#.......#...#.#...#...#.#...#.#.#.......#.#.#...#...........#.............#.#...#...#.......#...#.#.....#...#.#...#...#.......#
|
||||
#.#.#.#.#.###.###.#.#.#####.#.#.#.#####.#.#.#.###.#.#######.###.#.#.###.#.#.#####.#.#####.#.#.#.#.#.#.#.#.#.#.#.#.###.#.#####.#####.###.#.#.###.#.#.#.#.#.#.#.###.#.#.#.#.#####.#.#
|
||||
#...#.#.#...#.....#.#.#.......#...#...#...#.......................#.#.....#.................#.....#.......#...#...........#...#...........#...#...#...#.....#.#.#...#.#.#...#...#.#
|
||||
#.#.#.#.###.#.#######.#####.###.#.#.#.###.#.###.#.#.###.#.#.#.###.#####.#.#.#.#.#.###.#.#####.###.#######.#.#.#.###.###.#.###.#.#.###.###.#.#.###.###.#.###.###.###.#.#.###.#.#.#.#
|
||||
#...#...#.#.#...#...#.#...#...#.#.....#.#...#.....#.....#.....#.#.....#.....#.#...#.#...#.........#.....#.#.....................#...#...#.#...#...#...#.#.....#.#...#.....#...#...#
|
||||
#.#####.#.#####.###.#.#.#.#.#.#.#.#.###.#####.#.#.#.###.#.###.#.###.#.###.###.#.#.#.###.#.#.#.#.#.#.#.#.#.#.###.#.###.#.#######.#.#.#.#.#.#.#.#.#.#.#.#.#.#####.#.#.#.#.#.#.#.#.#.#
|
||||
#.....#.#.#7..#.#.......#...#.#.....#...#.........#...#.#...#.......#.....#...#.#...#.#...#.#.#.#.#.......#.....#...#...#.........#.....#...#.....#.....#.#.....#.............#..5#
|
||||
#.###.#.#.###.#.###.#######.#.#####.###.#.#.###.#.#.#.#.###.###.#.#.#####.#.#.#.#.#.#.#.###.#.#.#.#.#.###.###.###.#.#####.###.#.###.#.#.#.#.#.#####.#.#.#.#.#####.#.#.#.#.###.#.#.#
|
||||
#.......#.....#.....#.#.......#.#.#...#...#6#.#.......#...#.#.#.....#.#.#.....#.....#.....#.....#.#...#.........#...#...#.#.......#.#.#...#.#...#...#.....#.#.....#...#...#...#.#.#
|
||||
###.#.###.#.#.#.#.#.#.#.###.#.#.#.#.###.#.#.#.#####.#.#####.#.#.#.#.#.#.###.#.#####.#.#.#.#######.#.#.#####.#.#.#.#.#.#.#.###.###.###.#.#.#.#.#######.#.#.#.#.#.#.#.#.###.#.#.#.#.#
|
||||
#...#.#...#.#.....#...#.....#...#.#.....#...#.#...#.#.......#...#.....#...#.......#.....#.#...#...#...#.#...#.....#.....#.........#.#.......#.#.......#.#.....#.....#.#...........#
|
||||
#.#.#.###.#.###.###.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#######.###.#.#.#####.###.#.#.#.#.#.#.#.#.###.#.#.#####.###.###.###.#.#.#.#.#.#####.#.#####.#.#.#.###.#.###.#.#.#####.#.#.#######.#
|
||||
#.#.#...#.......#.....#...#.#...#...................#...#...#...#...#.......#.#.....#...#...#.........#.....#...........#...#.#.#.#.#.#...#.........#.#.........#.#...#.....#.#...#
|
||||
###################################################################################################################################################################################
|
||||
96
2016/d24/ex2/ex2.py
Executable file
96
2016/d24/ex2/ex2.py
Executable file
|
|
@ -0,0 +1,96 @@
|
|||
#!/usr/bin/env python
|
||||
|
||||
import collections
|
||||
import heapq
|
||||
import itertools
|
||||
import sys
|
||||
from collections.abc import Iterator
|
||||
from typing import NamedTuple
|
||||
|
||||
|
||||
class Point(NamedTuple):
|
||||
x: int
|
||||
y: int
|
||||
|
||||
|
||||
def solve(input: str) -> int:
|
||||
def parse(input: str) -> tuple[set[Point], dict[int, Point]]:
|
||||
spaces: set[Point] = set()
|
||||
waypoints: dict[int, Point] = {}
|
||||
for x, line in enumerate(input.splitlines()):
|
||||
for y, c in enumerate(line):
|
||||
if c == "#":
|
||||
continue
|
||||
p = Point(x, y)
|
||||
spaces.add(p)
|
||||
if c != ".":
|
||||
waypoints[int(c)] = p
|
||||
return spaces, waypoints
|
||||
|
||||
def neighbours(p: Point) -> Iterator[Point]:
|
||||
for dx, dy in (
|
||||
(-1, 0),
|
||||
(1, 0),
|
||||
(0, -1),
|
||||
(0, 1),
|
||||
):
|
||||
yield Point(p.x + dx, p.y + dy)
|
||||
|
||||
def dijkstra(start: Point, end: Point, points: set[Point]) -> int:
|
||||
# Priority queue of (distance, point)
|
||||
queue = [(0, start)]
|
||||
seen: set[Point] = set()
|
||||
|
||||
while len(queue) > 0:
|
||||
dist, p = heapq.heappop(queue)
|
||||
if p == end:
|
||||
return dist
|
||||
# We must have seen p with a smaller distance before
|
||||
if p in seen:
|
||||
continue
|
||||
# First time encountering p, must be the smallest distance to it
|
||||
seen.add(p)
|
||||
# Add all neighbours to be visited
|
||||
for n in neighbours(p):
|
||||
if n not in points:
|
||||
continue
|
||||
heapq.heappush(queue, (dist + 1, n))
|
||||
|
||||
assert False # Sanity check
|
||||
|
||||
def waypoint_distances(
|
||||
points: set[Point], waypoints: dict[int, Point]
|
||||
) -> dict[int, dict[int, int]]:
|
||||
res: dict[int, dict[int, int]] = collections.defaultdict(dict)
|
||||
for p1, p2 in itertools.combinations(waypoints.keys(), 2):
|
||||
dist = dijkstra(waypoints[p1], waypoints[p2], points)
|
||||
res[p1][p2] = dist
|
||||
res[p2][p1] = dist
|
||||
return res
|
||||
|
||||
def traveling_salesman(
|
||||
start: int,
|
||||
points: set[Point],
|
||||
waypoints: dict[int, Point],
|
||||
) -> int:
|
||||
def list_travel_loops() -> Iterator[Iterator[int]]:
|
||||
for destinations in itertools.permutations(waypoints.keys() - {start}):
|
||||
yield itertools.chain([start], destinations, [start])
|
||||
|
||||
distances = waypoint_distances(points, waypoints)
|
||||
return min(
|
||||
sum(distances[s][e] for s, e in itertools.pairwise(travel_plan))
|
||||
for travel_plan in list_travel_loops()
|
||||
)
|
||||
|
||||
points, waypoints = parse(input)
|
||||
return traveling_salesman(0, points, waypoints)
|
||||
|
||||
|
||||
def main() -> None:
|
||||
input = sys.stdin.read()
|
||||
print(solve(input))
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
39
2016/d24/ex2/input
Normal file
39
2016/d24/ex2/input
Normal file
|
|
@ -0,0 +1,39 @@
|
|||
###################################################################################################################################################################################
|
||||
#.#.........#.#.....#.#.#.#.#.........#...#.......#.....#.#.....#...#.......#.#...#.#.....#...#.....#.................#.#...#.....#.....#.....#.............#.........#.#.....#0#.#
|
||||
#.###.#.#.#.#.#.#.#.#.#.#.#.#####.#.#.#.#.#.###.#.#.###.#.#.#.#.#.###.#.#.#.#.#.#.#.#.#.#.#.#.#.#.###.#.#.#.#.###.#.#.#.#.#.#.#.###.#.#.#.#.#####.#####.#.#.#.#.#.#.#.#.###.#.#.#.#
|
||||
#.......#.......#.#...#.....#...#.#...#...#.....#2#.#...#.#.....#...#...#.......#...#...#.....#.#.#.....#...#.#.....#.........#.#.#.....#.......#...#.....#.......#.....#...#...#.#
|
||||
#.###.#.#.#.###.#####.#.#.#.###.#.###.#.#.###.#.#####.#.#####.#.#.#.#########.#.#.#######.###.#.#.#.#.#.###.#.#.#.#.###.#.#.#.#.#.#.#.###.###.#.#.###.#####.#.#.#####.#.###.#.#.#.#
|
||||
#.....#...........#...#.......................#...........#.#...#.#.#.#.....#.#...#...#.#...#.#.........#...#.....#...#...#.....#.....#.....#...#.....#.#...#...........#.....#.#.#
|
||||
#####.###.#########.###.#.#########.###.###.#.#####.#####.#.#.#####.#.#.#.###.#.#.#.#.#.###.#.###########.#.#.#.#.#.#####.#######.###.#.###.#.###.#####.#.#.#####.#.#.###.###.#.#.#
|
||||
#...#.#1..#...........#.#.....#...#.#.....#...#...#...........#...#.......#...............#...#.......#.....#.....#.#...#.....#...#.#.#.......#.......#.............#...........#.#
|
||||
#.#.#.#.###.#.#.#.#.###.#.#.#.#.#.#.#.###.#.#.#.#.#.#.#.#####.#####.###.#.#.#######.#####.###.#.###.#.#.###.#.#.###.#.#.#.#.#.#.###.#.#.###.#.#.#.#.#.#.#.#.#.###.#######.#.#######
|
||||
#...#...#...#.....#...#...........#...#.#...#...#.#.#.#...#...#...#...#.#...#.#.......#...#...#.#.....#.#.....#.....#.....#.....#.#.#...#...#.#.....#.....#.....#.......#.#.#.....#
|
||||
#.#.#.#.###.#.#####.#.#.#.#.#####.#.#.#.#.###.#.#.#.#.#####.#.#.#.#.#.#.###.#.#.#.#.#.#####.#.#.#.#.###.###.#.###.###.###.#.#.#.#.#.###.###.#.###.#.#.###.#.###.#.#.###.#.###.#.###
|
||||
#...#...#...#...........#.........#.#.#.#.....#.#.#.#.#.........#.....#.#.......#.#.#...#.....#...#...#.......#.#.....#.#.....#.......#...#.#.#...#.#.#...#.#...#.#...#.#.#...#.#.#
|
||||
#.###.###.#.#.#.#.#.###.#.#.#.#.#.#.#.#.###.#.#####.#.#.#.#.#####.#.#.#.#.#.###.#.#.###.###.###.#######.#.#####.###.#.#.#.###.#.#.###.#.#.#.#.#.#.#.###.#.###.#.#.#.#####.#.#.#.#.#
|
||||
#...#.#...#.#.#.............#.......#.#...............#.#.#.....#...#.#...#.....#...#...................#.....#.#.#.....#.........#...#.#...#.......#...#...#...#.#.......#.....#.#
|
||||
###.#.#.#.#.#.#######.#.#.#.#.#.###.#####.###.#.#.###.#.###.###.#.#.#.#.#.#.#########.###.#.#.###.#.#.#.#.#.#.#.#.#.###.###########.#.#.#####.#.#####.#.#.#.###.#.#.###.#.###.#.#.#
|
||||
#...#.....#...#...#...#.#...#.....#.#.......#.....#...#...#.#.....#...#...#...#.......#.............#.....#...#.....#.......#.....#.#.#.......#.....#...#.....#...#.....#.#...#...#
|
||||
#.#.#####.#########.#.#.#.#.###########.###.###.#.#.#.#.#.#.#####.#.###.#.#.###.#####.#.#.#####.###.#.#.###.#.#.###.#.###.#.#.#.###.#.#.#.#####.#.#.#.#.#.#.#.#.#.#.#####.#.#.#.###
|
||||
#.........#.#...........#.#.#...#.#.....#.....#...........#.#.....#.....#...#.#...#.#.......#...#.#.......#.....#...#...#...#.......#.#.......#.#.....#...#...#.#.#.#4........#...#
|
||||
#.###.#.###.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#############.#.#.#######.#.#.#.#.###.#.#.#####.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.###.###.#.#.###.#.#.#.#.#.#.#.#.#.#.#.###.#.#####.#.#
|
||||
#3........#...#...#.#.#.#...#...#.....#...#.#...#...#.#.#.#...#.....#.#.#.#.............#.........#.#.....#.....#.#.............#.#.#.#...#...#...#.#.............#.#...#.....#...#
|
||||
###.###.#.#.###.###.###.#.#####.#####.#####.#.#.#.#.#.#.###.#.#.#.#.#.#####.###.###.#.###.#.#.#.#.#.#.#.###.#.###.###########.###.#.#.#.#.#.#.#.#####.###.#.#.#.#.#.###.###.#.#.#.#
|
||||
#...#.......#.#.#...............#.........#...#.....#.#...........#.#.........#.....#.........#...#...#.........#.......#.......#.........#.....#.#...#...#.#.#.....#.............#
|
||||
#.#.###.#####.###.###.#.###.#.###.#.#.###.###.#.#####.#######.###.#.#.###.#####.#.#.#.#.#.#.###.#.#####.#.#.#######.#.#.###.###.#.#.###.#.###.#.#.###.#############.#.###.#.#####.#
|
||||
#.#.#...#...#.#...#.#...#...#.....#.#.........#.......#.............#.#...#.........#.#.....#.....#.....#...#.....#...#...#.....#...#...#.........#...#.....#.........#...#.....#.#
|
||||
#.#####.#.#.#.#.#.#.#.#.#.#.#.#####.#.#.#.#.###.#.###.#.#.###.###.#.###.#.#.#.#.###.#.#####.###.#.###.#########.#.#.#####.#.#.#.#.#.###.###.###.#.#.#.#.###.#.#.#.#.###.#.#.#.#.#.#
|
||||
#.................#...#...#.#...........#.#.#.......#.......#...#.#...#...#.#...#.#.#.......#.#.#...#...........#.............#.#...#...#.......#...#.#.....#...#.#...#...#.......#
|
||||
#.#.#.#.#.###.###.#.#.#####.#.#.#.#####.#.#.#.###.#.#######.###.#.#.###.#.#.#####.#.#####.#.#.#.#.#.#.#.#.#.#.#.#.###.#.#####.#####.###.#.#.###.#.#.#.#.#.#.#.###.#.#.#.#.#####.#.#
|
||||
#...#.#.#...#.....#.#.#.......#...#...#...#.......................#.#.....#.................#.....#.......#...#...........#...#...........#...#...#...#.....#.#.#...#.#.#...#...#.#
|
||||
#.#.#.#.###.#.#######.#####.###.#.#.#.###.#.###.#.#.###.#.#.#.###.#####.#.#.#.#.#.###.#.#####.###.#######.#.#.#.###.###.#.###.#.#.###.###.#.#.###.###.#.###.###.###.#.#.###.#.#.#.#
|
||||
#...#...#.#.#...#...#.#...#...#.#.....#.#...#.....#.....#.....#.#.....#.....#.#...#.#...#.........#.....#.#.....................#...#...#.#...#...#...#.#.....#.#...#.....#...#...#
|
||||
#.#####.#.#####.###.#.#.#.#.#.#.#.#.###.#####.#.#.#.###.#.###.#.###.#.###.###.#.#.#.###.#.#.#.#.#.#.#.#.#.#.###.#.###.#.#######.#.#.#.#.#.#.#.#.#.#.#.#.#.#####.#.#.#.#.#.#.#.#.#.#
|
||||
#.....#.#.#7..#.#.......#...#.#.....#...#.........#...#.#...#.......#.....#...#.#...#.#...#.#.#.#.#.......#.....#...#...#.........#.....#...#.....#.....#.#.....#.............#..5#
|
||||
#.###.#.#.###.#.###.#######.#.#####.###.#.#.###.#.#.#.#.###.###.#.#.#####.#.#.#.#.#.#.#.###.#.#.#.#.#.###.###.###.#.#####.###.#.###.#.#.#.#.#.#####.#.#.#.#.#####.#.#.#.#.###.#.#.#
|
||||
#.......#.....#.....#.#.......#.#.#...#...#6#.#.......#...#.#.#.....#.#.#.....#.....#.....#.....#.#...#.........#...#...#.#.......#.#.#...#.#...#...#.....#.#.....#...#...#...#.#.#
|
||||
###.#.###.#.#.#.#.#.#.#.###.#.#.#.#.###.#.#.#.#####.#.#####.#.#.#.#.#.#.###.#.#####.#.#.#.#######.#.#.#####.#.#.#.#.#.#.#.###.###.###.#.#.#.#.#######.#.#.#.#.#.#.#.#.###.#.#.#.#.#
|
||||
#...#.#...#.#.....#...#.....#...#.#.....#...#.#...#.#.......#...#.....#...#.......#.....#.#...#...#...#.#...#.....#.....#.........#.#.......#.#.......#.#.....#.....#.#...........#
|
||||
#.#.#.###.#.###.###.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#######.###.#.#.#####.###.#.#.#.#.#.#.#.#.###.#.#.#####.###.###.###.#.#.#.#.#.#####.#.#####.#.#.#.###.#.###.#.#.#####.#.#.#######.#
|
||||
#.#.#...#.......#.....#...#.#...#...................#...#...#...#...#.......#.#.....#...#...#.........#.....#...........#...#.#.#.#.#.#...#.........#.#.........#.#...#.....#.#...#
|
||||
###################################################################################################################################################################################
|
||||
48
2016/d25/ex1/ex1.py
Executable file
48
2016/d25/ex1/ex1.py
Executable file
|
|
@ -0,0 +1,48 @@
|
|||
#!/usr/bin/env python
|
||||
|
||||
import enum
|
||||
import sys
|
||||
from typing import NamedTuple
|
||||
|
||||
|
||||
class Op(enum.StrEnum):
|
||||
CPY = "cpy"
|
||||
INC = "inc"
|
||||
DEC = "dec"
|
||||
JNZ = "jnz"
|
||||
OUT = "out"
|
||||
|
||||
|
||||
class Instruction(NamedTuple):
|
||||
op: Op
|
||||
x: str
|
||||
y: str | None = None
|
||||
|
||||
@classmethod
|
||||
def from_str(cls, input: str) -> "Instruction":
|
||||
op, *rest = input.split()
|
||||
return cls(Op(op), *rest)
|
||||
|
||||
|
||||
def solve(input: str) -> int:
|
||||
def parse(input: str) -> list[Instruction]:
|
||||
return [Instruction.from_str(line) for line in input.splitlines()]
|
||||
|
||||
def next_signal_int(n: int) -> int:
|
||||
res = 0b10
|
||||
while res < n:
|
||||
res = (res << 2) | res
|
||||
return res
|
||||
|
||||
instructions = parse(input)
|
||||
bc = int(instructions[1].x) * int(instructions[2].x)
|
||||
return next_signal_int(bc) - bc
|
||||
|
||||
|
||||
def main() -> None:
|
||||
input = sys.stdin.read()
|
||||
print(solve(input))
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
30
2016/d25/ex1/input
Normal file
30
2016/d25/ex1/input
Normal file
|
|
@ -0,0 +1,30 @@
|
|||
cpy a d
|
||||
cpy 15 c
|
||||
cpy 170 b
|
||||
inc d
|
||||
dec b
|
||||
jnz b -2
|
||||
dec c
|
||||
jnz c -5
|
||||
cpy d a
|
||||
jnz 0 0
|
||||
cpy a b
|
||||
cpy 0 a
|
||||
cpy 2 c
|
||||
jnz b 2
|
||||
jnz 1 6
|
||||
dec b
|
||||
dec c
|
||||
jnz c -4
|
||||
inc a
|
||||
jnz 1 -7
|
||||
cpy 2 b
|
||||
jnz c 2
|
||||
jnz 1 4
|
||||
dec b
|
||||
dec c
|
||||
jnz 1 -4
|
||||
jnz 0 0
|
||||
out b
|
||||
jnz a -19
|
||||
jnz 1 -21
|
||||
9
2016/d25/ex2/ex2.py
Executable file
9
2016/d25/ex2/ex2.py
Executable file
|
|
@ -0,0 +1,9 @@
|
|||
#!/usr/bin/env python
|
||||
|
||||
|
||||
def main() -> None:
|
||||
print("There is no part two...")
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
62
2016/d25/ex2/input
Normal file
62
2016/d25/ex2/input
Normal file
|
|
@ -0,0 +1,62 @@
|
|||
Begin in state A.
|
||||
Perform a diagnostic checksum after 12683008 steps.
|
||||
|
||||
In state A:
|
||||
If the current value is 0:
|
||||
- Write the value 1.
|
||||
- Move one slot to the right.
|
||||
- Continue with state B.
|
||||
If the current value is 1:
|
||||
- Write the value 0.
|
||||
- Move one slot to the left.
|
||||
- Continue with state B.
|
||||
|
||||
In state B:
|
||||
If the current value is 0:
|
||||
- Write the value 1.
|
||||
- Move one slot to the left.
|
||||
- Continue with state C.
|
||||
If the current value is 1:
|
||||
- Write the value 0.
|
||||
- Move one slot to the right.
|
||||
- Continue with state E.
|
||||
|
||||
In state C:
|
||||
If the current value is 0:
|
||||
- Write the value 1.
|
||||
- Move one slot to the right.
|
||||
- Continue with state E.
|
||||
If the current value is 1:
|
||||
- Write the value 0.
|
||||
- Move one slot to the left.
|
||||
- Continue with state D.
|
||||
|
||||
In state D:
|
||||
If the current value is 0:
|
||||
- Write the value 1.
|
||||
- Move one slot to the left.
|
||||
- Continue with state A.
|
||||
If the current value is 1:
|
||||
- Write the value 1.
|
||||
- Move one slot to the left.
|
||||
- Continue with state A.
|
||||
|
||||
In state E:
|
||||
If the current value is 0:
|
||||
- Write the value 0.
|
||||
- Move one slot to the right.
|
||||
- Continue with state A.
|
||||
If the current value is 1:
|
||||
- Write the value 0.
|
||||
- Move one slot to the right.
|
||||
- Continue with state F.
|
||||
|
||||
In state F:
|
||||
If the current value is 0:
|
||||
- Write the value 1.
|
||||
- Move one slot to the right.
|
||||
- Continue with state E.
|
||||
If the current value is 1:
|
||||
- Write the value 1.
|
||||
- Move one slot to the right.
|
||||
- Continue with state A.
|
||||
Loading…
Add table
Add a link
Reference in a new issue