Compare commits
9 Commits
main
..
31d2d2fdc8
| Author | SHA1 | Date | |
|---|---|---|---|
| 31d2d2fdc8 | |||
| 485637caeb | |||
| a915778046 | |||
| fc696046a9 | |||
| 22a4b79550 | |||
| c37789748e | |||
| 08115b061b | |||
| 3cf80cab1b | |||
| b927685801 |
@@ -1,3 +1 @@
|
|||||||
Pipfile
|
|
||||||
__pycache__
|
__pycache__
|
||||||
*.txt
|
|
||||||
|
|||||||
@@ -1,53 +1,11 @@
|
|||||||
My solutions to the Advent of Code 2023 programming challenges.
|
|
||||||
|
|
||||||
Thanks to Eric Wastl for creating this enjoyable event.
|
|
||||||
|
|
||||||
- Requires `lib.py` from [aocpy](https://git.felixm.de/felixm/aocpy) repository.
|
|
||||||
- Requires `sympy` for day 24.
|
|
||||||
- Requires `matplotlib` and `networkx` for hands-on day 25.
|
|
||||||
|
|
||||||
# Times
|
# Times
|
||||||
|
|
||||||
- Day 1: 40:00 (I don't know what I am doing.)
|
- Day 1: 40:00 (I don't know what I am doing.)
|
||||||
- Day 2: 14:15 (Okay, but far way from leaderboard.)
|
- Day 2: 14:15 (Okay, but far way from leaderboard.)
|
||||||
- Day 3: 1st 20:00, 2nd 70:00... (I had a logic error that took me a while to
|
- Day 3: 1st 20:00, 2nd 70:00... (I had a logic error that took me a while to find.)
|
||||||
find.)
|
|
||||||
- Day 4: 1st 9:06, 2nd 22:31; it wasn't hard but I didn't think quick enough :/
|
- Day 4: 1st 9:06, 2nd 22:31; it wasn't hard but I didn't think quick enough :/
|
||||||
- Day 5: 1st 25:00, 2nd 1:55:00; Required patience and accuracy
|
- Day 5: 1st 25:00, 2nd 1:55:00; Required patience and accuracy
|
||||||
- Day 6: 13:54; I was slow because I thought it is much harder?
|
- Day 6: 13:54; I was slow because I thought it is much harder?
|
||||||
- Day 7: 75:00; leaderboard 16:00... that was just bad; no excuse
|
- Day 7: 75:00; leaderboard 16:00... that was just bad; no excuse
|
||||||
- Day 8: 25:00; I was doing pretty decent here.
|
- Day 8: 57:00; my input parse function did not consider negative values...
|
||||||
- Day 9: 57:00; my input parse function did not consider negative values...
|
- Day 9:
|
||||||
- Day 10: 180:00; this one was hard for me.
|
|
||||||
- Day 11: 68:00; okay but not elegant and way too slow ofc; x-ray solution
|
|
||||||
would have been neat
|
|
||||||
- Day 12: 52:00 and 22:00 for leaderboard; had the right idea and I am good at
|
|
||||||
this type of problem
|
|
||||||
- Day 13: 90:00; pretty straightforward but way too slow
|
|
||||||
- Day 14: 5:55 for first and then 48:00; straightforward but slow, ofc
|
|
||||||
- Day 15: 4:30 and 31:20; more reading comprehension than programming
|
|
||||||
- Day 16: 00:27:30 745; best placement so far, of course still horribly slow
|
|
||||||
- Day 17: a couple of hours; I realized that I need A* after a while; reused
|
|
||||||
implementation from Project Euler but improved with heapq which was super fun
|
|
||||||
- Day 18: a couple of hours; I realized that I need shoelace algo for part two
|
|
||||||
but didn't realize that I have to compute the outer edges for a while and
|
|
||||||
after I did, I still got clockwise/counter-clockwise issues. They could have
|
|
||||||
made it meaner by using different clock directions for example and input.
|
|
||||||
- Day 19: This one was pretty straightforward and required the interval
|
|
||||||
technique we applied earlier.
|
|
||||||
- Day 20: Part 2 was tough. I had the right idea of printing out the periods of
|
|
||||||
the input conjunction gate pretty early, but then messed up the
|
|
||||||
implementation and thought it wasn't gonna work. Spent a half day thinking up
|
|
||||||
something else before returning to the idea and it worked flawlessly.
|
|
||||||
- Day 21: Part 1 was straightforward, but part 2 maybe the hardest problem this
|
|
||||||
year.
|
|
||||||
- Day 22: Not too hard, but definitely way too slow for leaderboard.
|
|
||||||
- Day 23: I found this fun because it required some creativity for part 2. Slow
|
|
||||||
af, of course.
|
|
||||||
- Day 24: Solve problem with sympy. I first used numpy to solve part 1 and it
|
|
||||||
was much faster than using sympy, but I lost that solution when switching to
|
|
||||||
sympy. Takes about three minutes to run for part 1 and then part 2 is under a
|
|
||||||
second.
|
|
||||||
- Day 25: I cheeky solved this by plotting the graph and manually removing the
|
|
||||||
nodes. I should probably try to write an algorith that does that, but meh.
|
|
||||||
Manually plotting requires matplotlib and networkx packages.
|
|
||||||
|
|||||||
@@ -1,218 +0,0 @@
|
|||||||
import lib
|
|
||||||
|
|
||||||
EXAMPLE = """
|
|
||||||
..F7.
|
|
||||||
.FJ|.
|
|
||||||
SJ.L7
|
|
||||||
|F--J
|
|
||||||
LJ...
|
|
||||||
"""
|
|
||||||
|
|
||||||
EXAMPLE2 = """
|
|
||||||
...........
|
|
||||||
.S-------7.
|
|
||||||
.|F-----7|.
|
|
||||||
.||.....||.
|
|
||||||
.||.....||.
|
|
||||||
.|L-7.F-J|.
|
|
||||||
.|..|.|..|.
|
|
||||||
.L--J.L--J.
|
|
||||||
...........
|
|
||||||
"""
|
|
||||||
|
|
||||||
EXAMPLE3 = """
|
|
||||||
..........
|
|
||||||
.S------7.
|
|
||||||
.|F----7|.
|
|
||||||
.||OOOO||.
|
|
||||||
.||OOOO||.
|
|
||||||
.|L-7F-J|.
|
|
||||||
.|II||II|.
|
|
||||||
.L--JL--J.
|
|
||||||
..........
|
|
||||||
"""
|
|
||||||
|
|
||||||
EXAMPLE4 = """
|
|
||||||
FF7FSF7F7F7F7F7F---7
|
|
||||||
L|LJ||||||||||||F--J
|
|
||||||
FL-7LJLJ||||||LJL-77
|
|
||||||
F--JF--7||LJLJIF7FJ-
|
|
||||||
L---JF-JLJIIIIFJLJJ7
|
|
||||||
|F|F-JF---7IIIL7L|7|
|
|
||||||
|FFJF7L7F-JF7IIL---7
|
|
||||||
7-L-JL7||F7|L7F-7F7|
|
|
||||||
L.L7LFJ|||||FJL7||LJ
|
|
||||||
L7JLJL-JLJLJL--JLJ.L
|
|
||||||
"""
|
|
||||||
|
|
||||||
|
|
||||||
# | is a vertical pipe connecting north and south.
|
|
||||||
# - is a horizontal pipe connecting east and west.
|
|
||||||
# L is a 90-degree bend connecting north and east.
|
|
||||||
# J is a 90-degree bend connecting north and west.
|
|
||||||
# 7 is a 90-degree bend connecting south and west.
|
|
||||||
# F is a 90-degree bend connecting south and east.
|
|
||||||
# . is ground; there is no pipe in this tile.
|
|
||||||
# S is the starting position of the animal; there is a pipe on this tile, but your sketch doesn't show what shape the pipe has.
|
|
||||||
|
|
||||||
# Mapping of in-direction to out-direction for each piece.
|
|
||||||
DIRS = {
|
|
||||||
'|': {
|
|
||||||
(1, 0): (1, 0),
|
|
||||||
(-1, 0): (-1, 0),
|
|
||||||
},
|
|
||||||
'-': {
|
|
||||||
(0, -1): (0, -1),
|
|
||||||
(0, 1): (0, 1),
|
|
||||||
},
|
|
||||||
'L': {
|
|
||||||
(1, 0): (0, 1),
|
|
||||||
(0, -1): (-1, 0),
|
|
||||||
},
|
|
||||||
'J': {
|
|
||||||
(0, 1): (-1, 0),
|
|
||||||
(1, 0): (0, -1),
|
|
||||||
},
|
|
||||||
'7': {
|
|
||||||
(0, 1): (1, 0),
|
|
||||||
(-1, 0): (0, -1),
|
|
||||||
},
|
|
||||||
'F': {
|
|
||||||
(-1, 0): (0, 1),
|
|
||||||
(0, -1): (1, 0),
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
RIGHTS = {
|
|
||||||
'|': {
|
|
||||||
(1, 0): [(0, -1)],
|
|
||||||
(-1, 0): [(0, 1)],
|
|
||||||
},
|
|
||||||
'-': {
|
|
||||||
(0, -1): [(-1, 0)],
|
|
||||||
(0, 1): [(1, 0)],
|
|
||||||
},
|
|
||||||
'L': {
|
|
||||||
(1, 0): [(0, -1), (1, 0)],
|
|
||||||
(0, -1): [(-1, 1)],
|
|
||||||
},
|
|
||||||
'J': {
|
|
||||||
(0, 1): [(1, 0), (0, 1)],
|
|
||||||
(1, 0): [(-1, -1)],
|
|
||||||
},
|
|
||||||
'7': {
|
|
||||||
(0, 1): [(1, -1)],
|
|
||||||
(-1, 0): [(0, 1), (-1, 0)],
|
|
||||||
},
|
|
||||||
'F': {
|
|
||||||
(-1, 0): [(1, 1)],
|
|
||||||
(0, -1): [(-1, 0), (0, -1)],
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
def solve(lines: list[str], return_path=False):
|
|
||||||
res = 0
|
|
||||||
maze = []
|
|
||||||
start = ()
|
|
||||||
max_path, max_right = [], []
|
|
||||||
maze = list(map(list, lines))
|
|
||||||
for i, row in enumerate(maze):
|
|
||||||
for j, col in enumerate(row):
|
|
||||||
if col == "S":
|
|
||||||
start = (i , j)
|
|
||||||
row_max, col_max = len(maze), len(maze[0])
|
|
||||||
|
|
||||||
for current_dir in [(0, 1), (0, -1), (1, 0), (-1, 0)]:
|
|
||||||
current_field = start
|
|
||||||
steps = 0
|
|
||||||
path = []
|
|
||||||
right = []
|
|
||||||
# print(f"START: {start} {current_dir=}")
|
|
||||||
while True:
|
|
||||||
path.append(current_field)
|
|
||||||
next_field = (current_field[0] + current_dir[0], current_field[1] + current_dir[1])
|
|
||||||
if next_field == start:
|
|
||||||
break
|
|
||||||
|
|
||||||
if next_field[0] < 0 or next_field[1] < 0 or next_field[0] >= row_max or next_field[1] >= col_max:
|
|
||||||
# print(f"BREAK: Cannot go to {next_field=}!")
|
|
||||||
break
|
|
||||||
|
|
||||||
prev_dir = current_dir
|
|
||||||
next_char = maze[next_field[0]][next_field[1]]
|
|
||||||
try:
|
|
||||||
current_dir = DIRS[next_char][current_dir]
|
|
||||||
except KeyError:
|
|
||||||
# print(f"BREAK: Cannot go from {current_field=} with {current_dir=} to {next_field=} ({next_char})!")
|
|
||||||
break
|
|
||||||
|
|
||||||
for rights in RIGHTS[next_char][prev_dir]:
|
|
||||||
rf = (next_field[0] + rights[0], next_field[1] + rights[1])
|
|
||||||
right.append(rf)
|
|
||||||
|
|
||||||
current_field = next_field
|
|
||||||
steps += 1
|
|
||||||
res = max(res, (steps + 1) // 2)
|
|
||||||
if len(path) > len(max_path):
|
|
||||||
max_path = path
|
|
||||||
max_right = right
|
|
||||||
|
|
||||||
if return_path:
|
|
||||||
return res, max_path, max_right
|
|
||||||
else:
|
|
||||||
return res
|
|
||||||
|
|
||||||
def solve2(lines: list[str]):
|
|
||||||
row_max = len(lines)
|
|
||||||
col_max = len(lines[0])
|
|
||||||
length, path, right = solve(lines, True)
|
|
||||||
|
|
||||||
def clean(fields):
|
|
||||||
fields = list(set(fields))
|
|
||||||
cleaned = []
|
|
||||||
for f in fields:
|
|
||||||
if f in path:
|
|
||||||
continue
|
|
||||||
if f[0] < 0 or f[1] < 0 or f[0] >= row_max or f[1] >= col_max:
|
|
||||||
continue
|
|
||||||
cleaned.append(f)
|
|
||||||
return cleaned
|
|
||||||
|
|
||||||
right = clean(right)
|
|
||||||
visited = set()
|
|
||||||
to_visit = list(right)
|
|
||||||
while to_visit:
|
|
||||||
current = to_visit.pop()
|
|
||||||
for nb in [(0, 1), (0, -1), (1, 0), (-1, 0)]:
|
|
||||||
f = (current[0] + nb[0], current[1] + nb[1])
|
|
||||||
if f[0] < 0 or f[1] < 0 or f[0] >= row_max or f[1] >= col_max:
|
|
||||||
continue
|
|
||||||
|
|
||||||
if f not in visited and f not in path:
|
|
||||||
right.append(f)
|
|
||||||
to_visit.append(f)
|
|
||||||
visited.add(f)
|
|
||||||
|
|
||||||
right = clean(right)
|
|
||||||
|
|
||||||
n_all = row_max * col_max
|
|
||||||
n_right = len(right)
|
|
||||||
n_left = n_all - n_right - len(path)
|
|
||||||
|
|
||||||
return min(n_left, n_right)
|
|
||||||
|
|
||||||
def main():
|
|
||||||
lines = lib.str_to_lines_no_empty(EXAMPLE)
|
|
||||||
print("Example 1:", solve(lines))
|
|
||||||
|
|
||||||
lines = lib.str_to_lines_no_empty(open("i10.txt").read())
|
|
||||||
print("Solution 1:", solve(lines))
|
|
||||||
|
|
||||||
lines = lib.str_to_lines_no_empty(EXAMPLE4)
|
|
||||||
print("Example 2:", solve2(lines))
|
|
||||||
|
|
||||||
lines = lib.str_to_lines_no_empty(open("i10.txt").read())
|
|
||||||
print("Solution 2:", solve2(lines))
|
|
||||||
|
|
||||||
if __name__ == "__main__":
|
|
||||||
main()
|
|
||||||
@@ -1,111 +0,0 @@
|
|||||||
import lib
|
|
||||||
|
|
||||||
EXAMPLE = """
|
|
||||||
...#......
|
|
||||||
.......#..
|
|
||||||
#.........
|
|
||||||
..........
|
|
||||||
......#...
|
|
||||||
.#........
|
|
||||||
.........#
|
|
||||||
..........
|
|
||||||
.......#..
|
|
||||||
#...#.....
|
|
||||||
"""
|
|
||||||
|
|
||||||
def mdist(a, b):
|
|
||||||
return abs(a[0] - b[0]) + abs(a[1] - b[1])
|
|
||||||
|
|
||||||
def solve(lines: list[str]):
|
|
||||||
res = 0
|
|
||||||
|
|
||||||
g = list(map(list, lines))
|
|
||||||
|
|
||||||
er = []
|
|
||||||
for (i, r) in enumerate(g):
|
|
||||||
if "#" not in r:
|
|
||||||
er.append(i)
|
|
||||||
|
|
||||||
ec = []
|
|
||||||
for j in range(len(g[0])):
|
|
||||||
for row in g:
|
|
||||||
if "#" == row[j]:
|
|
||||||
break
|
|
||||||
else:
|
|
||||||
ec.append(j)
|
|
||||||
|
|
||||||
for r in reversed(er):
|
|
||||||
g.insert(r, ["." for _ in range(len(g[0]))])
|
|
||||||
|
|
||||||
for row in g:
|
|
||||||
for c in reversed(ec):
|
|
||||||
row.insert(c, ".")
|
|
||||||
|
|
||||||
# for row in g:
|
|
||||||
# print("".join(row))
|
|
||||||
|
|
||||||
gxs = []
|
|
||||||
for (row, line) in enumerate(g):
|
|
||||||
for (col, c) in enumerate(line):
|
|
||||||
if c == '#':
|
|
||||||
gxs.append((row, col))
|
|
||||||
|
|
||||||
for i in range(len(gxs)):
|
|
||||||
for j in range(i, len(gxs)):
|
|
||||||
a, b = gxs[i], gxs[j]
|
|
||||||
d = mdist(a, b)
|
|
||||||
# print(a, b, d)
|
|
||||||
res += d
|
|
||||||
# 16:00
|
|
||||||
return res
|
|
||||||
|
|
||||||
def solve2(lines: list[str], factor):
|
|
||||||
res = 0
|
|
||||||
g = list(map(list, lines))
|
|
||||||
gxs = []
|
|
||||||
for (row, line) in enumerate(g):
|
|
||||||
for (col, c) in enumerate(line):
|
|
||||||
if c == '#':
|
|
||||||
gxs.append((row, col, row, col))
|
|
||||||
|
|
||||||
for (row_i, row) in enumerate(g):
|
|
||||||
if "#" not in row:
|
|
||||||
for i in range(len(gxs)):
|
|
||||||
row, col, orig_row, orig_col = gxs[i]
|
|
||||||
if orig_row > row_i:
|
|
||||||
gxs[i] = (row + factor, col, orig_row, orig_col)
|
|
||||||
|
|
||||||
for col_j in range(len(g[0])):
|
|
||||||
for row in g:
|
|
||||||
if "#" == row[col_j]:
|
|
||||||
break
|
|
||||||
else:
|
|
||||||
for i in range(len(gxs)):
|
|
||||||
row, col, orig_row, orig_col = gxs[i]
|
|
||||||
if orig_col > col_j:
|
|
||||||
gxs[i] = (row, col + factor, orig_row, orig_col)
|
|
||||||
|
|
||||||
for i in range(len(gxs)):
|
|
||||||
for j in range(i, len(gxs)):
|
|
||||||
a, b = gxs[i], gxs[j]
|
|
||||||
d = mdist(a, b)
|
|
||||||
# print(a, b, d)
|
|
||||||
res += d
|
|
||||||
# 16:00
|
|
||||||
return res
|
|
||||||
|
|
||||||
def main():
|
|
||||||
lines = lib.str_to_lines_no_empty(EXAMPLE)
|
|
||||||
print("Example 1:", solve(lines))
|
|
||||||
|
|
||||||
lines = lib.str_to_lines_no_empty(open("i11.txt").read())
|
|
||||||
print("Solution 1:", solve(lines))
|
|
||||||
|
|
||||||
lines = lib.str_to_lines_no_empty(EXAMPLE)
|
|
||||||
print("Example 2:", solve2(lines, 99))
|
|
||||||
|
|
||||||
lines = lib.str_to_lines_no_empty(open("i11.txt").read())
|
|
||||||
print("Solution 2:", solve2(lines, 10**6 - 1))
|
|
||||||
|
|
||||||
if __name__ == "__main__":
|
|
||||||
main()
|
|
||||||
@@ -1,69 +0,0 @@
|
|||||||
import lib
|
|
||||||
from functools import lru_cache
|
|
||||||
|
|
||||||
EXAMPLE = """
|
|
||||||
???.### 1,1,3
|
|
||||||
.??..??...?##. 1,1,3
|
|
||||||
?#?#?#?#?#?#?#? 1,3,1,6
|
|
||||||
????.#...#... 4,1,1
|
|
||||||
????.######..#####. 1,6,5
|
|
||||||
?###???????? 3,2,1
|
|
||||||
"""
|
|
||||||
|
|
||||||
@lru_cache
|
|
||||||
def count(elems, groups):
|
|
||||||
if not elems and not groups:
|
|
||||||
return 1
|
|
||||||
elif elems and not groups:
|
|
||||||
if all(e in ['.', '?'] for e in elems):
|
|
||||||
return 1
|
|
||||||
return 0
|
|
||||||
elif not elems and groups:
|
|
||||||
return 0
|
|
||||||
|
|
||||||
r = 0
|
|
||||||
if elems[0] in ['?', '.']:
|
|
||||||
r += count(elems[1:], groups)
|
|
||||||
|
|
||||||
g = groups[0]
|
|
||||||
if len(elems) < g:
|
|
||||||
return 0
|
|
||||||
|
|
||||||
es, rest = elems[:g], elems[g:]
|
|
||||||
if all(e in ['?', '#'] for e in es) and (len(rest) == 0 or rest[0] in ['.', '?']):
|
|
||||||
r += count(rest[1:], groups[1:])
|
|
||||||
return r
|
|
||||||
|
|
||||||
|
|
||||||
def solve(lines: list[str], repeat=1):
|
|
||||||
all = []
|
|
||||||
for (_, line) in enumerate(lines):
|
|
||||||
springs, numbers = line.split()
|
|
||||||
numbers = tuple(lib.str_to_ints(numbers))
|
|
||||||
ns = "?".join([springs for _ in range(repeat)])
|
|
||||||
all.append((tuple(ns), numbers * repeat))
|
|
||||||
|
|
||||||
res = 0
|
|
||||||
for a in all:
|
|
||||||
# print(a, count(*a))
|
|
||||||
res += count(*a)
|
|
||||||
# 28:00
|
|
||||||
# 50:00 total
|
|
||||||
return res
|
|
||||||
|
|
||||||
|
|
||||||
def main():
|
|
||||||
lines = lib.str_to_lines_no_empty(EXAMPLE)
|
|
||||||
print("Example 1:", solve(lines))
|
|
||||||
|
|
||||||
lines = lib.str_to_lines_no_empty(open("i12.txt").read())
|
|
||||||
print("Solution 1:", solve(lines))
|
|
||||||
|
|
||||||
lines = lib.str_to_lines_no_empty(EXAMPLE)
|
|
||||||
print("Example 2:", solve(lines, 5))
|
|
||||||
|
|
||||||
lines = lib.str_to_lines_no_empty(open("i12.txt").read())
|
|
||||||
print("Solution 2:", solve(lines, 5))
|
|
||||||
|
|
||||||
if __name__ == "__main__":
|
|
||||||
main()
|
|
||||||
@@ -1,92 +0,0 @@
|
|||||||
from lib import *
|
|
||||||
|
|
||||||
EXAMPLE = """
|
|
||||||
#.##..##.
|
|
||||||
..#.##.#.
|
|
||||||
##......#
|
|
||||||
##......#
|
|
||||||
..#.##.#.
|
|
||||||
..##..##.
|
|
||||||
#.#.##.#.
|
|
||||||
|
|
||||||
#...##..#
|
|
||||||
#....#..#
|
|
||||||
..##..###
|
|
||||||
#####.##.
|
|
||||||
#####.##.
|
|
||||||
..##..###
|
|
||||||
#....#..#
|
|
||||||
""".replace("\n", "", count=1)
|
|
||||||
|
|
||||||
|
|
||||||
def solve(i: Input, second=False):
|
|
||||||
res = 0
|
|
||||||
ps = i.paras()
|
|
||||||
|
|
||||||
for p in ps:
|
|
||||||
g = Input(p).grid2()
|
|
||||||
|
|
||||||
row_res, col_res = [], []
|
|
||||||
rows = g.rows()
|
|
||||||
cols = g.cols()
|
|
||||||
for i_row in range(len(rows) - 1):
|
|
||||||
for i in range(min(i_row + 1, len(rows) - i_row - 1)):
|
|
||||||
if rows[i_row - i] != rows[i_row + i + 1]:
|
|
||||||
break
|
|
||||||
else:
|
|
||||||
if not second:
|
|
||||||
res += (i_row + 1) * 100
|
|
||||||
row_res.append(i_row)
|
|
||||||
|
|
||||||
for i_col in range(len(cols) - 1):
|
|
||||||
for i in range(min(i_col + 1, len(cols) - i_col - 1)):
|
|
||||||
if cols[i_col - i] != cols[i_col + i + 1]:
|
|
||||||
break
|
|
||||||
else:
|
|
||||||
if not second:
|
|
||||||
res += (i_col + 1)
|
|
||||||
col_res.append(i_col)
|
|
||||||
|
|
||||||
if not second:
|
|
||||||
continue
|
|
||||||
|
|
||||||
for c in g.all_coords():
|
|
||||||
g[c] = '.' if g[c] == '#' else '#'
|
|
||||||
rows = g.rows()
|
|
||||||
cols = g.cols()
|
|
||||||
for i_row in range(len(rows) - 1):
|
|
||||||
for i in range(min(i_row + 1, len(rows) - i_row - 1)):
|
|
||||||
if rows[i_row - i] != rows[i_row + i + 1]:
|
|
||||||
break
|
|
||||||
else:
|
|
||||||
if not i_row in row_res:
|
|
||||||
res += (i_row + 1) * 100
|
|
||||||
row_res.append(i_row)
|
|
||||||
|
|
||||||
for i_col in range(len(cols) - 1):
|
|
||||||
for i in range(min(i_col + 1, len(cols) - i_col - 1)):
|
|
||||||
if cols[i_col - i] != cols[i_col + i + 1]:
|
|
||||||
break
|
|
||||||
else:
|
|
||||||
if not i_col in col_res:
|
|
||||||
res += (i_col + 1)
|
|
||||||
col_res.append(i_col)
|
|
||||||
g[c] = '.' if g[c] == '#' else '#'
|
|
||||||
if len(row_res + col_res) != 2:
|
|
||||||
raise Exception("Unexpected amount of mirrors!!")
|
|
||||||
return res
|
|
||||||
|
|
||||||
|
|
||||||
def main():
|
|
||||||
DAY_INPUT = "i13.txt"
|
|
||||||
|
|
||||||
print("Example 1:", solve(Input(EXAMPLE)))
|
|
||||||
print("Solution 1:", solve(Input(DAY_INPUT)))
|
|
||||||
assert 29846 == solve(Input(DAY_INPUT))
|
|
||||||
|
|
||||||
print("Example 2:", solve(Input(EXAMPLE), True))
|
|
||||||
print("Solution 2:", solve(Input(DAY_INPUT), True))
|
|
||||||
assert 25401 == solve(Input(DAY_INPUT), True)
|
|
||||||
|
|
||||||
if __name__ == "__main__":
|
|
||||||
main()
|
|
||||||
@@ -1,88 +0,0 @@
|
|||||||
from lib import *
|
|
||||||
|
|
||||||
EXAMPLE = """
|
|
||||||
O....#....
|
|
||||||
O.OO#....#
|
|
||||||
.....##...
|
|
||||||
OO.#O....O
|
|
||||||
.O.....O#.
|
|
||||||
O.#..O.#.#
|
|
||||||
..O..#O..O
|
|
||||||
.......O..
|
|
||||||
#....###..
|
|
||||||
#OO..#....
|
|
||||||
"""
|
|
||||||
|
|
||||||
def get_nth_elem(xs, n):
|
|
||||||
""" Find the nth element of a repeating sequence. """
|
|
||||||
found = set()
|
|
||||||
x = None
|
|
||||||
for (i, x) in enumerate(xs):
|
|
||||||
if x in found:
|
|
||||||
break
|
|
||||||
found.add(x)
|
|
||||||
if i is None:
|
|
||||||
raise Exception("No repeating sequence.")
|
|
||||||
first_repeat = i
|
|
||||||
initial_sequence_length = xs.index(x)
|
|
||||||
repeating_sequence_length = first_repeat - xs.index(x)
|
|
||||||
|
|
||||||
adjusted_n = n - initial_sequence_length
|
|
||||||
position_in_repeating_sequence = adjusted_n % repeating_sequence_length
|
|
||||||
element = xs[initial_sequence_length + position_in_repeating_sequence]
|
|
||||||
return element
|
|
||||||
|
|
||||||
def solve(i: Input, second=False):
|
|
||||||
res = 0
|
|
||||||
g = i.grid2()
|
|
||||||
if second:
|
|
||||||
dirs = [Grid2D.N, Grid2D.W, Grid2D.S, Grid2D.E]
|
|
||||||
cycles = 1000000000
|
|
||||||
else:
|
|
||||||
dirs = [Grid2D.N]
|
|
||||||
cycles = 1
|
|
||||||
|
|
||||||
fs = {}
|
|
||||||
v = []
|
|
||||||
for i in range(cycles):
|
|
||||||
h = hash(tuple(g.find('O')))
|
|
||||||
fs[h] = tuple(g.find('O'))
|
|
||||||
v.append(h)
|
|
||||||
if v.count(h) > 1:
|
|
||||||
break
|
|
||||||
for d in dirs:
|
|
||||||
moved = True
|
|
||||||
while moved:
|
|
||||||
moved = False
|
|
||||||
for r in g.find('O'):
|
|
||||||
rn = add2(r, d)
|
|
||||||
if rn in g and g[rn] == '.':
|
|
||||||
g[r] = '.'
|
|
||||||
g[rn] = 'O'
|
|
||||||
moved = True
|
|
||||||
|
|
||||||
if second:
|
|
||||||
h = get_nth_elem(v, 1000000000)
|
|
||||||
os = fs[h]
|
|
||||||
for r, c in os:
|
|
||||||
s = g.n_rows - r
|
|
||||||
res += s
|
|
||||||
else:
|
|
||||||
for r, c in g.find('O'):
|
|
||||||
s = g.n_rows - r
|
|
||||||
res += s
|
|
||||||
return res
|
|
||||||
|
|
||||||
def main():
|
|
||||||
DAY_INPUT = "i14.txt"
|
|
||||||
|
|
||||||
print("Example 1:", solve(Input(EXAMPLE)))
|
|
||||||
print("Solution 1:", solve(Input(DAY_INPUT)))
|
|
||||||
# 5:55
|
|
||||||
|
|
||||||
print("Example 2:", solve(Input(EXAMPLE), True))
|
|
||||||
print("Solution 2:", solve(Input(DAY_INPUT), True))
|
|
||||||
# 48:00
|
|
||||||
|
|
||||||
if __name__ == "__main__":
|
|
||||||
main()
|
|
||||||
@@ -1,71 +0,0 @@
|
|||||||
from lib import *
|
|
||||||
from collections import OrderedDict
|
|
||||||
|
|
||||||
EXAMPLE = "rn=1,cm-,qp=3,cm=2,qp-,pc=4,ot=9,ab=5,pc-,pc=6,ot=7"
|
|
||||||
|
|
||||||
def hash(word):
|
|
||||||
# Init to 0
|
|
||||||
# Determine the ASCII code for the current character of the string.
|
|
||||||
# Increase the current value by the ASCII code you just determined. Set
|
|
||||||
# the current value to itself multiplied by 17. Set the current value to
|
|
||||||
# the remainder of dividing itself by 256.
|
|
||||||
h = 0
|
|
||||||
for c in word:
|
|
||||||
v = ord(c)
|
|
||||||
h += v
|
|
||||||
h *= 17
|
|
||||||
h %= 256
|
|
||||||
return h
|
|
||||||
|
|
||||||
def solve(input: Input, second=False):
|
|
||||||
res = 0
|
|
||||||
line = input.lines()[0]
|
|
||||||
for word in line.split(","):
|
|
||||||
h = hash(word)
|
|
||||||
res += h
|
|
||||||
|
|
||||||
if not second:
|
|
||||||
return res
|
|
||||||
|
|
||||||
boxes = [OrderedDict() for _ in range(256)]
|
|
||||||
for word in line.split(","):
|
|
||||||
h = hash(word)
|
|
||||||
if '=' in word:
|
|
||||||
label, focal = word.split('=')
|
|
||||||
box = boxes[hash(label)]
|
|
||||||
if label in box:
|
|
||||||
box[label] = (label, focal)
|
|
||||||
else:
|
|
||||||
box[label] = (label, focal)
|
|
||||||
elif '-' in word:
|
|
||||||
label = word.replace('-', '')
|
|
||||||
box = boxes[hash(label)]
|
|
||||||
if label in box:
|
|
||||||
del box[label]
|
|
||||||
else:
|
|
||||||
raise Exception()
|
|
||||||
|
|
||||||
res = 0
|
|
||||||
for i, b in enumerate(boxes):
|
|
||||||
for j, label in enumerate(b):
|
|
||||||
label, focal = b[label]
|
|
||||||
r = (i + 1) * (j + 1) * int(focal)
|
|
||||||
res += r
|
|
||||||
return res
|
|
||||||
|
|
||||||
def main():
|
|
||||||
DAY_INPUT = "i15.txt"
|
|
||||||
|
|
||||||
print("Example 1:", solve(Input(EXAMPLE)))
|
|
||||||
print("Solution 1:", solve(Input(DAY_INPUT)))
|
|
||||||
assert solve(Input(DAY_INPUT)) == 511343
|
|
||||||
# 4:30
|
|
||||||
|
|
||||||
print("Example 2:", solve(Input(EXAMPLE), True))
|
|
||||||
print("Solution 2:", solve(Input(DAY_INPUT), True))
|
|
||||||
assert solve(Input(DAY_INPUT), True) == 294474
|
|
||||||
# 31:20
|
|
||||||
return
|
|
||||||
|
|
||||||
if __name__ == "__main__":
|
|
||||||
main()
|
|
||||||
@@ -1,109 +0,0 @@
|
|||||||
import lib
|
|
||||||
|
|
||||||
EXAMPLE = r"""
|
|
||||||
.|...\....
|
|
||||||
|.-.\.....
|
|
||||||
.....|-...
|
|
||||||
........|.
|
|
||||||
..........
|
|
||||||
.........\
|
|
||||||
..../.\\..
|
|
||||||
.-.-/..|..
|
|
||||||
.|....-|.\
|
|
||||||
..//.|....
|
|
||||||
"""
|
|
||||||
|
|
||||||
NEW = {
|
|
||||||
'.': {
|
|
||||||
'w': (0, -1, 'w'),
|
|
||||||
'e': (0, 1, 'e'),
|
|
||||||
's': (1, 0, 's'),
|
|
||||||
'n': (-1, 0, 'n'),
|
|
||||||
},
|
|
||||||
'|': {
|
|
||||||
'w': [(1, 0, 's'), (-1, 0, 'n')],
|
|
||||||
'e': [(1, 0, 's'), (-1, 0, 'n')],
|
|
||||||
's': (1, 0, 's'),
|
|
||||||
'n': (-1, 0, 'n'),
|
|
||||||
},
|
|
||||||
'-': {
|
|
||||||
's': [(0, -1, 'w'), (0, 1, 'e')],
|
|
||||||
'n': [(0, -1, 'w'), (0, 1, 'e')],
|
|
||||||
'e': (0, 1, 'e'),
|
|
||||||
'w': (0, -1, 'w'),
|
|
||||||
},
|
|
||||||
'/': {
|
|
||||||
's': (0, -1, 'w'),
|
|
||||||
'n': (0, 1, 'e'),
|
|
||||||
'e': (-1, 0, 'n'),
|
|
||||||
'w': (1, 0, 's'),
|
|
||||||
},
|
|
||||||
'\\': {
|
|
||||||
's': (0, 1, 'e'),
|
|
||||||
'n': (0, -1, 'w'),
|
|
||||||
'e': (1, 0, 's'),
|
|
||||||
'w': (-1, 0, 'n'),
|
|
||||||
},
|
|
||||||
}
|
|
||||||
|
|
||||||
def solve(lines: list[str], second=False):
|
|
||||||
res = 0
|
|
||||||
|
|
||||||
g = list(map(list, lines))
|
|
||||||
|
|
||||||
rows = len(g)
|
|
||||||
cols = len(g[0])
|
|
||||||
|
|
||||||
if not second:
|
|
||||||
starts = [(0, 0, 'e')]
|
|
||||||
else:
|
|
||||||
starts = [(r, 0, 'e') for r in range(rows)]
|
|
||||||
starts += [(r, cols - 1, 'w') for r in range(rows)]
|
|
||||||
starts += [(0, c, 's') for c in range(cols)]
|
|
||||||
starts += [(rows - 1, c, 'n') for c in range(cols)]
|
|
||||||
|
|
||||||
for start in starts:
|
|
||||||
visited = set()
|
|
||||||
beams = [start]
|
|
||||||
while beams:
|
|
||||||
b = beams.pop()
|
|
||||||
row, col, d = b
|
|
||||||
visited.add((row, col, d))
|
|
||||||
|
|
||||||
f = g[row][col]
|
|
||||||
new = NEW[f][d]
|
|
||||||
if isinstance(new, tuple):
|
|
||||||
r, c, nd = new
|
|
||||||
nr = row + r
|
|
||||||
nc = col + c
|
|
||||||
if nr >= 0 and nc >= 0 and nr < rows and nc < cols:
|
|
||||||
if not (nr, nc, nd) in visited:
|
|
||||||
beams.append((nr, nc, nd))
|
|
||||||
else:
|
|
||||||
for r, c, nd in new:
|
|
||||||
nr = row + r
|
|
||||||
nc = col + c
|
|
||||||
if nr >= 0 and nc >= 0 and nr < rows and nc < cols:
|
|
||||||
if not (nr, nc, nd) in visited:
|
|
||||||
beams.append((nr, nc, nd))
|
|
||||||
|
|
||||||
v = set([(r, c) for (r, c, _) in list(visited)])
|
|
||||||
res = max(res, len(v))
|
|
||||||
return res
|
|
||||||
|
|
||||||
|
|
||||||
def main():
|
|
||||||
lines = lib.str_to_lines_no_empty(EXAMPLE)
|
|
||||||
print("Example 1:", solve(lines))
|
|
||||||
|
|
||||||
lines = lib.str_to_lines_no_empty(open("i16.txt").read())
|
|
||||||
print("Solution 1:", solve(lines))
|
|
||||||
|
|
||||||
lines = lib.str_to_lines_no_empty(EXAMPLE)
|
|
||||||
print("Example 2:", solve(lines, True))
|
|
||||||
|
|
||||||
lines = lib.str_to_lines_no_empty(open("i16.txt").read())
|
|
||||||
print("Solution 2:", solve(lines, True))
|
|
||||||
|
|
||||||
if __name__ == "__main__":
|
|
||||||
main()
|
|
||||||
@@ -1,71 +0,0 @@
|
|||||||
from lib import *
|
|
||||||
|
|
||||||
EXAMPLE = """
|
|
||||||
2413432311323
|
|
||||||
3215453535623
|
|
||||||
3255245654254
|
|
||||||
3446585845452
|
|
||||||
4546657867536
|
|
||||||
1438598798454
|
|
||||||
4457876987766
|
|
||||||
3637877979653
|
|
||||||
4654967986887
|
|
||||||
4564679986453
|
|
||||||
1224686865563
|
|
||||||
2546548887735
|
|
||||||
4322674655533
|
|
||||||
"""
|
|
||||||
|
|
||||||
def solve(i: Input, second=False):
|
|
||||||
g = i.grid2()
|
|
||||||
starts = [((0, 0), (0, None))]
|
|
||||||
|
|
||||||
def is_goal(node):
|
|
||||||
pos, _ = node
|
|
||||||
return pos == (g.n_cols - 1, g.n_rows - 1)
|
|
||||||
|
|
||||||
def neighbors(node):
|
|
||||||
pos, dirs = node
|
|
||||||
repeats, prev_dir = dirs
|
|
||||||
nbs = []
|
|
||||||
for dir in g.dirs_ort():
|
|
||||||
if second:
|
|
||||||
if repeats < 4 and prev_dir is not None and prev_dir != dir:
|
|
||||||
continue
|
|
||||||
if repeats == 10 and prev_dir == dir:
|
|
||||||
continue
|
|
||||||
else:
|
|
||||||
if repeats == 3 and prev_dir == dir:
|
|
||||||
continue
|
|
||||||
if prev_dir == g.flip_ort(dir):
|
|
||||||
continue
|
|
||||||
|
|
||||||
nb = add2(pos, dir)
|
|
||||||
if nb not in g:
|
|
||||||
continue
|
|
||||||
nbs.append((nb, (repeats + 1 if dir == prev_dir else 1, dir)))
|
|
||||||
return nbs
|
|
||||||
|
|
||||||
def h(node):
|
|
||||||
pos, _ = node
|
|
||||||
return abs(g.n_rows - 1 - pos[0]) + abs(g.n_cols - 1 - pos[1])
|
|
||||||
|
|
||||||
def d(_, b):
|
|
||||||
pos, _ = b
|
|
||||||
if pos == (0, 0):
|
|
||||||
return 0
|
|
||||||
return int(g[pos])
|
|
||||||
|
|
||||||
a = A_Star(starts, is_goal, h, d, neighbors)
|
|
||||||
return a.cost
|
|
||||||
|
|
||||||
def main():
|
|
||||||
DAY_INPUT = "i17.txt"
|
|
||||||
print("Example 1:", solve(Input(EXAMPLE)))
|
|
||||||
print("Solution 1:", solve(Input(DAY_INPUT)))
|
|
||||||
print("Example 2:", solve(Input(EXAMPLE), True))
|
|
||||||
print("Solution 2:", solve(Input(DAY_INPUT), True))
|
|
||||||
return
|
|
||||||
|
|
||||||
if __name__ == "__main__":
|
|
||||||
main()
|
|
||||||
@@ -1,143 +0,0 @@
|
|||||||
from lib import *
|
|
||||||
|
|
||||||
EXAMPLE = """
|
|
||||||
R 6 (#70c710)
|
|
||||||
D 5 (#0dc571)
|
|
||||||
L 2 (#5713f0)
|
|
||||||
D 2 (#d2c081)
|
|
||||||
R 2 (#59c680)
|
|
||||||
D 2 (#411b91)
|
|
||||||
L 5 (#8ceee2)
|
|
||||||
U 2 (#caa173)
|
|
||||||
L 1 (#1b58a2)
|
|
||||||
U 2 (#caa171)
|
|
||||||
R 2 (#7807d2)
|
|
||||||
U 3 (#a77fa3)
|
|
||||||
L 2 (#015232)
|
|
||||||
U 2 (#7a21e3)
|
|
||||||
"""
|
|
||||||
|
|
||||||
m = {
|
|
||||||
"R": Grid2D.E,
|
|
||||||
"D": Grid2D.S,
|
|
||||||
"L": Grid2D.W,
|
|
||||||
"U": Grid2D.N,
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
def solve(i: Input, second=False):
|
|
||||||
lines = i.lines()
|
|
||||||
ins = []
|
|
||||||
for l in lines:
|
|
||||||
if not l:
|
|
||||||
continue
|
|
||||||
d, l, c = l.split()
|
|
||||||
ins.append((int(l), m[d]))
|
|
||||||
|
|
||||||
c = (0, 0)
|
|
||||||
coords: list[tuple[int, int]] = [c]
|
|
||||||
for count, d in ins:
|
|
||||||
for _ in range(count):
|
|
||||||
c = add2(c, d)
|
|
||||||
coords.append(c)
|
|
||||||
|
|
||||||
to_visit: list[tuple[int, int]] = [(1, 1)]
|
|
||||||
while to_visit:
|
|
||||||
c = to_visit.pop()
|
|
||||||
for n in [Grid2D.S, Grid2D.E, Grid2D.W, Grid2D.N]:
|
|
||||||
nc = add2(c, n)
|
|
||||||
if nc not in coords:
|
|
||||||
coords.append(nc)
|
|
||||||
to_visit.append(nc)
|
|
||||||
return len(set(coords))
|
|
||||||
|
|
||||||
def area(ins):
|
|
||||||
c = (0, 0)
|
|
||||||
corners = []
|
|
||||||
for i, (count, d) in enumerate(ins):
|
|
||||||
c = (c[0] + count * d[0], c[1] + count * d[1])
|
|
||||||
nd = ins[(i + 1) % len(ins)][1]
|
|
||||||
|
|
||||||
if d == nd:
|
|
||||||
raise Exception("Dirs should not be equal!")
|
|
||||||
|
|
||||||
# XXX: This mapping only works when going clockwise!
|
|
||||||
match d, nd:
|
|
||||||
case Grid2D.W, Grid2D.N:
|
|
||||||
c_log = (c[0] + 1, c[1])
|
|
||||||
case Grid2D.W, Grid2D.S:
|
|
||||||
c_log = (c[0] + 1, c[1] + 1)
|
|
||||||
case Grid2D.E, Grid2D.N:
|
|
||||||
c_log = (c[0], c[1])
|
|
||||||
case Grid2D.E, Grid2D.S:
|
|
||||||
c_log = (c[0], c[1] + 1)
|
|
||||||
case Grid2D.N, Grid2D.E:
|
|
||||||
c_log = (c[0], c[1])
|
|
||||||
case Grid2D.N, Grid2D.W:
|
|
||||||
c_log = (c[0] + 1, c[1])
|
|
||||||
case Grid2D.S, Grid2D.E:
|
|
||||||
c_log = (c[0], c[1] + 1)
|
|
||||||
case Grid2D.S, Grid2D.W:
|
|
||||||
c_log = (c[0] + 1, c[1] + 1)
|
|
||||||
case d, nd:
|
|
||||||
raise Exception(f"Uncoverred {d=} -> {nd=}")
|
|
||||||
corners.append(c_log)
|
|
||||||
return int(shoelace_area(corners))
|
|
||||||
|
|
||||||
|
|
||||||
def area2(ins):
|
|
||||||
# Solution based on Shoelace area and the idea that the outside area is
|
|
||||||
# perimate * 1 // 2, and then +1 (for four quarter corners). All other
|
|
||||||
# corners cancel out to zero.
|
|
||||||
c = (0, 0)
|
|
||||||
corners = []
|
|
||||||
perimeter = 0
|
|
||||||
for i, (count, d) in enumerate(ins):
|
|
||||||
c = (c[0] + count * d[0], c[1] + count * d[1])
|
|
||||||
corners.append(c)
|
|
||||||
perimeter += count
|
|
||||||
return int(shoelace_area(corners)) + perimeter // 2 + 1
|
|
||||||
|
|
||||||
|
|
||||||
def solve2(i: Input, second=False):
|
|
||||||
lines = i.lines()
|
|
||||||
ins = []
|
|
||||||
for line in lines:
|
|
||||||
if not line:
|
|
||||||
continue
|
|
||||||
_, _, c = line.split()
|
|
||||||
c = c.replace("(#", "").replace(")", "")
|
|
||||||
d = int(c[:5], 16)
|
|
||||||
m = {"0": Grid2D.E, "1": Grid2D.S, "2": Grid2D.W, "3": Grid2D.N}[c[5]]
|
|
||||||
ins.append((d, m))
|
|
||||||
assert area(ins) == area2(ins)
|
|
||||||
return area(ins)
|
|
||||||
|
|
||||||
|
|
||||||
def debug():
|
|
||||||
ins = [
|
|
||||||
( 3, Grid2D.S,),
|
|
||||||
( 2, Grid2D.E,),
|
|
||||||
( 1, Grid2D.N,),
|
|
||||||
( 1, Grid2D.E,),
|
|
||||||
( 1, Grid2D.N,),
|
|
||||||
( 1, Grid2D.W,),
|
|
||||||
( 1, Grid2D.N,),
|
|
||||||
( 2, Grid2D.W,),
|
|
||||||
]
|
|
||||||
# Should be 14 but is 2 because it's going counter-clockwise, but mapping
|
|
||||||
# only works for clockwise.
|
|
||||||
print(area(ins))
|
|
||||||
|
|
||||||
|
|
||||||
def main():
|
|
||||||
DAY_INPUT = "i18.txt"
|
|
||||||
print("Example 1:", solve(Input(EXAMPLE)))
|
|
||||||
print("Solution 1:", solve(Input(DAY_INPUT)))
|
|
||||||
print("Example 2:", solve2(Input(EXAMPLE), True))
|
|
||||||
print("Solution 2:", solve2(Input(DAY_INPUT), True))
|
|
||||||
return
|
|
||||||
|
|
||||||
|
|
||||||
if __name__ == "__main__":
|
|
||||||
main()
|
|
||||||
@@ -1,148 +0,0 @@
|
|||||||
from lib import *
|
|
||||||
|
|
||||||
EXAMPLE = """px{a<2006:qkq,m>2090:A,rfg}
|
|
||||||
pv{a>1716:R,A}
|
|
||||||
lnx{m>1548:A,A}
|
|
||||||
rfg{s<537:gd,x>2440:R,A}
|
|
||||||
qs{s>3448:A,lnx}
|
|
||||||
qkq{x<1416:A,crn}
|
|
||||||
crn{x>2662:A,R}
|
|
||||||
in{s<1351:px,qqz}
|
|
||||||
qqz{s>2770:qs,m<1801:hdj,R}
|
|
||||||
gd{a>3333:R,R}
|
|
||||||
hdj{m>838:A,pv}
|
|
||||||
|
|
||||||
{x=787,m=2655,a=1222,s=2876}
|
|
||||||
{x=1679,m=44,a=2067,s=496}
|
|
||||||
{x=2036,m=264,a=79,s=2244}
|
|
||||||
{x=2461,m=1339,a=466,s=291}
|
|
||||||
{x=2127,m=1623,a=2188,s=1013}
|
|
||||||
"""
|
|
||||||
|
|
||||||
def solve(i: Input, second=False):
|
|
||||||
res = 0
|
|
||||||
ps = i.paras()
|
|
||||||
wfs, parts = ps
|
|
||||||
wfs = wfs.splitlines()
|
|
||||||
parts = parts.splitlines()
|
|
||||||
|
|
||||||
workflows = {}
|
|
||||||
for w in wfs:
|
|
||||||
name, ins = w.split("{")
|
|
||||||
ins = ins.replace("}", "")
|
|
||||||
conds = ins.split(",")
|
|
||||||
wf = []
|
|
||||||
for cond in conds[:-1]:
|
|
||||||
cmp, n = cond.split(":")
|
|
||||||
if '<' in cmp:
|
|
||||||
a, b = cmp.split('<')
|
|
||||||
wf.append((a, 'smaller', int(b), n))
|
|
||||||
elif '>' in cmp:
|
|
||||||
a, b = cmp.split('>')
|
|
||||||
wf.append((a, 'greater', int(b), n))
|
|
||||||
else:
|
|
||||||
raise Exception()
|
|
||||||
wf.append(conds[-1:])
|
|
||||||
workflows[name] = wf
|
|
||||||
|
|
||||||
def parse_part(part):
|
|
||||||
d = {}
|
|
||||||
p = part.replace("{", "").replace("}", "")
|
|
||||||
for pair in p.split(","):
|
|
||||||
a, b = pair.split("=")
|
|
||||||
d[a] = int(b)
|
|
||||||
return d
|
|
||||||
|
|
||||||
parts = list(map(parse_part, parts))
|
|
||||||
if not second:
|
|
||||||
for p in parts:
|
|
||||||
current = 'in'
|
|
||||||
while current not in ['A', 'R']:
|
|
||||||
for inst in workflows[current]:
|
|
||||||
if len(inst) == 4:
|
|
||||||
letter = inst[0]
|
|
||||||
value = inst[2]
|
|
||||||
next = inst[3]
|
|
||||||
if inst[1] == 'smaller':
|
|
||||||
if p[letter] < value:
|
|
||||||
current = next
|
|
||||||
break
|
|
||||||
elif inst[1] == 'greater':
|
|
||||||
if p[letter] > value:
|
|
||||||
current = next
|
|
||||||
break
|
|
||||||
else:
|
|
||||||
raise Exception()
|
|
||||||
elif len(inst) == 1:
|
|
||||||
current = inst[0]
|
|
||||||
else:
|
|
||||||
raise Exception()
|
|
||||||
if current == 'A':
|
|
||||||
r = sum(p.values())
|
|
||||||
res += r
|
|
||||||
return res
|
|
||||||
|
|
||||||
ranges = [{c: (1, 4000) for c in 'xmas'}]
|
|
||||||
ranges[0]['cur'] = 'in'
|
|
||||||
ranges[0]['idx'] = 0
|
|
||||||
accepted = []
|
|
||||||
while ranges:
|
|
||||||
r = ranges.pop()
|
|
||||||
cur, idx = r['cur'], r['idx']
|
|
||||||
|
|
||||||
if cur == 'A':
|
|
||||||
accepted.append(r)
|
|
||||||
continue
|
|
||||||
elif cur == 'R':
|
|
||||||
continue
|
|
||||||
|
|
||||||
inst = workflows[cur][idx]
|
|
||||||
if len(inst) == 4:
|
|
||||||
letter = inst[0]
|
|
||||||
value = inst[2]
|
|
||||||
nxt = inst[3]
|
|
||||||
ro = r[letter]
|
|
||||||
r1, r2 = dict(r), dict(r)
|
|
||||||
if inst[1] == 'smaller':
|
|
||||||
r1[letter] = (ro[0], value - 1)
|
|
||||||
r1['idx'] = 0
|
|
||||||
r1['cur'] = nxt
|
|
||||||
r2[letter] = (value, ro[1])
|
|
||||||
r2['idx'] += 1
|
|
||||||
elif inst[1] == 'greater':
|
|
||||||
r1[letter] = (ro[0], value)
|
|
||||||
r1['idx'] += 1
|
|
||||||
r2[letter] = (value + 1, ro[1])
|
|
||||||
r2['idx'] = 0
|
|
||||||
r2['cur'] = nxt
|
|
||||||
if r1[letter][1] >= r1[letter][0]:
|
|
||||||
ranges.append(r1)
|
|
||||||
if r2[letter][1] >= r2[letter][0]:
|
|
||||||
ranges.append(r2)
|
|
||||||
elif len(inst) == 1:
|
|
||||||
r['cur'] = inst[0]
|
|
||||||
r['idx'] = 0
|
|
||||||
ranges.append(r)
|
|
||||||
res = 0
|
|
||||||
for a in accepted:
|
|
||||||
r = 1
|
|
||||||
for c in 'xmas':
|
|
||||||
l, u = a[c]
|
|
||||||
r *= (u + 1 - l)
|
|
||||||
res += r
|
|
||||||
return res
|
|
||||||
|
|
||||||
def main():
|
|
||||||
DAY_INPUT = "i19.txt"
|
|
||||||
|
|
||||||
print("Example 1:", solve(Input(EXAMPLE)))
|
|
||||||
print("Solution 1:", solve(Input(DAY_INPUT)))
|
|
||||||
# 25:00
|
|
||||||
|
|
||||||
print("Example 2:", solve(Input(EXAMPLE), True))
|
|
||||||
assert solve(Input(EXAMPLE), True) == 167409079868000
|
|
||||||
print("Solution 2:", solve(Input(DAY_INPUT), True))
|
|
||||||
# 120:00
|
|
||||||
|
|
||||||
if __name__ == "__main__":
|
|
||||||
main()
|
|
||||||
@@ -1,109 +0,0 @@
|
|||||||
from lib import *
|
|
||||||
from math import lcm
|
|
||||||
from collections import deque
|
|
||||||
|
|
||||||
EXAMPLE = """
|
|
||||||
broadcaster -> a, b, c
|
|
||||||
%a -> b
|
|
||||||
%b -> c
|
|
||||||
%c -> inv
|
|
||||||
&inv -> a
|
|
||||||
"""
|
|
||||||
|
|
||||||
EXAMPLE2 = """
|
|
||||||
broadcaster -> a
|
|
||||||
%a -> inv, con
|
|
||||||
&inv -> b
|
|
||||||
%b -> con
|
|
||||||
&con -> output
|
|
||||||
"""
|
|
||||||
|
|
||||||
def visualize(modules):
|
|
||||||
with open("g20.dot", 'w') as f:
|
|
||||||
f.write("digraph G {\n")
|
|
||||||
for m in modules.values():
|
|
||||||
for cm in m[3]:
|
|
||||||
f.write(" " + m[1] + ' -> ' + cm + "\n")
|
|
||||||
f.write("}")
|
|
||||||
|
|
||||||
def solve(input: Input, second=False):
|
|
||||||
modules = {}
|
|
||||||
for line in input.lines():
|
|
||||||
if not line: continue
|
|
||||||
src, dsts = line.split(" -> ")
|
|
||||||
dsts = dsts.split(", ")
|
|
||||||
if src.startswith("%"): # flip-flop
|
|
||||||
modules[src[1:]] = [src[0], src[1:], 0, dsts]
|
|
||||||
elif src.startswith("&"): # conjunction
|
|
||||||
modules[src[1:]] = [src[0], src[1:], {}, dsts]
|
|
||||||
elif src.startswith("broadcaster"):
|
|
||||||
modules[src] = ["b", src, 0, dsts]
|
|
||||||
else:
|
|
||||||
raise Exception()
|
|
||||||
|
|
||||||
for m in modules.values():
|
|
||||||
for d in m[3]:
|
|
||||||
if d in modules and modules[d][0] == "&":
|
|
||||||
modules[d][2][m[1]] = 0
|
|
||||||
|
|
||||||
if second:
|
|
||||||
# visualize(modules)
|
|
||||||
(feed,) = [m[1] for m in modules.values() if "rx" in m[3]]
|
|
||||||
periods = {d: [] for d in modules[feed][2].keys()}
|
|
||||||
BUTTON_PUSHES = 10000
|
|
||||||
else:
|
|
||||||
BUTTON_PUSHES = 1000
|
|
||||||
|
|
||||||
lo, hi = 0, 0
|
|
||||||
for i in range(BUTTON_PUSHES):
|
|
||||||
qs = deque([("button module", "broadcaster", 0)])
|
|
||||||
while qs:
|
|
||||||
src, dst, sig = qs.popleft()
|
|
||||||
|
|
||||||
if sig == 0:
|
|
||||||
lo += 1
|
|
||||||
else:
|
|
||||||
hi += 1
|
|
||||||
|
|
||||||
if not dst in modules:
|
|
||||||
continue
|
|
||||||
|
|
||||||
m = modules[dst]
|
|
||||||
new_pulse = None
|
|
||||||
if m[0] == "b":
|
|
||||||
new_pulse = 0
|
|
||||||
elif m[0] == "%":
|
|
||||||
if sig == 0:
|
|
||||||
m[2] = (m[2] + 1) % 2
|
|
||||||
new_pulse = m[2]
|
|
||||||
elif m[0] == "&":
|
|
||||||
m[2][src] = sig
|
|
||||||
if all(s == 1 for s in m[2].values()):
|
|
||||||
new_pulse = 0
|
|
||||||
else:
|
|
||||||
new_pulse = 1
|
|
||||||
else:
|
|
||||||
raise Exception()
|
|
||||||
|
|
||||||
if new_pulse is not None:
|
|
||||||
for nxtdst in m[3]:
|
|
||||||
if second and nxtdst == feed and new_pulse == 1:
|
|
||||||
# print(f"{i:>4}: {dst[:4]:>4} -{new_pulse}> {nxtdst}")
|
|
||||||
periods[dst].append(i)
|
|
||||||
qs.append((dst, nxtdst, new_pulse))
|
|
||||||
if second:
|
|
||||||
# print(periods)
|
|
||||||
# Yeah, we got a bit lucky that this works, I guess, but it does.
|
|
||||||
return lcm(*[v[1] - v[0] for v in periods.values()])
|
|
||||||
return lo * hi
|
|
||||||
|
|
||||||
def main():
|
|
||||||
DAY_INPUT = "i20.txt"
|
|
||||||
print("Example 1:", solve(Input(EXAMPLE)))
|
|
||||||
print("Example 2:", solve(Input(EXAMPLE2)))
|
|
||||||
print("Solution 1:", solve(Input(DAY_INPUT)))
|
|
||||||
print("Solution 2:", solve(Input(DAY_INPUT), True))
|
|
||||||
assert solve(Input(DAY_INPUT), True) == 244178746156661
|
|
||||||
|
|
||||||
if __name__ == "__main__":
|
|
||||||
main()
|
|
||||||
@@ -1,213 +0,0 @@
|
|||||||
from lib import *
|
|
||||||
import os
|
|
||||||
|
|
||||||
EXAMPLE = """...........
|
|
||||||
.....###.#.
|
|
||||||
.###.##..#.
|
|
||||||
..#.#...#..
|
|
||||||
....#.#....
|
|
||||||
.##..S####.
|
|
||||||
.##..#...#.
|
|
||||||
.......##..
|
|
||||||
.##.#.####.
|
|
||||||
.##..##.##.
|
|
||||||
...........
|
|
||||||
"""
|
|
||||||
|
|
||||||
def solve(input: Input):
|
|
||||||
g = input.grid2()
|
|
||||||
s = g.find('S')[0]
|
|
||||||
g[s] = 'O'
|
|
||||||
steps = 64
|
|
||||||
seen = set()
|
|
||||||
for i in range(steps):
|
|
||||||
os = tuple(g.find('O'))
|
|
||||||
if os in seen:
|
|
||||||
seen.add(os)
|
|
||||||
print(f"SEEN {i}")
|
|
||||||
break
|
|
||||||
|
|
||||||
for o in os:
|
|
||||||
g[o] = '.'
|
|
||||||
|
|
||||||
for o in os:
|
|
||||||
for nb in g.neighbors_ort(o):
|
|
||||||
if not g[nb] == "#":
|
|
||||||
g[nb] = 'O'
|
|
||||||
return len(g.find('O'))
|
|
||||||
|
|
||||||
|
|
||||||
def plot(xs, poss):
|
|
||||||
os.system("clear")
|
|
||||||
rcoords = [x[0] for x in xs]
|
|
||||||
ccoords = [x[1] for x in xs]
|
|
||||||
rmin = min(rcoords)
|
|
||||||
rmax = max(rcoords)
|
|
||||||
cmin = min(ccoords)
|
|
||||||
cmax = max(ccoords)
|
|
||||||
for r in range(rmin, rmax + 1):
|
|
||||||
s = ""
|
|
||||||
for c in range(cmin, cmax + 1):
|
|
||||||
if (r, c) in xs:
|
|
||||||
s += "#"
|
|
||||||
elif (r, c) in poss:
|
|
||||||
s += "O"
|
|
||||||
else:
|
|
||||||
s += " "
|
|
||||||
print(s)
|
|
||||||
|
|
||||||
def move(xs, roff, coff):
|
|
||||||
rcoords = [x[0] for x in xs]
|
|
||||||
ccoords = [x[1] for x in xs]
|
|
||||||
rd = max(rcoords) - min(rcoords) + 3
|
|
||||||
cd = max(ccoords) - min(ccoords) + 3
|
|
||||||
newxs = [(x[0] + roff * rd, x[1] + coff * cd) for x in xs]
|
|
||||||
return set(newxs)
|
|
||||||
|
|
||||||
def iter(poss, stones):
|
|
||||||
nposs = set()
|
|
||||||
for r, c in poss:
|
|
||||||
for ro, co in [(-1, 0), (0, 1), (1, 0), (0, -1)]:
|
|
||||||
nr, nc = r + ro, c + co
|
|
||||||
if not (nr, nc) in stones:
|
|
||||||
nposs.add((nr, nc))
|
|
||||||
return nposs
|
|
||||||
|
|
||||||
def get_bounds(size, ro, co):
|
|
||||||
rmin = size * ro
|
|
||||||
rmax = size + size * ro
|
|
||||||
cmin = size * co
|
|
||||||
cmax = size + size * co
|
|
||||||
return rmin, rmax, cmin, cmax
|
|
||||||
|
|
||||||
def count(poss, size, ro, co):
|
|
||||||
rmin, rmax, cmin, cmax = get_bounds(size, ro, co)
|
|
||||||
res = 0
|
|
||||||
for (r, c) in poss:
|
|
||||||
if (rmin <= r < rmax) and (cmin <= c < cmax):
|
|
||||||
res += 1
|
|
||||||
return res
|
|
||||||
|
|
||||||
def solve2(ip: Input):
|
|
||||||
base_stones = set()
|
|
||||||
poss = set()
|
|
||||||
|
|
||||||
size = len(ip.lines())
|
|
||||||
assert size == len(ip.lines()[0])
|
|
||||||
|
|
||||||
for r, row in enumerate(ip.lines()):
|
|
||||||
for c, col in enumerate(row):
|
|
||||||
if col == "#":
|
|
||||||
base_stones.add((r, c))
|
|
||||||
if col == "S":
|
|
||||||
poss.add((r, c))
|
|
||||||
|
|
||||||
stones = base_stones.copy()
|
|
||||||
|
|
||||||
off = 19 // 2
|
|
||||||
for ro in range(-off, off + 1):
|
|
||||||
for co in range(-off, off + 1):
|
|
||||||
stones |= move(base_stones, ro, co)
|
|
||||||
|
|
||||||
|
|
||||||
hists = {}
|
|
||||||
for ro in range(-off, off + 1):
|
|
||||||
for co in range(-off, off + 1):
|
|
||||||
hists[(ro, co)] = []
|
|
||||||
|
|
||||||
#for step in range(590):
|
|
||||||
# if step % 1 == 0:
|
|
||||||
# sanity = 0
|
|
||||||
# os.system("clear")
|
|
||||||
# for ro in range(-off, off + 1):
|
|
||||||
# s = ""
|
|
||||||
# for co in range(-off, off + 1):
|
|
||||||
# v = count(poss, size, ro, co)
|
|
||||||
# sanity += v
|
|
||||||
# if v > 0:
|
|
||||||
# hists[(ro, co)].append(v)
|
|
||||||
# s += f"{v:6}"
|
|
||||||
# else:
|
|
||||||
# s += 6 * " "
|
|
||||||
# print(s)
|
|
||||||
# # input(f"{step=} {step//size=} {len(poss)} ({sanity}) cont...")
|
|
||||||
# print(f"{step=} {step//size=} {len(poss)} ({sanity}) cont...")
|
|
||||||
# poss = iter(poss, stones)
|
|
||||||
|
|
||||||
# 66, 197, 328 459 # cycle starts
|
|
||||||
# 196, 327, 458, 589 # targets
|
|
||||||
def calc(len, xs):
|
|
||||||
if len % 2 == 0:
|
|
||||||
return len // 2 * sum(xs)
|
|
||||||
else:
|
|
||||||
return len // 2 * sum(xs) + xs[0]
|
|
||||||
|
|
||||||
target = 196
|
|
||||||
target = 327
|
|
||||||
target = 458
|
|
||||||
target = 589
|
|
||||||
target = 26501365
|
|
||||||
# for target in [196, 327, 458, 589]:
|
|
||||||
print()
|
|
||||||
print(target)
|
|
||||||
cycle = 131
|
|
||||||
c = target // cycle
|
|
||||||
d = (target // cycle) * 2 + 1 - 2
|
|
||||||
print(f"{c=} {d=}")
|
|
||||||
res = 0
|
|
||||||
res += 5698 + 5703 + 5709 + 5704 # corners
|
|
||||||
res += c * 964 + c * 984 + c * 968 + c * 978 # outer
|
|
||||||
res += (c - 1) * 6637 + (c - 1) * 6624 + (c - 1) * 6643 + (c - 1) * 6619 # inner
|
|
||||||
|
|
||||||
for i in range(d, 0, -2):
|
|
||||||
res += calc(i, [7623, 7558])
|
|
||||||
|
|
||||||
for i in range(d - 2, 0, -2):
|
|
||||||
res += calc(i, [7623, 7558])
|
|
||||||
|
|
||||||
print(res)
|
|
||||||
return res
|
|
||||||
|
|
||||||
# def get_till(xs, ts):
|
|
||||||
# ts = ts[:]
|
|
||||||
# r = []
|
|
||||||
# for x in xs:
|
|
||||||
# r.append(x)
|
|
||||||
# if x in ts:
|
|
||||||
# ts.remove(x)
|
|
||||||
# if ts == []:
|
|
||||||
# break
|
|
||||||
# return r
|
|
||||||
|
|
||||||
osz_values = hists[(0, 4)][-2:]
|
|
||||||
# se = get_till(hists[0, 5], osz_values)
|
|
||||||
# sn = get_till(hists[-5, 0], osz_values)
|
|
||||||
# ss = get_till(hists[5, 0], osz_values)
|
|
||||||
# sw = get_till(hists[0, -5], osz_values)
|
|
||||||
# print(se)
|
|
||||||
# print(sn)
|
|
||||||
# print(sw)
|
|
||||||
# print(ss)
|
|
||||||
|
|
||||||
# sne = get_till(hists[-5, 5], osz_values)
|
|
||||||
# sse = get_till(hists[5, 5], osz_values)
|
|
||||||
# ssw = get_till(hists[5, -5], osz_values)
|
|
||||||
# snw = get_till(hists[-5, -5], osz_values)
|
|
||||||
# print(sne)
|
|
||||||
# print(sse)
|
|
||||||
# print(ssw)
|
|
||||||
# print(snw)
|
|
||||||
|
|
||||||
# for i in range(3, 10):
|
|
||||||
# print(hists[(0, i)][:5])
|
|
||||||
# print(hists[(0, -i)][:5])
|
|
||||||
|
|
||||||
def main():
|
|
||||||
DAY_INPUT = "i21.txt"
|
|
||||||
# print("Example 1:", solve(Input(EXAMPLE)))
|
|
||||||
# print("Solution 1:", solve(Input(DAY_INPUT)))
|
|
||||||
# print("Example 2:", solve2(Input(EXAMPLE)))
|
|
||||||
print("Solution 2:", solve2(Input(DAY_INPUT)))
|
|
||||||
|
|
||||||
if __name__ == "__main__":
|
|
||||||
main()
|
|
||||||
@@ -1,121 +0,0 @@
|
|||||||
from lib import *
|
|
||||||
|
|
||||||
EXAMPLE = """1,0,1~1,2,1
|
|
||||||
0,0,2~2,0,2
|
|
||||||
0,2,3~2,2,3
|
|
||||||
0,0,4~0,2,4
|
|
||||||
2,0,5~2,2,5
|
|
||||||
0,1,6~2,1,6
|
|
||||||
1,1,8~1,1,9
|
|
||||||
"""
|
|
||||||
|
|
||||||
def overlap(a, b):
|
|
||||||
# Could be made generic with for loop.
|
|
||||||
[(ax1, ax2), (ay1, ay2), (az1, az2)] = a
|
|
||||||
[(bx1, bx2), (by1, by2), (bz1, bz2)] = b
|
|
||||||
xo = (bx1 <= ax2 and bx2 >= ax1)
|
|
||||||
yo = (by1 <= ay2 and by2 >= ay1)
|
|
||||||
zo = (bz1 <= az2 and bz2 >= az1)
|
|
||||||
return xo and yo and zo
|
|
||||||
|
|
||||||
def can_overlap(a, b):
|
|
||||||
a, b = list(a), list(b)
|
|
||||||
za1, za2 = a[2]
|
|
||||||
zb1, zb2 = b[2]
|
|
||||||
|
|
||||||
zad = za1 - 1
|
|
||||||
a[2] = (za1 - zad, za2 - zad)
|
|
||||||
|
|
||||||
zbd = zb1 - 1
|
|
||||||
b[2] = (zb1 - zbd, zb2 - zbd)
|
|
||||||
return overlap(a, b)
|
|
||||||
|
|
||||||
def solve(input: Input, second=False):
|
|
||||||
bricks = []
|
|
||||||
for line in input.lines():
|
|
||||||
s = tuple(str_to_ints(line))
|
|
||||||
s = tuple([tuple(sorted([s[i], s[i + 3]])) for i in range(3)])
|
|
||||||
bricks.append(s)
|
|
||||||
|
|
||||||
# Check which bricks can overlap in general
|
|
||||||
d = {i: [] for i in range(len(bricks))}
|
|
||||||
for a in range(len(bricks)):
|
|
||||||
for b in range(a + 1, len(bricks)):
|
|
||||||
if can_overlap(bricks[a], bricks[b]):
|
|
||||||
# print(f"{bricks[a]} can overlap with {bricks[b]}")
|
|
||||||
d[a].append(b)
|
|
||||||
d[b].append(a)
|
|
||||||
|
|
||||||
# Lower bricks as much as possible
|
|
||||||
idxs = sorted(range(len(bricks)), key=lambda i: bricks[i][2][1])
|
|
||||||
for idx_active_idx, idx_active in enumerate(idxs):
|
|
||||||
b = list(bricks[idx_active])
|
|
||||||
lowest_z = 1
|
|
||||||
for idx_to_check in idxs[:idx_active_idx]:
|
|
||||||
if idx_to_check in d[idx_active]:
|
|
||||||
lowest_z = max(lowest_z, bricks[idx_to_check][2][1] + 1)
|
|
||||||
zp = list(b[2])
|
|
||||||
zp[0], zp[1] = lowest_z, zp[1] - (zp[0] - lowest_z)
|
|
||||||
b[2] = tuple(zp)
|
|
||||||
# print(f"{bricks[idx_active]} -> {b}")
|
|
||||||
bricks[idx_active] = b
|
|
||||||
|
|
||||||
# for l, b in zip(LETTERS_UPPER, bricks): print(l, b)
|
|
||||||
|
|
||||||
if second:
|
|
||||||
# Create a map that for each objects, shows what objects it is
|
|
||||||
# supported by.
|
|
||||||
supported_by = {i: set() for i in range(len(bricks))}
|
|
||||||
for i in range(len(bricks)):
|
|
||||||
b = bricks[i]
|
|
||||||
zl = b[2][0]
|
|
||||||
if zl == 1:
|
|
||||||
supported_by[i].add(-1)
|
|
||||||
for ni in d[i]:
|
|
||||||
if bricks[ni][2][1] + 1 == zl:
|
|
||||||
supported_by[i].add(ni)
|
|
||||||
|
|
||||||
res = 0
|
|
||||||
for i in range(len(bricks)):
|
|
||||||
removed = set([i])
|
|
||||||
to_process = [i]
|
|
||||||
while to_process:
|
|
||||||
ri = to_process.pop()
|
|
||||||
for ni in d[ri]:
|
|
||||||
if supported_by[ni].issubset(removed) and not ni in removed:
|
|
||||||
removed.add(ni)
|
|
||||||
to_process.append(ni)
|
|
||||||
res += len(removed) - 1
|
|
||||||
return res
|
|
||||||
|
|
||||||
else:
|
|
||||||
support_map = {i: [] for i in range(len(bricks))}
|
|
||||||
support_bricks = set()
|
|
||||||
# For all bricks, check if it would fall if a particular brick was removed.
|
|
||||||
for i in range(len(bricks)):
|
|
||||||
b = bricks[i]
|
|
||||||
zl = b[2][0]
|
|
||||||
if zl == 1:
|
|
||||||
continue # supported by floor
|
|
||||||
|
|
||||||
for ni in d[i]:
|
|
||||||
if bricks[ni][2][1] + 1 == zl:
|
|
||||||
support_map[i].append(ni)
|
|
||||||
if len(support_map[i]) == 1:
|
|
||||||
support_bricks.add(support_map[i][0])
|
|
||||||
# print(f"{bricks[i]} supported by {support_map[i]}")
|
|
||||||
return len(bricks) - len(support_bricks)
|
|
||||||
|
|
||||||
def main():
|
|
||||||
DAY_INPUT = "i22.txt"
|
|
||||||
|
|
||||||
print("Example 1:", solve(Input(EXAMPLE)))
|
|
||||||
print("Solution 1:", solve(Input(DAY_INPUT)))
|
|
||||||
assert solve(Input(DAY_INPUT)) == 428
|
|
||||||
|
|
||||||
print("Example 2:", solve(Input(EXAMPLE), True))
|
|
||||||
print("Solution 2:", solve(Input(DAY_INPUT), True))
|
|
||||||
assert solve(Input(DAY_INPUT), True) == 35654
|
|
||||||
|
|
||||||
if __name__ == "__main__":
|
|
||||||
main()
|
|
||||||
@@ -1,146 +0,0 @@
|
|||||||
from lib import *
|
|
||||||
from collections import deque
|
|
||||||
|
|
||||||
EXAMPLE = """#.#####################
|
|
||||||
#.......#########...###
|
|
||||||
#######.#########.#.###
|
|
||||||
###.....#.>.>.###.#.###
|
|
||||||
###v#####.#v#.###.#.###
|
|
||||||
###.>...#.#.#.....#...#
|
|
||||||
###v###.#.#.#########.#
|
|
||||||
###...#.#.#.......#...#
|
|
||||||
#####.#.#.#######.#.###
|
|
||||||
#.....#.#.#.......#...#
|
|
||||||
#.#####.#.#.#########v#
|
|
||||||
#.#...#...#...###...>.#
|
|
||||||
#.#.#v#######v###.###v#
|
|
||||||
#...#.>.#...>.>.#.###.#
|
|
||||||
#####v#.#.###v#.#.###.#
|
|
||||||
#.....#...#...#.#.#...#
|
|
||||||
#.#########.###.#.#.###
|
|
||||||
#...###...#...#...#.###
|
|
||||||
###.###.#.###v#####v###
|
|
||||||
#...#...#.#.>.>.#.>.###
|
|
||||||
#.###.###.#.###.#.#v###
|
|
||||||
#.....###...###...#...#
|
|
||||||
#####################.#
|
|
||||||
"""
|
|
||||||
|
|
||||||
SLOPES = {
|
|
||||||
"^": (-1, 0),
|
|
||||||
">": (0, 1),
|
|
||||||
"v": (1, 0),
|
|
||||||
"<": (0, -1),
|
|
||||||
}
|
|
||||||
|
|
||||||
def first(input):
|
|
||||||
g = input.grid2()
|
|
||||||
start = (0, 1)
|
|
||||||
end = (g.n_rows - 1, g.n_cols - 2)
|
|
||||||
longest = 0
|
|
||||||
paths = [(set([start]), start)]
|
|
||||||
while True:
|
|
||||||
new_paths = []
|
|
||||||
for p in paths:
|
|
||||||
hist, pos = p
|
|
||||||
for d in g.COORDS_ORTH:
|
|
||||||
nb = add2(pos, d)
|
|
||||||
if nb[0] < 0 or nb[0] >= g.n_rows or nb[1] < 0 or nb[1] >= g.n_cols:
|
|
||||||
continue
|
|
||||||
c = g[nb]
|
|
||||||
if c in SLOPES.keys() and d != SLOPES[c]:
|
|
||||||
continue
|
|
||||||
if c == "#" or nb in hist:
|
|
||||||
continue
|
|
||||||
if nb == end:
|
|
||||||
l = len(hist)
|
|
||||||
if l > longest:
|
|
||||||
longest = l
|
|
||||||
continue
|
|
||||||
nhist = hist.copy()
|
|
||||||
nhist.add(nb)
|
|
||||||
new_paths.append((nhist, nb))
|
|
||||||
paths = new_paths
|
|
||||||
if len(paths) == 0:
|
|
||||||
break
|
|
||||||
return longest
|
|
||||||
|
|
||||||
def solve(input: Input, second=False):
|
|
||||||
if not second:
|
|
||||||
return first(input)
|
|
||||||
|
|
||||||
g = input.grid2()
|
|
||||||
start = (0, 1)
|
|
||||||
end = (g.n_rows - 1, g.n_cols - 2)
|
|
||||||
|
|
||||||
seen = set()
|
|
||||||
q = deque([[start, (1, 1)]])
|
|
||||||
|
|
||||||
# The intuition is that we can brute force much quicker if we have a pure
|
|
||||||
# graph instead of following the maze along the whole time. So, we create
|
|
||||||
# a graph from the maze and then brute force on the maze.
|
|
||||||
sg = {start: set()} # {node: {(node, dist), ...}}
|
|
||||||
|
|
||||||
while q:
|
|
||||||
trail = q.popleft()
|
|
||||||
pos = trail[-1]
|
|
||||||
while True:
|
|
||||||
nbs = []
|
|
||||||
for d in g.COORDS_ORTH:
|
|
||||||
nb = add2(pos, d)
|
|
||||||
if nb[0] < 0 or nb[0] >= g.n_rows or nb[1] < 0 or nb[1] >= g.n_cols:
|
|
||||||
continue
|
|
||||||
if g[nb] == "#" or nb == trail[-2]:
|
|
||||||
continue
|
|
||||||
nbs.append(nb)
|
|
||||||
if len(nbs) == 1:
|
|
||||||
pos = nbs[0]
|
|
||||||
trail.append(pos)
|
|
||||||
else:
|
|
||||||
break
|
|
||||||
|
|
||||||
if not pos in sg:
|
|
||||||
sg[pos] = set()
|
|
||||||
|
|
||||||
dist = len(trail) - 1
|
|
||||||
sg[trail[0]].add((pos, dist))
|
|
||||||
sg[pos].add((trail[0], dist))
|
|
||||||
|
|
||||||
seen.add(pos)
|
|
||||||
for nb in nbs:
|
|
||||||
if not nb in seen:
|
|
||||||
seen.add(nb)
|
|
||||||
q.append([pos, nb])
|
|
||||||
|
|
||||||
# for key, value in sg.items():
|
|
||||||
# print(key, value)
|
|
||||||
|
|
||||||
# Brute force in bf order.
|
|
||||||
longest = 0
|
|
||||||
q = deque([(set(), start, 0)])
|
|
||||||
while q:
|
|
||||||
hist, pos, dist = q.popleft()
|
|
||||||
if pos == end:
|
|
||||||
if dist > longest:
|
|
||||||
longest = dist
|
|
||||||
continue
|
|
||||||
|
|
||||||
for nb, d in sg[pos]:
|
|
||||||
if nb in hist:
|
|
||||||
continue
|
|
||||||
nhist = hist.copy()
|
|
||||||
nhist.add(nb)
|
|
||||||
q.append((nhist, nb, dist + d))
|
|
||||||
|
|
||||||
return longest
|
|
||||||
|
|
||||||
|
|
||||||
def main():
|
|
||||||
DAY_INPUT = "i23.txt"
|
|
||||||
# print("Example 1:", solve(Input(EXAMPLE)))
|
|
||||||
# print("Solution 1:", solve(Input(DAY_INPUT)))
|
|
||||||
print("Example 2:", solve(Input(EXAMPLE), True))
|
|
||||||
print("Solution 2:", solve(Input(DAY_INPUT), True))
|
|
||||||
|
|
||||||
if __name__ == "__main__":
|
|
||||||
main()
|
|
||||||
@@ -1,74 +0,0 @@
|
|||||||
from lib import *
|
|
||||||
import sympy as sp
|
|
||||||
|
|
||||||
EXAMPLE = """19, 13, 30 @ -2, 1, -2
|
|
||||||
18, 19, 22 @ -1, -1, -2
|
|
||||||
20, 25, 34 @ -2, -2, -4
|
|
||||||
12, 31, 28 @ -1, -2, -1
|
|
||||||
20, 19, 15 @ 1, -5, -3
|
|
||||||
"""
|
|
||||||
|
|
||||||
|
|
||||||
def solve1(input: Input):
|
|
||||||
if len(input.lines()) == 5:
|
|
||||||
lb = 7
|
|
||||||
ub = 27
|
|
||||||
else:
|
|
||||||
lb = 200000000000000
|
|
||||||
ub = 400000000000000
|
|
||||||
|
|
||||||
# On paper:
|
|
||||||
# (px - sx1) / vx1 = (py - sy1) / vy1
|
|
||||||
# (px - sx1) * vy1 = (py - sy1) * vx1
|
|
||||||
# (px - sx1) * vy1 - (py - sy1) * vx1 = 0
|
|
||||||
res = 0
|
|
||||||
eqs = [str_to_ints(l) for l in input.lines()]
|
|
||||||
for i, eq1 in enumerate(eqs):
|
|
||||||
for eq2 in eqs[:i]:
|
|
||||||
sx1, sy1, _, vx1, vy1, _ = eq1
|
|
||||||
sx2, sy2, _, vx2, vy2, _ = eq2
|
|
||||||
|
|
||||||
px, py = sp.symbols("px py")
|
|
||||||
es = [
|
|
||||||
vy1 * (px - sx1) - vx1 * (py - sy1),
|
|
||||||
vy2 * (px - sx2) - vx2 * (py - sy2),
|
|
||||||
]
|
|
||||||
r = sp.solve(es)
|
|
||||||
if not r:
|
|
||||||
continue
|
|
||||||
|
|
||||||
x, y = r[px], r[py]
|
|
||||||
if lb <= x <= ub and lb <= y < ub:
|
|
||||||
t1 = (x - sx1) / vx1
|
|
||||||
t2 = (x - sx2) / vx2
|
|
||||||
if (t1 > 0 and t2 > 0):
|
|
||||||
res += 1
|
|
||||||
|
|
||||||
return res
|
|
||||||
|
|
||||||
|
|
||||||
def solve2(input: Input):
|
|
||||||
eqs = [str_to_ints(l) for l in input.lines()]
|
|
||||||
px, py, pz, vxo, vyo, vzo = sp.symbols("px py pz vxo vyo vzo")
|
|
||||||
es = []
|
|
||||||
|
|
||||||
# The first six equations are enough to find a solution for my problem set.
|
|
||||||
# Might have to be increased depending on input.
|
|
||||||
for i, (x, y, z, vx, vy, vz) in enumerate(eqs[:6]):
|
|
||||||
t = sp.symbols(f"t{i}")
|
|
||||||
es.append(px + vxo * t - x - vx * t)
|
|
||||||
es.append(py + vyo * t - y - vy * t)
|
|
||||||
es.append(pz + vzo * t - z - vz * t)
|
|
||||||
r = sp.solve(es)[0]
|
|
||||||
return r[px] + r[py] + r[pz]
|
|
||||||
|
|
||||||
def main():
|
|
||||||
DAY_INPUT = "i24.txt"
|
|
||||||
print("Solution 1:", solve1(Input(EXAMPLE)))
|
|
||||||
print("Solution 1:", solve1(Input(DAY_INPUT)))
|
|
||||||
print("Example 2:", solve2(Input(EXAMPLE)))
|
|
||||||
print("Solution 2:", solve2(Input(DAY_INPUT)))
|
|
||||||
return
|
|
||||||
|
|
||||||
if __name__ == "__main__":
|
|
||||||
main()
|
|
||||||
@@ -1,87 +0,0 @@
|
|||||||
from lib import *
|
|
||||||
from random import choice
|
|
||||||
from collections import deque
|
|
||||||
|
|
||||||
|
|
||||||
# def plot(graph):
|
|
||||||
# import networkx as nx
|
|
||||||
# import matplotlib
|
|
||||||
# import matplotlib.pyplot as plt
|
|
||||||
# G = nx.Graph()
|
|
||||||
# for node, connected_nodes in graph.items():
|
|
||||||
# for connected_node in connected_nodes:
|
|
||||||
# G.add_edge(node, connected_node)
|
|
||||||
# # pos = nx.spring_layout(G, k=2.0, iterations=20) # Adjust k as needed
|
|
||||||
# pos = nx.shell_layout(G)
|
|
||||||
# nx.draw(G, with_labels=True, node_color='lightblue', edge_color='gray', node_size=2000, font_size=15, font_weight='bold')
|
|
||||||
# matplotlib.use('qtagg')
|
|
||||||
# plt.show()
|
|
||||||
|
|
||||||
|
|
||||||
def solve(input: Input):
|
|
||||||
graph = {}
|
|
||||||
edges = {}
|
|
||||||
|
|
||||||
for line in input.lines():
|
|
||||||
src, dsts = line.split(":")
|
|
||||||
dsts = dsts.strip().split(" ")
|
|
||||||
|
|
||||||
if not src in graph:
|
|
||||||
graph[src] = []
|
|
||||||
|
|
||||||
for dst in dsts:
|
|
||||||
graph[src].append(dst)
|
|
||||||
if not dst in graph:
|
|
||||||
graph[dst] = []
|
|
||||||
graph[dst].append(src)
|
|
||||||
|
|
||||||
edge = tuple(sorted([src, dst]))
|
|
||||||
edges[edge] = 0
|
|
||||||
|
|
||||||
for _ in range(100):
|
|
||||||
first_node = choice(list(graph.keys()))
|
|
||||||
seen = set([first_node])
|
|
||||||
visit = deque([first_node])
|
|
||||||
while visit:
|
|
||||||
node = visit.popleft()
|
|
||||||
for nb in graph[node]:
|
|
||||||
if not nb in seen:
|
|
||||||
seen.add(nb)
|
|
||||||
visit.append(nb)
|
|
||||||
edge = tuple(sorted([node, nb]))
|
|
||||||
edges[edge] += 1
|
|
||||||
|
|
||||||
# Orignally, I used `plot(graph)` to visually find the nodes that have to
|
|
||||||
# be removed. I then came up with this heuristic approach. The idea is that
|
|
||||||
# we have to cross one of the three nodes when we do a breadth first
|
|
||||||
# search. By repeatedly doing that we can identify the "bridges" as the
|
|
||||||
# three edges that are used the most often.
|
|
||||||
most_visited = sorted(edges.items(), key=lambda t: t[1], reverse=True)[:3]
|
|
||||||
|
|
||||||
# to_remove = (("plt", "mgb"), ("jxm", "qns"), ("dbt", "tjd")) # found visually
|
|
||||||
# for node, count in most_visited:
|
|
||||||
# print(node, count) # should print the same as `to_remove`
|
|
||||||
|
|
||||||
for (a, b), _ in most_visited:
|
|
||||||
graph[a].remove(b)
|
|
||||||
graph[b].remove(a)
|
|
||||||
|
|
||||||
to_visit = [choice(list(graph.keys()))]
|
|
||||||
seen = set(to_visit)
|
|
||||||
while to_visit:
|
|
||||||
node = to_visit.pop()
|
|
||||||
for nb in graph[node]:
|
|
||||||
if not nb in seen:
|
|
||||||
seen.add(nb)
|
|
||||||
to_visit.append(nb)
|
|
||||||
|
|
||||||
return len(seen) * (len(graph) - len(seen))
|
|
||||||
|
|
||||||
|
|
||||||
def main():
|
|
||||||
DAY_INPUT = "i25.txt"
|
|
||||||
print("Solution 1:", solve(Input(DAY_INPUT)), "(hands-free)")
|
|
||||||
|
|
||||||
|
|
||||||
if __name__ == "__main__":
|
|
||||||
main()
|
|
||||||
@@ -1,6 +1,6 @@
|
|||||||
import re
|
import re
|
||||||
from lib import *
|
|
||||||
|
|
||||||
|
NUMBERS = "0123456789"
|
||||||
EXAMPLE = """
|
EXAMPLE = """
|
||||||
467..114..
|
467..114..
|
||||||
...*......
|
...*......
|
||||||
@@ -14,42 +14,6 @@ EXAMPLE = """
|
|||||||
.664.598..
|
.664.598..
|
||||||
"""
|
"""
|
||||||
|
|
||||||
def solve(i: Input, second=False):
|
|
||||||
"""
|
|
||||||
This is a new version I have implemented after the fact to test the
|
|
||||||
improvements to my library. My original versions are `solve1` and `solve2`.
|
|
||||||
"""
|
|
||||||
g = i.grid2()
|
|
||||||
if not second:
|
|
||||||
parts = g.find_not(NUMBERS + ".")
|
|
||||||
else:
|
|
||||||
parts = g.find("*")
|
|
||||||
|
|
||||||
res = 0
|
|
||||||
numbers = []
|
|
||||||
for p in parts:
|
|
||||||
numbers_gear = []
|
|
||||||
for n in g.neighbors_adj(p):
|
|
||||||
if g[n] in NUMBERS:
|
|
||||||
while n in g and g[n] in NUMBERS:
|
|
||||||
n = (n[0], n[1] - 1)
|
|
||||||
number = ""
|
|
||||||
n = (n[0], n[1] + 1)
|
|
||||||
start = n
|
|
||||||
while n in g and g[n] in NUMBERS:
|
|
||||||
number += g[n]
|
|
||||||
n = (n[0], n[1] + 1)
|
|
||||||
numbers.append((int(number), n[0], start))
|
|
||||||
numbers_gear.append(int(number))
|
|
||||||
numbers_gear = list(set(numbers_gear))
|
|
||||||
if len(numbers_gear) == 2:
|
|
||||||
res += numbers_gear[0] * numbers_gear[1]
|
|
||||||
|
|
||||||
if second:
|
|
||||||
return res
|
|
||||||
else:
|
|
||||||
return sum([n for n, _, _ in list(set(numbers))])
|
|
||||||
|
|
||||||
def clean(text: str) -> list[str]:
|
def clean(text: str) -> list[str]:
|
||||||
return list(filter(lambda l: l.strip() != "", text.splitlines()))
|
return list(filter(lambda l: l.strip() != "", text.splitlines()))
|
||||||
|
|
||||||
@@ -65,7 +29,7 @@ def is_adj_to_symbol(x, y, lines):
|
|||||||
pass
|
pass
|
||||||
return False
|
return False
|
||||||
|
|
||||||
def solve1(lines: list[str]):
|
def solve(lines: list[str]):
|
||||||
d = ""
|
d = ""
|
||||||
adj_to_symbol = False
|
adj_to_symbol = False
|
||||||
s = 0
|
s = 0
|
||||||
@@ -122,18 +86,16 @@ def solve2(lines: list[str]):
|
|||||||
return s
|
return s
|
||||||
|
|
||||||
def main():
|
def main():
|
||||||
input = Input(EXAMPLE)
|
example = clean(EXAMPLE)
|
||||||
print("Example 1:", solve(input))
|
print("Example 1:", solve(example))
|
||||||
|
data = clean(open("i3.txt").read())
|
||||||
|
print("Solution 1:", solve(data))
|
||||||
|
|
||||||
input = Input("i3.txt")
|
example = clean(EXAMPLE)
|
||||||
print("Solution 1:", solve(input))
|
print("Example 2:", solve2(example))
|
||||||
|
|
||||||
input = Input(EXAMPLE)
|
data = clean(open("i3.txt").read())
|
||||||
print("Example 2:", solve(input, True))
|
print("Solution 2:", solve2(data))
|
||||||
|
|
||||||
input = Input("i3.txt")
|
|
||||||
print("Solution 2:", solve(input, True))
|
|
||||||
return
|
|
||||||
|
|
||||||
if __name__ == "__main__":
|
if __name__ == "__main__":
|
||||||
main()
|
main()
|
||||||
|
|||||||
@@ -9,7 +9,7 @@ EXAMPLE = """
|
|||||||
def solve(lines: list[str]):
|
def solve(lines: list[str]):
|
||||||
res = 0
|
res = 0
|
||||||
for (i, line) in enumerate(lines):
|
for (i, line) in enumerate(lines):
|
||||||
digits = lib.str_to_ints(line)
|
digits = lib.str_to_int_list(line)
|
||||||
last_digits = []
|
last_digits = []
|
||||||
while not all(d == 0 for d in digits):
|
while not all(d == 0 for d in digits):
|
||||||
last_digits.append(digits[-1])
|
last_digits.append(digits[-1])
|
||||||
@@ -24,7 +24,7 @@ def solve(lines: list[str]):
|
|||||||
def solve2(lines: list[str]):
|
def solve2(lines: list[str]):
|
||||||
res = 0
|
res = 0
|
||||||
for (i, line) in enumerate(lines):
|
for (i, line) in enumerate(lines):
|
||||||
digits = lib.str_to_ints(line)
|
digits = lib.str_to_int_list(line)
|
||||||
first_digits = []
|
first_digits = []
|
||||||
while not all(d == 0 for d in digits):
|
while not all(d == 0 for d in digits):
|
||||||
first_digits.append(digits[0])
|
first_digits.append(digits[0])
|
||||||
|
|||||||
@@ -0,0 +1,37 @@
|
|||||||
|
import lib
|
||||||
|
|
||||||
|
EXAMPLE = """
|
||||||
|
"""
|
||||||
|
|
||||||
|
def solve(lines: list[str]):
|
||||||
|
res = 0
|
||||||
|
for (i, line) in enumerate(lines):
|
||||||
|
print(i, line)
|
||||||
|
# digits = lib.str_to_int_list(line)
|
||||||
|
# digit = lib.str_to_single_int(line)
|
||||||
|
return res
|
||||||
|
|
||||||
|
def solve2(lines: list[str]):
|
||||||
|
res = 0
|
||||||
|
for (i, line) in enumerate(lines):
|
||||||
|
print(i, line)
|
||||||
|
return res
|
||||||
|
|
||||||
|
def main():
|
||||||
|
lines = lib.str_to_lines_no_empty(EXAMPLE)
|
||||||
|
print("Example 1:", solve(lines))
|
||||||
|
return
|
||||||
|
|
||||||
|
lines = lib.str_to_lines_no_empty(open("ix.txt").read())
|
||||||
|
print("Solution 1:", solve(lines))
|
||||||
|
return
|
||||||
|
|
||||||
|
lines = lib.str_to_lines_no_empty(EXAMPLE)
|
||||||
|
print("Example 2:", solve2(lines))
|
||||||
|
return
|
||||||
|
|
||||||
|
lines = lib.str_to_lines_no_empty(open("ix.txt").read())
|
||||||
|
print("Solution 2:", solve2(lines))
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
main()
|
||||||
@@ -0,0 +1,100 @@
|
|||||||
|
Game 1: 4 green, 3 blue, 11 red; 7 red, 5 green, 10 blue; 3 green, 8 blue, 8 red; 4 red, 12 blue; 15 red, 3 green, 10 blue
|
||||||
|
Game 2: 3 red, 1 blue, 2 green; 1 blue, 9 green; 1 red, 10 green
|
||||||
|
Game 3: 5 green, 9 red, 4 blue; 3 green, 7 blue; 12 blue, 3 green, 3 red; 3 blue, 7 red, 2 green; 7 blue, 3 green, 10 red
|
||||||
|
Game 4: 2 green, 2 blue; 12 red, 9 green, 2 blue; 13 green, 15 red, 4 blue; 14 red, 3 green, 5 blue; 6 red, 1 green; 1 blue, 2 red, 2 green
|
||||||
|
Game 5: 2 green, 6 blue; 1 red, 3 green, 5 blue; 3 green, 4 blue; 3 blue, 5 green, 1 red; 5 blue
|
||||||
|
Game 6: 5 green, 1 blue, 3 red; 8 green, 15 red; 16 green, 5 red, 1 blue
|
||||||
|
Game 7: 1 blue, 3 red, 11 green; 18 red, 16 blue, 5 green; 13 blue, 5 green; 1 red, 8 green, 15 blue
|
||||||
|
Game 8: 1 green, 14 blue, 1 red; 10 blue; 1 green
|
||||||
|
Game 9: 4 green, 12 blue, 1 red; 14 blue; 2 blue, 4 green; 4 green, 1 red, 10 blue
|
||||||
|
Game 10: 11 green, 9 red; 12 red, 9 green; 5 red, 7 blue, 5 green; 6 green, 1 blue, 12 red; 3 red, 3 blue; 16 red, 9 blue, 7 green
|
||||||
|
Game 11: 11 green, 1 red, 9 blue; 2 red, 13 green, 5 blue; 5 green, 2 red, 5 blue; 5 green, 7 blue; 1 red, 5 blue, 1 green
|
||||||
|
Game 12: 5 green, 1 red; 1 red, 4 green; 1 blue, 12 green; 15 green, 4 blue; 4 blue, 19 green; 16 green, 4 blue
|
||||||
|
Game 13: 1 red, 9 green, 5 blue; 10 blue, 7 green, 1 red; 3 green, 2 red, 14 blue; 16 blue, 3 red
|
||||||
|
Game 14: 9 red, 1 blue, 2 green; 16 blue, 7 red; 2 green, 3 red, 14 blue; 1 green, 9 blue
|
||||||
|
Game 15: 6 blue; 4 blue; 1 red, 16 blue, 3 green
|
||||||
|
Game 16: 14 green, 5 red, 1 blue; 1 red, 1 blue; 5 blue
|
||||||
|
Game 17: 1 blue, 1 green, 3 red; 2 red, 2 blue, 2 green; 1 blue, 1 red; 1 red, 2 green, 2 blue; 2 blue; 1 green, 2 red, 1 blue
|
||||||
|
Game 18: 4 blue, 2 green, 1 red; 1 green, 1 red, 10 blue; 1 green, 1 red, 2 blue; 1 red, 5 blue; 3 green, 6 blue; 1 red, 1 green, 7 blue
|
||||||
|
Game 19: 1 blue, 13 green, 12 red; 7 blue, 2 green, 1 red; 1 blue, 3 red, 3 green; 3 blue, 8 green, 10 red; 7 blue, 2 green
|
||||||
|
Game 20: 1 red, 17 blue; 10 blue, 5 green; 9 green, 1 red, 3 blue; 1 red, 5 green, 1 blue
|
||||||
|
Game 21: 3 red, 6 blue, 5 green; 4 blue, 1 red, 7 green; 6 blue, 4 red, 9 green
|
||||||
|
Game 22: 11 blue, 2 red, 6 green; 16 blue, 5 red, 6 green; 12 red, 2 green, 10 blue; 14 blue, 2 green, 11 red
|
||||||
|
Game 23: 3 red, 5 green; 10 blue, 1 green, 9 red; 2 red, 10 green, 9 blue; 9 blue, 7 green
|
||||||
|
Game 24: 8 blue, 1 red; 3 red, 9 blue; 9 green, 2 red, 8 blue
|
||||||
|
Game 25: 2 red, 1 green, 1 blue; 1 green, 12 blue, 2 red; 2 red, 1 blue; 2 blue; 1 green, 10 blue; 6 blue
|
||||||
|
Game 26: 2 red; 4 green, 1 red, 7 blue; 11 blue, 2 red, 4 green; 1 red, 1 blue; 1 red, 5 green, 12 blue
|
||||||
|
Game 27: 1 red, 7 green, 8 blue; 13 green, 12 blue, 1 red; 6 red, 1 green, 10 blue; 8 red, 2 blue, 2 green; 11 blue, 4 green, 4 red
|
||||||
|
Game 28: 1 red, 8 blue, 3 green; 12 green, 4 blue; 1 red, 4 blue, 11 green; 7 blue, 10 green, 10 red; 11 blue, 7 red, 8 green; 10 red, 2 green, 2 blue
|
||||||
|
Game 29: 4 green, 2 red; 1 blue, 11 red; 2 blue, 3 green, 1 red; 16 red; 3 green, 8 red, 1 blue; 2 blue, 7 green, 12 red
|
||||||
|
Game 30: 1 blue, 3 green; 4 green, 2 blue; 3 red, 5 blue; 4 green, 1 red
|
||||||
|
Game 31: 2 red, 2 blue, 3 green; 2 green, 3 blue, 8 red; 7 red, 16 blue, 2 green; 5 red, 20 blue, 2 green
|
||||||
|
Game 32: 2 red, 1 green, 4 blue; 4 green, 4 red, 1 blue; 4 red, 4 blue; 1 blue, 4 red, 2 green; 4 blue, 3 green, 4 red
|
||||||
|
Game 33: 11 green, 4 blue, 10 red; 2 green, 13 red, 7 blue; 13 red, 2 blue, 8 green; 15 red, 9 blue, 12 green; 14 red, 10 green, 2 blue; 13 red, 7 green
|
||||||
|
Game 34: 11 red, 6 blue, 4 green; 16 red, 7 blue, 4 green; 6 red, 18 green, 6 blue; 3 blue, 16 red, 3 green; 2 red, 3 blue, 17 green; 3 green, 9 red, 6 blue
|
||||||
|
Game 35: 6 green, 10 red, 12 blue; 4 red, 1 blue, 2 green; 3 green, 8 blue, 7 red; 6 red, 12 blue, 2 green
|
||||||
|
Game 36: 4 green, 2 blue, 2 red; 3 green, 10 red, 1 blue; 1 blue, 3 green, 2 red; 2 green, 1 red; 1 blue, 5 red
|
||||||
|
Game 37: 3 blue, 1 red, 2 green; 8 red, 4 green, 10 blue; 4 red, 4 green
|
||||||
|
Game 38: 13 green, 3 red, 2 blue; 1 red, 13 green, 2 blue; 20 green, 3 red, 2 blue; 1 red, 2 blue, 12 green
|
||||||
|
Game 39: 13 blue, 1 red, 8 green; 5 red, 3 green, 8 blue; 6 blue, 4 green; 18 blue, 7 green, 1 red; 4 green, 3 blue, 5 red; 6 blue, 4 red, 1 green
|
||||||
|
Game 40: 2 red, 2 blue, 9 green; 1 blue, 2 red, 12 green; 16 green, 11 blue, 1 red; 1 green, 2 red; 3 blue, 2 red
|
||||||
|
Game 41: 7 blue, 1 red; 4 blue, 1 red; 3 blue, 1 red, 2 green; 13 blue
|
||||||
|
Game 42: 18 red, 1 green, 13 blue; 2 blue, 2 green, 7 red; 16 red, 12 blue; 1 green, 10 blue, 14 red
|
||||||
|
Game 43: 15 red, 6 green, 2 blue; 3 blue, 9 red, 3 green; 13 red
|
||||||
|
Game 44: 2 blue, 5 green, 3 red; 4 red, 4 blue, 19 green; 5 red, 3 blue, 9 green; 19 green, 6 red, 5 blue
|
||||||
|
Game 45: 5 red, 4 green, 13 blue; 12 red, 10 blue; 3 green, 9 blue, 5 red; 10 blue, 18 red, 5 green; 16 red, 6 green, 17 blue
|
||||||
|
Game 46: 3 green; 3 green, 2 blue; 4 blue, 2 red, 3 green; 5 blue, 3 green, 4 red; 1 green, 1 blue
|
||||||
|
Game 47: 2 blue, 1 red, 10 green; 2 red; 6 red, 1 blue; 16 red, 2 blue, 8 green; 5 blue, 8 red, 7 green
|
||||||
|
Game 48: 11 green, 4 red, 2 blue; 2 blue, 5 green, 8 red; 9 green, 6 red; 3 red, 3 green, 1 blue; 2 blue, 12 green, 17 red
|
||||||
|
Game 49: 10 blue, 4 green, 1 red; 10 red, 10 blue; 12 blue, 7 red; 13 blue, 6 green
|
||||||
|
Game 50: 1 red, 19 green, 7 blue; 4 red, 1 green, 5 blue; 16 green, 8 red, 8 blue
|
||||||
|
Game 51: 12 green, 18 blue; 13 green, 14 blue, 4 red; 7 green, 4 red, 14 blue; 8 green, 2 blue, 3 red; 16 blue, 8 green
|
||||||
|
Game 52: 9 blue, 9 green, 3 red; 8 blue, 1 green, 13 red; 2 red, 8 blue, 9 green; 13 red, 4 green; 6 green, 15 red; 11 blue, 11 red, 9 green
|
||||||
|
Game 53: 2 red, 4 green, 3 blue; 5 blue, 16 green; 4 blue, 8 red, 12 green
|
||||||
|
Game 54: 6 red, 16 green; 6 red, 15 green; 8 green, 8 red, 2 blue
|
||||||
|
Game 55: 9 red, 2 green; 4 blue; 2 green, 2 red, 7 blue; 1 red, 16 blue, 1 green; 17 blue, 5 red
|
||||||
|
Game 56: 14 green, 3 red, 9 blue; 14 blue, 15 green, 2 red; 8 red, 13 blue, 15 green; 15 blue, 2 red, 12 green; 3 red, 7 blue, 10 green; 10 blue, 13 green
|
||||||
|
Game 57: 1 blue, 10 green, 2 red; 4 blue, 9 green, 11 red; 2 blue
|
||||||
|
Game 58: 4 red, 2 blue, 5 green; 1 blue, 5 green, 4 red; 3 green, 4 red, 8 blue; 4 blue, 7 green; 5 green, 4 blue; 1 blue, 6 red
|
||||||
|
Game 59: 5 blue, 4 red, 3 green; 8 blue, 12 green, 5 red; 5 red, 8 blue, 15 green
|
||||||
|
Game 60: 6 red, 12 blue, 1 green; 10 blue, 20 green, 4 red; 6 blue, 1 green, 5 red; 9 red, 12 blue, 14 green; 15 green, 1 red, 14 blue; 10 green, 13 blue
|
||||||
|
Game 61: 1 blue, 12 green, 3 red; 4 green, 1 red, 4 blue; 8 red, 4 green, 6 blue
|
||||||
|
Game 62: 6 blue, 7 green, 3 red; 6 blue, 3 red, 3 green; 11 green, 6 red, 2 blue; 2 red, 6 blue, 3 green; 2 green, 3 blue, 3 red; 3 blue, 11 green, 11 red
|
||||||
|
Game 63: 5 green, 6 blue, 4 red; 6 green, 12 blue; 3 green, 9 blue, 10 red; 1 blue, 4 red, 5 green
|
||||||
|
Game 64: 10 green, 14 red; 1 blue, 9 red; 3 green, 10 blue, 14 red; 5 green, 3 blue, 12 red; 5 blue, 12 red, 13 green
|
||||||
|
Game 65: 1 red, 5 green, 10 blue; 14 red, 5 green, 10 blue; 10 blue, 10 red
|
||||||
|
Game 66: 9 green, 8 blue, 1 red; 8 red, 14 blue; 8 red, 7 blue, 2 green; 4 blue, 3 green, 5 red; 2 red, 8 green, 8 blue
|
||||||
|
Game 67: 4 red, 3 green, 3 blue; 4 green, 1 blue, 4 red; 1 blue, 3 red; 10 blue; 16 blue, 6 red, 4 green
|
||||||
|
Game 68: 6 blue, 6 green, 9 red; 4 blue, 9 red, 3 green; 3 blue, 8 red
|
||||||
|
Game 69: 4 green, 12 red, 3 blue; 2 red, 3 blue; 2 blue, 4 red, 2 green; 1 blue, 3 red
|
||||||
|
Game 70: 4 red, 3 green, 15 blue; 1 green, 4 red; 1 red, 1 green, 5 blue
|
||||||
|
Game 71: 4 blue, 2 red, 10 green; 7 red, 6 blue, 11 green; 4 blue, 7 red, 8 green
|
||||||
|
Game 72: 9 red, 9 blue, 1 green; 4 red, 6 green, 5 blue; 3 green, 7 red, 2 blue
|
||||||
|
Game 73: 3 green, 9 red; 4 green, 15 red; 12 red, 2 blue; 14 red, 3 green
|
||||||
|
Game 74: 2 red, 6 blue, 1 green; 3 red, 6 blue; 1 green, 12 blue, 14 red
|
||||||
|
Game 75: 3 green, 18 red; 1 green, 7 red, 1 blue; 2 red, 2 green, 3 blue; 11 red; 2 red, 3 green, 2 blue
|
||||||
|
Game 76: 6 green, 2 red, 5 blue; 13 green, 5 blue; 5 blue, 1 red, 1 green
|
||||||
|
Game 77: 4 blue, 6 green, 3 red; 15 red, 1 green; 4 green, 11 red, 13 blue; 8 blue, 6 green, 9 red; 3 blue, 1 green, 11 red; 3 green, 3 red
|
||||||
|
Game 78: 11 green, 1 blue, 2 red; 7 red, 16 blue, 11 green; 9 blue, 10 red, 6 green; 1 green, 8 blue, 10 red; 8 blue, 6 red, 1 green
|
||||||
|
Game 79: 2 blue, 5 green, 4 red; 1 blue, 1 red, 1 green; 1 blue, 5 red, 10 green; 6 red, 3 green, 3 blue; 8 red, 9 green, 6 blue; 7 blue, 6 green, 13 red
|
||||||
|
Game 80: 10 green, 7 blue, 5 red; 5 red, 1 green, 6 blue; 8 blue, 2 red, 8 green
|
||||||
|
Game 81: 3 green, 10 red; 6 blue, 8 green, 14 red; 4 green, 4 blue, 13 red; 5 blue, 11 green, 6 red; 16 red, 8 green, 5 blue; 6 green, 18 red, 6 blue
|
||||||
|
Game 82: 13 red, 1 green, 7 blue; 8 green, 4 blue, 12 red; 18 red, 5 green, 3 blue; 13 red, 4 green, 9 blue
|
||||||
|
Game 83: 1 red, 3 green, 4 blue; 5 blue, 4 green, 1 red; 3 green, 1 red, 12 blue; 4 green, 11 blue
|
||||||
|
Game 84: 3 blue, 10 green, 2 red; 3 red, 8 blue; 11 blue, 12 red, 14 green; 2 red, 11 green, 2 blue
|
||||||
|
Game 85: 8 blue, 2 green, 1 red; 13 blue, 6 red; 3 blue, 5 green
|
||||||
|
Game 86: 16 red, 8 blue; 7 blue; 16 red, 16 blue, 1 green; 15 blue, 11 red; 2 green, 7 red, 5 blue
|
||||||
|
Game 87: 6 green, 9 blue, 4 red; 1 red, 1 green, 4 blue; 5 blue, 13 green, 3 red; 2 green, 4 red; 16 blue, 10 green, 3 red
|
||||||
|
Game 88: 1 blue, 14 red; 14 red, 3 blue, 8 green; 1 blue, 5 green
|
||||||
|
Game 89: 12 green, 14 blue, 3 red; 2 red, 3 blue, 3 green; 2 blue, 8 green; 1 red, 3 green, 15 blue; 3 red, 5 blue
|
||||||
|
Game 90: 3 blue, 17 red, 11 green; 2 red, 2 blue, 7 green; 7 blue; 8 blue, 4 green, 10 red; 1 blue, 4 red
|
||||||
|
Game 91: 10 red, 9 blue, 8 green; 5 blue, 10 red, 2 green; 11 red, 17 green, 7 blue; 12 blue, 16 red, 18 green; 20 green, 5 blue, 15 red
|
||||||
|
Game 92: 1 green, 14 red, 1 blue; 2 blue, 6 green; 9 red, 6 green; 5 blue, 5 red, 2 green; 3 blue, 3 green, 10 red; 5 blue, 1 red
|
||||||
|
Game 93: 10 green, 1 red, 6 blue; 16 red, 5 blue, 2 green; 3 red, 7 green, 11 blue; 12 green, 5 blue, 4 red; 8 green, 7 blue, 10 red; 1 red, 5 blue
|
||||||
|
Game 94: 3 blue, 1 red, 3 green; 1 blue, 4 green, 4 red; 9 green
|
||||||
|
Game 95: 3 green, 5 blue, 9 red; 2 green, 9 red, 2 blue; 12 red, 9 green; 11 green, 9 red, 9 blue; 9 blue, 6 green, 10 red; 13 red, 2 blue, 5 green
|
||||||
|
Game 96: 2 red, 19 blue, 2 green; 10 blue, 1 red, 2 green; 9 blue, 1 red; 2 green, 3 blue; 1 green, 1 red, 11 blue
|
||||||
|
Game 97: 6 green, 7 blue, 5 red; 7 green, 1 red, 11 blue; 6 green, 6 red, 5 blue; 2 red, 9 blue, 1 green
|
||||||
|
Game 98: 5 green, 8 red, 15 blue; 16 green, 9 blue, 8 red; 5 blue, 3 red, 2 green; 13 blue, 12 green, 4 red; 2 red, 15 green, 3 blue; 1 green, 11 blue, 2 red
|
||||||
|
Game 99: 1 green, 7 blue, 6 red; 16 blue, 9 red; 1 green, 17 red, 12 blue; 15 red, 7 blue; 8 blue, 14 red
|
||||||
|
Game 100: 5 blue, 11 red, 6 green; 11 red, 2 blue, 5 green; 6 blue, 6 green; 2 blue, 6 red, 15 green; 7 red, 4 blue, 7 green
|
||||||
@@ -0,0 +1,140 @@
|
|||||||
|
661 485 565 344 325 841 725
|
||||||
|
*609 131 512 * 536* 462 60 424 *
|
||||||
|
316 * 39 630 377 919 98 789 * * 788 2 564
|
||||||
|
431 535 * 622 * * 682 108 116 299
|
||||||
|
428 378 844 416 586 537 27 * 871 331 492
|
||||||
|
878 390 * * 739 496 867 867 867 344 487
|
||||||
|
* 558 535 644 404 605 * *
|
||||||
|
381 729 726 578 10 * 818 929 934 119
|
||||||
|
53 31 734 847* * 217 321 *
|
||||||
|
509 315 654 60 925 747*559 * 430 226 * 290 848
|
||||||
|
546 664 507 337 94 359 528*996
|
||||||
|
351 638 * *433 337 226 859 378
|
||||||
|
* 648 183 126 * 208 954 * 626 499* 803 642 235
|
||||||
|
518* 813 990 * * 699 133 68 79 838 447 * * *
|
||||||
|
696* 586 6 243 * 224 392 275 * 699 177 230 593
|
||||||
|
326 683 761 491 26 * 56 305 262 150
|
||||||
|
41 908 819 785 276
|
||||||
|
618 401 599 124 34 * 676 342 473
|
||||||
|
889 888 454 723 * 141* 958 416 *94
|
||||||
|
212 826 552 569 * 728 143
|
||||||
|
* 287 60 872 886 171 437 815 680 * 633
|
||||||
|
234 * 687 432 203 * 275 65 *341 * 246 272 922*
|
||||||
|
967 495 * 161 474 97 * * 84 400 *295 805 915
|
||||||
|
419 * 979 932 * 729 215 * 81 * 554 263*567 812
|
||||||
|
* 458 682 179 348 906 428 798
|
||||||
|
668 552 99 * 85 4
|
||||||
|
29 938 594 107 *171 98 * 896 491 412 12 326 * 705 4 *
|
||||||
|
* 332 949 * 750 974 342 * 558 * 794
|
||||||
|
459 342* 637 273 658 601 * 735 * 627 889 *
|
||||||
|
697 131 718 689 450 390 994 793 * 241
|
||||||
|
991 89 14 * *912 39 698 953*240 87
|
||||||
|
324 618 * 328 * 538 307 920 515 *
|
||||||
|
*386 * 780 * 475 719 * * 910 410 384 999 *756
|
||||||
|
268 701 72 63 43 193 674 670 * * 95 893
|
||||||
|
16 * 663 407 * 258 264 298 202*
|
||||||
|
574 187 88 53 931 759 672 385
|
||||||
|
938 192 297 * 723 * 930 692 283 349 981
|
||||||
|
* 207 * 843 736 260 677 389 * 954
|
||||||
|
603 713 745 411 359 922 * * * 718 888 561 182 206
|
||||||
|
896 * 173*383 145 943 * * 622 382* 180 141 * *
|
||||||
|
89 * 238 714 * 575 539 114*721 645 471
|
||||||
|
*307 968 250 836 498 59 909 601* 117 435 944
|
||||||
|
* 56* 498 730 882 975 680 * 95 152 517
|
||||||
|
150 142 473 713 262 577 266 736 668 70*111 811 165
|
||||||
|
741 * 97 * * 654 428 157 748*823
|
||||||
|
* 48 * 772 892 350 760 148 440 731*563
|
||||||
|
260 227 * 795 649 27 107 219 23 226 369
|
||||||
|
41 136 546 920 * 981 * 454
|
||||||
|
* 635 782 560 * 896 854 694 340 498* 41 959*
|
||||||
|
486 63 810 641 * 532 642 90 76
|
||||||
|
325 539 407 9 550
|
||||||
|
787 * 105 126 810 497 576 538 718 * 317 519
|
||||||
|
303 493 462 647 * 875 641 644 * * 154 588
|
||||||
|
44 140 228 43 * * 132 794 628 669 110 * *
|
||||||
|
579 348 32 491* 646 506 *708 74 117 24* 698 532
|
||||||
|
* 902 722 700 610 878 *
|
||||||
|
885 351 * 799 814*238 *339 428*825 965 862 125
|
||||||
|
723 243 852 757 784 472 814 603 151 279 617 849
|
||||||
|
* * * * 91 246 384 *
|
||||||
|
218 659 113 128 691 972 571 934 * * 442 236
|
||||||
|
* 455 868 379 594 80 654 421 456
|
||||||
|
2*535 *410 553 409 235 173 779 116 * *646 418* * 596
|
||||||
|
70 361 493 * 440 317 865 323 696 202 952 187
|
||||||
|
767 318 * 1 * * 241 147 * 389
|
||||||
|
921 301 * * 67 540 149 827 347 956 980 204
|
||||||
|
* 341 154 * 695 20 183 177 66 699 495 296
|
||||||
|
460 4 * 347 *36 * 912 * 765
|
||||||
|
142 163 885 480 805 587 289 310*389 843 417 * 628 *
|
||||||
|
* 434 803 482 556 294 33 79 358
|
||||||
|
407 873 *542 41 758 176 *
|
||||||
|
842 442*766 284 842 856 * 647 422 94
|
||||||
|
799 433 318* 576 111 788
|
||||||
|
720 168 840 989 * 468 419 198
|
||||||
|
* 392 282 591 * 101 340 187
|
||||||
|
746 499 779 * 456 346 * * 693 94 72
|
||||||
|
970 671 696 999 124 246 434 173 165 925*
|
||||||
|
628 * 608 827 * * 634 418 185 311 808 372* 824
|
||||||
|
694 360 43 645 935 *516 * 555 * 33
|
||||||
|
* 576 810*592 740 665 968 *499 775 882 998
|
||||||
|
303 433 280 147 82 * 751*
|
||||||
|
608 560 827 227 448* 529 376
|
||||||
|
465 554 401 714 192 999 466 28 161 351
|
||||||
|
706 157 679 741 818 811 412 376 *
|
||||||
|
441 955 63 * * * 399 613 444 *972
|
||||||
|
* 697 600 965 354 392 827 665 326 323 483
|
||||||
|
381 972 373* * 9 289 *
|
||||||
|
* 239 863 * 341 *329
|
||||||
|
801 638 659 358 29 695 241 680 863 310 941 216 311
|
||||||
|
* 358 * * 786 *330 842 11 279 686
|
||||||
|
932 666 533 712 801 64 544 *972 *353 809 524 397 *
|
||||||
|
795 * * 394 586 * 562
|
||||||
|
629 184 796 946 348 670 63
|
||||||
|
428 918 850 889 * 673 110 221 337 560
|
||||||
|
926* 809 627 * 344 343 * * 832 * * 216
|
||||||
|
624 78 915 701 876 734 402 181 193 460 639 * 558 138
|
||||||
|
* 91 804 324 985 429 * * 892 * * 321 727 134
|
||||||
|
991 * * 39 633 213 623 601 919 378 318 * 34
|
||||||
|
183 399 297 973 622 * 855 684 * 335 733
|
||||||
|
576 597 * * 686 371 98 23 119 777 *
|
||||||
|
901 * 412 102 754 332 47* * 861 539 495 801 * 404 777
|
||||||
|
577 577 978 990 * 236 339 * 534
|
||||||
|
169 * 687 * 598 * 349 723 864 972 196 491* 335 372
|
||||||
|
339 633 29 * 4 251* * 250 908 356 230 324 386
|
||||||
|
943 325 726 690 * 646 * 214
|
||||||
|
468 * 999 944 751 * 219 837 107 * 271 * 283
|
||||||
|
* 210 *390 917* 996* 790 128 * 905 277 320 936 835
|
||||||
|
640 581 * 167 392 29 * 885 369 *
|
||||||
|
708 106 223 817 * 277 795 296 172 633 229
|
||||||
|
82 679 * *806 10 * 456 * 95 3
|
||||||
|
536 12 914 458 214 995 97 735 370 334 876 * 950
|
||||||
|
* 10 837 518 * * 761
|
||||||
|
414 794 * 813 394 815 718 759 403 738
|
||||||
|
463 238 419 810 41 452 2 435 468
|
||||||
|
103 * 11 927 282 * 234 229 *
|
||||||
|
301 678 100 954 * 182 * 737 916 890 118* 625
|
||||||
|
67 312 865 910 * 382 516 973 * 874 500 153 *
|
||||||
|
373 * * 979 469 *375 765 99 733 897
|
||||||
|
828 669 * 284 189 371 *168 762
|
||||||
|
4 565 226 562 190 281 257 * 889 57 210 *
|
||||||
|
47 120 * * 169 549 414 744 503 208
|
||||||
|
* 643 397 350 289 * 323 856
|
||||||
|
* 458 104 931 855 89 469 882 *
|
||||||
|
594 777 390 * 422 355 654 81 * * 282 630 195
|
||||||
|
* 568 912 * * 377 * *877 419 * 148 768 471 *
|
||||||
|
393 163 298 820 582 823 * 952
|
||||||
|
*268 *733 59 403 14 502 481 231
|
||||||
|
970 * 981 711 261 701 244 323 *
|
||||||
|
396 993 557 46 * 714*659 134 623 * 677 730 846
|
||||||
|
91 405 296 295 * 740 *
|
||||||
|
345 792 * 834 100 891 764 697 570 * 620* 508 295
|
||||||
|
*13 340 134 * * 247 660 607 705 165
|
||||||
|
521 824 222 * 372 290 844 825 867 820 627 * 128 777
|
||||||
|
629 * 788 535 * * 361 * 805 732 914
|
||||||
|
* 743 853 637 880 849* 425 946 590 *302 * 748
|
||||||
|
120 271 862 70 207 233 * 443 263
|
||||||
|
680 825 793 * 720 555 184 509 22 * 811
|
||||||
|
772 272 134 * 374 * 573 * *
|
||||||
|
934 231 * 821 230 981 707 370 * 634 787 * 93 909 70 199 59 490
|
||||||
|
* 525 * 747 676 * 829 324 952 *
|
||||||
|
189 791 236 687 868 505 713 777
|
||||||
@@ -0,0 +1,213 @@
|
|||||||
|
Card 1: 69 61 27 58 89 52 81 94 40 51 | 43 40 52 90 37 97 89 80 69 42 51 70 94 58 10 73 21 29 61 63 57 79 81 27 35
|
||||||
|
Card 2: 5 75 37 76 98 32 24 83 44 50 | 80 75 91 5 33 52 31 96 83 92 46 98 55 65 48 24 44 4 32 60 88 37 76 50 77
|
||||||
|
Card 3: 37 39 43 53 47 20 50 56 78 65 | 80 56 32 78 72 97 40 77 17 50 87 99 36 93 63 19 39 59 44 52 23 75 9 51 43
|
||||||
|
Card 4: 6 25 31 60 2 50 89 67 82 16 | 65 89 5 67 68 53 50 6 51 25 96 32 2 16 41 60 63 90 82 30 98 31 75 14 7
|
||||||
|
Card 5: 43 39 98 45 33 87 36 23 61 66 | 93 61 4 21 47 32 94 99 45 23 87 64 92 43 33 5 83 16 98 44 39 77 66 18 36
|
||||||
|
Card 6: 59 6 65 20 62 3 92 79 98 24 | 80 15 28 70 24 32 93 99 91 86 95 16 90 83 11 75 19 4 48 6 78 61 20 27 7
|
||||||
|
Card 7: 49 54 25 44 79 68 13 60 1 43 | 16 18 4 82 99 23 80 46 79 55 14 1 32 13 54 84 37 44 20 68 25 60 27 49 43
|
||||||
|
Card 8: 52 50 19 69 28 93 32 98 97 47 | 2 40 28 47 20 60 66 98 12 19 31 14 16 75 97 49 93 69 11 52 50 87 24 32 27
|
||||||
|
Card 9: 47 44 94 43 75 49 77 24 93 45 | 94 47 30 43 24 77 44 31 66 75 45 54 92 49 84 53 20 11 17 16 86 93 50 85 76
|
||||||
|
Card 10: 23 39 92 16 68 30 49 59 34 90 | 85 15 25 31 92 90 47 59 11 36 68 10 96 65 16 49 18 97 9 83 28 61 4 94 46
|
||||||
|
Card 11: 21 37 14 89 46 31 64 90 43 45 | 63 29 14 23 7 28 13 86 83 16 19 24 78 54 47 51 58 77 71 40 56 62 20 89 39
|
||||||
|
Card 12: 69 98 97 19 70 5 62 25 55 90 | 1 35 45 25 75 61 50 99 82 96 71 74 72 76 3 70 14 57 88 27 5 94 58 32 85
|
||||||
|
Card 13: 24 51 65 64 29 37 86 60 41 94 | 40 13 88 85 46 59 90 55 8 72 56 93 6 71 52 87 31 91 20 5 83 36 86 43 96
|
||||||
|
Card 14: 43 76 64 80 49 48 83 14 51 54 | 1 99 54 36 80 48 49 15 43 17 51 96 83 40 76 14 41 75 84 55 63 91 64 58 9
|
||||||
|
Card 15: 9 33 75 53 48 76 25 83 28 24 | 1 10 69 28 76 87 71 52 26 44 66 92 75 55 7 40 93 20 12 91 30 33 46 39 31
|
||||||
|
Card 16: 55 92 85 21 81 90 47 63 34 70 | 26 2 1 87 59 69 40 58 46 43 70 17 35 71 6 63 49 13 81 11 85 94 44 96 5
|
||||||
|
Card 17: 21 42 95 24 35 53 39 14 18 4 | 76 23 5 79 22 20 36 69 38 77 40 37 32 89 49 15 59 44 51 25 74 34 54 16 28
|
||||||
|
Card 18: 63 21 61 65 82 69 27 74 98 58 | 51 58 86 21 90 54 45 41 71 74 83 6 42 1 35 78 31 9 55 46 11 15 63 84 82
|
||||||
|
Card 19: 44 41 24 51 74 20 97 31 83 39 | 17 24 2 54 73 28 13 55 49 79 42 62 58 8 95 23 86 70 76 41 26 4 80 25 11
|
||||||
|
Card 20: 83 61 55 56 96 16 95 49 65 90 | 67 75 63 37 87 54 39 19 99 81 47 49 24 84 41 13 78 40 38 64 26 34 15 72 48
|
||||||
|
Card 21: 23 89 57 54 90 82 2 8 65 80 | 78 14 21 39 45 42 1 80 99 20 52 11 31 50 68 82 59 4 96 55 6 46 88 38 34
|
||||||
|
Card 22: 85 6 4 41 5 35 31 19 64 17 | 83 56 96 41 16 39 70 81 67 51 74 99 1 18 43 48 5 85 29 88 30 52 69 11 61
|
||||||
|
Card 23: 72 88 38 82 33 10 75 44 70 53 | 7 71 56 96 19 89 30 67 21 22 48 45 80 86 39 61 4 44 74 28 23 40 46 72 78
|
||||||
|
Card 24: 75 67 13 39 63 58 43 35 49 99 | 28 46 17 95 55 2 83 18 42 91 20 78 97 51 60 81 47 69 64 57 37 77 12 61 67
|
||||||
|
Card 25: 87 44 62 66 82 20 7 21 51 32 | 54 97 46 1 95 14 26 47 94 25 49 30 84 12 5 73 48 89 45 53 28 74 93 88 13
|
||||||
|
Card 26: 65 6 10 66 15 26 47 62 63 68 | 5 60 71 41 68 66 53 26 6 56 38 47 90 62 63 33 81 10 15 3 16 96 83 65 20
|
||||||
|
Card 27: 7 95 47 35 58 87 21 68 80 37 | 94 24 39 74 43 78 69 54 10 32 84 99 41 75 6 86 11 66 56 62 16 44 5 59 65
|
||||||
|
Card 28: 95 19 21 14 59 74 27 68 32 99 | 83 35 5 41 92 59 26 57 18 55 52 32 6 23 36 54 56 50 15 48 27 89 45 53 12
|
||||||
|
Card 29: 1 8 93 94 72 89 13 37 58 49 | 35 62 88 26 94 50 31 87 72 78 85 1 44 49 22 5 20 91 98 13 77 93 60 48 52
|
||||||
|
Card 30: 47 94 67 27 56 25 38 52 28 32 | 22 61 56 82 58 27 32 18 33 94 79 23 62 60 76 98 67 49 77 64 11 47 40 16 42
|
||||||
|
Card 31: 61 68 80 67 41 6 52 33 22 91 | 54 10 72 91 31 33 95 43 39 68 81 22 63 67 32 61 27 73 66 75 36 79 6 59 80
|
||||||
|
Card 32: 62 5 57 36 87 33 53 86 82 8 | 76 32 30 5 53 57 86 56 97 77 18 33 8 82 15 71 83 17 48 90 9 43 54 88 4
|
||||||
|
Card 33: 79 25 27 11 17 23 76 38 15 26 | 83 80 37 36 77 24 20 55 16 59 81 7 19 1 18 91 42 29 22 2 41 27 6 50 92
|
||||||
|
Card 34: 3 8 29 57 87 88 97 12 41 95 | 29 94 44 20 34 28 76 12 95 74 22 85 31 64 91 50 1 97 35 49 98 41 92 67 25
|
||||||
|
Card 35: 43 79 50 20 6 76 25 14 66 89 | 93 72 50 67 38 89 13 87 46 54 36 52 20 57 56 17 3 22 43 63 14 84 15 29 16
|
||||||
|
Card 36: 68 15 59 47 30 98 89 27 5 25 | 11 8 32 72 18 74 73 48 39 53 51 88 22 90 55 40 14 44 66 12 94 71 9 13 31
|
||||||
|
Card 37: 11 48 72 90 12 86 34 32 51 7 | 52 80 36 46 74 64 44 27 11 47 61 84 55 28 77 26 58 54 3 5 17 60 89 16 72
|
||||||
|
Card 38: 13 97 42 79 96 69 8 57 90 48 | 84 67 52 8 20 54 21 45 69 23 28 85 92 95 40 59 87 2 50 83 14 6 16 70 39
|
||||||
|
Card 39: 87 67 8 38 15 20 96 30 45 97 | 36 28 43 35 9 27 14 70 29 1 40 56 60 81 63 48 53 44 31 75 49 85 64 39 69
|
||||||
|
Card 40: 63 35 33 6 58 97 91 34 67 18 | 68 61 98 66 84 20 37 41 17 50 81 14 60 78 36 9 65 21 83 2 71 79 85 7 47
|
||||||
|
Card 41: 75 97 62 6 92 69 53 20 45 5 | 5 53 56 69 84 97 75 62 39 18 22 64 6 92 70 41 45 20 17 63 7 9 54 29 21
|
||||||
|
Card 42: 64 21 72 62 90 50 84 28 71 37 | 71 38 64 50 42 4 65 85 91 21 55 58 10 92 90 7 17 60 84 70 37 72 28 98 62
|
||||||
|
Card 43: 58 28 84 32 92 18 48 73 86 5 | 43 32 33 35 84 50 64 6 21 52 92 58 29 95 11 18 28 79 48 77 5 86 60 73 10
|
||||||
|
Card 44: 30 69 44 40 5 58 22 63 65 90 | 65 68 69 43 58 5 72 90 22 63 52 78 66 15 60 88 30 12 74 44 67 40 41 38 29
|
||||||
|
Card 45: 69 53 87 59 27 10 16 90 52 35 | 83 4 87 89 11 30 45 70 52 13 35 92 90 79 6 68 71 86 16 97 26 72 39 96 53
|
||||||
|
Card 46: 78 8 1 64 87 6 3 7 75 82 | 48 84 56 8 89 73 31 68 64 46 40 6 41 14 78 97 91 27 95 28 47 30 37 58 75
|
||||||
|
Card 47: 58 24 13 97 18 50 89 9 14 81 | 97 24 54 16 14 32 78 62 50 5 18 42 20 99 15 58 13 89 96 72 81 75 29 9 86
|
||||||
|
Card 48: 87 83 32 53 5 72 86 84 65 9 | 30 89 54 53 58 13 85 81 83 39 71 5 91 65 68 82 94 42 87 24 86 29 47 32 28
|
||||||
|
Card 49: 38 4 66 35 19 56 78 90 81 65 | 60 16 82 68 7 49 15 32 3 22 48 11 38 53 83 45 54 23 5 81 78 34 63 27 65
|
||||||
|
Card 50: 9 48 47 87 99 6 65 2 44 75 | 75 79 55 82 44 27 42 48 51 65 16 68 3 52 30 62 84 66 87 69 8 10 86 35 72
|
||||||
|
Card 51: 28 24 85 63 96 30 88 29 5 50 | 71 61 30 90 65 96 41 50 82 68 39 10 81 29 48 26 80 97 28 24 27 88 38 5 63
|
||||||
|
Card 52: 86 80 90 33 19 78 13 69 89 27 | 62 54 85 88 97 64 37 31 29 6 94 69 67 51 57 58 89 13 76 55 22 96 63 66 38
|
||||||
|
Card 53: 75 5 78 44 10 77 3 89 39 4 | 41 61 76 56 75 85 7 22 19 51 5 87 53 10 79 24 39 94 26 57 1 35 83 32 34
|
||||||
|
Card 54: 70 80 59 16 6 99 83 37 26 8 | 62 58 16 74 35 53 94 1 80 89 61 11 86 36 83 14 8 39 43 6 92 99 18 64 79
|
||||||
|
Card 55: 41 39 43 58 60 65 74 76 11 46 | 58 42 60 59 13 16 83 55 37 25 32 96 22 79 69 2 89 3 21 71 35 67 95 19 45
|
||||||
|
Card 56: 10 18 89 9 63 51 81 4 49 75 | 3 32 45 68 87 65 71 55 79 89 37 64 21 53 30 62 26 6 90 51 70 74 22 10 54
|
||||||
|
Card 57: 27 58 75 7 80 71 45 46 26 55 | 67 76 91 16 69 82 24 48 46 87 28 20 75 36 86 8 51 42 9 84 3 43 27 34 70
|
||||||
|
Card 58: 64 55 76 63 58 66 34 27 46 62 | 79 22 69 33 1 81 4 76 36 40 88 39 2 47 89 48 29 77 93 67 41 10 95 19 63
|
||||||
|
Card 59: 62 1 42 32 48 12 94 36 33 86 | 71 41 46 96 12 55 10 38 15 43 1 60 67 2 30 89 37 98 19 18 69 25 50 20 77
|
||||||
|
Card 60: 11 14 6 57 55 62 88 19 24 26 | 45 58 88 83 51 36 46 32 85 17 61 33 31 2 91 9 78 39 81 20 87 86 64 66 49
|
||||||
|
Card 61: 9 28 27 33 53 71 38 63 55 60 | 26 77 83 57 75 50 3 68 31 52 24 94 40 18 8 80 70 5 25 72 47 44 45 89 19
|
||||||
|
Card 62: 47 64 33 74 26 82 21 30 69 39 | 29 68 65 37 60 58 17 48 75 91 2 9 16 31 46 49 97 57 94 40 34 13 11 43 39
|
||||||
|
Card 63: 1 16 10 67 73 48 66 78 55 32 | 31 54 78 79 42 34 81 55 37 63 29 73 90 48 11 77 67 14 46 19 16 66 89 53 32
|
||||||
|
Card 64: 59 33 71 69 84 2 53 95 28 52 | 85 82 66 79 45 71 33 10 30 84 52 19 94 54 28 41 61 59 6 69 53 97 38 2 49
|
||||||
|
Card 65: 17 46 40 23 93 76 45 2 43 32 | 17 32 23 2 52 7 15 77 20 39 46 64 99 59 98 89 43 40 93 4 45 11 72 76 13
|
||||||
|
Card 66: 58 9 28 19 90 80 77 11 81 20 | 44 51 39 20 63 6 11 88 61 27 90 53 62 70 34 42 28 24 78 16 81 65 9 31 15
|
||||||
|
Card 67: 88 42 78 9 26 43 54 95 8 40 | 58 54 10 43 60 36 40 42 95 63 4 88 82 50 38 26 8 99 31 74 13 46 91 61 44
|
||||||
|
Card 68: 32 95 6 83 30 14 38 15 87 70 | 79 15 64 45 99 70 17 38 87 93 83 53 14 77 85 32 19 95 29 6 7 61 90 30 67
|
||||||
|
Card 69: 76 15 92 22 48 46 42 39 84 32 | 51 26 1 9 2 73 17 94 6 62 92 77 32 90 43 48 81 22 88 58 78 46 79 98 15
|
||||||
|
Card 70: 62 90 81 15 8 3 72 93 65 32 | 57 62 3 80 26 67 10 72 54 36 98 29 17 90 93 32 49 48 76 8 12 31 65 81 15
|
||||||
|
Card 71: 74 46 75 14 56 20 83 28 35 61 | 57 61 75 59 54 55 56 32 71 4 18 60 72 94 39 86 30 50 48 41 7 14 77 73 85
|
||||||
|
Card 72: 47 63 42 84 87 78 21 56 97 26 | 87 40 78 1 48 7 26 63 42 37 30 97 65 84 14 93 85 39 47 11 50 71 21 28 56
|
||||||
|
Card 73: 20 56 88 38 50 74 76 69 63 17 | 73 47 87 89 98 18 33 14 3 78 72 39 77 97 74 80 81 51 88 59 46 2 70 69 20
|
||||||
|
Card 74: 44 74 4 59 77 99 66 81 8 6 | 75 88 25 73 74 86 16 8 99 17 50 22 83 35 67 3 77 5 46 34 68 80 6 23 54
|
||||||
|
Card 75: 58 25 36 26 80 12 88 51 98 71 | 71 66 77 83 51 61 23 98 33 53 18 75 43 20 26 92 70 90 25 94 86 12 34 36 22
|
||||||
|
Card 76: 14 79 44 82 59 75 43 88 12 52 | 11 30 26 74 82 91 72 79 35 69 52 24 13 23 3 22 78 38 43 10 14 53 76 66 90
|
||||||
|
Card 77: 65 79 38 39 3 18 89 51 9 41 | 5 87 13 45 86 85 72 7 92 22 36 69 67 82 40 73 83 15 34 59 68 57 31 84 71
|
||||||
|
Card 78: 67 89 71 15 39 66 29 97 11 38 | 4 95 21 74 29 43 51 65 31 91 98 39 71 13 93 88 64 47 40 76 58 6 92 80 81
|
||||||
|
Card 79: 8 60 27 44 15 52 91 99 35 47 | 97 1 35 81 53 79 16 23 52 77 11 56 2 85 21 96 46 83 5 37 49 93 13 76 69
|
||||||
|
Card 80: 1 37 16 40 6 48 66 26 90 12 | 87 23 24 5 67 80 20 53 95 66 93 85 7 34 32 52 92 61 9 27 41 35 36 57 38
|
||||||
|
Card 81: 72 39 83 5 69 43 73 92 88 78 | 77 74 68 78 9 75 50 65 8 14 35 96 64 80 58 6 4 46 57 61 66 85 48 40 34
|
||||||
|
Card 82: 38 2 71 61 46 97 8 84 43 24 | 91 50 76 58 17 11 66 60 65 16 44 70 96 20 37 94 30 99 6 69 32 29 81 49 48
|
||||||
|
Card 83: 50 89 48 66 96 97 28 5 12 76 | 89 93 79 68 16 48 44 42 28 41 83 50 97 96 76 82 15 57 10 66 5 12 74 38 4
|
||||||
|
Card 84: 9 71 98 81 59 30 99 45 80 48 | 6 17 31 35 88 57 10 81 77 70 58 21 34 63 51 84 74 37 64 80 29 16 3 11 76
|
||||||
|
Card 85: 36 86 69 83 56 51 19 67 65 10 | 35 3 55 38 90 59 82 2 32 10 17 36 52 69 83 65 13 92 97 99 48 30 87 68 70
|
||||||
|
Card 86: 6 96 82 83 89 31 91 20 28 5 | 20 11 84 45 50 81 23 56 24 28 1 53 2 57 54 64 3 94 96 43 6 26 91 77 66
|
||||||
|
Card 87: 84 22 38 2 94 23 76 64 29 42 | 13 99 48 23 62 82 38 91 31 88 14 43 66 94 36 64 49 85 26 97 71 39 22 68 60
|
||||||
|
Card 88: 69 25 81 63 86 79 1 64 76 38 | 85 81 63 6 69 50 16 65 54 25 27 38 84 76 7 64 79 12 86 88 70 94 39 1 20
|
||||||
|
Card 89: 7 43 74 93 60 24 33 53 97 35 | 62 51 93 86 81 71 63 2 13 99 66 83 97 37 10 77 55 27 73 92 67 19 33 88 96
|
||||||
|
Card 90: 2 78 5 23 69 72 93 86 55 24 | 92 38 66 85 34 52 83 24 31 6 25 13 33 30 17 7 81 15 16 9 21 53 94 2 77
|
||||||
|
Card 91: 34 21 58 13 99 32 61 65 49 30 | 50 73 18 84 99 53 21 61 94 22 26 93 30 68 34 65 58 72 77 32 49 11 13 39 9
|
||||||
|
Card 92: 15 67 55 79 9 88 33 7 94 49 | 20 94 87 58 9 35 93 7 67 21 15 57 30 56 88 85 5 13 60 83 2 55 38 28 6
|
||||||
|
Card 93: 16 11 80 5 33 23 96 21 56 94 | 1 37 85 94 72 42 66 16 10 70 86 77 33 21 55 11 6 45 96 29 90 14 80 48 64
|
||||||
|
Card 94: 2 57 51 10 3 70 63 60 1 40 | 67 80 96 98 52 74 97 33 92 88 19 62 43 73 55 3 1 20 95 99 12 90 17 24 56
|
||||||
|
Card 95: 80 18 73 50 2 3 83 65 33 26 | 7 78 28 4 2 19 14 29 61 81 17 38 57 89 11 20 5 12 13 10 24 96 75 25 55
|
||||||
|
Card 96: 98 53 54 50 20 34 28 96 59 88 | 52 41 53 29 40 15 88 93 30 76 97 81 73 17 12 70 6 63 27 32 64 48 69 96 44
|
||||||
|
Card 97: 66 82 79 74 75 71 29 32 96 50 | 62 46 76 30 21 50 98 17 32 75 87 96 41 42 79 73 45 92 51 91 78 35 27 72 74
|
||||||
|
Card 98: 93 39 91 70 97 33 57 69 53 73 | 38 71 33 25 52 26 75 94 93 42 17 82 7 27 47 89 18 11 20 91 40 31 55 19 4
|
||||||
|
Card 99: 93 31 61 29 77 60 66 92 3 10 | 55 63 56 4 61 33 60 85 45 48 78 27 25 36 42 93 20 67 49 21 7 83 65 13 71
|
||||||
|
Card 100: 21 86 19 62 53 34 88 42 71 47 | 74 7 79 85 22 60 76 10 40 62 50 92 20 24 12 42 15 31 56 90 44 72 34 11 95
|
||||||
|
Card 101: 8 68 64 72 98 60 56 69 57 25 | 24 5 95 77 89 58 39 63 80 48 53 66 38 61 31 3 43 1 16 71 52 82 19 14 51
|
||||||
|
Card 102: 47 39 45 40 54 93 87 26 33 67 | 95 80 98 3 24 53 96 9 90 13 35 21 86 88 63 55 1 42 25 56 32 60 34 40 77
|
||||||
|
Card 103: 64 18 52 28 82 54 31 49 66 44 | 4 78 40 73 32 99 33 6 29 46 11 25 47 36 14 97 79 61 63 50 55 26 30 58 77
|
||||||
|
Card 104: 95 84 89 87 57 53 12 43 58 1 | 59 45 57 58 39 61 52 81 43 40 23 86 1 97 95 55 89 84 87 6 17 85 53 12 28
|
||||||
|
Card 105: 98 81 56 52 37 26 46 39 88 36 | 4 34 88 32 5 73 98 26 39 77 93 42 62 82 41 81 56 1 12 33 46 36 14 52 37
|
||||||
|
Card 106: 97 98 42 95 14 87 41 46 44 27 | 5 82 46 66 87 41 51 55 13 27 7 44 31 97 77 10 14 90 98 94 95 12 79 42 35
|
||||||
|
Card 107: 15 30 60 32 25 73 77 63 85 81 | 16 86 56 41 20 51 25 52 73 40 74 32 15 61 99 34 60 85 77 30 5 27 63 35 81
|
||||||
|
Card 108: 65 59 24 72 54 66 14 81 67 31 | 94 92 83 67 50 19 61 6 42 55 60 97 22 18 24 40 86 43 72 56 5 75 63 45 90
|
||||||
|
Card 109: 90 87 3 17 80 96 36 93 34 79 | 51 11 29 96 13 66 70 99 72 67 64 42 37 30 55 98 35 12 15 84 5 10 57 19 49
|
||||||
|
Card 110: 57 82 85 42 23 76 70 64 88 21 | 65 32 76 81 7 43 23 52 55 14 70 58 27 82 48 64 85 47 57 16 46 97 68 21 45
|
||||||
|
Card 111: 50 62 66 33 93 43 56 70 77 35 | 94 79 19 16 35 41 78 32 91 4 14 3 13 48 63 36 75 98 64 69 27 96 77 51 74
|
||||||
|
Card 112: 6 36 83 73 59 48 65 12 29 92 | 12 36 82 52 8 35 88 69 9 28 89 39 87 20 22 67 27 63 75 73 70 58 31 78 79
|
||||||
|
Card 113: 25 10 29 67 87 32 54 92 62 43 | 65 19 67 75 79 29 8 73 62 97 82 87 25 18 32 93 49 5 66 27 68 42 43 11 46
|
||||||
|
Card 114: 29 44 96 86 64 37 4 71 94 98 | 5 27 55 76 33 59 68 77 3 96 15 1 46 20 35 61 53 83 78 69 99 97 34 30 25
|
||||||
|
Card 115: 32 90 91 88 39 66 37 35 12 21 | 85 82 71 37 87 22 72 17 35 9 58 95 64 12 33 90 68 66 15 43 4 7 91 8 84
|
||||||
|
Card 116: 75 50 66 77 51 36 98 23 97 28 | 4 66 44 20 35 76 51 83 58 89 91 87 75 27 10 47 1 60 97 90 77 45 63 59 36
|
||||||
|
Card 117: 85 44 56 82 39 64 30 88 79 20 | 71 88 53 27 36 85 13 11 38 91 77 19 3 99 23 73 39 44 24 45 32 15 58 79 56
|
||||||
|
Card 118: 80 41 82 32 1 52 91 40 66 11 | 72 3 4 29 77 87 36 40 16 46 66 30 92 76 98 49 85 7 32 28 60 86 52 95 83
|
||||||
|
Card 119: 50 66 77 26 2 49 9 25 58 81 | 80 49 50 55 16 56 20 42 31 99 69 26 28 85 66 65 70 90 84 53 40 19 60 12 38
|
||||||
|
Card 120: 48 9 95 85 16 70 81 61 57 92 | 2 58 66 10 34 54 7 94 16 14 25 74 92 49 88 13 57 26 99 97 70 75 65 19 17
|
||||||
|
Card 121: 50 76 20 25 53 17 2 78 85 86 | 14 40 78 89 93 48 1 28 11 4 54 71 5 69 85 61 38 94 66 64 98 95 30 67 23
|
||||||
|
Card 122: 62 92 40 16 25 82 64 87 52 53 | 5 19 25 48 38 42 1 99 51 79 2 78 75 57 81 56 70 47 59 91 90 6 9 24 15
|
||||||
|
Card 123: 50 91 29 69 41 73 44 51 13 26 | 66 55 22 6 17 71 1 3 67 24 88 79 65 64 60 34 7 90 78 72 28 83 82 74 10
|
||||||
|
Card 124: 61 77 51 39 73 4 6 25 53 91 | 54 88 26 11 3 79 10 86 23 49 66 21 47 85 5 2 98 7 1 60 55 13 94 34 62
|
||||||
|
Card 125: 31 67 93 63 21 28 12 85 39 57 | 69 46 22 59 55 75 11 97 70 1 94 14 81 96 79 44 18 36 85 34 56 48 30 72 15
|
||||||
|
Card 126: 31 89 5 98 63 36 40 48 91 12 | 91 42 6 47 51 94 48 83 5 77 98 8 11 50 29 9 36 54 89 40 12 63 31 34 73
|
||||||
|
Card 127: 41 88 97 87 13 80 74 49 24 6 | 43 66 62 47 36 87 6 88 24 49 96 56 25 79 8 76 23 97 41 42 80 89 13 73 74
|
||||||
|
Card 128: 7 6 3 99 56 40 80 27 23 43 | 34 64 97 67 3 78 69 43 57 98 96 4 6 94 62 48 23 68 8 1 58 73 75 65 16
|
||||||
|
Card 129: 46 80 39 32 35 41 61 93 57 47 | 40 63 93 89 61 4 45 46 25 96 80 39 35 14 62 95 49 32 47 2 41 99 57 82 44
|
||||||
|
Card 130: 90 10 79 84 88 76 59 18 62 11 | 79 11 53 97 92 5 88 52 23 60 62 64 86 84 14 20 98 91 10 28 24 29 87 65 3
|
||||||
|
Card 131: 95 50 11 76 61 4 2 8 42 47 | 40 15 46 61 8 2 29 97 65 50 19 83 76 95 59 82 48 57 43 72 42 25 31 47 53
|
||||||
|
Card 132: 49 86 99 81 13 98 69 32 89 18 | 89 84 65 58 32 15 96 49 1 18 22 13 98 99 6 81 46 50 88 78 3 11 69 74 86
|
||||||
|
Card 133: 18 56 75 7 48 40 38 22 10 90 | 10 42 61 18 91 38 12 67 72 54 51 22 86 77 81 87 75 34 89 97 35 6 96 7 62
|
||||||
|
Card 134: 67 66 99 61 98 32 6 82 86 9 | 12 8 33 87 82 66 98 78 68 24 59 80 6 44 32 49 9 2 97 65 86 71 99 61 67
|
||||||
|
Card 135: 24 59 92 68 44 20 30 8 40 77 | 28 72 51 38 58 40 30 24 21 77 92 82 59 18 50 7 19 44 20 68 91 8 32 88 94
|
||||||
|
Card 136: 27 10 70 96 29 69 37 63 86 65 | 28 27 8 34 29 82 78 56 22 30 3 19 63 88 67 74 75 4 91 41 35 65 7 14 66
|
||||||
|
Card 137: 74 70 86 34 89 37 73 23 29 85 | 16 65 58 88 8 5 11 26 39 91 51 31 19 78 92 87 36 34 80 94 42 81 38 40 93
|
||||||
|
Card 138: 71 35 5 13 69 8 88 11 76 31 | 69 42 5 59 76 54 37 11 39 9 12 73 66 13 71 89 56 26 28 77 2 31 1 4 57
|
||||||
|
Card 139: 10 50 78 91 55 61 81 19 44 59 | 97 98 39 52 56 28 94 24 3 54 45 82 14 17 5 16 27 99 37 38 26 31 53 9 35
|
||||||
|
Card 140: 17 93 15 73 45 20 43 50 2 52 | 64 21 15 57 77 90 2 61 22 8 91 39 93 82 62 5 47 30 41 80 58 1 17 25 48
|
||||||
|
Card 141: 52 66 4 8 87 11 14 76 23 24 | 3 55 29 16 26 61 12 43 89 15 56 24 5 36 85 62 90 75 65 71 53 45 38 50 54
|
||||||
|
Card 142: 57 35 91 73 66 67 64 63 92 18 | 96 58 44 37 19 41 72 54 52 31 88 20 45 68 42 21 2 59 62 53 70 63 77 57 69
|
||||||
|
Card 143: 88 70 69 13 18 97 64 89 40 29 | 74 98 30 5 85 12 38 62 66 33 36 17 71 9 97 22 47 79 39 60 89 13 83 77 8
|
||||||
|
Card 144: 14 35 52 8 75 43 62 33 36 70 | 13 95 71 64 6 48 74 84 61 24 89 77 17 58 87 75 76 43 28 54 3 83 99 67 12
|
||||||
|
Card 145: 53 88 65 42 72 92 43 14 3 90 | 21 19 33 59 84 61 96 41 20 31 88 71 38 72 79 48 58 55 62 36 23 11 30 18 70
|
||||||
|
Card 146: 68 28 58 96 42 32 22 90 19 47 | 84 25 39 96 67 26 29 24 9 62 1 14 46 11 77 81 61 82 60 80 78 52 31 98 49
|
||||||
|
Card 147: 81 85 76 67 4 63 25 97 57 27 | 2 26 43 9 56 59 29 10 13 45 35 60 86 65 15 46 19 5 79 8 44 1 6 20 21
|
||||||
|
Card 148: 90 41 37 66 94 87 84 14 9 29 | 94 47 5 10 23 38 61 87 55 22 75 97 37 29 30 9 18 84 69 41 11 73 43 45 14
|
||||||
|
Card 149: 84 30 17 21 47 26 81 68 57 40 | 86 78 70 5 54 40 34 38 47 72 62 56 53 7 10 37 73 92 46 61 41 74 68 23 63
|
||||||
|
Card 150: 83 21 33 53 37 57 66 29 41 6 | 20 61 75 89 59 60 41 83 21 29 30 57 66 58 37 76 90 96 53 69 33 17 12 95 6
|
||||||
|
Card 151: 12 5 52 36 3 29 69 6 82 27 | 82 12 27 44 50 15 76 28 29 52 57 36 73 3 34 5 94 37 6 92 84 9 10 98 69
|
||||||
|
Card 152: 82 62 80 30 37 68 41 89 12 5 | 60 32 64 57 41 74 89 16 72 20 26 6 91 18 52 68 62 55 5 30 82 1 37 80 12
|
||||||
|
Card 153: 97 28 55 92 70 83 58 44 67 40 | 24 58 55 88 92 40 6 83 12 70 10 22 44 76 82 97 4 98 65 28 5 32 7 67 74
|
||||||
|
Card 154: 31 50 70 87 43 26 55 30 14 54 | 43 72 90 20 10 13 91 54 75 39 26 70 17 87 22 60 29 1 27 69 14 31 50 67 55
|
||||||
|
Card 155: 21 4 25 52 3 16 98 43 72 81 | 87 4 21 43 90 67 39 36 13 64 6 25 29 16 83 84 5 98 9 81 78 1 74 12 96
|
||||||
|
Card 156: 77 46 21 67 59 78 63 30 45 48 | 48 35 17 62 44 25 34 67 23 13 63 81 99 29 93 84 73 96 86 90 88 30 60 85 21
|
||||||
|
Card 157: 43 32 99 39 58 3 38 81 79 41 | 79 41 34 8 99 80 70 43 51 38 29 68 32 83 58 2 6 36 63 95 81 67 3 28 10
|
||||||
|
Card 158: 43 68 57 98 30 58 47 40 12 93 | 91 62 48 6 52 16 72 34 28 85 81 94 26 4 99 30 71 44 80 65 40 60 58 18 49
|
||||||
|
Card 159: 62 30 18 57 61 68 65 98 10 56 | 98 32 29 1 15 77 55 10 13 30 80 93 38 86 70 99 97 19 85 33 17 21 48 47 89
|
||||||
|
Card 160: 30 47 79 28 57 77 73 75 35 40 | 98 25 96 11 15 34 19 35 6 38 1 91 29 57 61 22 69 12 40 21 41 17 27 39 56
|
||||||
|
Card 161: 62 58 10 14 73 95 77 97 47 70 | 15 46 1 36 3 66 27 77 49 45 94 65 23 61 76 8 91 42 82 13 85 67 92 68 53
|
||||||
|
Card 162: 47 24 44 73 3 10 30 98 5 29 | 75 99 37 41 60 43 13 67 74 23 82 40 35 64 77 25 4 9 58 56 8 7 85 70 66
|
||||||
|
Card 163: 10 17 99 41 6 14 81 23 5 84 | 95 11 99 62 53 23 8 73 48 42 96 47 39 94 56 30 58 63 22 66 33 26 35 5 43
|
||||||
|
Card 164: 71 32 31 15 73 3 70 91 61 18 | 3 16 77 70 33 94 62 40 88 32 90 98 66 49 86 68 95 7 53 97 96 28 4 75 35
|
||||||
|
Card 165: 61 74 1 76 17 22 19 83 5 96 | 83 5 47 29 52 40 94 32 70 95 67 84 56 31 18 62 42 9 53 36 57 48 64 15 85
|
||||||
|
Card 166: 84 96 57 6 48 13 42 12 19 99 | 67 29 25 81 77 69 63 56 8 27 80 62 94 30 78 10 45 49 20 95 50 66 61 6 24
|
||||||
|
Card 167: 21 41 29 39 24 98 68 40 7 78 | 44 19 53 13 17 4 2 64 87 60 1 51 10 35 94 52 25 75 92 95 80 67 82 42 86
|
||||||
|
Card 168: 18 72 92 63 3 38 82 65 85 61 | 53 14 92 63 74 75 97 56 85 82 30 4 42 34 18 61 72 65 20 47 43 3 38 39 40
|
||||||
|
Card 169: 98 91 13 27 52 51 36 82 80 78 | 78 42 51 62 36 38 4 95 82 17 91 27 12 98 76 13 84 52 80 32 39 50 48 19 2
|
||||||
|
Card 170: 94 67 3 32 73 84 11 47 23 90 | 94 84 66 73 32 31 23 18 93 29 58 81 95 16 46 53 89 4 11 44 49 67 90 82 40
|
||||||
|
Card 171: 2 55 5 19 59 73 29 65 12 23 | 33 75 5 53 90 95 68 73 29 71 11 45 72 54 59 12 55 85 56 19 17 24 8 92 2
|
||||||
|
Card 172: 74 43 65 15 59 37 11 83 20 85 | 59 30 36 97 78 65 88 20 96 11 51 22 93 63 94 28 3 90 68 95 73 43 13 74 85
|
||||||
|
Card 173: 53 46 64 33 65 55 8 81 1 36 | 12 22 78 35 57 96 36 3 27 29 52 80 2 79 8 76 93 54 1 24 48 32 94 14 64
|
||||||
|
Card 174: 20 38 12 24 28 39 18 59 75 94 | 95 48 91 36 56 63 62 46 67 4 32 97 39 66 93 55 50 34 5 85 29 76 45 54 7
|
||||||
|
Card 175: 26 96 12 74 65 57 51 18 83 75 | 26 89 74 83 65 12 58 88 92 22 8 39 18 51 34 96 75 44 94 35 30 90 69 57 23
|
||||||
|
Card 176: 48 64 15 96 42 33 88 27 50 86 | 36 85 60 68 93 63 33 17 28 70 24 50 96 38 54 53 72 90 41 86 74 88 75 64 48
|
||||||
|
Card 177: 66 27 35 76 89 90 31 26 20 95 | 51 94 62 77 31 5 16 20 30 86 75 42 23 11 69 24 87 76 27 60 80 46 43 57 90
|
||||||
|
Card 178: 83 38 10 89 18 80 1 67 63 7 | 37 28 46 84 94 89 38 21 24 68 25 92 60 34 58 54 76 55 11 19 85 33 93 15 8
|
||||||
|
Card 179: 59 82 88 8 21 16 55 2 56 45 | 2 26 73 81 90 5 13 55 21 82 69 8 22 99 36 68 53 88 86 56 16 7 45 87 28
|
||||||
|
Card 180: 95 5 4 34 30 73 98 89 6 37 | 7 28 72 6 95 37 68 4 34 98 82 73 84 8 65 5 89 57 15 42 56 45 69 11 74
|
||||||
|
Card 181: 85 69 79 50 37 34 11 84 5 89 | 4 35 99 48 21 97 93 25 8 37 47 79 34 16 76 26 55 67 50 75 63 15 58 84 5
|
||||||
|
Card 182: 70 10 57 74 60 93 9 41 79 32 | 19 18 96 8 49 2 50 94 93 4 23 89 11 39 38 97 58 56 82 21 13 28 65 47 29
|
||||||
|
Card 183: 53 70 11 25 1 37 32 4 78 45 | 23 54 83 35 11 41 1 47 18 60 36 71 10 64 95 49 69 32 45 46 61 9 4 52 25
|
||||||
|
Card 184: 71 31 19 43 12 93 30 56 17 27 | 61 20 92 50 33 17 51 89 45 24 39 64 23 18 52 2 41 46 63 84 88 7 99 27 78
|
||||||
|
Card 185: 44 55 78 43 18 33 69 81 82 9 | 39 57 42 79 76 67 58 1 26 63 54 82 70 22 66 55 15 38 74 96 46 53 51 28 99
|
||||||
|
Card 186: 25 76 9 33 59 42 82 6 79 4 | 10 50 20 18 93 95 62 40 22 70 48 16 75 15 49 81 64 94 6 21 73 80 78 77 83
|
||||||
|
Card 187: 43 33 83 89 36 31 86 22 13 14 | 3 78 63 34 8 38 23 16 81 80 54 1 95 92 60 24 82 49 44 68 62 46 66 97 28
|
||||||
|
Card 188: 81 6 49 46 11 77 99 82 84 51 | 36 45 18 87 48 35 86 7 83 31 38 61 92 98 70 78 74 59 63 66 15 85 47 96 1
|
||||||
|
Card 189: 50 43 3 38 20 80 40 70 82 74 | 29 55 1 2 45 97 59 49 60 79 88 90 94 57 12 24 47 61 5 52 95 75 63 48 32
|
||||||
|
Card 190: 22 66 97 81 70 24 53 76 17 35 | 92 59 1 36 97 70 34 77 69 55 17 81 62 67 71 91 58 24 76 87 45 30 33 35 22
|
||||||
|
Card 191: 20 65 9 10 98 71 60 83 51 34 | 68 51 10 26 20 4 56 24 34 9 65 83 60 55 5 27 8 43 71 98 14 21 32 48 64
|
||||||
|
Card 192: 92 77 16 8 1 87 51 14 89 76 | 13 10 60 19 93 97 16 11 51 47 76 30 91 24 14 89 77 35 8 28 87 21 92 1 22
|
||||||
|
Card 193: 53 24 36 45 60 18 35 25 12 28 | 98 29 92 35 52 99 12 45 74 18 28 30 70 68 55 24 25 77 81 36 72 20 53 50 60
|
||||||
|
Card 194: 50 83 40 8 87 28 79 27 44 91 | 37 80 88 17 90 40 67 87 20 76 77 52 68 1 55 35 14 61 4 96 75 83 10 71 8
|
||||||
|
Card 195: 6 41 29 40 96 49 9 55 51 18 | 69 30 77 83 47 52 59 55 70 10 92 19 85 11 86 42 53 38 35 90 51 46 80 91 84
|
||||||
|
Card 196: 92 29 86 97 9 30 87 6 15 4 | 18 46 50 63 30 14 6 82 3 53 55 26 29 86 85 70 4 89 90 24 10 35 27 9 20
|
||||||
|
Card 197: 80 1 81 94 98 75 58 9 19 10 | 26 37 57 58 22 1 19 94 10 87 70 5 95 40 53 81 89 93 8 80 86 9 36 75 98
|
||||||
|
Card 198: 29 41 51 44 7 84 65 62 20 74 | 74 5 72 62 41 88 23 49 66 97 31 84 18 51 20 10 29 19 44 7 1 60 40 78 30
|
||||||
|
Card 199: 20 2 3 95 63 60 10 81 87 90 | 60 54 3 61 38 77 42 32 62 82 90 35 9 81 2 20 87 63 8 65 95 19 30 10 85
|
||||||
|
Card 200: 80 76 17 57 36 9 70 65 1 13 | 88 50 96 87 77 36 14 70 86 29 68 90 93 3 25 65 74 83 78 62 9 69 47 22 8
|
||||||
|
Card 201: 19 43 79 93 31 72 66 7 18 55 | 72 20 71 43 57 19 53 83 47 35 37 67 13 31 74 81 76 18 44 55 93 97 26 84 11
|
||||||
|
Card 202: 26 65 71 57 14 86 49 66 1 23 | 27 41 16 51 82 72 13 55 14 21 69 62 15 46 63 78 22 31 30 57 76 45 3 71 86
|
||||||
|
Card 203: 53 43 69 4 76 74 73 11 34 88 | 46 68 63 19 55 64 88 51 33 15 17 57 53 42 76 66 80 34 11 69 73 96 59 74 16
|
||||||
|
Card 204: 9 6 64 82 79 1 73 68 39 57 | 92 82 49 53 84 4 69 20 30 13 16 1 26 76 60 57 91 65 24 12 34 56 33 38 59
|
||||||
|
Card 205: 45 6 76 94 78 35 95 20 85 90 | 89 94 28 15 48 87 56 32 40 88 21 33 51 53 54 67 64 9 17 78 6 57 12 98 95
|
||||||
|
Card 206: 32 94 53 98 84 82 48 45 8 25 | 84 4 25 97 12 93 35 60 42 80 61 62 18 8 32 17 94 23 63 53 31 3 48 43 20
|
||||||
|
Card 207: 40 18 52 70 55 29 49 43 15 20 | 38 39 78 70 35 81 34 29 51 55 17 43 52 64 16 21 69 27 47 88 2 99 18 54 3
|
||||||
|
Card 208: 9 67 74 14 59 41 84 60 73 86 | 87 16 27 86 50 7 30 77 64 76 73 71 99 92 23 82 2 5 55 57 40 47 45 72 21
|
||||||
|
Card 209: 45 50 11 39 28 93 77 92 41 18 | 32 6 56 34 15 87 48 64 41 30 3 46 42 21 44 72 59 29 25 77 83 66 5 12 11
|
||||||
|
Card 210: 34 74 60 33 14 25 27 98 54 75 | 90 79 69 27 70 4 40 93 66 62 65 3 8 42 34 92 53 98 56 89 57 13 52 38 30
|
||||||
|
Card 211: 20 21 98 93 33 65 13 48 81 53 | 19 82 78 95 77 54 89 61 58 74 39 43 1 64 73 11 72 7 32 9 17 46 8 84 86
|
||||||
|
Card 212: 46 82 24 14 63 38 94 70 79 91 | 23 83 87 4 48 81 40 13 84 68 22 65 45 11 88 75 98 1 15 56 64 44 35 7 3
|
||||||
|
Card 213: 79 84 12 86 58 10 11 24 32 26 | 52 94 65 29 89 7 76 80 31 21 78 37 66 69 13 41 93 73 96 16 92 44 62 3 95
|
||||||
@@ -0,0 +1,249 @@
|
|||||||
|
seeds: 763445965 78570222 1693788857 146680070 1157620425 535920936 3187993807 180072493 1047354752 20193861 2130924847 274042257 20816377 596708258 950268560 11451287 3503767450 182465951 3760349291 265669041
|
||||||
|
|
||||||
|
seed-to-soil map:
|
||||||
|
0 1894195346 315486903
|
||||||
|
1184603419 2977305241 40929361
|
||||||
|
1225532780 597717 4698739
|
||||||
|
1988113706 1603988885 78481073
|
||||||
|
679195301 529385087 505408118
|
||||||
|
1781158512 2285166785 39457705
|
||||||
|
352613463 2324624490 326581838
|
||||||
|
1820616217 1738931330 104130014
|
||||||
|
2066594779 2671974456 78036460
|
||||||
|
1288754536 1682469958 56461372
|
||||||
|
1371340411 3442489267 409818101
|
||||||
|
3341036988 1092718505 511270380
|
||||||
|
315486903 1857068786 37126560
|
||||||
|
1924746231 2209682249 49360033
|
||||||
|
1345215908 2259042282 26124503
|
||||||
|
2917167497 2651206328 20768128
|
||||||
|
1230231519 1034793205 57925300
|
||||||
|
2144631239 3421335965 21153302
|
||||||
|
2689873172 2750010916 227294325
|
||||||
|
1974106264 1843061344 14007442
|
||||||
|
2165784541 5296456 524088631
|
||||||
|
1288156819 0 597717
|
||||||
|
2937935625 3018234602 403101363
|
||||||
|
|
||||||
|
soil-to-fertilizer map:
|
||||||
|
3849355959 3101885274 170573538
|
||||||
|
3006688391 3025445580 66663107
|
||||||
|
1656285214 0 92188755
|
||||||
|
2361256790 4033128077 180329908
|
||||||
|
2073349245 3676064680 287907545
|
||||||
|
3458323699 4213457985 81509311
|
||||||
|
2607585697 2380345050 99923790
|
||||||
|
2541586698 3332501375 61727497
|
||||||
|
3789313396 3272458812 60042563
|
||||||
|
1858319884 917612384 162600389
|
||||||
|
404885474 510011966 407600418
|
||||||
|
4019929497 3603127472 72937208
|
||||||
|
812485892 1190058688 253881561
|
||||||
|
2603314195 2073349245 4271502
|
||||||
|
1469824760 92188755 186460454
|
||||||
|
0 278649209 231362757
|
||||||
|
1249323571 1443940249 220501189
|
||||||
|
4285190709 3092108687 9776587
|
||||||
|
1066367453 1817839802 182956118
|
||||||
|
3257369783 2724171240 184379320
|
||||||
|
2707509487 2480268840 111317034
|
||||||
|
2818826521 2192483180 187861870
|
||||||
|
1748473969 1080212773 109845915
|
||||||
|
3441749103 3394228872 16574596
|
||||||
|
3142507350 2077620747 114862433
|
||||||
|
3539833010 2908550560 116895020
|
||||||
|
231362757 1664441438 153398364
|
||||||
|
384761121 2000795920 20124353
|
||||||
|
3656728030 2591585874 132585366
|
||||||
|
3073351498 3963972225 69155852
|
||||||
|
4092866705 3410803468 192324004
|
||||||
|
|
||||||
|
fertilizer-to-water map:
|
||||||
|
2289944373 962149121 35670423
|
||||||
|
3187295333 3295892606 34862460
|
||||||
|
3798694276 3187295333 48036047
|
||||||
|
3633796172 3644673845 164898104
|
||||||
|
3222157793 3909959418 311250910
|
||||||
|
922447685 2248438960 142418952
|
||||||
|
648510907 2390857912 2187794
|
||||||
|
3533408703 3809571949 100387469
|
||||||
|
650698701 1840321280 271748984
|
||||||
|
464371310 553340958 30176545
|
||||||
|
3907291549 3330755066 313918779
|
||||||
|
2791296727 461310335 25110510
|
||||||
|
397451197 486420845 66920113
|
||||||
|
3846730323 3235331380 60561226
|
||||||
|
2575399801 2393045706 96151163
|
||||||
|
1064866637 583517503 106955439
|
||||||
|
1308190772 822897256 139251865
|
||||||
|
0 236670371 224639964
|
||||||
|
2671550964 0 119745763
|
||||||
|
1171822076 2112070264 136368696
|
||||||
|
224639964 690472942 132424314
|
||||||
|
494547855 2489196869 153963052
|
||||||
|
2498862112 160132682 76537689
|
||||||
|
1447442637 997819544 842501736
|
||||||
|
357064278 119745763 40386919
|
||||||
|
2325614796 2643159921 173247316
|
||||||
|
|
||||||
|
water-to-light map:
|
||||||
|
3181220930 3836164803 159006567
|
||||||
|
1405924027 2473049234 39930303
|
||||||
|
1275636734 1411161599 10830099
|
||||||
|
3831476263 1580605379 266491658
|
||||||
|
1570444205 1294782382 116379217
|
||||||
|
3133505036 2271845049 47715894
|
||||||
|
1305612481 2512979537 100311546
|
||||||
|
1286466833 1275636734 19145648
|
||||||
|
167024508 145118817 64336111
|
||||||
|
92584517 615923894 40913901
|
||||||
|
2227655152 2098041405 130620812
|
||||||
|
2181794752 2613291083 34326669
|
||||||
|
433451288 209454928 64553504
|
||||||
|
4223684323 2228662217 43182832
|
||||||
|
3527642272 3532330812 303833991
|
||||||
|
2855274869 2647617752 119788915
|
||||||
|
4266867155 2319560943 28100141
|
||||||
|
231360619 1167459710 18705935
|
||||||
|
2136463524 3995171370 45331228
|
||||||
|
2978600831 1421991698 154904205
|
||||||
|
4097967921 2825698355 78160170
|
||||||
|
0 489813287 92584517
|
||||||
|
1686823422 3023927616 328136942
|
||||||
|
2014960364 2903858525 116532044
|
||||||
|
1512152517 2767406667 58291688
|
||||||
|
395185371 1129193793 38265917
|
||||||
|
498004792 274008432 215804855
|
||||||
|
2975063784 3020390569 3537047
|
||||||
|
3340227497 3352064558 180266254
|
||||||
|
3524203227 4040502598 3439045
|
||||||
|
713809647 656837795 472355998
|
||||||
|
1445854330 2395217316 66298187
|
||||||
|
3520493751 1576895903 3709476
|
||||||
|
4176128091 2347661084 47556232
|
||||||
|
2216121421 2461515503 11533731
|
||||||
|
2604330501 1847097037 250944368
|
||||||
|
2358275964 4043941643 246054537
|
||||||
|
133498418 582397804 33526090
|
||||||
|
2131492408 4289996180 4971116
|
||||||
|
250066554 0 145118817
|
||||||
|
|
||||||
|
light-to-temperature map:
|
||||||
|
1212130960 1395832798 58636484
|
||||||
|
542019293 812004214 195851408
|
||||||
|
1706861165 2688952641 3198757
|
||||||
|
3097592274 3018951608 116723898
|
||||||
|
1148165381 3135675506 2936711
|
||||||
|
938881022 300892136 26815610
|
||||||
|
2884354982 3318488806 103553821
|
||||||
|
789335095 421331130 149545927
|
||||||
|
3270968199 1036156523 69989778
|
||||||
|
1142047574 1030038716 6117807
|
||||||
|
1710059922 1367448764 28384034
|
||||||
|
3961474833 1257923390 109525374
|
||||||
|
300892136 570877057 241127157
|
||||||
|
2564647329 3422042627 200129932
|
||||||
|
3534803741 2001828127 16273450
|
||||||
|
1738443956 1454469282 486329977
|
||||||
|
3717055162 2018101577 244419671
|
||||||
|
4071000207 2781125469 223967089
|
||||||
|
1030038716 3005092558 13859050
|
||||||
|
737870701 358179343 20992797
|
||||||
|
3388483069 4209077325 84901810
|
||||||
|
3551077191 3622172559 62988195
|
||||||
|
3614065386 2769635501 11489968
|
||||||
|
3215304333 3262824940 55663866
|
||||||
|
2278270544 2395185346 286376785
|
||||||
|
1151102092 1940799259 61028868
|
||||||
|
3625555354 4044566844 91499808
|
||||||
|
2987908803 1106146301 109683471
|
||||||
|
1134657064 2681562131 7390510
|
||||||
|
2236365744 2353280546 41904800
|
||||||
|
1270767444 3685160754 311880998
|
||||||
|
1043897766 2262521248 90759298
|
||||||
|
2806870879 2692151398 77484103
|
||||||
|
3340957977 3997041752 47525092
|
||||||
|
3214316172 4293979135 988161
|
||||||
|
2764777261 1215829772 42093618
|
||||||
|
965696632 379172140 42158990
|
||||||
|
3473384879 4147658463 61418862
|
||||||
|
2224773933 4136066652 11591811
|
||||||
|
1582648442 3201806221 61018719
|
||||||
|
758863498 327707746 30471597
|
||||||
|
1643667161 3138612217 63194004
|
||||||
|
|
||||||
|
temperature-to-humidity map:
|
||||||
|
3893671309 2897869925 193525827
|
||||||
|
1232495182 999263760 191357681
|
||||||
|
2440090529 1477966061 163000786
|
||||||
|
3554817869 2745268041 3258240
|
||||||
|
2845194314 3091395752 30017739
|
||||||
|
4087197136 1397536284 33207741
|
||||||
|
131252236 827398049 11627380
|
||||||
|
2183328852 2476037434 27127608
|
||||||
|
2603091315 2503165042 242102999
|
||||||
|
2875212053 1778930312 348370034
|
||||||
|
1427151141 891672290 77843721
|
||||||
|
1642958327 3928570372 200739395
|
||||||
|
3610489285 3219006125 283182024
|
||||||
|
3277129360 3580618829 128344865
|
||||||
|
2233175686 1190621441 206914843
|
||||||
|
891672290 4129309767 165657529
|
||||||
|
0 205218291 35419402
|
||||||
|
3584280491 3551111757 26208794
|
||||||
|
4247745260 1430744025 47222036
|
||||||
|
2210456460 3502188149 21171921
|
||||||
|
1843697722 2136406304 209010485
|
||||||
|
1423852863 3577320551 3298278
|
||||||
|
348097907 336470527 490927522
|
||||||
|
1057329819 3708963694 175165363
|
||||||
|
2231628381 3549564452 1547305
|
||||||
|
3268023402 2127300346 9105958
|
||||||
|
142879616 0 205218291
|
||||||
|
3558076109 3523360070 26204382
|
||||||
|
2052708207 2345416789 130620645
|
||||||
|
4120404877 969516011 29747749
|
||||||
|
35419402 240637693 95832834
|
||||||
|
4150152626 3121413491 97592634
|
||||||
|
3223582087 3884129057 44441315
|
||||||
|
1504994862 1640966847 137963465
|
||||||
|
3405474225 2748526281 149343644
|
||||||
|
|
||||||
|
humidity-to-location map:
|
||||||
|
3554305993 3441523152 94289982
|
||||||
|
4052786034 3015714705 242181262
|
||||||
|
491965155 895492593 72049890
|
||||||
|
2437667299 3726944956 38441480
|
||||||
|
0 387558480 141314689
|
||||||
|
3811971022 3765386436 101972362
|
||||||
|
3648595975 3535813134 51583790
|
||||||
|
1318420824 1500487572 135197760
|
||||||
|
230758172 30039204 163596268
|
||||||
|
3097413876 4221249785 73717511
|
||||||
|
3041068351 3257895967 56345525
|
||||||
|
1454254795 641271247 181430537
|
||||||
|
394354440 1139828795 97610715
|
||||||
|
3215016925 2618366793 339289068
|
||||||
|
827848339 193635472 113349295
|
||||||
|
150184459 306984767 80573713
|
||||||
|
1778801395 2099048921 519317872
|
||||||
|
1176891800 1379491771 111489820
|
||||||
|
1288381620 0 30039204
|
||||||
|
3171131387 3891749067 43885538
|
||||||
|
564015045 528873169 112398078
|
||||||
|
3913943384 3935634605 11560990
|
||||||
|
2767014161 3947195595 274054190
|
||||||
|
941197634 822701784 72790809
|
||||||
|
1453618584 1499851361 636211
|
||||||
|
2298119267 3587396924 139548032
|
||||||
|
3700179765 3867358798 24390269
|
||||||
|
3742730647 1778801395 11181531
|
||||||
|
1013988443 967542483 20851096
|
||||||
|
141314689 1490981591 8869770
|
||||||
|
3925504374 3314241492 127281660
|
||||||
|
2476108779 2088802749 10246172
|
||||||
|
676413123 988393579 151435216
|
||||||
|
3753912178 2957655861 58058844
|
||||||
|
2486354951 1789982926 280659210
|
||||||
|
3724570034 2070642136 18160613
|
||||||
|
1034839539 1237439510 142052261
|
||||||
@@ -0,0 +1,704 @@
|
|||||||
|
LRRLRLRRLRRRLRLRLRRLRRRLRRRLRRLRRRLRLRLRLRLRLRLRRRLRRLRRRLLLLRRRLRLLLRRRLLRLLRRRLRRRLRLRRLRRRLRRRLLRRRLRLRRRLLRRRLRLLRRRLRRLLRLRLRLRRRLRLLRLRLRRRLRLLRLRLRRRLLRRRLRRLRRRLRLRRLRLRRLRLRRLRRRLLRRRLLLRRRLLRRLRRLRRLRLLRRLRRRLRRLRLRLRRLRRLLLRRLRLRRRLRRRLRRRLLLRLRRRLLRRRLRLLRRRR
|
||||||
|
|
||||||
|
NFK = (LMH, RSS)
|
||||||
|
SLJ = (NBT, CDG)
|
||||||
|
SKX = (SRC, KKX)
|
||||||
|
LRB = (MNG, FSH)
|
||||||
|
QMQ = (DMG, QRV)
|
||||||
|
VRB = (PGG, PRG)
|
||||||
|
QNB = (PFD, FFQ)
|
||||||
|
BPK = (GFF, DFF)
|
||||||
|
JTD = (NVV, VLD)
|
||||||
|
PXD = (VNV, BDS)
|
||||||
|
PXP = (VFH, DLR)
|
||||||
|
XRH = (QMM, LDH)
|
||||||
|
GLV = (SDM, MFS)
|
||||||
|
TTM = (VGH, SJG)
|
||||||
|
RHC = (DBR, QSQ)
|
||||||
|
KNP = (FFB, SSB)
|
||||||
|
VLL = (VNM, XQQ)
|
||||||
|
SMJ = (PNH, MML)
|
||||||
|
XJN = (SCD, TPG)
|
||||||
|
GJL = (RJK, GGH)
|
||||||
|
NFD = (CKB, HXV)
|
||||||
|
XPH = (CDT, CVK)
|
||||||
|
GNJ = (JFV, KLQ)
|
||||||
|
CKC = (PCP, RXV)
|
||||||
|
PTN = (MFX, GXV)
|
||||||
|
HSD = (MGC, CGB)
|
||||||
|
MFX = (MCK, PKT)
|
||||||
|
QVQ = (LDG, JNX)
|
||||||
|
PBB = (DXK, KJL)
|
||||||
|
VNG = (JCH, GPT)
|
||||||
|
LFM = (HCK, GGQ)
|
||||||
|
SGL = (QPC, FJF)
|
||||||
|
RFK = (VMS, CRB)
|
||||||
|
TTJ = (RMQ, XHJ)
|
||||||
|
FJP = (GCL, KXF)
|
||||||
|
BRS = (LRK, NFD)
|
||||||
|
HTL = (CBJ, BFM)
|
||||||
|
QFP = (LRG, XQF)
|
||||||
|
KKH = (QSQ, DBR)
|
||||||
|
SLA = (HLN, TMV)
|
||||||
|
JGS = (VMH, CHF)
|
||||||
|
VNS = (HLN, TMV)
|
||||||
|
FFM = (KKX, SRC)
|
||||||
|
JHJ = (FMR, LVD)
|
||||||
|
QSQ = (JVR, VVX)
|
||||||
|
QKN = (LFQ, MDJ)
|
||||||
|
JDC = (XFF, GFS)
|
||||||
|
RPC = (TFS, TQL)
|
||||||
|
HGD = (BHN, HKH)
|
||||||
|
NDB = (CMJ, KDK)
|
||||||
|
CQP = (TCK, RFK)
|
||||||
|
SSB = (SNS, XPX)
|
||||||
|
VXB = (QRS, SHF)
|
||||||
|
RRT = (PJX, LTG)
|
||||||
|
BBQ = (SBX, CFK)
|
||||||
|
DJD = (KMQ, CHQ)
|
||||||
|
LXR = (VXS, FLP)
|
||||||
|
VHD = (QVQ, LQQ)
|
||||||
|
BFM = (VQS, VMX)
|
||||||
|
QGL = (CBD, VHD)
|
||||||
|
MML = (SLT, MCH)
|
||||||
|
VGV = (SNX, QBN)
|
||||||
|
KND = (SQS, JFC)
|
||||||
|
NFX = (XVF, GLX)
|
||||||
|
HCK = (DFX, JGS)
|
||||||
|
RSS = (MGG, CNL)
|
||||||
|
KRH = (RKF, KJR)
|
||||||
|
GMV = (BLX, FKF)
|
||||||
|
CFB = (XPC, RRF)
|
||||||
|
KLQ = (JGV, SNL)
|
||||||
|
KCR = (NTC, GQL)
|
||||||
|
SCB = (JSG, VBB)
|
||||||
|
TSJ = (VSJ, HQD)
|
||||||
|
SNL = (NNP, XBN)
|
||||||
|
RXV = (PMB, RRT)
|
||||||
|
MTH = (PCC, BPK)
|
||||||
|
RRD = (GNL, MSJ)
|
||||||
|
NVT = (CMD, FCF)
|
||||||
|
KNF = (SQQ, JPS)
|
||||||
|
SMK = (CKC, QTJ)
|
||||||
|
RFB = (FDN, CJB)
|
||||||
|
QXD = (NRN, GLV)
|
||||||
|
LCR = (TRT, NMR)
|
||||||
|
DPR = (GRM, HLQ)
|
||||||
|
CMD = (FMV, NGL)
|
||||||
|
LHP = (VVP, LCR)
|
||||||
|
NDN = (BRH, PTF)
|
||||||
|
JFC = (HFV, DLQ)
|
||||||
|
VMX = (NVL, KVQ)
|
||||||
|
HJF = (QFD, NDN)
|
||||||
|
XHC = (JVC, JKS)
|
||||||
|
LBN = (CCG, JRV)
|
||||||
|
LPK = (XCM, VXL)
|
||||||
|
HXJ = (TTM, PPT)
|
||||||
|
GNL = (HNK, QQJ)
|
||||||
|
VRK = (MRC, XPH)
|
||||||
|
DJF = (CLD, NGD)
|
||||||
|
KVP = (DJD, FXM)
|
||||||
|
JHQ = (VNS, RPZ)
|
||||||
|
FSK = (XCM, VXL)
|
||||||
|
HCJ = (PJB, PBF)
|
||||||
|
FJC = (TTJ, XHB)
|
||||||
|
JVR = (VRH, RBM)
|
||||||
|
NVL = (CQD, PJL)
|
||||||
|
QNL = (GXD, DHK)
|
||||||
|
NHK = (RFB, MXR)
|
||||||
|
VQP = (BBG, PXD)
|
||||||
|
SPV = (LMN, DTT)
|
||||||
|
KJR = (PFJ, HPH)
|
||||||
|
VGH = (PGC, NGH)
|
||||||
|
SQQ = (DQV, BLM)
|
||||||
|
DTQ = (SMB, CNC)
|
||||||
|
RVB = (JRQ, JRQ)
|
||||||
|
KKF = (SGL, NNN)
|
||||||
|
MTP = (MHN, JGN)
|
||||||
|
PNX = (PMS, XHV)
|
||||||
|
CTR = (XBB, VRB)
|
||||||
|
DFX = (CHF, VMH)
|
||||||
|
QQM = (SRG, PSR)
|
||||||
|
GLQ = (FHJ, TQD)
|
||||||
|
RLJ = (LNR, NRS)
|
||||||
|
JLJ = (DRR, MCV)
|
||||||
|
PRJ = (XHF, SMK)
|
||||||
|
XKQ = (HCJ, SHG)
|
||||||
|
HJL = (BBG, PXD)
|
||||||
|
MGC = (RLV, DPR)
|
||||||
|
GLX = (RHC, KKH)
|
||||||
|
AAA = (QRH, FRS)
|
||||||
|
LSB = (XXB, XKQ)
|
||||||
|
VNQ = (NVC, XTP)
|
||||||
|
FJR = (HGD, SBH)
|
||||||
|
MHX = (LRH, QGL)
|
||||||
|
LMN = (STQ, STQ)
|
||||||
|
FPT = (HQH, QQM)
|
||||||
|
VGB = (MRC, XPH)
|
||||||
|
VKB = (JXN, SKV)
|
||||||
|
VHJ = (PRT, DTQ)
|
||||||
|
QPC = (JLJ, XXR)
|
||||||
|
CJJ = (KXB, VXB)
|
||||||
|
SHG = (PBF, PJB)
|
||||||
|
SKV = (RHQ, VCC)
|
||||||
|
FMH = (LTT, HNX)
|
||||||
|
SKQ = (SKX, FFM)
|
||||||
|
LRG = (VHN, VHN)
|
||||||
|
GCL = (RBQ, MKB)
|
||||||
|
XVJ = (PQQ, FNC)
|
||||||
|
HPV = (XHF, SMK)
|
||||||
|
MCX = (GDX, JMV)
|
||||||
|
NNN = (QPC, FJF)
|
||||||
|
HNK = (CPS, NHK)
|
||||||
|
VBB = (FDV, FMJ)
|
||||||
|
TCD = (BFM, CBJ)
|
||||||
|
TBV = (BSL, FKK)
|
||||||
|
CPT = (LTT, HNX)
|
||||||
|
CDL = (DCL, SMS)
|
||||||
|
JGN = (SHK, KTG)
|
||||||
|
CRB = (PXP, PPH)
|
||||||
|
JPS = (DQV, BLM)
|
||||||
|
MMS = (HJF, MGK)
|
||||||
|
JFT = (FFQ, PFD)
|
||||||
|
PGC = (TQP, BDN)
|
||||||
|
RPZ = (TMV, HLN)
|
||||||
|
FVD = (GTM, PDN)
|
||||||
|
RTB = (FTM, QBK)
|
||||||
|
DML = (XKK, LMP)
|
||||||
|
QGH = (MHX, PXH)
|
||||||
|
RHM = (TFS, TQL)
|
||||||
|
GXB = (LXM, NPC)
|
||||||
|
CMJ = (LXR, PHP)
|
||||||
|
FFB = (SNS, XPX)
|
||||||
|
MKC = (QMM, LDH)
|
||||||
|
MCK = (TRP, VXJ)
|
||||||
|
FNL = (QNB, JFT)
|
||||||
|
GGQ = (JGS, DFX)
|
||||||
|
NMR = (MQP, TNX)
|
||||||
|
XKK = (XLK, VKB)
|
||||||
|
QML = (LBN, FRH)
|
||||||
|
JCH = (GQH, CLR)
|
||||||
|
TMV = (BMV, TKL)
|
||||||
|
FDN = (HCM, VVS)
|
||||||
|
GPT = (CLR, GQH)
|
||||||
|
DDC = (QGH, KVN)
|
||||||
|
DKK = (LBN, FRH)
|
||||||
|
RBM = (SLJ, NLJ)
|
||||||
|
KLB = (LFV, SPT)
|
||||||
|
GRK = (XNP, VLL)
|
||||||
|
CLD = (CSS, GXT)
|
||||||
|
GFS = (KRH, TRK)
|
||||||
|
RQJ = (RQX, SQM)
|
||||||
|
KTG = (NCX, NGJ)
|
||||||
|
HNX = (JQB, SBJ)
|
||||||
|
NTR = (VRB, XBB)
|
||||||
|
HMF = (BGH, QKN)
|
||||||
|
TPB = (LMN, DTT)
|
||||||
|
GHX = (QBK, FTM)
|
||||||
|
RMT = (RFK, TCK)
|
||||||
|
MSR = (NMQ, LJC)
|
||||||
|
PPT = (SJG, VGH)
|
||||||
|
QMG = (VRG, SFZ)
|
||||||
|
FKF = (LHJ, QHG)
|
||||||
|
QRL = (LRD, RHJ)
|
||||||
|
TFS = (GRK, JTQ)
|
||||||
|
FMJ = (TSF, SXS)
|
||||||
|
SBX = (GGT, VCL)
|
||||||
|
KFG = (FCX, FTF)
|
||||||
|
VXS = (RBG, KNP)
|
||||||
|
VDG = (JDT, RPS)
|
||||||
|
QHD = (RFN, ZZZ)
|
||||||
|
SFM = (GLL, RQC)
|
||||||
|
VXL = (DCK, FMG)
|
||||||
|
CCD = (LMP, XKK)
|
||||||
|
SJG = (PGC, NGH)
|
||||||
|
FKK = (BPP, HSD)
|
||||||
|
TXG = (FDC, JNJ)
|
||||||
|
RKF = (PFJ, HPH)
|
||||||
|
PMS = (HMT, XTG)
|
||||||
|
MHN = (SHK, KTG)
|
||||||
|
DXK = (FPT, JSJ)
|
||||||
|
QCQ = (LRM, MCX)
|
||||||
|
QPR = (MST, QHD)
|
||||||
|
CKV = (VNS, VNS)
|
||||||
|
DRJ = (VLD, NVV)
|
||||||
|
FGT = (RHM, RPC)
|
||||||
|
LHJ = (BQK, JHJ)
|
||||||
|
STQ = (CKV, CKV)
|
||||||
|
HLQ = (FXR, KKJ)
|
||||||
|
GBQ = (BHT, HJH)
|
||||||
|
RNH = (KNF, GGX)
|
||||||
|
VPG = (PRR, FHK)
|
||||||
|
CTS = (VVP, LCR)
|
||||||
|
CPS = (MXR, RFB)
|
||||||
|
DRR = (NFK, TKJ)
|
||||||
|
MQG = (HJH, BHT)
|
||||||
|
RTL = (GBQ, MQG)
|
||||||
|
KSV = (HGD, SBH)
|
||||||
|
TKJ = (LMH, RSS)
|
||||||
|
FHF = (VCB, BKJ)
|
||||||
|
CSL = (JNS, FTP)
|
||||||
|
NMQ = (XPL, PBB)
|
||||||
|
CNL = (VJJ, JBV)
|
||||||
|
QQF = (GRF, DKC)
|
||||||
|
PJB = (PPD, TBV)
|
||||||
|
BDN = (HBD, RRD)
|
||||||
|
VRG = (QDM, DVP)
|
||||||
|
MGK = (NDN, QFD)
|
||||||
|
CCG = (BQR, QBM)
|
||||||
|
MQP = (CLF, HNQ)
|
||||||
|
TPG = (VPG, BMF)
|
||||||
|
VPP = (QBN, SNX)
|
||||||
|
FXM = (KMQ, CHQ)
|
||||||
|
CDG = (PPP, KFN)
|
||||||
|
LVA = (QDM, DVP)
|
||||||
|
QMM = (RFF, LNJ)
|
||||||
|
LMP = (VKB, XLK)
|
||||||
|
MHH = (HBN, FJC)
|
||||||
|
JBC = (LTN, LTN)
|
||||||
|
MGG = (VJJ, JBV)
|
||||||
|
MPF = (LXM, NPC)
|
||||||
|
JGV = (XBN, NNP)
|
||||||
|
MNK = (VGL, DJB)
|
||||||
|
FGX = (BVQ, DQK)
|
||||||
|
XBJ = (RQC, GLL)
|
||||||
|
KGB = (MCX, LRM)
|
||||||
|
HXX = (MHH, TXD)
|
||||||
|
XLK = (SKV, JXN)
|
||||||
|
FCJ = (VPT, GQC)
|
||||||
|
SHK = (NCX, NGJ)
|
||||||
|
QRH = (BTG, FJP)
|
||||||
|
LXM = (KGB, QCQ)
|
||||||
|
DXV = (SLM, SCK)
|
||||||
|
MRC = (CVK, CDT)
|
||||||
|
QBN = (PKR, KQM)
|
||||||
|
PPD = (FKK, BSL)
|
||||||
|
PXH = (QGL, LRH)
|
||||||
|
XXB = (SHG, HCJ)
|
||||||
|
DCK = (DSL, DSL)
|
||||||
|
PMG = (TXD, MHH)
|
||||||
|
XKG = (TQD, FHJ)
|
||||||
|
JRV = (QBM, BQR)
|
||||||
|
VGL = (TGD, XTD)
|
||||||
|
XCM = (DCK, FMG)
|
||||||
|
PQN = (RPS, JDT)
|
||||||
|
JBV = (NTR, CTR)
|
||||||
|
TXD = (HBN, FJC)
|
||||||
|
VJJ = (CTR, NTR)
|
||||||
|
DCL = (SMJ, GXC)
|
||||||
|
PCP = (RRT, PMB)
|
||||||
|
LRD = (XHC, PBG)
|
||||||
|
QTJ = (PCP, RXV)
|
||||||
|
VMH = (PKK, RTL)
|
||||||
|
DBP = (PRJ, HPV)
|
||||||
|
CLR = (VDG, PQN)
|
||||||
|
FLP = (KNP, RBG)
|
||||||
|
RJT = (NDB, PTK)
|
||||||
|
KFN = (CDL, FDM)
|
||||||
|
DKC = (CJJ, HTB)
|
||||||
|
XHV = (XTG, HMT)
|
||||||
|
CFK = (GGT, VCL)
|
||||||
|
HGX = (RDT, GKM)
|
||||||
|
CKB = (CQP, RMT)
|
||||||
|
KVQ = (CQD, PJL)
|
||||||
|
PSR = (HGX, JLK)
|
||||||
|
KTC = (JFV, KLQ)
|
||||||
|
RMN = (SFM, XBJ)
|
||||||
|
KMQ = (JDC, MRB)
|
||||||
|
TXB = (FSR, MQD)
|
||||||
|
BKS = (FLH, QFP)
|
||||||
|
PFD = (MNK, BKL)
|
||||||
|
BQR = (LGC, KKF)
|
||||||
|
NPA = (FCJ, NPF)
|
||||||
|
FRR = (MMS, TDR)
|
||||||
|
BSL = (HSD, BPP)
|
||||||
|
LMH = (MGG, CNL)
|
||||||
|
TVH = (TBH, DKP)
|
||||||
|
GXT = (JTD, DRJ)
|
||||||
|
DFF = (TFC, KNN)
|
||||||
|
RPS = (DBP, LXB)
|
||||||
|
HKH = (VNQ, DPG)
|
||||||
|
NRS = (VGR, DPS)
|
||||||
|
FKT = (NDB, PTK)
|
||||||
|
GGX = (SQQ, JPS)
|
||||||
|
GDA = (LGN, DDC)
|
||||||
|
RBG = (FFB, SSB)
|
||||||
|
HBN = (TTJ, XHB)
|
||||||
|
BLM = (TXG, JVD)
|
||||||
|
VRH = (NLJ, SLJ)
|
||||||
|
XPL = (DXK, KJL)
|
||||||
|
VNM = (XXJ, QNL)
|
||||||
|
MDC = (MTP, TGC)
|
||||||
|
GQL = (KSN, VKN)
|
||||||
|
TNX = (HNQ, CLF)
|
||||||
|
NVV = (HVF, FGX)
|
||||||
|
DXM = (PTN, QGM)
|
||||||
|
XBB = (PRG, PGG)
|
||||||
|
RLM = (XKQ, XXB)
|
||||||
|
TGC = (JGN, MHN)
|
||||||
|
SDM = (SLV, KVS)
|
||||||
|
BPP = (MGC, CGB)
|
||||||
|
QVB = (QFM, QMG)
|
||||||
|
LJC = (PBB, XPL)
|
||||||
|
QLG = (PPT, TTM)
|
||||||
|
XTT = (BGH, QKN)
|
||||||
|
HTB = (VXB, KXB)
|
||||||
|
VCC = (MKC, XRH)
|
||||||
|
LRM = (GDX, JMV)
|
||||||
|
CJB = (HCM, VVS)
|
||||||
|
TRK = (KJR, RKF)
|
||||||
|
TFC = (CHT, LBT)
|
||||||
|
NVC = (TCD, HTL)
|
||||||
|
JRQ = (LGN, DDC)
|
||||||
|
SQS = (DLQ, HFV)
|
||||||
|
CHF = (PKK, RTL)
|
||||||
|
PGG = (RQJ, PJM)
|
||||||
|
PRR = (JGP, MSR)
|
||||||
|
VHN = (QFM, QFM)
|
||||||
|
RQC = (GNJ, KTC)
|
||||||
|
MRB = (GFS, XFF)
|
||||||
|
XBN = (XJN, DXC)
|
||||||
|
SXS = (BBQ, XFV)
|
||||||
|
VCB = (LPK, FSK)
|
||||||
|
FTM = (SPV, TPB)
|
||||||
|
PJL = (SPJ, VHJ)
|
||||||
|
BKL = (DJB, VGL)
|
||||||
|
GRR = (DJD, FXM)
|
||||||
|
ZZZ = (FRS, QRH)
|
||||||
|
KDK = (PHP, LXR)
|
||||||
|
SNX = (KQM, PKR)
|
||||||
|
VMS = (PXP, PPH)
|
||||||
|
FSH = (RJT, FKT)
|
||||||
|
JDT = (DBP, LXB)
|
||||||
|
KVN = (PXH, MHX)
|
||||||
|
DHK = (DLT, PNX)
|
||||||
|
JSG = (FDV, FMJ)
|
||||||
|
GQT = (NRN, GLV)
|
||||||
|
NBT = (PPP, KFN)
|
||||||
|
PMX = (KVT, RMN)
|
||||||
|
SBH = (HKH, BHN)
|
||||||
|
MNG = (FKT, RJT)
|
||||||
|
FNC = (JSV, HKZ)
|
||||||
|
KXF = (MKB, RBQ)
|
||||||
|
DTT = (STQ, VFM)
|
||||||
|
PKT = (VXJ, TRP)
|
||||||
|
XXR = (DRR, MCV)
|
||||||
|
VKN = (GRR, KVP)
|
||||||
|
FJF = (XXR, JLJ)
|
||||||
|
SMB = (RTB, GHX)
|
||||||
|
RHJ = (PBG, XHC)
|
||||||
|
CDR = (RJK, GGH)
|
||||||
|
RBQ = (PMG, HXX)
|
||||||
|
XCT = (NTC, GQL)
|
||||||
|
FMR = (JLQ, QRL)
|
||||||
|
SNS = (XKG, GLQ)
|
||||||
|
FSR = (NCR, LRB)
|
||||||
|
PKK = (GBQ, MQG)
|
||||||
|
VXJ = (FDS, TSJ)
|
||||||
|
QTQ = (BLX, FKF)
|
||||||
|
KSN = (GRR, KVP)
|
||||||
|
FCX = (RLJ, TQN)
|
||||||
|
VNV = (VQV, MTH)
|
||||||
|
HVF = (BVQ, DQK)
|
||||||
|
CHQ = (JDC, MRB)
|
||||||
|
MKB = (HXX, PMG)
|
||||||
|
FRH = (JRV, CCG)
|
||||||
|
CQC = (QML, DKK)
|
||||||
|
SPJ = (DTQ, PRT)
|
||||||
|
HXV = (CQP, RMT)
|
||||||
|
CBJ = (VMX, VQS)
|
||||||
|
FHG = (FSR, MQD)
|
||||||
|
GFF = (KNN, TFC)
|
||||||
|
XVF = (RHC, KKH)
|
||||||
|
QRS = (RNL, FGT)
|
||||||
|
XFV = (CFK, SBX)
|
||||||
|
HPH = (SXL, CXD)
|
||||||
|
FHK = (JGP, MSR)
|
||||||
|
HQH = (SRG, PSR)
|
||||||
|
LTT = (SBJ, JQB)
|
||||||
|
GGT = (NFB, GSS)
|
||||||
|
PRM = (VRR, MDC)
|
||||||
|
HMT = (CPT, FMH)
|
||||||
|
DSL = (MST, MST)
|
||||||
|
TDM = (QML, DKK)
|
||||||
|
LHX = (FRR, GSC)
|
||||||
|
LHG = (DKC, GRF)
|
||||||
|
PNH = (MCH, SLT)
|
||||||
|
VFH = (HMF, XTT)
|
||||||
|
VCL = (GSS, NFB)
|
||||||
|
PPH = (VFH, DLR)
|
||||||
|
FHJ = (DML, CCD)
|
||||||
|
LFQ = (LSB, RLM)
|
||||||
|
RFV = (LRK, NFD)
|
||||||
|
JSV = (FCJ, NPF)
|
||||||
|
DVP = (GDC, RNH)
|
||||||
|
SXL = (VQP, HJL)
|
||||||
|
NPC = (QCQ, KGB)
|
||||||
|
JVC = (FGQ, GGJ)
|
||||||
|
RQX = (TFQ, BCL)
|
||||||
|
TFQ = (TPT, KLB)
|
||||||
|
NPL = (DXN, CMZ)
|
||||||
|
GKM = (MPQ, BTX)
|
||||||
|
HSS = (KVT, RMN)
|
||||||
|
JDF = (HXJ, QLG)
|
||||||
|
XFF = (TRK, KRH)
|
||||||
|
DBR = (JVR, VVX)
|
||||||
|
PJM = (SQM, RQX)
|
||||||
|
MRF = (JFC, SQS)
|
||||||
|
BQK = (FMR, LVD)
|
||||||
|
PHP = (VXS, FLP)
|
||||||
|
LTN = (DXN, DXN)
|
||||||
|
PPP = (CDL, FDM)
|
||||||
|
TBH = (SCB, VCK)
|
||||||
|
CGB = (RLV, DPR)
|
||||||
|
TDR = (HJF, MGK)
|
||||||
|
LFV = (PVB, FHF)
|
||||||
|
NDL = (FLH, QFP)
|
||||||
|
KHR = (RVB, RVB)
|
||||||
|
GRM = (FXR, KKJ)
|
||||||
|
RFF = (FNL, HMG)
|
||||||
|
JLK = (GKM, RDT)
|
||||||
|
TQD = (CCD, DML)
|
||||||
|
FDV = (SXS, TSF)
|
||||||
|
XTP = (TCD, HTL)
|
||||||
|
PCC = (GFF, DFF)
|
||||||
|
LDG = (QQF, LHG)
|
||||||
|
HLN = (TKL, BMV)
|
||||||
|
DPG = (XTP, NVC)
|
||||||
|
MNH = (GLX, XVF)
|
||||||
|
SCD = (BMF, VPG)
|
||||||
|
GSS = (MNH, NFX)
|
||||||
|
NXR = (MRF, KND)
|
||||||
|
PVB = (VCB, BKJ)
|
||||||
|
XHF = (QTJ, CKC)
|
||||||
|
NRN = (MFS, SDM)
|
||||||
|
RLV = (HLQ, GRM)
|
||||||
|
DLF = (CMD, FCF)
|
||||||
|
VQV = (BPK, PCC)
|
||||||
|
BHT = (GBF, DRL)
|
||||||
|
HQD = (NVT, DLF)
|
||||||
|
CHT = (SLH, JGK)
|
||||||
|
NFF = (VRR, MDC)
|
||||||
|
KVT = (XBJ, SFM)
|
||||||
|
DLQ = (LHX, XRD)
|
||||||
|
NCR = (FSH, MNG)
|
||||||
|
VDD = (PQQ, PQQ)
|
||||||
|
JVD = (FDC, JNJ)
|
||||||
|
VQS = (KVQ, NVL)
|
||||||
|
NGJ = (XJT, CTJ)
|
||||||
|
BGT = (RRF, XPC)
|
||||||
|
QDD = (RVB, BCF)
|
||||||
|
DPS = (CDR, GJL)
|
||||||
|
JFV = (JGV, SNL)
|
||||||
|
SLM = (QTQ, GMV)
|
||||||
|
SBS = (TDM, CQC)
|
||||||
|
BHN = (DPG, VNQ)
|
||||||
|
FLH = (LRG, XQF)
|
||||||
|
SBJ = (LTB, SKQ)
|
||||||
|
FXR = (LFM, BGQ)
|
||||||
|
NGH = (TQP, BDN)
|
||||||
|
KQM = (SBS, RSQ)
|
||||||
|
KPB = (SLM, SCK)
|
||||||
|
HCM = (VFF, DJF)
|
||||||
|
LXB = (HPV, PRJ)
|
||||||
|
STZ = (DDC, LGN)
|
||||||
|
HMG = (QNB, JFT)
|
||||||
|
FMG = (DSL, QPR)
|
||||||
|
XPX = (XKG, GLQ)
|
||||||
|
CBD = (QVQ, LQQ)
|
||||||
|
LRH = (VHD, CBD)
|
||||||
|
SMS = (SMJ, GXC)
|
||||||
|
QQJ = (NHK, CPS)
|
||||||
|
XQQ = (QNL, XXJ)
|
||||||
|
LTB = (FFM, SKX)
|
||||||
|
JLQ = (RHJ, LRD)
|
||||||
|
TQP = (HBD, RRD)
|
||||||
|
RFN = (QRH, FRS)
|
||||||
|
HJH = (GBF, DRL)
|
||||||
|
RNL = (RHM, RPC)
|
||||||
|
LVD = (JLQ, QRL)
|
||||||
|
TQL = (JTQ, GRK)
|
||||||
|
MPQ = (NFF, PRM)
|
||||||
|
BKJ = (FSK, LPK)
|
||||||
|
FTF = (TQN, RLJ)
|
||||||
|
LDH = (LNJ, RFF)
|
||||||
|
VFF = (CLD, NGD)
|
||||||
|
TQN = (LNR, NRS)
|
||||||
|
GXV = (MCK, PKT)
|
||||||
|
DXN = (KPB, DXV)
|
||||||
|
TCK = (CRB, VMS)
|
||||||
|
HNQ = (VNG, DHL)
|
||||||
|
JNS = (KHR, KHR)
|
||||||
|
BBG = (BDS, VNV)
|
||||||
|
JXN = (RHQ, VCC)
|
||||||
|
RCA = (KPB, DXV)
|
||||||
|
BGQ = (HCK, GGQ)
|
||||||
|
BCF = (JRQ, STZ)
|
||||||
|
GDC = (GGX, KNF)
|
||||||
|
DXC = (TPG, SCD)
|
||||||
|
DLR = (XTT, HMF)
|
||||||
|
PTK = (CMJ, KDK)
|
||||||
|
SKP = (TXB, FHG)
|
||||||
|
PFJ = (CXD, SXL)
|
||||||
|
KVS = (CFB, BGT)
|
||||||
|
PRT = (SMB, CNC)
|
||||||
|
MCV = (TKJ, NFK)
|
||||||
|
FGQ = (GXB, MPF)
|
||||||
|
SLH = (FJR, KSV)
|
||||||
|
MQD = (LRB, NCR)
|
||||||
|
VRR = (TGC, MTP)
|
||||||
|
TPT = (SPT, LFV)
|
||||||
|
DTK = (HXJ, QLG)
|
||||||
|
CVK = (QSM, TVH)
|
||||||
|
RRF = (KKN, KFG)
|
||||||
|
FCF = (FMV, NGL)
|
||||||
|
DJB = (TGD, XTD)
|
||||||
|
FTP = (KHR, QDD)
|
||||||
|
CSS = (DRJ, JTD)
|
||||||
|
QGM = (MFX, GXV)
|
||||||
|
CXD = (HJL, VQP)
|
||||||
|
TRP = (FDS, TSJ)
|
||||||
|
PQQ = (JSV, JSV)
|
||||||
|
RHQ = (MKC, XRH)
|
||||||
|
FFQ = (BKL, MNK)
|
||||||
|
JGP = (NMQ, LJC)
|
||||||
|
LGC = (SGL, NNN)
|
||||||
|
LQQ = (LDG, JNX)
|
||||||
|
SBV = (JNS, FTP)
|
||||||
|
XHB = (RMQ, XHJ)
|
||||||
|
CQD = (VHJ, SPJ)
|
||||||
|
RDT = (MPQ, BTX)
|
||||||
|
LHL = (LTN, NPL)
|
||||||
|
LRK = (CKB, HXV)
|
||||||
|
MCH = (HSS, PMX)
|
||||||
|
QFD = (BRH, PTF)
|
||||||
|
PKR = (RSQ, SBS)
|
||||||
|
JNX = (LHG, QQF)
|
||||||
|
KLX = (PTN, QGM)
|
||||||
|
MDJ = (LSB, RLM)
|
||||||
|
TGD = (NXR, DGD)
|
||||||
|
MST = (RFN, RFN)
|
||||||
|
BCL = (KLB, TPT)
|
||||||
|
VPT = (VRK, VGB)
|
||||||
|
JMV = (DTK, JDF)
|
||||||
|
PJX = (NDL, BKS)
|
||||||
|
GGJ = (GXB, MPF)
|
||||||
|
NNP = (XJN, DXC)
|
||||||
|
PMB = (PJX, LTG)
|
||||||
|
QFM = (VRG, VRG)
|
||||||
|
BTX = (PRM, NFF)
|
||||||
|
DKP = (SCB, VCK)
|
||||||
|
BMF = (FHK, PRR)
|
||||||
|
JTQ = (VLL, XNP)
|
||||||
|
SRG = (JLK, HGX)
|
||||||
|
RMQ = (RFV, BRS)
|
||||||
|
JGK = (FJR, KSV)
|
||||||
|
KNN = (CHT, LBT)
|
||||||
|
JQB = (SKQ, LTB)
|
||||||
|
DHL = (GPT, JCH)
|
||||||
|
NTC = (KSN, VKN)
|
||||||
|
QRV = (LHP, CTS)
|
||||||
|
VFM = (CKV, JHQ)
|
||||||
|
LBT = (SLH, JGK)
|
||||||
|
GXC = (PNH, MML)
|
||||||
|
HFV = (LHX, XRD)
|
||||||
|
TRT = (TNX, MQP)
|
||||||
|
FDM = (DCL, SMS)
|
||||||
|
KXB = (SHF, QRS)
|
||||||
|
VSJ = (NVT, DLF)
|
||||||
|
KJL = (JSJ, FPT)
|
||||||
|
LTG = (BKS, NDL)
|
||||||
|
SQM = (TFQ, BCL)
|
||||||
|
PTF = (KCP, QMQ)
|
||||||
|
LGN = (KVN, QGH)
|
||||||
|
PBG = (JKS, JVC)
|
||||||
|
DQK = (XFG, XCP)
|
||||||
|
XFG = (MXD, FVD)
|
||||||
|
PRG = (RQJ, PJM)
|
||||||
|
FRS = (BTG, FJP)
|
||||||
|
XNP = (VNM, XQQ)
|
||||||
|
XRD = (GSC, FRR)
|
||||||
|
RSQ = (TDM, CQC)
|
||||||
|
MFS = (KVS, SLV)
|
||||||
|
SPT = (PVB, FHF)
|
||||||
|
DRL = (VPP, VGV)
|
||||||
|
VVP = (NMR, TRT)
|
||||||
|
XTG = (CPT, FMH)
|
||||||
|
SCK = (GMV, QTQ)
|
||||||
|
VCK = (VBB, JSG)
|
||||||
|
DQV = (TXG, JVD)
|
||||||
|
XPC = (KKN, KFG)
|
||||||
|
KXJ = (FHG, TXB)
|
||||||
|
MSJ = (QQJ, HNK)
|
||||||
|
VGR = (GJL, CDR)
|
||||||
|
QDM = (RNH, GDC)
|
||||||
|
NGD = (GXT, CSS)
|
||||||
|
FDS = (HQD, VSJ)
|
||||||
|
NFB = (NFX, MNH)
|
||||||
|
CNC = (GHX, RTB)
|
||||||
|
BDS = (VQV, MTH)
|
||||||
|
DGD = (KND, MRF)
|
||||||
|
CTJ = (VDD, XVJ)
|
||||||
|
JSJ = (QQM, HQH)
|
||||||
|
GXD = (PNX, DLT)
|
||||||
|
TSF = (XFV, BBQ)
|
||||||
|
GLL = (GNJ, KTC)
|
||||||
|
CMZ = (DXV, KPB)
|
||||||
|
SRC = (QXD, GQT)
|
||||||
|
FMV = (JBC, JBC)
|
||||||
|
NPF = (GQC, VPT)
|
||||||
|
HBD = (GNL, MSJ)
|
||||||
|
CDT = (TVH, QSM)
|
||||||
|
JNJ = (SKP, KXJ)
|
||||||
|
NGL = (JBC, LHL)
|
||||||
|
SFZ = (DVP, QDM)
|
||||||
|
GTM = (DXM, KLX)
|
||||||
|
GSC = (MMS, TDR)
|
||||||
|
XJT = (VDD, VDD)
|
||||||
|
FDC = (SKP, KXJ)
|
||||||
|
BVQ = (XCP, XFG)
|
||||||
|
GGH = (CSL, SBV)
|
||||||
|
BMV = (XCT, KCR)
|
||||||
|
QSM = (DKP, TBH)
|
||||||
|
TKL = (KCR, XCT)
|
||||||
|
CLF = (DHL, VNG)
|
||||||
|
PBF = (PPD, TBV)
|
||||||
|
GBF = (VGV, VPP)
|
||||||
|
NCX = (XJT, CTJ)
|
||||||
|
DMG = (LHP, CTS)
|
||||||
|
MXD = (PDN, GTM)
|
||||||
|
QBM = (KKF, LGC)
|
||||||
|
SLV = (BGT, CFB)
|
||||||
|
BRH = (QMQ, KCP)
|
||||||
|
XHJ = (BRS, RFV)
|
||||||
|
MXR = (FDN, CJB)
|
||||||
|
RJK = (CSL, SBV)
|
||||||
|
GDX = (DTK, JDF)
|
||||||
|
VVX = (VRH, RBM)
|
||||||
|
BGH = (MDJ, LFQ)
|
||||||
|
HKZ = (NPF, FCJ)
|
||||||
|
NLJ = (CDG, NBT)
|
||||||
|
BTG = (KXF, GCL)
|
||||||
|
QBK = (SPV, TPB)
|
||||||
|
SHF = (FGT, RNL)
|
||||||
|
XQF = (VHN, QVB)
|
||||||
|
JKS = (GGJ, FGQ)
|
||||||
|
GRF = (HTB, CJJ)
|
||||||
|
LNR = (VGR, DPS)
|
||||||
|
XTD = (DGD, NXR)
|
||||||
|
GQC = (VGB, VRK)
|
||||||
|
KCP = (DMG, QRV)
|
||||||
|
XCP = (MXD, FVD)
|
||||||
|
XXJ = (DHK, GXD)
|
||||||
|
VVS = (DJF, VFF)
|
||||||
|
QHG = (BQK, JHJ)
|
||||||
|
SLT = (PMX, HSS)
|
||||||
|
PDN = (KLX, DXM)
|
||||||
|
DLT = (XHV, PMS)
|
||||||
|
KKN = (FTF, FCX)
|
||||||
|
BLX = (QHG, LHJ)
|
||||||
|
GQH = (VDG, PQN)
|
||||||
|
VLD = (FGX, HVF)
|
||||||
|
KKX = (GQT, QXD)
|
||||||
|
KKJ = (BGQ, LFM)
|
||||||
|
LNJ = (FNL, HMG)
|
||||||
@@ -0,0 +1,200 @@
|
|||||||
|
14 16 18 20 22 24 26 28 30 32 34 36 38 40 42 44 46 48 50 52 54
|
||||||
|
12 27 47 68 92 149 343 943 2562 6504 15418 34500 73686 151710 303812 596709 1157888 2232401 4290657 8227316 15717112
|
||||||
|
-1 12 52 135 290 585 1167 2315 4511 8546 15696 28027 48918 83927 142167 238407 396167 652136 1062308 1710303 2718418
|
||||||
|
5 20 41 73 130 249 514 1092 2286 4613 8918 16538 29533 51004 85521 139687 222867 348114 533327 802679 1188356
|
||||||
|
4 -1 -6 -11 -16 -21 -26 -31 -36 -41 -46 -51 -56 -61 -66 -71 -76 -81 -86 -91 -96
|
||||||
|
17 19 24 49 132 341 793 1706 3535 7295 15259 32346 68692 144135 295652 589171 1137653 2127907 3859274 6798103 11652852
|
||||||
|
16 22 25 27 42 114 348 958 2336 5146 10447 19849 35706 61350 101370 161940 251200 379694 560869 811639 1153018
|
||||||
|
2 4 10 20 37 75 187 530 1502 4019 10054 23656 52851 113180 234277 472014 930586 1801798 3433154 6442636 11906905
|
||||||
|
8 22 38 54 68 88 164 455 1345 3632 8842 19775 41481 83000 160390 301820 555830 1004266 1781894 3105292 5314322
|
||||||
|
4 22 63 144 299 591 1136 2153 4054 7588 14053 25590 45573 79109 133662 219815 352184 550498 840859 1257196 1842927
|
||||||
|
6 13 22 44 98 205 391 721 1407 3076 7361 18108 43709 101432 225212 479319 981804 1943871 3734624 6985356 12754124
|
||||||
|
8 25 56 106 191 351 684 1418 3041 6523 13701 27970 55542 107713 204827 382958 704758 1276453 2273622 3979178 6837897
|
||||||
|
11 12 13 13 13 23 80 288 893 2417 5907 13437 29194 61894 130093 273458 575643 1208626 2514941 5154141 10354271
|
||||||
|
17 21 18 5 -24 -70 -112 -80 186 998 2913 6870 14387 27837 50825 88691 149167 243219 386108 598707 909114
|
||||||
|
4 12 24 38 63 133 320 746 1594 3118 5652 9618 15533 24015 35788 51686 72656 99760 134176 177198 230235
|
||||||
|
-3 11 47 113 228 443 886 1848 3942 8401 17640 36304 73200 144877 282435 544969 1046991 2015276 3906455 7646338 15104916
|
||||||
|
20 26 35 65 158 395 924 2025 4263 8821 18160 37222 75475 150196 291499 549740 1006070 1787060 3084489 5181567 8487060
|
||||||
|
3 12 39 91 186 366 726 1471 3014 6138 12269 23947 45637 85088 155518 278967 491205 848592 1437243 2384731 3874340
|
||||||
|
19 37 61 91 127 169 217 271 331 397 469 547 631 721 817 919 1027 1141 1261 1387 1519
|
||||||
|
14 20 35 59 85 104 126 232 679 2087 5744 14072 31304 64429 124469 228159 400108 675526 1103609 1751681 2710199
|
||||||
|
9 25 43 63 85 109 135 163 193 225 259 295 333 373 415 459 505 553 603 655 709
|
||||||
|
2 8 32 85 173 292 434 624 1028 2199 5556 14212 34271 76689 159726 311889 575062 1007218 1683688 2695399 4141761
|
||||||
|
5 2 -3 -1 39 180 528 1245 2563 4797 8366 13873 22401 36426 62308 116593 241137 537800 1244623 2895947 6644891
|
||||||
|
4 19 56 134 282 555 1056 1972 3652 6782 12759 24462 47816 94935 190357 383171 770012 1537433 3037698 5920442 11355046
|
||||||
|
-6 -10 -17 -31 -57 -100 -170 -294 -535 -1008 -1843 -2934 -3047 2731 29473 117660 367128 1009454 2556807 6098291 13872479
|
||||||
|
9 29 67 137 278 564 1112 2091 3733 6343 10299 16025 23910 34134 46348 59139 69193 70049 50315 -8807 -136866
|
||||||
|
7 2 -7 -10 20 126 358 753 1303 1914 2365 2284 1168 -1514 -6082 -12201 -18145 -19662 -8311 30882 122628
|
||||||
|
8 13 32 77 159 284 449 647 903 1382 2635 6080 14852 35199 78650 165236 328106 619947 1121690 1954063 3292637
|
||||||
|
17 28 41 54 57 37 -1 6 241 1104 3384 8601 19718 42627 89216 183610 374677 760736 1537998 3095953 6208677
|
||||||
|
28 41 65 111 199 382 795 1736 3782 7951 15955 30668 57093 104426 190420 350385 655208 1246346 2401747 4656396 9016415
|
||||||
|
15 28 50 96 189 365 695 1341 2671 5466 11260 22862 45117 85971 157913 279875 479679 797128 1287846 2027980 3119885
|
||||||
|
0 -2 -5 0 44 188 531 1228 2552 5080 10164 20983 44686 96460 206828 434143 885144 1747634 3340889 6191378 11143840
|
||||||
|
7 12 37 108 272 611 1270 2505 4767 8861 16268 29827 55204 104023 200351 393653 783743 1567254 3121671 6153442 11953216
|
||||||
|
7 22 51 94 151 222 307 406 519 646 787 942 1111 1294 1491 1702 1927 2166 2419 2686 2967
|
||||||
|
17 37 68 115 201 387 815 1796 3982 8686 18455 38089 76500 150244 290479 556993 1066793 2052462 3980624 7789694 15359333
|
||||||
|
12 29 70 158 338 695 1395 2758 5380 10356 19729 37409 70976 135004 256818 485919 908676 1670279 3006360 5287104 9077070
|
||||||
|
9 11 24 67 171 379 747 1347 2276 3678 5789 9018 14080 22200 35410 56964 91899 147773 235614 371117 576129
|
||||||
|
12 18 23 23 12 -15 -52 -65 34 437 1555 4282 10558 24471 54242 115563 237085 470195 910144 1750748 3435465
|
||||||
|
11 13 21 48 117 260 525 998 1849 3420 6390 12078 22981 43691 82394 153226 279847 500695 876499 1500764 2514093
|
||||||
|
15 27 48 91 194 427 895 1747 3214 5711 10060 17946 32844 61917 119904 237026 474887 958111 1936759 3908828 7860042
|
||||||
|
28 39 63 115 219 418 800 1556 3098 6286 12837 26019 51791 100682 190981 354344 645878 1162408 2075461 3690474 6552873
|
||||||
|
9 13 33 79 164 305 529 903 1616 3150 6594 14190 30270 62893 126848 249588 483914 936653 1834918 3677991 7576339
|
||||||
|
5 9 17 37 82 182 407 906 1967 4103 8187 15728 29550 55489 106425 211394 435528 922958 1988216 4308996 9326957
|
||||||
|
8 34 80 157 294 551 1038 1950 3634 6717 12348 22646 41504 75980 138614 251149 450308 796492 1386520 2371835 3983954
|
||||||
|
-6 -3 15 68 189 423 836 1550 2823 5196 9732 18375 34460 63408 113643 197771 334064 548295 875973 1365030 2079015
|
||||||
|
20 32 56 103 184 310 492 741 1068 1484 2000 2627 3376 4258 5284 6465 7812 9336 11048 12959 15080
|
||||||
|
13 26 66 145 274 462 712 1014 1335 1606 1706 1443 532 -1430 -4992 -10880 -20031 -33630 -53150 -80395 -117546
|
||||||
|
12 16 32 84 211 467 921 1657 2774 4386 6622 9626 13557 18589 24911 32727 42256 53732 67404 83536 102407
|
||||||
|
7 23 66 153 308 576 1051 1919 3517 6424 11651 21115 38810 73491 144388 292746 604513 1254817 2596354 5338361 10913870
|
||||||
|
17 26 41 68 129 269 563 1125 2131 3902 7175 13854 28828 63941 146002 331965 736249 1577770 3257753 6483824 12461119
|
||||||
|
20 30 56 107 198 360 650 1161 2032 3458 5700 9095 14066 21132 30918 44165 61740 84646 114032 151203 197630
|
||||||
|
0 -6 -17 -24 -7 75 298 787 1726 3360 5985 9922 15471 22841 32052 42805 54316 65110 72771 73644 62485
|
||||||
|
19 34 53 76 116 211 441 957 2045 4291 8996 19126 41284 89472 191784 401649 815839 1602184 3040807 5583720 9938820
|
||||||
|
4 -1 0 32 146 444 1128 2596 5625 11701 23587 46285 88693 166561 307939 563420 1025614 1866587 3410998 6281670 11693720
|
||||||
|
15 30 55 94 160 288 556 1126 2329 4840 10036 20736 42755 88199 182458 378976 790214 1651973 3455552 7215569 15003665
|
||||||
|
0 -5 -13 -17 -2 61 225 579 1262 2484 4576 8143 14529 27108 54533 118225 268384 616097 1394301 3068215 6527388
|
||||||
|
21 41 82 156 282 487 814 1340 2202 3624 5933 9547 14913 22368 31891 42709 52715 57651 50004 17558 -58460
|
||||||
|
25 36 41 47 83 223 621 1558 3501 7174 13641 24401 41495 67625 106285 161904 240001 347352 492169 684291 935387
|
||||||
|
14 37 73 138 275 569 1162 2268 4188 7325 12199 19462 29913 44513 64400 90904 125562 170133 226613 297250 384559
|
||||||
|
0 -5 -10 -15 -20 -25 -30 -35 -40 -45 -50 -55 -60 -65 -70 -75 -80 -85 -90 -95 -100
|
||||||
|
18 40 76 143 285 599 1287 2755 5795 11916 23947 47149 91316 174867 333008 634137 1212496 2331704 4504734 8713171 16794919
|
||||||
|
7 18 33 54 79 98 89 14 -185 -590 -1311 -2490 -4305 -6974 -10759 -15970 -22969 -32174 -44063 -59178 -78129
|
||||||
|
11 11 13 30 90 246 601 1358 2908 5977 11864 22809 42535 77053 136050 235979 408212 721139 1337516 2654482 5625835
|
||||||
|
24 49 104 203 359 592 945 1506 2428 3942 6384 10335 17167 30723 61753 138430 329304 790167 1854528 4200107 9142735
|
||||||
|
3 8 19 44 92 189 416 975 2290 5152 10926 21868 41673 76521 137145 242859 429109 761008 1356557 2424916 4327258
|
||||||
|
4 20 49 98 184 338 616 1124 2064 3808 7007 12742 22724 39550 67022 110536 177548 278124 425581 637226 935200
|
||||||
|
11 16 24 33 39 42 69 224 774 2282 5804 13188 27575 54344 103004 190924 350224 639347 1160147 2078478 3638934
|
||||||
|
14 32 69 139 259 456 782 1340 2325 4085 7208 12642 21856 37051 61431 99545 157712 244542 371567 553997 811617
|
||||||
|
-2 -2 12 56 162 407 968 2229 4989 10851 22911 46913 93091 178982 333565 603160 1059608 1811348 3018110 4910054 7812304
|
||||||
|
21 29 39 52 77 159 421 1122 2738 6082 12494 24159 44662 79979 140242 242794 417206 712882 1209188 2025725 3324402
|
||||||
|
-2 -4 -7 -3 25 105 287 688 1607 3760 8715 19675 42907 90433 185245 371578 735253 1443981 2827368 5536788 10868414
|
||||||
|
5 10 33 103 273 631 1327 2631 5037 9428 17317 31179 54889 94281 157843 257563 409941 637182 968585 1442143 2106369
|
||||||
|
7 13 26 63 156 367 823 1776 3702 7473 14671 28167 53171 99102 182906 335019 610305 1108441 2012048 3657355 6662686
|
||||||
|
14 30 47 65 82 93 90 61 -10 -133 -273 -250 470 3160 10482 27516 63310 133124 261575 486927 866810
|
||||||
|
0 -3 -10 -29 -56 -62 19 306 1001 2449 5251 10461 19907 36686 65894 115664 198598 333693 548876 884279 1396402
|
||||||
|
13 28 43 58 73 88 103 118 133 148 163 178 193 208 223 238 253 268 283 298 313
|
||||||
|
25 36 50 71 107 171 279 453 758 1447 3369 8924 24050 62057 150699 344900 749324 1557871 3121525 6061842 11454110
|
||||||
|
4 13 32 63 113 198 350 627 1126 1999 3472 5867 9627 15344 23790 35951 53064 76657 108592 151111 206885
|
||||||
|
9 33 68 122 220 417 815 1597 3109 6039 11761 22938 44522 85367 160804 296741 536177 949493 1650546 2821490 4750432
|
||||||
|
4 10 22 53 129 294 635 1340 2809 5850 12013 24155 47404 90822 170284 313426 568010 1015754 1794632 3133921 5407923
|
||||||
|
11 9 2 -9 -18 2 132 565 1710 4390 10227 22375 46861 94943 187142 360066 678053 1253455 2282820 4112523 7358424
|
||||||
|
-10 -6 17 74 181 351 590 893 1240 1592 1887 2036 1919 1381 228 -1777 -4918 -9530 -16003 -24786 -36391
|
||||||
|
27 50 83 126 179 242 315 398 491 594 707 830 963 1106 1259 1422 1595 1778 1971 2174 2387
|
||||||
|
2 12 36 73 129 231 462 1031 2387 5377 11435 22772 42516 74726 124175 195764 293392 418066 564990 719323 850243
|
||||||
|
13 35 70 121 191 287 428 663 1117 2111 4467 10240 24360 58086 135883 308552 677687 1441081 2978636 6020619 11989491
|
||||||
|
5 29 70 144 289 574 1109 2056 3641 6167 10028 15724 23877 35248 50755 71492 98749 134033 179090 235928 306841
|
||||||
|
22 42 85 161 280 452 687 995 1386 1870 2457 3157 3980 4936 6035 7287 8702 10290 12061 14025 16192
|
||||||
|
13 37 85 166 297 522 953 1850 3776 7896 16536 34179 69150 136331 261350 486805 881215 1551535 2660231 4448084 7264079
|
||||||
|
4 -4 -2 27 99 225 407 634 878 1090 1196 1093 645 -321 -2019 -4708 -8696 -14344 -22070 -32353 -45737
|
||||||
|
1 7 13 19 25 31 37 43 49 55 61 67 73 79 85 91 97 103 109 115 121
|
||||||
|
24 44 76 119 172 248 395 719 1410 2794 5490 10865 22178 47110 102809 225145 484564 1011728 2036984 3948547 7375008
|
||||||
|
18 35 62 94 136 228 491 1202 2901 6522 13521 25942 46310 77162 119920 172672 226248 257721 220032 25630 -479544
|
||||||
|
9 26 59 111 183 274 392 595 1100 2527 6389 16004 38100 85536 181863 369173 722534 1378883 2598862 4903168 9372460
|
||||||
|
11 37 83 154 266 459 810 1446 2557 4409 7357 11858 18484 27935 41052 58830 82431 113197 152663 202570 264878
|
||||||
|
10 14 34 88 214 496 1115 2433 5127 10416 20483 39314 74409 140282 265631 508144 985432 1940186 3877340 7849784 16042512
|
||||||
|
2 9 36 98 222 456 872 1558 2606 4140 6499 10808 20370 43675 100495 233729 531604 1167609 2468728 5024552 9846664
|
||||||
|
7 5 9 38 131 359 845 1794 3531 6552 11617 19963 33803 57420 99363 176460 320479 588213 1075805 1939698 3434027
|
||||||
|
-3 7 26 62 129 254 506 1074 2440 5718 13261 29675 63422 129243 251687 470093 845439 1469545 2477196 4061836 6495575
|
||||||
|
6 12 18 35 81 177 347 638 1192 2431 5468 12952 30738 71143 159309 345729 730982 1514298 3087518 6213025 12352235
|
||||||
|
26 43 77 147 288 563 1075 1979 3494 5915 9625 15107 22956 33891 48767 68587 94514 127883 170213 223219 288824
|
||||||
|
9 23 43 81 159 317 632 1263 2548 5192 10600 21426 42428 81740 152695 276358 484955 826413 1370257 2215143 3498341
|
||||||
|
9 22 31 37 49 85 167 313 547 980 2070 5262 14361 38229 95754 224554 495597 1036890 2070673 3970211 7344377
|
||||||
|
11 33 76 159 313 602 1164 2275 4434 8462 15617 27791 48060 82371 144294 267164 532755 1134976 2514665 5633815 12515751
|
||||||
|
17 21 24 26 27 27 26 24 21 17 12 6 -1 -9 -18 -28 -39 -51 -64 -78 -93
|
||||||
|
9 12 9 -2 -14 -4 83 367 1102 2829 6724 15391 34645 77424 172118 379775 828729 1782963 3775587 7868555 16158866
|
||||||
|
1 0 9 29 54 80 125 260 651 1612 3669 7635 14696 26508 45305 74018 116405 177192 262225 378633 535002
|
||||||
|
6 4 2 8 44 152 408 966 2178 4875 10950 24459 53552 113665 232548 457875 868382 1589710 2816394 4841738 8097652
|
||||||
|
9 23 62 142 287 534 942 1613 2753 4842 9060 18265 39112 86487 192583 425142 923397 1967249 4106934 8399320 16826385
|
||||||
|
16 23 46 106 239 514 1078 2257 4752 9989 20734 42209 84215 165294 320895 619043 1189419 2275534 4325877 8150883 15193278
|
||||||
|
10 9 -1 -17 -16 67 372 1162 2893 6316 12624 23660 42205 72368 120103 193881 305548 471403 713533 1061445 1554038
|
||||||
|
11 19 23 21 23 65 223 627 1475 3047 5719 9977 16431 25829 39071 57223 81531 113435 154583 206845 272327
|
||||||
|
11 23 53 129 296 621 1202 2195 3882 6825 12211 22622 43706 87655 180149 373736 772873 1579651 3175453 6263703 12114176
|
||||||
|
-1 -3 -2 16 86 269 648 1322 2427 4250 7557 14342 29357 63076 137304 295658 622899 1279963 2566028 5025708 9629292
|
||||||
|
13 13 10 -2 -21 -28 22 209 657 1543 3106 5656 9583 15366 23582 34915 50165 70257 96250 129346 170899
|
||||||
|
3 15 37 80 173 371 776 1596 3275 6741 13859 28269 56964 113246 222107 429622 818599 1533471 2818173 5071426 8924315
|
||||||
|
4 9 8 1 -2 28 147 448 1081 2311 4697 9602 20510 46142 107299 250961 577774 1293109 2797954 5844727 11795570
|
||||||
|
25 42 67 118 231 468 944 1897 3836 7829 16046 32755 66079 130948 253802 479689 882415 1578288 2743689 4636120 7617427
|
||||||
|
14 36 75 146 277 510 901 1531 2554 4322 7641 14226 27437 53392 102567 192007 348286 611368 1039535 1715562 2754333
|
||||||
|
-5 6 40 106 218 414 787 1525 2957 5604 10241 17990 30487 50205 81091 129836 208435 339366 565970 972814 1724484
|
||||||
|
6 3 9 48 161 411 893 1753 3225 5717 10024 17822 32699 62091 120575 234955 451340 843767 1522591 2638460 4373689
|
||||||
|
15 21 36 70 133 235 386 596 875 1233 1680 2226 2881 3655 4558 5600 6791 8141 9660 11358 13245
|
||||||
|
23 33 51 89 159 273 443 681 999 1409 1923 2553 3311 4209 5259 6473 7863 9441 11219 13209 15423
|
||||||
|
15 24 31 39 57 114 292 793 2063 5005 11330 24149 49069 96462 186504 360585 706895 1416642 2904797 6063523 12781761
|
||||||
|
13 40 81 147 273 548 1165 2496 5196 10338 19585 35433 61644 104182 173343 288434 487439 845780 1510745 2761663 5110755
|
||||||
|
13 25 37 46 58 109 307 906 2420 5797 12715 26149 51505 98839 186991 350881 653751 1206809 2199553 3945040 6945532
|
||||||
|
0 -6 -10 -5 22 100 291 714 1576 3210 6120 11033 18958 31252 49693 76560 114720 167722 239898 336471 463670
|
||||||
|
0 1 -1 -6 -14 -25 -39 -56 -76 -99 -125 -154 -186 -221 -259 -300 -344 -391 -441 -494 -550
|
||||||
|
2 -1 -2 13 77 265 729 1756 3874 8059 16151 31680 61440 118338 226328 428780 802914 1486164 2728269 5001239 9239357
|
||||||
|
26 40 56 79 111 151 202 298 576 1440 3917 10420 26345 63267 144973 318149 670134 1356592 2641942 4954485 8955747
|
||||||
|
3 10 41 120 290 627 1265 2437 4537 8208 14461 24830 41568 67889 108261 168755 257455 384934 564801 814324 1155134
|
||||||
|
14 33 55 74 95 147 304 722 1700 3773 7845 15370 28589 50831 86886 143458 229706 357881 544067 809034 1179211
|
||||||
|
15 37 86 181 358 679 1234 2141 3570 5849 9753 17131 32091 63039 125955 249387 481753 901661 1632088 2859401 4858356
|
||||||
|
2 16 45 105 221 427 766 1290 2060 3146 4627 6591 9135 12365 16396 21352 27366 34580 43145 53221 64977
|
||||||
|
15 27 37 58 130 331 799 1777 3699 7346 14121 26528 49013 89509 162531 295978 546916 1038429 2043527 4168957 8741395
|
||||||
|
9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29
|
||||||
|
19 41 72 112 161 219 286 362 447 541 644 756 877 1007 1146 1294 1451 1617 1792 1976 2169
|
||||||
|
-7 -8 8 51 124 235 425 815 1679 3563 7498 15404 30858 60508 116563 220982 412229 755762 1359788 2398249 4143512
|
||||||
|
7 16 35 74 156 326 660 1274 2333 4060 6745 10754 16538 24642 35714 50514 69923 94952 126751 166618 216008
|
||||||
|
8 5 8 25 69 165 353 682 1201 1989 3337 6310 14092 34793 86871 209194 479406 1047293 2195266 4447395 8763831
|
||||||
|
14 24 30 38 64 136 303 670 1505 3504 8355 19825 45742 101543 216699 446731 896635 1768371 3459847 6773799 13357499
|
||||||
|
11 10 10 21 63 168 388 819 1671 3444 7319 15969 35202 77295 167805 359473 760296 1589178 3283975 6707163 13530974
|
||||||
|
5 13 33 84 206 469 990 1975 3811 7242 13681 25752 48242 89796 165932 304311 553689 998619 1782769 3144676 5470854
|
||||||
|
-4 -5 -3 -1 4 32 134 417 1107 2714 6424 14930 34018 75315 160620 328062 639778 1189605 2107043 3549937 5672236
|
||||||
|
20 24 24 32 70 167 358 685 1200 1970 3084 4662 6866 9913 14090 19771 27436 37692 51296 69180 92478
|
||||||
|
9 12 30 92 241 534 1042 1850 3057 4776 7134 10272 14345 19522 25986 33934 43577 55140 68862 84996 103809
|
||||||
|
18 37 57 80 123 235 518 1150 2423 4837 9333 17805 34104 65837 127372 244587 462048 853469 1536497 2693078 4596897
|
||||||
|
13 33 78 165 321 589 1034 1755 2922 4889 8496 15776 31438 65715 139458 292734 598659 1184777 2264994 4185903 7492303
|
||||||
|
-2 6 19 36 55 73 86 89 76 40 -27 -134 -291 -509 -800 -1177 -1654 -2246 -2969 -3840 -4877
|
||||||
|
14 38 73 119 176 244 323 413 514 626 749 883 1028 1184 1351 1529 1718 1918 2129 2351 2584
|
||||||
|
5 3 5 25 93 256 592 1265 2674 5798 12931 29166 65276 143141 305730 635100 1284275 2532733 4881281 9211319 17047183
|
||||||
|
-3 -3 1 24 91 245 564 1188 2372 4621 9046 18229 38128 81924 177258 379108 791771 1605344 3155293 6019159 11174049
|
||||||
|
5 23 50 93 165 294 548 1079 2199 4520 9218 18518 36543 70725 134040 248402 449633 794517 1370546 2309075 3802721
|
||||||
|
19 32 55 104 206 399 732 1265 2069 3226 4829 6982 9800 13409 17946 23559 30407 38660 48499 60116 73714
|
||||||
|
-4 -4 4 21 42 57 64 112 399 1461 4506 11976 28473 62302 128168 252247 482409 909717 1714123 3260434 6295019
|
||||||
|
6 18 36 61 97 157 278 556 1217 2758 6232 13819 29927 63223 130271 262026 515676 996954 1903304 3608201 6824609
|
||||||
|
9 30 67 121 193 284 395 527 681 858 1059 1285 1537 1816 2123 2459 2825 3222 3651 4113 4609
|
||||||
|
12 5 -4 -13 -20 -23 -20 -9 12 45 92 155 236 337 460 607 780 981 1212 1475 1772
|
||||||
|
-2 2 19 65 169 381 789 1545 2910 5345 9703 17637 32485 61250 119140 240063 500670 1074228 2347719 5167713 11338385
|
||||||
|
21 37 56 78 107 164 318 754 1911 4736 11112 24529 51077 100849 189850 342515 594945 998975 1627192 2579024 3988023
|
||||||
|
11 24 53 106 185 286 415 643 1237 2921 7353 17977 41563 91037 190695 385672 758695 1458798 2748941 5082492 9222453
|
||||||
|
10 19 30 37 46 92 260 710 1706 3649 7114 12891 22030 35890 56192 85076 125162 179615 252214 347425 470478
|
||||||
|
4 7 23 68 180 429 923 1809 3268 5503 8719 13094 18740 25653 33651 42299 50820 57991 62023 60424 49844
|
||||||
|
26 53 96 163 281 519 1022 2061 4116 8038 15402 29305 56147 109464 217837 440608 898232 1829837 3701403 7408696 14659085
|
||||||
|
-8 -2 11 42 126 332 786 1733 3678 7660 15727 31694 62280 118734 219074 391077 676172 1134402 1850635 2942218 4568282
|
||||||
|
10 22 51 116 244 487 967 1971 4141 8853 18975 40365 84757 175160 355704 709274 1388765 2672256 5060462 9449432 17437899
|
||||||
|
15 32 57 101 204 446 965 2004 4026 7958 15651 30672 59575 113830 212621 386755 683953 1175820 1966813 3205543 5098758
|
||||||
|
14 18 32 70 155 340 737 1547 3091 5862 10652 18864 33219 59263 108486 204742 397534 789596 1593802 3248596 6646237
|
||||||
|
17 31 54 84 116 149 198 313 617 1392 3260 7528 16831 36443 77356 164169 355445 794257 1827106 4268652 9961370
|
||||||
|
3 22 67 145 254 392 575 859 1361 2274 3871 6493 10516 16292 24059 33815 45151 57038 67563 73609 70474
|
||||||
|
14 27 45 72 128 271 634 1495 3414 7499 15926 32979 67167 135533 272295 545819 1091322 2172971 4300619 8447566 16453590
|
||||||
|
10 20 44 92 183 345 615 1039 1672 2578 3830 5510 7709 10527 14073 18465 23830 30304 38032 47168 57875
|
||||||
|
19 38 75 144 283 583 1238 2628 5457 10979 21350 40133 72955 128302 218554 361903 587431 949724 1568577 2728286 5107675
|
||||||
|
3 12 38 103 238 483 887 1508 2413 3678 5388 7637 10528 14173 18693 24218 30887 38848 48258 59283 72098
|
||||||
|
20 42 83 151 254 400 597 853 1176 1574 2055 2627 3298 4076 4969 5985 7132 8418 9851 11439 13190
|
||||||
|
16 21 31 67 177 451 1051 2268 4610 8912 16441 28946 48575 77548 117437 167861 224356 275127 296331 245477 52461
|
||||||
|
16 15 21 56 163 419 953 1982 3902 7514 14541 28726 58047 119055 245250 503149 1022956 2056693 4087257 8030328 15602435
|
||||||
|
10 20 35 60 114 243 533 1123 2218 4102 7151 11846 18786 28701 42465 61109 85834 118024 159259 211328 276242
|
||||||
|
15 19 23 27 31 35 39 43 47 51 55 59 63 67 71 75 79 83 87 91 95
|
||||||
|
14 8 -3 -19 -40 -66 -97 -133 -174 -220 -271 -327 -388 -454 -525 -601 -682 -768 -859 -955 -1056
|
||||||
|
14 16 14 7 -6 -26 -54 -91 -138 -196 -266 -349 -446 -558 -686 -831 -994 -1176 -1378 -1601 -1846
|
||||||
|
21 40 61 94 169 339 682 1314 2435 4440 8145 15229 29124 56865 112927 226919 458261 922696 1837689 3596360 6882391
|
||||||
|
2 9 24 47 78 117 164 219 282 353 432 519 614 717 828 947 1074 1209 1352 1503 1662
|
||||||
|
18 39 70 109 156 208 258 317 489 1140 3213 8752 21709 49119 102739 201258 373196 660621 1123824 1847103 2945818
|
||||||
|
2 8 24 54 108 212 431 928 2093 4801 10925 24391 53406 115159 245503 518181 1081488 2225438 4500282 8918564 17289020
|
||||||
|
3 20 60 143 306 607 1132 2024 3574 6442 12108 23686 47265 93967 182930 345431 630357 1111208 1894772 3131545 5027876
|
||||||
|
12 36 75 136 246 465 899 1713 3144 5514 9243 14862 23026 34527 50307 71471 99300 135264 181035 238500 309774
|
||||||
|
19 32 45 58 71 84 97 110 123 136 149 162 175 188 201 214 227 240 253 266 279
|
||||||
|
12 26 40 54 68 82 96 110 124 138 152 166 180 194 208 222 236 250 264 278 292
|
||||||
|
11 19 30 59 141 351 828 1800 3607 6719 11746 19437 30665 46395 67632 95346 130371 173275 224198 282655 347301
|
||||||
|
8 6 4 2 0 -2 -4 -6 -8 -10 -12 -14 -16 -18 -20 -22 -24 -26 -28 -30 -32
|
||||||
|
10 15 15 2 -34 -104 -210 -316 -278 315 2473 8430 22707 53773 116505 235821 452390 832619 1487855 2612966 4563720
|
||||||
|
12 12 18 49 141 350 747 1415 2476 4207 7371 14029 29364 65506 149083 335340 733288 1548610 3154124 6201669 11794547
|
||||||
|
6 22 64 152 324 657 1297 2514 4826 9273 17979 35256 69772 138925 277940 559112 1132508 2310987 4744434 9769217 20093966
|
||||||
|
11 22 42 72 112 161 217 277 337 392 436 462 462 427 347 211 7 -278 -658 -1148 -1764
|
||||||
|
-7 -12 -21 -42 -81 -141 -224 -319 -331 133 2267 9125 27765 73581 179143 412320 913153 1967454 4149807 8592952 17479171
|
||||||
|
-9 -6 -1 -3 -17 -36 -21 148 774 2543 6916 16900 38546 83790 175685 357737 710017 1375988 2605465 4820519 8711817
|
||||||
|
26 36 49 75 137 293 671 1518 3264 6602 12585 22741 39207 64883 103607 160352 241446 354816 510257 719727 997669
|
||||||
|
14 15 18 32 82 220 533 1148 2234 4001 6696 10596 15998 23206 32515 44192 58454 75443 95198 117624 142458
|
||||||
|
-2 -2 0 7 29 82 191 417 938 2224 5375 12788 29584 66835 148874 329326 724781 1582691 3413771 7243900 15085694
|
||||||
|
3 3 9 21 35 41 30 31 223 1205 4559 13907 36743 87415 191740 393857 766059 1422495 2537797 4371865 7302235
|
||||||
@@ -0,0 +1,50 @@
|
|||||||
|
import re
|
||||||
|
|
||||||
|
def prime_factors(n):
|
||||||
|
"""
|
||||||
|
Returns a list of prime factors for n.
|
||||||
|
|
||||||
|
:param n: number for which prime factors should be returned
|
||||||
|
"""
|
||||||
|
factors = []
|
||||||
|
rest = n
|
||||||
|
divisor = 2
|
||||||
|
while rest % divisor == 0:
|
||||||
|
factors.append(divisor)
|
||||||
|
rest //= divisor
|
||||||
|
divisor = 3
|
||||||
|
while divisor * divisor <= rest:
|
||||||
|
while rest % divisor == 0:
|
||||||
|
factors.append(divisor)
|
||||||
|
rest //= divisor
|
||||||
|
divisor += 2
|
||||||
|
if rest != 1:
|
||||||
|
factors.append(rest)
|
||||||
|
return factors
|
||||||
|
|
||||||
|
def lcm(numbers: list[int]) -> int:
|
||||||
|
fs = []
|
||||||
|
for n in numbers:
|
||||||
|
fs += prime_factors(n)
|
||||||
|
s = 1
|
||||||
|
fs = list(set(fs))
|
||||||
|
for f in fs:
|
||||||
|
s *= f
|
||||||
|
return s
|
||||||
|
|
||||||
|
def str_to_single_int(line: str) -> int:
|
||||||
|
line = line.replace(" ", "")
|
||||||
|
r = re.compile(r"-?\d+")
|
||||||
|
for m in r.findall(line):
|
||||||
|
return int(m)
|
||||||
|
raise Exception("No single digit sequence in '{line}'")
|
||||||
|
|
||||||
|
def str_to_int_list(line: str) -> list[int]:
|
||||||
|
r = re.compile(r"-?\d+")
|
||||||
|
return list(map(int, r.findall(line)))
|
||||||
|
|
||||||
|
def str_to_lines_no_empty(text: str) -> list[str]:
|
||||||
|
return list(filter(lambda l: l.strip() != "", text.splitlines()))
|
||||||
|
|
||||||
|
def str_to_lines(text: str) -> list[str]:
|
||||||
|
return list(text.splitlines())
|
||||||
@@ -1 +0,0 @@
|
|||||||
../aocpy/monitor.py
|
|
||||||
Reference in New Issue
Block a user