Compare commits

..

9 Commits

Author SHA1 Message Date
felixm 31d2d2fdc8 Solve day 9 and fix horrible bug in lib.
My integer parser did not consider negative values. I have fixed that
in the 2022 repository, but not here. That's pretty annoying.
2023-12-09 11:48:39 -05:00
felixm 485637caeb Do day 8 and add gcm and prime factors to lib. 2023-12-08 00:32:03 -05:00
felixm a915778046 Do day 7. 2023-12-07 23:57:38 -05:00
felixm fc696046a9 Do days 5 and 6. 2023-12-06 11:47:04 -05:00
felixm 22a4b79550 Do day 3. 2023-12-03 17:23:36 -05:00
felixm c37789748e Add times. 2023-12-02 11:53:40 -05:00
felixm 08115b061b Add license. 2023-12-02 11:52:06 -05:00
felixm 3cf80cab1b Do day 2. 2023-12-02 11:48:32 -05:00
felixm b927685801 Do day 1. 2023-12-01 22:51:14 -05:00
33 changed files with 3710 additions and 1971 deletions
-2
View File
@@ -1,3 +1 @@
Pipfile
__pycache__ __pycache__
*.txt
+3 -45
View File
@@ -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.
-218
View File
@@ -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()
-111
View File
@@ -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()
-69
View File
@@ -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()
-92
View File
@@ -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()
-88
View File
@@ -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()
-71
View File
@@ -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()
-109
View File
@@ -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()
-71
View File
@@ -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()
-143
View File
@@ -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()
-148
View File
@@ -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()
-109
View File
@@ -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()
-213
View File
@@ -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()
-121
View File
@@ -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()
-146
View File
@@ -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()
-74
View File
@@ -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()
-87
View File
@@ -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()
+10 -48
View File
@@ -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()
+2 -2
View File
@@ -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])
-1
View File
@@ -1 +0,0 @@
../aocpy/dx.py
+37
View File
@@ -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()
-1
View File
@@ -1 +0,0 @@
../aocpy/get.py
+1000
View File
File diff suppressed because it is too large Load Diff
+100
View File
@@ -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
+140
View File
@@ -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
+213
View File
@@ -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
+249
View File
@@ -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
+2
View File
@@ -0,0 +1,2 @@
Time: 63 78 94 68
Distance: 411 1274 2047 1035
+1000
View File
File diff suppressed because it is too large Load Diff
+704
View File
@@ -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)
+200
View File
@@ -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
-1
View File
@@ -1 +0,0 @@
../aocpy/lib.py
+50
View File
@@ -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
View File
@@ -1 +0,0 @@
../aocpy/monitor.py