Compare commits

...

No commits in common. '8d1f106d4ec2d288c65d56276b49f4195452d1e9' and 'master' have entirely different histories.

1
.gitignore vendored

@ -0,0 +1 @@
.idea

@ -1,8 +0,0 @@
ToDo
=====
- Day 1 Part 2
- Day 5 Part 2
- Day 7 Part 2

@ -1,41 +0,0 @@
lines = open('inputs/day1.txt').readlines()
digit_names = ["one", "two", "three", "four", "five", "six", "seven", "eight", "nine"]
replaced_names = ['o1e', 't2o', 't3e', 'f4r', 'f5e', 's6x', 's7n', 'e8h', 'n9e']
def digits(lines: list[str]) -> list[int]:
dgts = []
for line in lines:
numbers = ''
for char in line:
if char.isdigit():
numbers += char
break
for char in line[::-1]:
if char.isdigit():
numbers += char
break
dgts.append(int(numbers))
return dgts
def transform_digits(lines: list[str]) -> list[str]:
newlines = []
for line in lines:
indices = {}
for idx, c in enumerate(digit_names):
c_loc = line.find(c)
if c_loc != -1:
indices[str(c_loc)] = str(idx+1)
if len(indices) == 0:
newlines.append(line)
else:
first_index = sorted(indices)[0]
first_number = replaced_names[int(indices[first_index])-1]
first_digit_name = digit_names[int(indices[first_index])-1]
second_index = sorted(indices)[-1]
second_number = replaced_names[int(indices[second_index])-1]
second_digit_name = digit_names[int(indices[second_index])-1]
newlines.append(line.replace(first_digit_name, first_number).replace(second_digit_name, second_number))
return newlines
print(f'Part 1 Solution = {sum(digits(lines))}')
print(f'Part 2 Solution = {sum(digits(transform_digits(lines)))}')

@ -0,0 +1,11 @@
f = open("input.txt", "r")
lines = f.readlines()
current = 0
calories = []
for line in lines:
if line == "\n":
calories.append(current)
current = 0
else:
current = current + int(line)
print(max(calories))

@ -0,0 +1,11 @@
f = open("input.txt", "r")
lines = f.readlines()
current = 0
calories = []
for line in lines:
if line == "\n":
calories.append(current)
current = 0
else:
current = current + int(line)
print(sum(sorted(calories)[-3:]))

File diff suppressed because it is too large Load Diff

@ -0,0 +1,146 @@
addx 15
addx -11
addx 6
addx -3
addx 5
addx -1
addx -8
addx 13
addx 4
noop
addx -1
addx 5
addx -1
addx 5
addx -1
addx 5
addx -1
addx 5
addx -1
addx -35
addx 1
addx 24
addx -19
addx 1
addx 16
addx -11
noop
noop
addx 21
addx -15
noop
noop
addx -3
addx 9
addx 1
addx -3
addx 8
addx 1
addx 5
noop
noop
noop
noop
noop
addx -36
noop
addx 1
addx 7
noop
noop
noop
addx 2
addx 6
noop
noop
noop
noop
noop
addx 1
noop
noop
addx 7
addx 1
noop
addx -13
addx 13
addx 7
noop
addx 1
addx -33
noop
noop
noop
addx 2
noop
noop
noop
addx 8
noop
addx -1
addx 2
addx 1
noop
addx 17
addx -9
addx 1
addx 1
addx -3
addx 11
noop
noop
addx 1
noop
addx 1
noop
noop
addx -13
addx -19
addx 1
addx 3
addx 26
addx -30
addx 12
addx -1
addx 3
addx 1
noop
noop
noop
addx -9
addx 18
addx 1
addx 2
noop
noop
addx 9
noop
noop
noop
addx -1
addx 2
addx -37
addx 1
addx 3
noop
addx 15
addx -21
addx 22
addx -6
addx 1
noop
addx 2
addx 1
noop
addx -10
noop
noop
addx 20
addx 1
addx 2
addx 2
addx -6
addx -11
noop
noop
noop

@ -0,0 +1,6 @@
noop
addx 3
addx -5
noop
noop
noop

@ -0,0 +1,26 @@
lines = open('input.txt', "r").read().splitlines()
cycle = 0
x = 1
signals = [20, 60, 100, 140, 180, 220]
strengths = []
for line in lines:
cmd = line.split(" ")
if len(signals) == 0:
signals.append(9999999)
elif cycle == signals[0]:
strengths.append(x *cycle)
signals.pop(0)
elif cycle + 1 == signals[0]:
strengths.append(x * (cycle+1))
signals.pop(0)
elif cycle + 2 == signals[0]:
strengths.append(x * (cycle+2))
signals.pop(0)
if cmd[0] == "noop":
cycle += 1
else:
cycle += 2
x += int(cmd[1])
print(sum(strengths))

@ -0,0 +1,29 @@
lines = open('input.txt', "r").read().splitlines()
cycle = 0
x = 1
end = [40, 80, 120, 160, 200, 240]
registers = [999999 for y in range(240)]
for line in lines:
cmd = line.split(" ")
registers[cycle] = x
if cmd[0] == "noop":
cycle += 1
else:
registers[cycle+1] = x
cycle += 2
x += int(cmd[1])
pixel_pos = 0
screen = ""
for r in range(len(registers)):
if r in end:
screen += "\n"
pixel_pos = 0
if pixel_pos in [registers[r]-1, registers[r], registers[r]+1]:
screen += "#"
else:
screen += "."
pixel_pos += 1
print(screen)

@ -0,0 +1,146 @@
noop
addx 5
addx -2
noop
noop
addx 7
addx 15
addx -14
addx 2
addx 7
noop
addx -2
noop
addx 3
addx 4
noop
noop
addx 5
noop
noop
addx 1
addx 2
addx 5
addx -40
noop
addx 5
addx 2
addx 15
noop
addx -10
addx 3
noop
addx 2
addx -15
addx 20
addx -2
addx 2
addx 5
addx 3
addx -2
noop
noop
noop
addx 5
addx 2
addx 5
addx -38
addx 3
noop
addx 2
addx 5
noop
noop
addx -2
addx 5
addx 2
addx -2
noop
addx 7
noop
addx 10
addx -5
noop
noop
noop
addx -15
addx 22
addx 3
noop
noop
addx 2
addx -37
noop
noop
addx 13
addx -10
noop
addx -5
addx 10
addx 5
addx 2
addx -6
addx 11
addx -2
addx 2
addx 5
addx 3
noop
addx 3
addx -2
noop
addx 6
addx -22
addx 23
addx -38
noop
addx 7
noop
addx 5
noop
noop
noop
addx 9
addx -8
addx 2
addx 7
noop
noop
addx 2
addx -4
addx 5
addx 5
addx 2
addx -26
addx 31
noop
addx 3
noop
addx -40
addx 7
noop
noop
noop
noop
addx 2
addx 4
noop
addx -1
addx 5
noop
addx 1
noop
addx 2
addx 5
addx 2
noop
noop
noop
addx 5
addx 1
noop
addx 4
addx 3
noop
addx -24
noop

@ -0,0 +1,27 @@
Monkey 0:
Starting items: 79, 98
Operation: new = old * 19
Test: divisible by 23
If true: throw to monkey 2
If false: throw to monkey 3
Monkey 1:
Starting items: 54, 65, 75, 74
Operation: new = old + 6
Test: divisible by 19
If true: throw to monkey 2
If false: throw to monkey 0
Monkey 2:
Starting items: 79, 60, 97
Operation: new = old * old
Test: divisible by 13
If true: throw to monkey 1
If false: throw to monkey 3
Monkey 3:
Starting items: 74
Operation: new = old + 3
Test: divisible by 17
If true: throw to monkey 0
If false: throw to monkey 1

@ -0,0 +1,71 @@
lines = open('input.txt', 'r').read().split("\n\n")
lines = [line.splitlines() for line in lines]
class Monkey:
def __init__(self, index, items, operator, mul, div, true, false):
self.index = index
self.items = items
self.operator = operator
self.mul = mul
self.div = div
self.true = true
self.false = false
self.activity = 0
def business(self):
throwing = []
at = []
for idx, item in enumerate(self.items):
worry = self.op(idx)
worry = worry // 3
target = self.true if self.test(worry) else self.false
throwing.append(worry)
at.append(target)
self.items = []
return (throwing, at)
def op(self, itemindex):
if self.mul == "old":
mult = int(self.items[itemindex])
else:
mult = int(self.mul)
if self.operator == "*":
worry = self.items[itemindex] * mult
else:
worry = self.items[itemindex] + mult
self.activity += 1
return worry
def test(self, worrylevel):
if worrylevel % self.div == 0:
return True
else:
return False
monkeys = []
for l in lines:
index = l[0].split(" ")[1][:-1]
items = [int(i) for i in l[1].split(":")[1].replace(",","").split(" ")[1:]]
operation, mul = l[2].split(" ")[-2:]
divisor = int(l[3].split(" ")[-1])
true = int(l[4].split(" ")[-1])
false = int(l[5].split(" ")[-1])
monkeys.append(Monkey(index, items, operation,mul, divisor, true, false))
for round in range(20):
#print(round)
for monkey in monkeys:
if len(monkey.items) == 0:
continue
else:
items, targets = monkey.business()
for i in range(len(items)):
monkeys[targets[i]].items.append(items[i])
active = []
for m in monkeys:
active.append(m.activity)
active = sorted(active)
print(active[-1] * active[-2])

@ -0,0 +1,77 @@
lines = open('input.txt', 'r').read().split("\n\n")
lines = [line.splitlines() for line in lines]
def product(lst):
p = 1
for i in lst:
p *= i
return p
class Monkey:
def __init__(self, index, items, operator, mul, div, true, false):
self.index = index
self.items = items
self.operator = operator
self.mul = mul
self.div = div
self.true = true
self.false = false
self.activity = 0
def business(self):
throwing = []
at = []
for idx, item in enumerate(self.items):
worry = self.op(idx)
mod = product([m.div for m in monkeys])
worry = worry % mod
target = self.true if self.test(worry) else self.false
throwing.append(worry)
at.append(target)
self.items = []
return (throwing, at)
def op(self, itemindex):
if self.mul == "old":
mult = int(self.items[itemindex])
else:
mult = int(self.mul)
if self.operator == "*":
worry = self.items[itemindex] * mult
else:
worry = self.items[itemindex] + mult
self.activity += 1
return worry
def test(self, worrylevel):
if worrylevel % self.div == 0:
return True
else:
return False
monkeys = []
for l in lines:
index = l[0].split(" ")[1][:-1]
items = [int(i) for i in l[1].split(":")[1].replace(",","").split(" ")[1:]]
operation, mul = l[2].split(" ")[-2:]
divisor = int(l[3].split(" ")[-1])
true = int(l[4].split(" ")[-1])
false = int(l[5].split(" ")[-1])
monkeys.append(Monkey(index, items, operation,mul, divisor, true, false))
for round in range(10000):
print(round)
for monkey in monkeys:
if len(monkey.items) == 0:
continue
else:
items, targets = monkey.business()
for i in range(len(items)):
monkeys[targets[i]].items.append(items[i])
active = []
for m in monkeys:
active.append(m.activity)
active = sorted(active)
print(active)
print(active[-1] * active[-2])

@ -0,0 +1,55 @@
Monkey 0:
Starting items: 77, 69, 76, 77, 50, 58
Operation: new = old * 11
Test: divisible by 5
If true: throw to monkey 1
If false: throw to monkey 5
Monkey 1:
Starting items: 75, 70, 82, 83, 96, 64, 62
Operation: new = old + 8
Test: divisible by 17
If true: throw to monkey 5
If false: throw to monkey 6
Monkey 2:
Starting items: 53
Operation: new = old * 3
Test: divisible by 2
If true: throw to monkey 0
If false: throw to monkey 7
Monkey 3:
Starting items: 85, 64, 93, 64, 99
Operation: new = old + 4
Test: divisible by 7
If true: throw to monkey 7
If false: throw to monkey 2
Monkey 4:
Starting items: 61, 92, 71
Operation: new = old * old
Test: divisible by 3
If true: throw to monkey 2
If false: throw to monkey 3
Monkey 5:
Starting items: 79, 73, 50, 90
Operation: new = old + 2
Test: divisible by 11
If true: throw to monkey 4
If false: throw to monkey 6
Monkey 6:
Starting items: 50, 89
Operation: new = old + 3
Test: divisible by 13
If true: throw to monkey 4
If false: throw to monkey 3
Monkey 7:
Starting items: 83, 56, 64, 58, 93, 91, 56, 65
Operation: new = old + 5
Test: divisible by 19
If true: throw to monkey 1
If false: throw to monkey 0

@ -0,0 +1,5 @@
Sabqponm
abcryxxl
accszExk
acctuvwj
abdefghi

@ -0,0 +1,89 @@
lines = open("input.txt", "r").read().splitlines()
relief = []
s = None
e = None
for i, line in enumerate(lines):
els = []
for j, letter in enumerate(line):
if letter == "S":
els.append(1)
s = (i, j)
elif letter == "E":
els.append(26)
e = (i, j)
else:
els.append(ord(letter) - 96)
relief.append(els)
class Node:
def __init__(self, x, y):
self.x = x
self.y = y
self.g = 999999
self.h = (e[0] - self.x) + (e[1] - self.y)
self.parent = None
def f(self):
return self.g + self.h
def get_children(self):
children = []
if self.x != 0 and relief[self.x][self.y] + 1 >= relief[self.x - 1][self.y]:
children.append(Node(self.x - 1, self.y))
if (
self.x != len(relief) - 1
and relief[self.x][self.y] + 1 >= relief[self.x + 1][self.y]
):
children.append(Node(self.x + 1, self.y))
if self.y != 0 and relief[self.x][self.y] + 1 >= relief[self.x][self.y - 1]:
children.append(Node(self.x, self.y - 1))
if (
self.y != len(relief[0]) - 1
and relief[self.x][self.y] + 1 >= relief[self.x][self.y + 1]
):
children.append(Node(self.x, self.y + 1))
return children
def a_star_search(start, goal):
start_node = Node(start[0], start[1])
start_node.g = 0
openSet = [start_node]
while len(openSet) > 0:
current_index, current_node = get_smallest_f(openSet)
if current_node.x == goal[0] and current_node.y == goal[1]:
return current_node.g
openSet.pop(current_index)
for child in current_node.get_children():
tentative_gScore = current_node.g + 1
if tentative_gScore < child.g:
child.parent = current_node
child.g = tentative_gScore
if not_in_set(child, openSet):
openSet.append(child)
return None
def get_smallest_f(openset):
smallest = 999999
smallest_node = None
smallest_idx = 99999
for idx, node in enumerate(openset):
if node.f() < smallest:
smallest = node.f()
smallest_node = node
smallest_idx = idx
return smallest_idx, smallest_node
def not_in_set(node, openset):
for n in openset:
if n.x == node.x and n.y == node.y:
return False
return True
print(a_star_search(s, e))

@ -0,0 +1,75 @@
lines = open("input.txt", "r").read().splitlines()
relief = []
starting_points = []
points = []
s = None
e = None
for i, line in enumerate(lines):
els = []
for j, letter in enumerate(line):
if letter == "a":
starting_points.append((i, j))
if letter == "S":
els.append(1)
s = (i, j)
starting_points.append((i, j))
elif letter == "E":
els.append(26)
e = (i, j)
else:
els.append(ord(letter) - 96)
points.append((i, j))
relief.append(els)
def neighbours(node):
n = []
if node[0] > 0 and relief[node[0]][node[1]] + 1 >= relief[node[0] - 1][node[1]]:
n.append((node[0] - 1, node[1]))
if (
node[0] < len(relief) - 1
and relief[node[0]][node[1]] + 1 >= relief[node[0] + 1][node[1]]
):
n.append((node[0] + 1, node[1]))
if node[1] > 0 and relief[node[0]][node[1]] + 1 >= relief[node[0]][node[1] - 1]:
n.append((node[0], node[1] - 1))
if (
node[1] < len(relief[0]) - 1
and relief[node[0]][node[1]] + 1 >= relief[node[0]][node[1] + 1]
):
n.append((node[0], node[1] + 1))
return n
def h(node):
return abs(e[0] - node[0]) + abs(e[1] - node[1])
def a_star_search(start, goal):
queue = [start]
gscore = {x: 9999999 for x in points}
gscore[start] = 0
fscore = {x: 9999999 for x in points}
fscore[start] = h(start)
while len(queue) > 0:
queue = sorted({x: fscore[x] for x in queue}, key=lambda x: x[1])
current = queue.pop(0)
if current[0] == goal[0] and current[1] == goal[1]:
return fscore[current]
for n in neighbours(current):
newg = gscore[current] + 1
if newg < gscore[n]:
gscore[n] = newg
fscore[n] = newg + h(n)
if n not in queue:
queue.append(n)
return None
scenic = []
for starting_point in starting_points:
scene = a_star_search(starting_point, e)
if scene is not None:
scenic.append(scene)
print(sorted(scenic)[0])

@ -0,0 +1,41 @@
abaaaaacaaaacccccccccaaaaaaccccccccccccccccccccccccccccccccccaaaaaa
abaaaaacaaaaccccaaaaaaaaaacccccccccccccccccccccccccccccccccccaaaaaa
abaaacccaaaaccccaaaaaaaaaaacccaacccccccccccaacccccccccccccccccaaaaa
abaaaacccaacccccaaaaaaaaaaaaaaaaacccccccccccacccccccccccccccccccaaa
abacaacccccccccccaaaaaaaaaaaaaaaaccccccccccaacccccccccccccccccccaaa
abcccacccccccccccaaaaaaaccaaaaaaaccccccccccclllcccccacccccccccccaac
abccccccccccccccccaaaaaccccccccccccccccccclllllllcccccccccccccccccc
abaaacccccccccccccaaaaaccccccccccccccccaakklllllllcccccccccaacccccc
abaaacccccccccccacccaaaccccccccccccccccakkklpppllllccddaaacaacccccc
abaaacccaaacccccaacaaaccccccccccccccccckkkkpppppllllcddddaaaacccccc
abaacccaaaacccccaaaaaccccccccccccccccckkkkpppppppllmmddddddaaaacccc
abaaaccaaaaccccccaaaaaacaaacccccccccckkkkpppuuuppplmmmmdddddaaacccc
abaaacccaaaccccaaaaaaaacaaaaccccccckkkkkoppuuuuuppqmmmmmmdddddacccc
abcccccccccccccaaaaaaaacaaaacccccjkkkkkooppuuuuuuqqqmmmmmmmddddcccc
abccccccccccccccccaaccccaaaccccjjjjkoooooouuuxuuuqqqqqqmmmmmddecccc
abacaaccccccccccccaacccccccccccjjjjoooooouuuxxxuvvqqqqqqqmmmeeecccc
abaaaacccccccacccaccccccccccccjjjjoootuuuuuuxxxyvvvvvqqqqmmmeeecccc
abaaaaacccccaaacaaacccccccccccjjjoooottuuuuuxxyyvvvvvvvqqmnneeecccc
abaaaaaccaaaaaaaaaaccccccccaccjjjooottttxxxxxxyyyyyyvvvqqnnneeecccc
abaaaccccaaaaaaaaaacccccccaaccjjjoootttxxxxxxxyyyyyyvvqqqnnneeecccc
SbcaaccccaaaaaaaaaaccccaaaaacajjjnnntttxxxxEzzzyyyyvvvrrqnnneeccccc
abcccccccaaaaaaaaaaacccaaaaaaaajjjnnntttxxxxyyyyyvvvvrrrnnneeeccccc
abcccccccaaaaaaaaaaacccccaaaaccjjjnnnnttttxxyyyyywvvrrrnnneeecccccc
abcccccccccaaaaaaccaccccaaaaaccciiinnnnttxxyyyyyyywwrrnnnneeecccccc
abccccccccccccaaacccccccaacaaaccciiinnnttxxyywwyyywwrrnnnffeccccccc
abccccccccccccaaacccccccaccaaaccciiinnnttwwwwwwwwwwwrrrnnfffccccccc
abccccccccccccccccccccccccccccccciiinnnttwwwwsswwwwwrrrnnfffccccccc
abaaaccaaccccccccccccccccccccccccciinnnttswwwssswwwwrrroofffacccccc
abaaccaaaaaacccccccccccccccccaaacciinnntssssssssssrrrrooofffacccccc
abaccccaaaaacccccccaaacccccccaaaaciinnnssssssmmssssrrrooofffacccccc
abaacaaaaaaacccccccaaaaccccccaaaaciiinmmmssmmmmmoosroooooffaaaacccc
abaaaaaaaaaaaccccccaaaaccccccaaacciiimmmmmmmmmmmoooooooofffaaaacccc
abcaaaaaaaaaaccccccaaaaccccccccccccihhmmmmmmmhggoooooooffffaaaccccc
abcccccaaacaccccccccaaccccccccccccchhhhhhhhhhhggggggggggffaaacccccc
abaccccaacccccccccccaaaccccccccccccchhhhhhhhhhgggggggggggcaaacccccc
abaaaccccaccccccccccaaaacccaacccccccchhhhhhhaaaaaggggggcccccccccccc
abaaaccccaaacaaaccccaaaacaaaacccccccccccccccaaaacccccccccccccccaaac
abaacccccaaaaaaaccccaaaaaaaaacccccccccccccccaaacccccccccccccccccaaa
abaaaccccaaaaaaccccaaaaaaaaccccccccccccccccccaacccccccccccccccccaaa
abccccccaaaaaaaaaaaaaaaaaaacccccccccccccccccaaccccccccccccccccaaaaa
abcccccaaaaaaaaaaaaaaaaaaaaacccccccccccccccccccccccccccccccccaaaaaa

@ -0,0 +1,23 @@
[1,1,3,1,1]
[1,1,5,1,1]
[[1],[2,3,4]]
[[1],4]
[9]
[[8,7,6]]
[[4,4],4,4]
[[4,4],4,4,4]
[7,7,7,7]
[7,7,7]
[]
[3]
[[[]]]
[[]]
[1,[2,[3,[4,[5,6,7]]]],8,9]
[1,[2,[3,[4,[5,6,0]]]],8,9]

@ -0,0 +1,40 @@
import ast
lines = open("input.txt", "r").read().splitlines()
order = []
def resolve(left, right):
if isinstance(left, int) and isinstance(right, list):
return resolve([left], right)
if isinstance(left, list) and isinstance(right, int):
return resolve(left, [right])
if isinstance(left, list) and isinstance(right, list):
for x, y in zip(left, right):
resolved = resolve(x, y)
if resolved is not None:
return resolved
return resolve(len(left), len(right))
if left < right:
return True
elif left > right:
return False
else:
return None
counter = 0
for i in range(0, len(lines), 3):
left = lines[i + 0]
right = lines[i + 1]
counter += 1
left = ast.literal_eval(left)
right = ast.literal_eval(right)
right_order = resolve(left, right)
if right_order:
order.append(counter)
print(sum(order))

@ -0,0 +1,49 @@
import ast
lines = open("input.txt", "r").read().splitlines()
def resolve(left, right):
if isinstance(left, int) and isinstance(right, list):
return resolve([left], right)
if isinstance(left, list) and isinstance(right, int):
return resolve(left, [right])
if isinstance(left, list) and isinstance(right, list):
for x, y in zip(left, right):
resolved = resolve(x, y)
if resolved is not None:
return resolved
return resolve(len(left), len(right))
if left < right:
return True
elif left > right:
return False
else:
return None
ordered = []
lines.append("[[2]]")
lines.append("[[6]]")
for line in lines:
if line == "":
continue
ordered.append(ast.literal_eval(line))
sorted = False
while not sorted:
sorted = True
for i in range(len(ordered) - 1):
if not resolve(ordered[i], ordered[i + 1]):
hold = ordered[i]
ordered[i] = ordered[i + 1]
ordered[i + 1] = hold
sorted = False
signals = []
for idx, o in enumerate(ordered):
if str(o) == "[[2]]" or str(o) == "[[6]]":
signals.append(idx + 1)
print(signals)
print(signals[0] * signals[1])

@ -0,0 +1,449 @@
[[[6,10,[],[8,1,6],6],[],[[1],7,1,0]],[9]]
[[[5]],[[[5],[7],[1],8],2,2,1]]
[[[3,[2,1,4],2,[],[4]],[1,[]]]]
[[1,[],[[3,8,9],9,2,[3,6,5]],[2,[7,1,3,0,9]],9],[[[4],4,7,3,[7,5,1,10]],1,[[5,10,7],[5,3,2,1],[4,5,0,10,9],[2],7],[7,8,5,[10,4,10]]],[4]]
[[3,8,0,6,[10,6,[10,0]]],[[[3,4],[7,9],[]],9],[10],[]]
[[1,10,2,3],[4],[]]
[[1,0],[[[5,3],10,[],[4]]],[[],8,9],[[2],[[6,5,10]]],[[[2,10],2]]]
[[9,[0],[],5,6],[2],[],[1,[4,[7,4,3,8,0],[1,5,1,1],[3],7],[4,10,5,[4,10]]]]
[[[[],2,[7,5,4,7,7],10],[[3],[2,8],1,6,[]],2],[[9,[3,6,5],[9,10,1,6]]],[],[[[3,10,5,6,0],[],[4,4,9,6,6],1,[8,4,7,1,0]]]]
[[1,[2,5,[10,6]],0,10],[[0,3]]]
[[9],[3],[2,4]]
[[],[],[],[]]
[[[3]],[[]],[[1,[],[6,8,5,8,8]]]]
[[],[[2,0,7],[]],[]]
[[],[[[5,5,6,0,4],[6,0,8,2]],4],[[10,3,2,3]],[[[6]]],[[]]]
[[],[[7,1,[],[2,1],7],[[9],0,5],[10,[7,6,3,7],[9,3],9]],[],[[[9,4,9,4],[5,1,1,5]]],[10,5,7,0,[[3,8],[],2]]]
[[[],[7,[],4,0,[7]],[1]],[[5,[8]]],[],[5]]
[[],[[[6,7,7],1,4,[7,6,6],0],[[2],9],[[3,4,5],2],[7],4],[[[9,1,4,0,3],[3,9,4]],[[7,8,7,10,1],9],[0],9,3],[[],[],[],[4],[[2,6,5],[5,4,8,7],[1],1]]]
[[],[[],[9,[1,8,8,7,6],2],0,[[0,0,7],[1,5,2,8,4],[8,5],0],[]],[[[10],0],2,[9,[2,10,0,5],3],1]]
[[[6,5]],[[[3],[3,3,4,5]]]]
[[3],[10],[[],[0,5,[2,2,4],8,[]],[[0,3],6,0],0]]
[[[],10,[[5,2,0]]],[10,2,9]]
[[],[[0,10,1,9],[2,[9,9]],[0,8,10,6]],[0,3,6,[[5,5,0],9,4]],[[7,[3,7]],5,4,[[8,6,0,1,10],[],[0],[],10],7]]
[[],[8,1,1]]
[[[2,[4,7,10]],3,1,[]],[],[[0,[6],4,1],2,[2,3,[5,7],9],9],[[8,[],[1],5],8,[[9],2,10,1],[[3,1],1],[[9,6,1,8]]],[3,3,4,3,[[],[10],1]]]
[[9,0,8,[[4,3,4,7,10],[8,9,6],2],[]],[9,[[1,0],9,7,9,[0,10,7]],[[8,10],[5,2,0]],4],[5,8,[7,[7,6,9,8,8]],[]],[2,[],2]]
[[],[6,5]]
[[10,5,2],[[1,8]]]
[[2,1],[9,[5]],[1,0,8,[]],[],[[4,5,[8,9,9],2,8],5,[0,[0,9],6,8],[],[3,10,4]]]
[[1,10],[]]
[[[0,9,[4]],[[7,8,9,8],[7],10]],[9]]
[[[[8,7],[2,5],8,6,9],10,7,[10],1],[6,0,0,4,0]]
[[[9,[3,4,10,8,0]],2],[[6,[0,6,10,9,10],0,[2,0,6,0],[4]],2,0],[[0],[[1,10,10]],[10,[6,5,2,9,9],[9],[8,8,7,1]],[5,5],6]]
[[[9],0,3,[[]],[[8,9,4]]],[]]
[[9],[8],[[8,5,2,4]],[],[[10,3,[8,3,3,1]],[[],0,[5,8,3,6],[]],[3]]]
[[],[[[0],[],10,[4,9]]],[[[3,2,3,2],1]]]
[[4,1,2,[[6],[8]],7],[7,0,[[7,5,3,10,7],[4,10,4,7,9]]],[0,[],[1,9],[8,2]],[7,3,[[4,3,4,0]],2,[8,[8,2,7],[3,2,0,4,6]]]]
[[],[]]
[[3,8,8,[],[[6],[9,9,1,0,3],[6,4,3]]]]
[[7,[[7,7,0],5,[1],10,10]],[2,7,[],3,[[],[5,8,7]]],[],[0,1],[[9,2,[0,1],[4,8,3,6]],[5,2,5,6],[9,[5,1,6,1,4],[8,5,9,4,9],[8,8]]]]
[[],[[8]],[8,[5,9,4,7],4,[8]],[2,[2,0],6,[[2,2,8],[9,7],10,5,[5,7]],[[9,6,0],7]]]
[[9,4],[[1,4,1,[6,9],5],4],[0,[9,7,[]]],[[[10,10],[9,2,7]],[0,6],[5,8],[]]]
[[[6,[10],[7,4,9,3]],[[],[5,0],[5,1,2,10,3],[]],3,[],3],[[],[7,8,2,10,[8,3,4,2]],1,[7,[6,3,9,6],2,4],10],[[]],[[],[[6],[5],[7],[9]]],[10,7,6,8]]
[[],[[4,[5,1,9],6,10],[[3,8,3,5,9],9,[7,6,10,9],10],[[3,7,8],9,[],8]]]
[[6,8,9,[[4,10,4,6,8]]],[],[[[],[7,6],8,[5,8,7,5],[7,3,0,1,1]],2,3],[5,10,[7,2,[5,5,2],[3],3]],[]]
[[],[1,9,8],[9],[7,[1],1]]
[[],[4,[[9,7,10],6,7]]]
[[[[6]],[[],3,0]]]
[[4,1],[],[5,3,3,[4]]]
[[[[10,7],10,[5,4,5,6,5],[8,2,5,4],[5]],[[8],[],9],[5,[2]]],[[[2,6,4],[1,5,4,10],[10,7],0,8],[6,6,[]],3,[[5,7,9,2],10],10]]
[[4,7,0,2]]
[[4,[],[2],[5,4,0],4],[[],9,[[7,1],2,9]],[10,1,[0,5,[6,2,7,1]],[[8]],[[9,9,7,8],5]],[],[[[4]],3]]
[[8,[],5,[[1],[3,5,7]]],[]]
[[[0],[5,5]]]
[[[8,[0],[0,2,6,9]],10,[],1]]
[[8,4,0],[],[7,9,[[10,4],10,10,0],[],0],[],[3,5,3]]
[[3,6,7],[4,5,6,[9,6],7]]
[[2],[[[6,6,4,5],[1,9]],[8,4,[5,5]],6,[3,[0,0,7],[3,9],[8,3,9],[2,0]]],[[[5,1,4,0,5],[10,5,9],3,2],[[4,0],[4,6],[4]]]]
[[6,4],[],[[]],[[[],1,2,0,[10,2]],6,4,5]]
[[1,[[],[3],[1,5]],[10,[],[2,8,4,10],[9,2]],[7,4,3,5,0],0]]
[[[[5,1,7],4],[]]]
[[[7,2,[]],[]],[[6],4,5,[[]],[[7,0,8],[0]]],[10,1,1,[[4,9],6,[10,2,3,9,0],[2,3,4,3]],3],[0,2,[7],5,2]]
[[4,3,[1,[9,0,8,7],1],[[],[],4,[5,7,10,6],10]],[]]
[[1,[4,5,[6,0,9,4,9],[],[1]],3,9]]
[[[],[6]]]
[[4,9,[3,[3,10,2,8],0,10,[2,3,2,10]],3,[2,[]]],[2,6],[],[6,0,5,[[6,1,3,5],5],[[3,8,1,9,10],[2],[1,4,10]]],[[[0,2],[7],[10,9,4,1],[4,2]],4,[]]]
[[[4]],[6,[[4],[8],[2],[4,0]],[4,9,[3]],[[8,10,6,10],[9]],9]]
[[[],5,[8,10],[4,[4,6,7,4],6,[4,10,5,4],[8,10,4]],8],[[[3,4,1],[1,6,6]],4,[[6,9,9],7,[],0,[1,4,7,2,1]],10,[[7,1,2],[6,3,3,8,10]]],[[[2,9,0,4,5]],[[9,0],4,[8,7]],[5,[3,9,2,8],9,[1]]],[6]]
[[[[8,10,10,1,7],[],1]]]
[[[3,3],[],[4],[]],[],[],[[],[7,8,3],10]]
[[],[0]]
[[8,[]],[6,[[1,10,7]],[2]],[],[],[[1,[],1,10],3]]
[[[6,7,4]],[2,5,[0,7,0,[],1],[10,4,[0,6],[5],[9]],[[5,7],[0,10,7,9]]],[[[1],6],[0,3,10]]]
[[[[9,0,1],7,[3,6,5,1],3,8],[[10,10],4,[4,8,1,10,2],[5,2,9]]]]
[]
[[]]
[[],[],[[[1,8,3],8,3,[9,6,1,9,1],1],[],2,4],[[0,[1,8]],8,[[5,0],[0,2,9],10,[5]],[[1],[],[9,2,1,0,7],6],5],[2,[5,7,8,[3],[1]],[[10,9,10],5,3]]]
[[2,10,6,4,[5,[]]],[0,[9,5,[2,6,10,3,8]],[]],[6,7,[[0,6,6],5,[4,3,0],[],3],6],[6,9,[[7,6,0,0,9],[9,10],7],[[],2],[4,2,7,[4],[4,6,2]]]]
[[2,5,[[2,0,5,8]],[1,[0,0,10],9,6,[1,9,3]],[[8,2,0,8,8],[9,10,3,9,7],[0]]],[6,[3,[1,2,1,7,4],[6,10,10,1],[10,0,9,7,2],8],9,8,[[],2,8,8]],[],[]]
[[4,9,[[3,1,2,5,0],5,[9,0,9,7],[8,5,7]],8],[[],2,[],[3,8]],[0,8,1,[[7,5,7,1],7,[10,9],4,8]]]
[[],[7]]
[[],[[3,[10,3,5,8]],[[0,9]],[[],10]],[[],0],[]]
[[2,9,0],[8,5],[[1,[0,1],7]],[[8,[2,9,6,4],9,[8,4],4],7]]
[[[[6,5,5,5,8],[9,1,1,0],[],[1],[2,5,2,7,10]],10]]
[[[[4,4,10,5],2,[]],[9],[[9,7],[2,0,1,1,5],0,10],10,5],[],[3,7,[9,9],4,2],[[[5,9],[],4],[[],[0,8]],[[10,4,6],7,3,[],[]]],[3,[0,2],[[0],7,[],6],3]]
[[],[9,[[6,3,2,8],[8],[2,8,0]]]]
[[[9],[[3,9,8,1,0],[3,10,7]],[5,[10,10],5,[],[1,6]],[[6,0,0,10,10]]],[],[5,[9,[1,3],[4,9,0,10],[8,5],[10]],[]],[[2,8,[5,1,6,1,4],10],6,[[4,6,6],8,[4,8,10],[10]],10,2]]
[[[[8,9,0,0],1,10],4],[6,5,0,[5,[6,0,9],[3,9,5],10,[4,8,3,6]],[]]]
[[[10],[5,[2,10,4],9,7,[6,5,10,7,6]],[9,[],[],[0,4]]]]
[[],[[9,[8],9],[[1,3,5],[5],[4,6,10,4],[7,8,10,9]],[[4,0,7,5],6,[]],[0]],[[[2,4,5,8]]],[5,[8],[[6,2,8,2,3]],[5,[],[2,0,4,1,4],[8]],6],[[8,0,6]]]
[[[],9,[[5,4]],4],[]]
[[3],[[[4,5],[2,1,8,9],[9,9,2]],6],[1,[10,4]],[10,[3],[[9],2,[10,0,8,5],4],[],8],[2,9]]
[[[2,5],7,8],[0,1,[],2]]
[[1,6],[[],9,7,0]]
[[[5,1,[3,2,6]]],[10,1,9,1],[]]
[[8,10],[],[[[8,7]],[10,[0,3,9]]],[[8,[7,3,2],[7],[2,1],[1]]],[4,0,1]]
[[[[2],[4],9,[0,1,0,1],6],[],[8,[4],5,9]],[]]
[[[5,[10,1]],[6,2,[6,4],[6,1],8]]]
[[[5],[6,0],1],[[[8,7],[1,6]]],[0,9],[],[0,0,[9,0,[],3]]]
[[[[8,10,3,0],[4],[0],[5,2,7,2],[4,7,5,5,4]],[[4,10,9,9],[1,1,4,8,0],10,[2,10]]]]
[[[[5,4,5,4,2]]],[8]]
[[[8,7,6],1,3,9,[[3,4,2,7],[],[10,10],[8,7,7,10,10]]],[5,8,3]]
[[4,[0]],[5,[5,1,1],[[2,1,6,4],[8,1,8,6,6],[10],7,1]],[],[],[5,9,3,3]]
[[6,[1,[5,1,4,8],[],[6,0,4,0,7]],9,[[6,5],[4,5,8],[4,10,8,7],[3,0],6]],[[3],[],7,9,[[6,10,1,2]]],[[],5,[[7],3,10],3]]
[[[0,[2],[8,4,4,2],[8,5,8,3,6]],[[6,4,0,8,1],[],4,[3,2]]]]
[[4],[[[6,0,1,3],[5,2,4,4],6],[[],1],[8,[]],7,[]]]
[[[[0,0],[3,4]]],[]]
[[[9,[10,0,9,10]],2],[4,6,[[8]]]]
[[],[[[8],[8,1,5],9,[9,0,1],[5,10,3,0]]],[]]
[[[1,[8,5],6,[]],[10,1,1,[2,10,4]],[],[8],[[4,10,6,3,0],[2,10],6,8,[0,10,10]]],[[[1,4,4,7,6]],9,8,[[6],4,[8,9],[0]],[[9],[4],3,3,[6,5,6,0,3]]]]
[[9],[[10,[5,2,8,0],7,[9,7,6,2,1],[5]],[9,[5,3],[4,10],[5,4,6,9]],[5,[6,8,4,4,7],[0,9,5,4],[1,0],3]],[],[[8],[[5,7,0]]]]
[[[8],[],4,9,1],[[1,[5,6,3,1],[8,6,0,5,0]],8,2,[[7,5,1]],1],[[[10,6,4],[8,6,1,4,9]],[[]],9,[7,[9,4,6],8,[6,4],7],[8,3,9,[10,6]]],[[7,8,[2],[7],[6,4,9,3]],10,[4,8,[0,6,2,1],6]]]
[[[4,1,6],3,[6,7]],[0,[6,0,[7,9,9],5],[10,2,[2,2,1,9],[4,0],[2,1]]],[[]]]
[[],[8,6,7,[9,[6,9,2,4,7],[10,0]],[]],[1,[5,3,10,[6],[8,6,3,6]],2,3],[[],[[9,3,10,0]],2,[[9,3,10,6],4],0],[[[0,5,10,9],6,[2],[1,2,2]]]]
[[[[],[8,1,5],[1,6],[2]],8],[[]],[1,5,[6],[[]]]]
[[],[[],[5,9,[3],[0,6,5],5],10,4,[8,[],6]],[8,0,[[3,4,1,10]],0]]
[[7,2],[],[[5,7,3],[],[[2,2],[],9,[2,6,7]]]]
[[[[2,9,2]]],[]]
[[4,3,10],[0,[1,9,[1,10,5]],8,[[8,6],[3,1],[9,8],1,[4,8,4,5]],3],[[[2,2],[8,5,5,2,0],3,[5]],[1,[3,10]]],[8,[[],[3,8],1]],[[]]]
[[[4,5,[],[10,3,10,4,10],8],[9],2,4,6],[[6,[10]]]]
[[[6],8,4,2],[1,[]],[[],10,[]]]
[[2,6,1],[[[7,6],7,[],[2,0],[3]]],[10],[[9],10,[7,3,[],9,7],6,9]]
[[0,6,9,[[0,10,1]]],[[[],7,3],[]],[],[8,9,2],[1,[0,8,[9,8]],[[3]],[1,7,7,1,[5,4,4,10]]]]
[[7,8,[]],[4,[8,[6,3],6],0],[2,9,7,[10]],[5,[[],0,3,[9]]],[]]
[[],[0,[7,6,[2,6],[7,2]],[4,3,6,7,8],7,1]]
[[[[3],7,[],2,[3,9,4]],[[0,4,10,8,0],0,9,[4,6,4,0],[4,6,2,8]],[[5],[2]],1,[]],[[3,7,6,7,10],[[10,3,9],[4,1,7],0],7,[0]],[3,7,6],[7,[8],7,[[0],5,9,9,1],0]]
[3,2,7,8]
[3,2,7,8,2]
[[[6,[10,3],0],4,[[1,7,9,9,10],1,3,[1,4,4,5]],[[8],[],9,9],[[6,8,9,7,3],9,[0],[2,7],0]],[3],[[10,[],6],[]],[[[9],10]]]
[[9],[10,7],[[0,[9,10,10],10],7,10]]
[[8,9,2,[],[9,7]],[[2,[7,6,2,3],8,6],[[7,7,9,4,5],[],[6,2,7,2],4,2],10,4],[4],[]]
[[10,0,[[],9,0],[[7,3,7,1],8,[0,3,8,5]]],[9,[4,0,10,9]],[]]
[[[[6,1,4,0,2],[4],[5,1,0]],[5,[1,7,2]],5,7,[[]]]]
[[],[[[],0,4],[[0,8,5,10]],[5],[4,8,10],6],[[5,10,[8,8,4,4],7,[6,8,10,7]],10,[],[[7,6],[1,8,10,10,0],2,[1],5]],[[6,[],0,2],0],[7,[[9,7,0,0,2],[3],0],9]]
[[[[1,1,8,8],5,[1],[5,3,6],[1,7,7,10,7]],10],[[1,[8,0,5,4],8],[[],6,5]]]
[[],[5,[],[6,8,5,[4]],[[4],[7,8,10,4],[6],[4,5,0]]],[3,[[3],[6,0,7,1,6],3,8,[6,10]],8,7],[[4,5,[2,8],[]],9]]
[[[7,0,7,3]],[],[6,1,[0],9]]
[[[8,10,9]],[7,[7,[],[9,3,6],[1,2,4,7]]],[0,2,[]]]
[[[[4],[7,4,6,7,1],8,6,9],6],[4,[],[1,[6,7,5],[7,7,4],8],9],[[9,10,7]]]
[[[0,[],[0,2,10]],7],[6,1,[[4,0],2,4,[10,3,5],10],9,[4]],[0],[[[6,3,4,4]],[[],[10,10],[8],9],0],[]]
[[[9,[1,2,6,6,2],[9,7,0,3,4],[5,9,10,4,0],5],7,[[5],0,[2,7,4]],[[9,6,10,5,10],8,5,[3]]]]
[[3,[4,1,7,5],[9,4,[2,6],[7,5]],[[9,0,6,6]],3],[[]],[],[5,[],9,8]]
[[0,5,[[],[8],[2,5]],4],[[1,[8,3,10],[6,3,8,1],[4,10,6,5],[9]]]]
[[0,3,2,4,4],[1,[],[[2,8]]]]
[[[[9],8],7,5,[0,[8,6]],[6,3,[10],[]]],[[1,[]],[[9,10]]],[[[10,2,10,5,5]],[],4],[[7],6]]
[[],[6,[],[],5,4],[[3,[1,5,10],7],[4,[6,4,4,0,5],[0,4,2,9]],[2,8,4,[6],[0]]],[[],[7,[4],[]]],[[],[[]],[[6,6,9],[9,5],8,[3,2,3]],[[8],6],10]]
[[[],5,1],[[[2,1,3,10],4,[],[4,1,4],10],7],[8,5,[6]],[[],0,[4,[7,1,2,4]],1,1]]
[[[[0],1],[2,[4]],[[],9,[3,7,6,2],[5,10,7,0]]],[],[[[1]],[[0,5],[0,6]],[[1,10],[0,7],[6,9,4,10]],5,[[3,6,5]]],[]]
[[[0,[0,6,7,6,3],2,[]]]]
[[7,5],[3,3,8,[8,[9,7],[2,2],[2,10,5,7],[7,1,8]]]]
[[[6,[3,4,8],[4],[1,1,1],9],3,[[7,5],4,[9,8,0],[1,6,4,10,3]],[3]],[[3,[1,5,3,3,1],9,8],6,[0,[2,10,7,3]],[7,2,[6]]],[9,4,[],[[10,4,4,10,8],7,[3,2,0,1,0]]],[[4,9]]]
[[[[7,5,9],[1,3],1,0,8],[[10,2]],5,4],[[[],4,[],6,[0,3,1,6,10]],1,2]]
[[9,9,[[],[7,5,4,3]]],[3,3,[],[4,[9,0,0,1]],8],[6],[[],6,[4,3,[],[1,7,6,9,6]]]]
[[10],[],[],[8],[9]]
[[4],[[0,[10,1],[2,7,9,4,6],3],5],[[[1,4],[3,8,10,4],8,[7,8,1,4,8],[]],3]]
[[],[3],[1,[0,[2,7,0],2,8,[3,8,6,1,8]],9],[]]
[[10],[],[[[3,9,9],[],[7,8,6,7,5],6],6,8,[4,[10,10,2,9,9],9,4,1]]]
[[6],[1,4,5,[[10,6],[],9,6]],[[0,[2,5],[5,9],7],[[0],3,1]],[[10],7],[[[8,4,2,7]],4,7]]
[[[7],1,[],[[],5,1],4],[],[0],[2,[1,[0],5],3,8],[10,[7,9,4,[2,5,1,7]],0]]
[[[],4,9,[1]],[6,10,[[9,7],[4],[0,10,6]],[1,10],8]]
[[[[],9,3,[5]],1,[4,[6,10,6,5,2],[],[6,7]],[10]],[2,[],4],[[10,8,0,[],2],[[],6,1,[5,6,8,7],[10,1,1]]],[[5,[2,9]],8,10,[7,10,[0,9],[8,5]]]]
[[[[6],0,8,2,[4,8,1,9]],[8,10,7],0],[4,[]],[9,2,[10,[]],6],[8,9,[5]],[]]
[[[[],8],[1,[4],[8,1,8,4,0],[9,7,4,1]],10,8,[[3,1],[10,0,9,10,10]]],[[]],[6,8,[[10,3],8,6,[0,9,5]],3,[]],[[6,8],1,6,[[4,10],[],5],[[3,8,6,1,1],[10]]],[[],[[7,1,3,8],0,[]]]]
[[8,[[9,9,4]],[[6,4,8,10],1,[6]],3]]
[[[[3,5],8,[0,0],2],[6,[2,5,5,7],[4,10],[6,6]],[[3,4,2,6]],[[1,7,2,6,0],[4],10,[9,2]],10]]
[[[[7,6,8,5,10],[7,0,9,8,9],5,[7,7],[2,8,1,0,5]]],[7],[],[[4,3,[2]]],[[[10,1],0,1],6]]
[[0,[[10,7,8],3,9,[10,4,2,0]],[10,7]],[0,10],[[]],[[[6,9],9],10,6,5,4],[[[],6,9],4,2]]
[[[9],[[]]],[5,[8,9,[4,9,6,6,6],1,[]],[0]],[[],5,[7,7,7,3,0]],[[8],6,4,7,[[9,4,7,8]]],[[[10,6,0,6,3],9,[7,7]],[9,1,[],9],[[3,4,10,8],5,9,2,5]]]
[[5],[]]
[[[10,[9,3,2],0,[7,10,8,0,1]]]]
[[[[],0,0,8,[5]],[8],[0,[2,7],[10]]]]
[[[[10,7,1,8],8,[],1],4,10,2],[[[9,3,10]],5,[[3,5],[4],[]]],[1]]
[[[3,[7,7,0],9],[5,[7,1],[4,5,1,1],8]],[[1],[7,5,1,9]],[[],[[5,10,0,1,5],3]]]
[[4,9,[5,[10,9,9,3,7],3,[4,1,3,3]],4,10],[],[[]],[[5,[10,3]],[[10,0,7],[2,1]],[8,[],4],4],[9,[0],[],[6,[1,9]],9]]
[[[],8,4,[1]],[[[2,1,2,1],[10]],10,7,4],[[5,8,[8,3,1,5,1],[5,6,8]],[[2,10],[]]]]
[[[9,[2,4,9],[10,5],[],3],0,[0,[],4],[8],3],[],[9,[9],2],[],[]]
[[10],[[]],[3,[],1,8,9],[0,[5,[8,7,8,6],8,[10,9,3,0]],[[],3,[8,1,7,8],2,7]]]
[[],[[4],3,[[8,8]],[],1],[],[4,0,4,[9,10]],[[9,[7,4,5],7],8,[6,[8,7,5,7,9]]]]
[[[[3,1,9,7,2]],1,3],[3,1,[[],[10,7,1,5,1]],[[2,5],[1,9,9]]],[10],[],[[[5,8,8,4,3],0,[2],[5,9]],2,2,[]]]
[[[[7]],2]]
[[7,[9,6],[[4,1,1,8],9,[]],[[],9],[0,0,[8,6,0,2]]],[[],[1]]]
[[4,7],[],[10,1,[9,0,[5,9],[0,5],7],[8,0,7],[[8,1,4,5],8]]]
[[10,[[8,10,4]],9,[]],[],[[10],7],[3,4,5,10,[[6,4,8,7,9],3,[0,5]]]]
[[9,[6,[2,8,9],3,[2],[0,1,5,0]]],[5],[[[9,8,1,9,8],[],[9,4,8],1,6],4,[3]],[[8,10,3,3,10],8,1,4],[]]
[[8],[[1,9,4],[9],0],[[],5,0],[3],[[9],3]]
[[0,5],[0,[[9,6,8]],8]]
[[1,[],[[8,10,2,5],6,[5,0,7,2,8],2]],[]]
[[6,5,10,9,[5,7,8,[2,3,9,8,10]]]]
[[],[8],[[4],[1,9,1,3],3]]
[[1,[[],[],10,[10,2],6],0,[]]]
[[[],10,[[7],[1,0,9],7]]]
[[1,2],[],[[[4,10]]],[[1,[6,9,1,0],4,[7]],4,[[8,10,0,5,5],1,6,[8,7,10,0],[5]],7]]
[[[],[5,9,[2,4,7,7],[10],7]]]
[[[1],2,[7,0,[7,9,3,5,10],6,[6,3,3,0]],[],[2,5]]]
[[],[[9,4,[5,5],[]],5,2,[6,10,10,[0,1,3],10],6],[10,[[5,3,0],[],2],[[1]],4]]
[[[[4,6,9]]],[[10,0,[8,1,5,3,6],[],10],2],[8,[[2,3,10,5,10]],[[9,1,3,3,2]],[[7,2,8],1]],[]]
[[],[[[],[],5,[1],[2,7,1,7,2]],7,9,[[6,2,3,4,0],8,2],2]]
[[],[4,2,5,[[1,3],1,[6,5],[3,5,7],[5,5,8,10,5]]],[],[]]
[[7,[2,[4,0,6,6],0],3]]
[[3,3,[[1,5]]]]
[[[[4],[5,5],[9,10,2,6],[4,2,1,4]],0,0,10,[[],[6],[3,4,4,2,6],[2,8],[]]]]
[[2,[[10],10,7,[],7],[[2,3,2,9],[2,2,8,6,2],[5,5,2,9,1]]],[[],2,8,1,[2,[4,5,9,5,1],8]],[[[]],6,[10,[6,5],[6,10,9,5,5],2]]]
[[4,[9,[3,2,2],[3,2,2,10],3,[10,8,5,2]]]]
[[0,9,8,[[2,1],[0,7,2,9,4],[6]]],[[5,9,[3],7],0,7,[0,[8,1,2],[2,10,9,3,6]],7]]
[[[1,[7,5],7],0],[2,0,4,1,7],[[2,9,4,[8,3,8],[2]]]]
[[],[[6,10],6,7],[0,9,6,4,[2,1,[5,1],[]]],[[],[[7],2,5,[6,0,6,2]],[[0,9,2,3],3]],[[[],10],0,6,8]]
[[],[],[2],[[4,[10,10]],[1],[7,3,[9,9],0],[[3,7],10,[5,1],9]]]
[[7,[[6,9]],4,6,2],[[],[],[6,6]]]
[[[10,5,10,7,7],4,3,1,3],[],[4]]
[[3,[5,2,7,[5],5],[[5]],0,2],[[],[[6,7,0],[0,8]],7,[2,0,8],[[0,2],[]]],[1,7,10,[7,3,1],[]],[4,[[9,1,10,7],[7,9,3]],[],[1,1,9,5]],[9,4,5,[[3,2,7,0],[1],7,4,6]]]
[[[[3,4,4,8],[],[5,9,10,4,3],[1]]],[2],[4,3,[],[4],[[3,3],3,[8,8],[1,4,10],[3]]],[[[0,7,10],[10,9,3,0,10],6,7,6],0,[9,4,0,0,[9,10,0,7]],[6],[]]]
[[3,[[]],0,[5],4],[6,8,10,6,[[8,1,5,5,7],3,0,[],4]]]
[[[5,4,5,8,1],6,[8,[],[0,6,0],[3,8,10,0]]]]
[[[[10,4,1,4],[2,5,9,2],[6,3,2,5,2],[],8],[10],2],[[2]]]
[[[7,[7,10,2,7],[]],[4,7,[0,10,10],4,10],[],10],[3,4,9,[],2],[[8],9,[7,[8,7,2],[2,4,6],4,[8,4,6]]]]
[[6,6,[[3],[3],[1]],8],[[9,[8,8,3,9],10]],[[5,5,4,[]],9,[]],[8,[[3],6,6],[1,[3,7],0,9,0],[[],[],9,3],[2]],[[[3],[6,6,4,9,6],[7,5],[3],8]]]
[[0,3,[7,10],[7,[7,1,5,4]]],[[7,7,10,[7,1,5]],[4,[2,3],[1],9,[]],4]]
[[4,[[3,6,10,8]],9,9],[[[6,0,9,7],[0,9,5,3],9]]]
[[[4,1],[1,1,[6,5,7],3,[9]]],[8,8,0,[6]],[0,[[8,8,4,0,0],[8,9,1,8,8],[2]]]]
[[9,1],[5,1,[[7],[6,5],[],[7]],10,3],[2,3],[1,5,[],[]]]
[[[[5,9,0,6]],[0,[9,9],0,[]],6],[[]],[[[6,4],10],10,0]]
[[],[[]],[[1,3,[7,8,6]],[[3]],8],[[[],[2,3,8,5,4]],8],[9,6,[5,[]],[9,[6,9,7,3]],9]]
[[5,3,1],[2,5,[[],1,[1,10,9,0,7],[],[]]],[5],[3,10,[[8,4],[5,7]],5],[[5,8],[[1,6,4],10,6,3,[7,5,1,8,3]],[],[[],[3,7],2,[5,7],[10,7,3]],[[5,10],1,[5,8]]]]
[[[1,[5,0],0,0],10,7,[],3],[[[0,0,6,9,0],[10,4,9,0]],3],[8]]
[[6,6,3,[6,0,10,[1,6,0,6],6]],[1,[[2,9,2,5,1],9],[6,[1],0,4,7]],[[[1,10,8]],[1,3,[2,1,10,0],10],0,8],[[[8,1,2,9,5],[4,6,10,8]],6,0,[],6]]
[[[[0,8,2,2],[9,1,5,8,6],8],1,0,[2,[0,4],[10]],[[9,4,2,3,3],[4,6,0],9,7]],[[6,[],0,[5,7,4]]]]
[[[[2],[8,9,1,3,3],[3,8,5,6],[7,3],5],[10,5,[8,0,5,7,8]],[],3],[4,[[0,4,7,4],1,[8,0,7,3],9,[10]]]]
[[[[7,1,8,1]],10,[10,[1,8,1,5],[9,9,9],[5,10,10]],5,[]],[],[],[[10],[[0,1,8]],2,[[],9,[0],5,[]]]]
[[0,0],[[],3,[[4,8,4,6],3,[1,5,0,0]]],[[],10],[[8,[5,8,7],8],2,0,[]],[8,5,[[],[]],2]]
[[10,[10],[],7,10],[[9,[10,6],2,4],[[6,9,6,0],4,7,1],[8,9,[]],[[5,3,10]],7],[8,[[5,1,1,1,5]],[[1,6,3,5]],[[4,5,7],[],3],[[7,1,5,4],[0,10,10],[1]]]]
[[6,1],[],[4,[[9,10,7,8,2],[8,2],10],3,10,[[8,8,3],4,7,[2,1,5,5,3],[8,6,7,5,0]]]]
[[[0,[4],[4],[2,5,4,7,7],5],0,[]],[]]
[[[],3,8,[[7,5,3,8,9],3,[8,10,4,7]]],[[[10],10,[0,9,3]],5,[[10,2,10,10,6],10,7,[7,4,7,9,9]]],[],[[7,[],5],9,[10,[4,9,0,2],[9]],[5,[1,10,2],[4,4],[8,2]],[[3,7,8],5,[9,2,5,5,5],[2,10,2]]],[[[9,9,9,10],[9],[10,10,9],[8]],8]]
[[],[[9,[10,7,7,4]],10],[[1,5,9,4],[[6,6,3,10],[],5],3,[[],9,[6,7,3],3,4],10],[[0,[6,8,10],10,[1]],[[2,2,5,5]]]]
[[8,0,9],[0,1,[0,1,4],0],[3,4],[[[0,1]],1,[9,5,9],[5,[3],5,[3],[2,1,6]]]]
[[[[10,3,10,2],7,3],4,[[1,5,6,4,5],[9,4,6,9],3,[9]],[[1,5,7],[4,10,7],[4,2],10,[9,6,0]]]]
[[5,5,[1,[9,6,9],4],1,0],[[[8,4],[6],5,[4,3,9,7],3]],[5,4,7,5,[]],[3,2]]
[[2],[9,[[3,7,1],[2,3,4,9],3,6,[1,2,9,0,4]],8]]
[[1],[[2,[2,2],[3,3,1,3]],1,[[8],[0,5]],[7,8]],[[[10,5],3,[9,6],2,[9,6,8,6]]],[[4],9,5],[3]]
[[6,[],[4],[[3,0,9],[4,9],[4,4,6],0,10],9]]
[[[8,7],2,[[]],6],[10,8],[1,3,8],[3],[4]]
[[7,[4,7,8,[0,2]],1],[[[10,9,9,6],9,[9],7,1],5,[[8],1,[10,4,10],6],9]]
[[[[2,5,1,8,0],10,7,[5,4,10,0]],6,6,[[4,6,7,9],2,[],[6,10,7,9]]],[[8,[8,6,10,0],4,5],6,4,[[4,2,3],8,6,3,3],[[9],[1,4,7,5,5],[4],7]],[[],[6,2,[6,5,4,6]],10,8],[3,[4,8,[0,2,10,10,9],4],[6],[[]]],[[]]]
[[[[3,7,2],10,10],6,[1,4,0,0,[]],[[0,5]]],[[0,[5,2,1,0,10]],[2],[0,[7],8,3]]]
[[],[6,5,3,6,[3,4,[7,2,9],0]],[3],[7,[[],4,[]],7,[]],[[[10,10,6],10],[[8],4,[9,9,0,10,7],4,4],9,[[1,8,10,7,4]],6]]
[[],[10,[6,2],[5,3],2],[4],[[7,[7]],8,[2,9,[10,2,0],2],[],[[7,1],1,9,[4,2]]]]
[[[],8,[9,0]],[],[4,2,[1,[1,5,7,4]]],[1,4,0,[[],5,4,9,[10,9]]],[[],[4,10,[1,10]],9,[]]]
[[[[7],[7,0,10]],[3],[[]],[]],[[[6],[],[6,0],1,[9,5]],[10,[5],[],1],[[1,8],[],9,[7],[1,8,8,8]],[],[0]],[[[]]],[1,[],[6,[],7,[5,5,2],1],8]]
[[8,[],7,[]],[5,6,[],9,[[7,9,9],1]],[3]]
[[[4,[3],[9,4,4,9],1,6],[10],2],[[0],[],[[2,3,7,2,3]],[[3,9],10,[4]]]]
[[[[2,3,9,1,6],[10],[10]],[0,9,[0,4,10],7,[3,2,7]],5]]
[[[7,[9],5],4,10,[[3,9,8],[5,6,1,0,9],9,[]]],[1,[[7],[5,10]],8,[[4,8,5],2,9]]]
[[[[3],9,2,8,[]],[10,[1,10,6],[10,7,9],4,[10]],[2,[3,6,9,6],[5,0],[3,5,10],8],4]]
[[7,[[10,10,3],1],4,[0,[8,9,6],9,[6,3,9,1,6]]],[]]
[[[8,[3,1,3,2,3],5,10],[3,2],9],[8]]
[[4,7],[],[7,6,[[10,5,0,3,4],9],7,[[0,5,9,5],7,2,[5,8]]]]
[[2,[],2],[2,[5,[2,2,10,2,4],[3,3,5,10],[6,1]],[6,[6]],2,8]]
[[[7,3,4],4,[[7],[10,6,9],[],[]],[[2,7,5],[8],[4,7,10,9,6],[]],[3,0,8]]]
[6,4,3,7,0]
[6,4,3,7]
[[[[0,2,5],9],1,8]]
[[[1,[4],[8,7,5,7,3]],10],[]]
[[8,[5,[9,1,2],5,10]]]
[[[4],7,8]]
[[7,[]]]
[[[[9,5],[2,10,6,7]],2,4,[],[10,6,8,3,8]],[[[]],9,[[2,9],10,3,6],[[1,10],[9]]]]
[[5,[[1,7,9],10],8],[[6,[7,1,9,2],10,[5],[6,4,9]],[10]]]
[[[2,8,6,[]]]]
[[9,8]]
[[3,9,[[0,2,0,3,3],[9,6,7,3,9],3,10,4]],[1,3,[[],[1,7,5],[8,4,8],0,[2,2]],9,6],[]]
[[[],[[0,4,9]],[[1,10,9,8,7],6,[5,1,6,10],4]],[[[],[9,0,2],10],[3],9,[]],[2,6],[[],1,[9,8,[5,3],[],[4]],6,10]]
[[0]]
[[1,3],[7,[],[[2,6,8,7,5],2,[],[7,0,6]]]]
[[[6,[],7,3],5,[2,[],[9,8,1,4],3]],[[[0,7]]],[10,[[6,0,1,7],[],[8,2,5],7],1],[]]
[[[],[],5,[],[[8,5,10]]],[10,[[0,3],[1],[6,3,1],[5,4,1]],4,1],[1,[],[],[[3],1,[9],5]]]
[[[7,[4,10],10,[0,3,10],6],1]]
[[[[3,4,6],7,[0,1,6,8,10],7],[[1,9,5,10]],9]]
[[[6,[2,7,5,9],0]]]
[[8]]
[[[[1,0,6],2,[3,10,1,9]],6]]
[[[7],0,[4,[4,0,7,8],[7,10,4,6,10],[]]]]
[[[10,7,[8,10,2,0,6]],6,[8,4,[8]],1,5],[8,[1,6],3]]
[[8,[7]],[7,0,0,6],[[[4,8,9,7],8,[6,0,1,3],9],1,1,10,7],[2,[7,[4,9,2,9,4],5,[10,9,5,4]],[5,[10,3,6,7],[8],[4,6],[3,1,1,5]],9,4],[4,[[8,7,2,2,0]],[[3,10]],[],[10,0,7,8]]]
[[[[5,4,9,4,9]],[[7,6,2,8],[3,9,10],2,3,9],9,[[10,2,8,2,0]]],[9,[4,[1],9],4],[],[5,5]]
[[[[8,2,4],[8,7,3]]],[7,[2,10,8,[7]]],[9,[[6,3]],[],8,6]]
[[[[],[0,1,0],[6,9,8,7,2]],[[3,1,0,10]]],[[6,[0,10],[],5,[4,2,1,6,5]],[]],[1],[3,[6,1,[6,7]],4],[[[],3,10,[10,1]],7]]
[[[10,[1]],8,5,[]],[9]]
[[[3,[1],10],[10,9]],[10],[1,9,[[7,2,1,8,7],[]],3,0]]
[[[],[[3,5,5,7,7],[9],2],[[10],0],8],[7,[[6,6,5,8],0,2,[4,7,3,5]]],[[1],2,[[2],[7,3,7]],6]]
[[],[3]]
[[4,[],[[2],[6,7],0],4],[10,[[9,4,7,6,10],[0,0,1,10,6],6,1,3]]]
[[4,1,0,1],[],[],[[1],[],[[9,10,5,0],[10,7,4],[10,9,1,10,3]]]]
[[[[4,8,8,0],[7],3,2],8,[[10,9,1]]]]
[[[1,6,[10,4,2]],1],[1,[4,[2,7],6,[7],2]],[3,9,10,9],[]]
[[[[10,1,4,6,5],[2,8,10,6],3],2,2,[6,3],[[4]]],[4,[[7,6,8,0],[4,0,3],0,[10,9]],[3,8,10],1]]
[[[2,5]],[[5,[8,7,2,0],8,[9,1,5],[9,8,0]],10,10,[9,3,[10]],3],[[2,2,7,[3,10,7,10,8],7],8],[4,0,[6,2,10],[10,3,0,[4,6,5,4,2]]]]
[[[],2],[0,6,[[2,7,7,2,4],[7,1]],6,2]]
[[3,[],[[10,2,1,5]]],[]]
[[],[8,[[5,10,5]],9]]
[[[[2,8,4],[2,0],4,6,4],2,[[10,5,10],1,[10,9,1,1]]],[2,7],[],[[[3,1,4,8,4],4,[0,5,9,3],4,[]],[],[8,2]]]

@ -0,0 +1,2 @@
498,4 -> 498,6 -> 496,6
503,4 -> 502,4 -> 502,9 -> 494,9

@ -0,0 +1,54 @@
lines = open("input.txt", "r").read().splitlines()
sand_source = (500, 0)
def parse_rocks(lines: list) -> list:
paths = []
for line in lines:
path = [int(c) for coord in line.split(" -> ") for c in coord.split(",")]
paths.append(path)
rocks = []
for path in paths:
for i in range(0, len(path) - 2, 2):
x1, y1 = path[i], path[i + 1]
x2, y2 = path[i + 2], path[i + 3]
xrange = range(min(x1, x2), max(x1, x2) + 1)
yrange = range(min(y1, y2), max(y1, y2) + 1)
coords = [(x, y) for x in xrange for y in yrange]
rocks = rocks + list(coords)
return list(set(rocks))
def drop_new_sand(sand, rocks, max_y):
x, y = sand_source
while True:
if y > max_y:
return sand, False
if (x, y + 1) not in rocks and (x, y + 1) not in sand:
y += 1
elif (x - 1, y + 1) not in rocks and (x - 1, y + 1) not in sand:
x -= 1
y += 1
elif (x + 1, y + 1) not in rocks and (x + 1, y + 1) not in sand:
x += 1
y += 1
else:
sand.append((x, y))
break
return sand, True
def get_max_y(rocks):
max_y = sorted(rocks, key=lambda x: x[1])[-1][1]
return max_y
rocks = parse_rocks(lines)
max_y = get_max_y(rocks)
room_for_sand = True
sand = []
while room_for_sand:
sand, room_for_sand = drop_new_sand(sand, rocks, max_y)
print(len(sand))

@ -0,0 +1,53 @@
lines = open("input.txt", "r").read().splitlines()
sand_source = (500, 0)
def parse_rocks(lines: list) -> list:
paths = []
for line in lines:
path = [int(c) for coord in line.split(" -> ") for c in coord.split(",")]
paths.append(path)
rocks = set()
for path in paths:
for i in range(0, len(path) - 2, 2):
x1, y1 = path[i], path[i + 1]
x2, y2 = path[i + 2], path[i + 3]
xrange = range(min(x1, x2), max(x1, x2) + 1)
yrange = range(min(y1, y2), max(y1, y2) + 1)
coords = [(x, y) for x in xrange for y in yrange]
rocks.update(coords)
return rocks
def drop_sand(rocks, max_y):
x, y = sand_source
while True:
if (x, y) in rocks:
x, y = sand_source
if (x, y + 1) not in rocks and y < max_y + 1:
y += 1
elif (x - 1, y + 1) not in rocks and y < max_y + 1:
x -= 1
y += 1
elif (x + 1, y + 1) not in rocks and y < max_y + 1:
x += 1
y += 1
else:
rocks.add((x, y))
print(len(rocks) - onlyrocks)
if (x, y) == sand_source:
break
return rocks
def get_max_y(rocks):
max_y = sorted(rocks, key=lambda x: x[1])[-1][1]
return max_y
rocks = parse_rocks(lines)
onlyrocks = len(rocks)
max_y = get_max_y(rocks)
rocksandsand = drop_sand(rocks, max_y)
print(len(rocksandsand) - onlyrocks)

@ -0,0 +1,138 @@
508,146 -> 513,146
514,142 -> 519,142
483,88 -> 487,88
522,146 -> 527,146
492,90 -> 496,90
525,161 -> 525,156 -> 525,161 -> 527,161 -> 527,156 -> 527,161 -> 529,161 -> 529,154 -> 529,161 -> 531,161 -> 531,154 -> 531,161 -> 533,161 -> 533,157 -> 533,161 -> 535,161 -> 535,152 -> 535,161 -> 537,161 -> 537,160 -> 537,161
508,93 -> 508,97 -> 507,97 -> 507,101 -> 517,101 -> 517,97 -> 510,97 -> 510,93
525,161 -> 525,156 -> 525,161 -> 527,161 -> 527,156 -> 527,161 -> 529,161 -> 529,154 -> 529,161 -> 531,161 -> 531,154 -> 531,161 -> 533,161 -> 533,157 -> 533,161 -> 535,161 -> 535,152 -> 535,161 -> 537,161 -> 537,160 -> 537,161
486,86 -> 490,86
489,84 -> 493,84
507,79 -> 511,79
486,90 -> 490,90
497,23 -> 497,15 -> 497,23 -> 499,23 -> 499,21 -> 499,23 -> 501,23 -> 501,15 -> 501,23
494,26 -> 494,27 -> 505,27
485,113 -> 489,113
525,161 -> 525,156 -> 525,161 -> 527,161 -> 527,156 -> 527,161 -> 529,161 -> 529,154 -> 529,161 -> 531,161 -> 531,154 -> 531,161 -> 533,161 -> 533,157 -> 533,161 -> 535,161 -> 535,152 -> 535,161 -> 537,161 -> 537,160 -> 537,161
507,67 -> 507,63 -> 507,67 -> 509,67 -> 509,61 -> 509,67 -> 511,67 -> 511,66 -> 511,67 -> 513,67 -> 513,60 -> 513,67 -> 515,67 -> 515,62 -> 515,67 -> 517,67 -> 517,62 -> 517,67 -> 519,67 -> 519,59 -> 519,67
517,116 -> 517,119 -> 516,119 -> 516,126 -> 527,126 -> 527,119 -> 520,119 -> 520,116
517,116 -> 517,119 -> 516,119 -> 516,126 -> 527,126 -> 527,119 -> 520,119 -> 520,116
515,53 -> 515,54 -> 524,54
498,76 -> 502,76
515,53 -> 515,54 -> 524,54
512,139 -> 512,132 -> 512,139 -> 514,139 -> 514,136 -> 514,139 -> 516,139 -> 516,135 -> 516,139
525,161 -> 525,156 -> 525,161 -> 527,161 -> 527,156 -> 527,161 -> 529,161 -> 529,154 -> 529,161 -> 531,161 -> 531,154 -> 531,161 -> 533,161 -> 533,157 -> 533,161 -> 535,161 -> 535,152 -> 535,161 -> 537,161 -> 537,160 -> 537,161
508,93 -> 508,97 -> 507,97 -> 507,101 -> 517,101 -> 517,97 -> 510,97 -> 510,93
497,23 -> 497,15 -> 497,23 -> 499,23 -> 499,21 -> 499,23 -> 501,23 -> 501,15 -> 501,23
495,88 -> 499,88
511,43 -> 511,46 -> 510,46 -> 510,50 -> 516,50 -> 516,46 -> 515,46 -> 515,43
497,103 -> 497,104 -> 513,104 -> 513,103
505,31 -> 513,31 -> 513,30
507,67 -> 507,63 -> 507,67 -> 509,67 -> 509,61 -> 509,67 -> 511,67 -> 511,66 -> 511,67 -> 513,67 -> 513,60 -> 513,67 -> 515,67 -> 515,62 -> 515,67 -> 517,67 -> 517,62 -> 517,67 -> 519,67 -> 519,59 -> 519,67
497,109 -> 501,109
507,67 -> 507,63 -> 507,67 -> 509,67 -> 509,61 -> 509,67 -> 511,67 -> 511,66 -> 511,67 -> 513,67 -> 513,60 -> 513,67 -> 515,67 -> 515,62 -> 515,67 -> 517,67 -> 517,62 -> 517,67 -> 519,67 -> 519,59 -> 519,67
511,43 -> 511,46 -> 510,46 -> 510,50 -> 516,50 -> 516,46 -> 515,46 -> 515,43
501,79 -> 505,79
497,23 -> 497,15 -> 497,23 -> 499,23 -> 499,21 -> 499,23 -> 501,23 -> 501,15 -> 501,23
503,34 -> 503,37 -> 495,37 -> 495,40 -> 512,40 -> 512,37 -> 505,37 -> 505,34
510,76 -> 514,76
525,161 -> 525,156 -> 525,161 -> 527,161 -> 527,156 -> 527,161 -> 529,161 -> 529,154 -> 529,161 -> 531,161 -> 531,154 -> 531,161 -> 533,161 -> 533,157 -> 533,161 -> 535,161 -> 535,152 -> 535,161 -> 537,161 -> 537,160 -> 537,161
525,161 -> 525,156 -> 525,161 -> 527,161 -> 527,156 -> 527,161 -> 529,161 -> 529,154 -> 529,161 -> 531,161 -> 531,154 -> 531,161 -> 533,161 -> 533,157 -> 533,161 -> 535,161 -> 535,152 -> 535,161 -> 537,161 -> 537,160 -> 537,161
525,161 -> 525,156 -> 525,161 -> 527,161 -> 527,156 -> 527,161 -> 529,161 -> 529,154 -> 529,161 -> 531,161 -> 531,154 -> 531,161 -> 533,161 -> 533,157 -> 533,161 -> 535,161 -> 535,152 -> 535,161 -> 537,161 -> 537,160 -> 537,161
512,139 -> 512,132 -> 512,139 -> 514,139 -> 514,136 -> 514,139 -> 516,139 -> 516,135 -> 516,139
525,161 -> 525,156 -> 525,161 -> 527,161 -> 527,156 -> 527,161 -> 529,161 -> 529,154 -> 529,161 -> 531,161 -> 531,154 -> 531,161 -> 533,161 -> 533,157 -> 533,161 -> 535,161 -> 535,152 -> 535,161 -> 537,161 -> 537,160 -> 537,161
517,116 -> 517,119 -> 516,119 -> 516,126 -> 527,126 -> 527,119 -> 520,119 -> 520,116
507,67 -> 507,63 -> 507,67 -> 509,67 -> 509,61 -> 509,67 -> 511,67 -> 511,66 -> 511,67 -> 513,67 -> 513,60 -> 513,67 -> 515,67 -> 515,62 -> 515,67 -> 517,67 -> 517,62 -> 517,67 -> 519,67 -> 519,59 -> 519,67
525,161 -> 525,156 -> 525,161 -> 527,161 -> 527,156 -> 527,161 -> 529,161 -> 529,154 -> 529,161 -> 531,161 -> 531,154 -> 531,161 -> 533,161 -> 533,157 -> 533,161 -> 535,161 -> 535,152 -> 535,161 -> 537,161 -> 537,160 -> 537,161
525,161 -> 525,156 -> 525,161 -> 527,161 -> 527,156 -> 527,161 -> 529,161 -> 529,154 -> 529,161 -> 531,161 -> 531,154 -> 531,161 -> 533,161 -> 533,157 -> 533,161 -> 535,161 -> 535,152 -> 535,161 -> 537,161 -> 537,160 -> 537,161
513,79 -> 517,79
507,67 -> 507,63 -> 507,67 -> 509,67 -> 509,61 -> 509,67 -> 511,67 -> 511,66 -> 511,67 -> 513,67 -> 513,60 -> 513,67 -> 515,67 -> 515,62 -> 515,67 -> 517,67 -> 517,62 -> 517,67 -> 519,67 -> 519,59 -> 519,67
512,139 -> 512,132 -> 512,139 -> 514,139 -> 514,136 -> 514,139 -> 516,139 -> 516,135 -> 516,139
507,67 -> 507,63 -> 507,67 -> 509,67 -> 509,61 -> 509,67 -> 511,67 -> 511,66 -> 511,67 -> 513,67 -> 513,60 -> 513,67 -> 515,67 -> 515,62 -> 515,67 -> 517,67 -> 517,62 -> 517,67 -> 519,67 -> 519,59 -> 519,67
511,43 -> 511,46 -> 510,46 -> 510,50 -> 516,50 -> 516,46 -> 515,46 -> 515,43
491,109 -> 495,109
525,161 -> 525,156 -> 525,161 -> 527,161 -> 527,156 -> 527,161 -> 529,161 -> 529,154 -> 529,161 -> 531,161 -> 531,154 -> 531,161 -> 533,161 -> 533,157 -> 533,161 -> 535,161 -> 535,152 -> 535,161 -> 537,161 -> 537,160 -> 537,161
511,43 -> 511,46 -> 510,46 -> 510,50 -> 516,50 -> 516,46 -> 515,46 -> 515,43
507,67 -> 507,63 -> 507,67 -> 509,67 -> 509,61 -> 509,67 -> 511,67 -> 511,66 -> 511,67 -> 513,67 -> 513,60 -> 513,67 -> 515,67 -> 515,62 -> 515,67 -> 517,67 -> 517,62 -> 517,67 -> 519,67 -> 519,59 -> 519,67
497,23 -> 497,15 -> 497,23 -> 499,23 -> 499,21 -> 499,23 -> 501,23 -> 501,15 -> 501,23
525,161 -> 525,156 -> 525,161 -> 527,161 -> 527,156 -> 527,161 -> 529,161 -> 529,154 -> 529,161 -> 531,161 -> 531,154 -> 531,161 -> 533,161 -> 533,157 -> 533,161 -> 535,161 -> 535,152 -> 535,161 -> 537,161 -> 537,160 -> 537,161
512,139 -> 512,132 -> 512,139 -> 514,139 -> 514,136 -> 514,139 -> 516,139 -> 516,135 -> 516,139
512,139 -> 512,132 -> 512,139 -> 514,139 -> 514,136 -> 514,139 -> 516,139 -> 516,135 -> 516,139
492,82 -> 496,82
515,146 -> 520,146
498,90 -> 502,90
517,116 -> 517,119 -> 516,119 -> 516,126 -> 527,126 -> 527,119 -> 520,119 -> 520,116
512,139 -> 512,132 -> 512,139 -> 514,139 -> 514,136 -> 514,139 -> 516,139 -> 516,135 -> 516,139
498,86 -> 502,86
491,113 -> 495,113
512,148 -> 517,148
511,144 -> 516,144
507,67 -> 507,63 -> 507,67 -> 509,67 -> 509,61 -> 509,67 -> 511,67 -> 511,66 -> 511,67 -> 513,67 -> 513,60 -> 513,67 -> 515,67 -> 515,62 -> 515,67 -> 517,67 -> 517,62 -> 517,67 -> 519,67 -> 519,59 -> 519,67
507,67 -> 507,63 -> 507,67 -> 509,67 -> 509,61 -> 509,67 -> 511,67 -> 511,66 -> 511,67 -> 513,67 -> 513,60 -> 513,67 -> 515,67 -> 515,62 -> 515,67 -> 517,67 -> 517,62 -> 517,67 -> 519,67 -> 519,59 -> 519,67
503,34 -> 503,37 -> 495,37 -> 495,40 -> 512,40 -> 512,37 -> 505,37 -> 505,34
508,93 -> 508,97 -> 507,97 -> 507,101 -> 517,101 -> 517,97 -> 510,97 -> 510,93
512,139 -> 512,132 -> 512,139 -> 514,139 -> 514,136 -> 514,139 -> 516,139 -> 516,135 -> 516,139
503,113 -> 507,113
503,34 -> 503,37 -> 495,37 -> 495,40 -> 512,40 -> 512,37 -> 505,37 -> 505,34
525,161 -> 525,156 -> 525,161 -> 527,161 -> 527,156 -> 527,161 -> 529,161 -> 529,154 -> 529,161 -> 531,161 -> 531,154 -> 531,161 -> 533,161 -> 533,157 -> 533,161 -> 535,161 -> 535,152 -> 535,161 -> 537,161 -> 537,160 -> 537,161
497,23 -> 497,15 -> 497,23 -> 499,23 -> 499,21 -> 499,23 -> 501,23 -> 501,15 -> 501,23
503,34 -> 503,37 -> 495,37 -> 495,40 -> 512,40 -> 512,37 -> 505,37 -> 505,34
497,23 -> 497,15 -> 497,23 -> 499,23 -> 499,21 -> 499,23 -> 501,23 -> 501,15 -> 501,23
505,148 -> 510,148
525,161 -> 525,156 -> 525,161 -> 527,161 -> 527,156 -> 527,161 -> 529,161 -> 529,154 -> 529,161 -> 531,161 -> 531,154 -> 531,161 -> 533,161 -> 533,157 -> 533,161 -> 535,161 -> 535,152 -> 535,161 -> 537,161 -> 537,160 -> 537,161
507,67 -> 507,63 -> 507,67 -> 509,67 -> 509,61 -> 509,67 -> 511,67 -> 511,66 -> 511,67 -> 513,67 -> 513,60 -> 513,67 -> 515,67 -> 515,62 -> 515,67 -> 517,67 -> 517,62 -> 517,67 -> 519,67 -> 519,59 -> 519,67
501,88 -> 505,88
504,70 -> 508,70
508,93 -> 508,97 -> 507,97 -> 507,101 -> 517,101 -> 517,97 -> 510,97 -> 510,93
507,67 -> 507,63 -> 507,67 -> 509,67 -> 509,61 -> 509,67 -> 511,67 -> 511,66 -> 511,67 -> 513,67 -> 513,60 -> 513,67 -> 515,67 -> 515,62 -> 515,67 -> 517,67 -> 517,62 -> 517,67 -> 519,67 -> 519,59 -> 519,67
489,88 -> 493,88
517,116 -> 517,119 -> 516,119 -> 516,126 -> 527,126 -> 527,119 -> 520,119 -> 520,116
507,67 -> 507,63 -> 507,67 -> 509,67 -> 509,61 -> 509,67 -> 511,67 -> 511,66 -> 511,67 -> 513,67 -> 513,60 -> 513,67 -> 515,67 -> 515,62 -> 515,67 -> 517,67 -> 517,62 -> 517,67 -> 519,67 -> 519,59 -> 519,67
508,93 -> 508,97 -> 507,97 -> 507,101 -> 517,101 -> 517,97 -> 510,97 -> 510,93
494,107 -> 498,107
497,23 -> 497,15 -> 497,23 -> 499,23 -> 499,21 -> 499,23 -> 501,23 -> 501,15 -> 501,23
495,79 -> 499,79
517,116 -> 517,119 -> 516,119 -> 516,126 -> 527,126 -> 527,119 -> 520,119 -> 520,116
501,73 -> 505,73
503,34 -> 503,37 -> 495,37 -> 495,40 -> 512,40 -> 512,37 -> 505,37 -> 505,34
494,111 -> 498,111
508,93 -> 508,97 -> 507,97 -> 507,101 -> 517,101 -> 517,97 -> 510,97 -> 510,93
507,67 -> 507,63 -> 507,67 -> 509,67 -> 509,61 -> 509,67 -> 511,67 -> 511,66 -> 511,67 -> 513,67 -> 513,60 -> 513,67 -> 515,67 -> 515,62 -> 515,67 -> 517,67 -> 517,62 -> 517,67 -> 519,67 -> 519,59 -> 519,67
497,113 -> 501,113
511,43 -> 511,46 -> 510,46 -> 510,50 -> 516,50 -> 516,46 -> 515,46 -> 515,43
507,67 -> 507,63 -> 507,67 -> 509,67 -> 509,61 -> 509,67 -> 511,67 -> 511,66 -> 511,67 -> 513,67 -> 513,60 -> 513,67 -> 515,67 -> 515,62 -> 515,67 -> 517,67 -> 517,62 -> 517,67 -> 519,67 -> 519,59 -> 519,67
507,67 -> 507,63 -> 507,67 -> 509,67 -> 509,61 -> 509,67 -> 511,67 -> 511,66 -> 511,67 -> 513,67 -> 513,60 -> 513,67 -> 515,67 -> 515,62 -> 515,67 -> 517,67 -> 517,62 -> 517,67 -> 519,67 -> 519,59 -> 519,67
507,73 -> 511,73
525,161 -> 525,156 -> 525,161 -> 527,161 -> 527,156 -> 527,161 -> 529,161 -> 529,154 -> 529,161 -> 531,161 -> 531,154 -> 531,161 -> 533,161 -> 533,157 -> 533,161 -> 535,161 -> 535,152 -> 535,161 -> 537,161 -> 537,160 -> 537,161
503,34 -> 503,37 -> 495,37 -> 495,40 -> 512,40 -> 512,37 -> 505,37 -> 505,34
526,148 -> 531,148
507,67 -> 507,63 -> 507,67 -> 509,67 -> 509,61 -> 509,67 -> 511,67 -> 511,66 -> 511,67 -> 513,67 -> 513,60 -> 513,67 -> 515,67 -> 515,62 -> 515,67 -> 517,67 -> 517,62 -> 517,67 -> 519,67 -> 519,59 -> 519,67
488,111 -> 492,111
508,93 -> 508,97 -> 507,97 -> 507,101 -> 517,101 -> 517,97 -> 510,97 -> 510,93
497,103 -> 497,104 -> 513,104 -> 513,103
497,103 -> 497,104 -> 513,104 -> 513,103
497,23 -> 497,15 -> 497,23 -> 499,23 -> 499,21 -> 499,23 -> 501,23 -> 501,15 -> 501,23
519,148 -> 524,148
505,31 -> 513,31 -> 513,30
495,84 -> 499,84
480,90 -> 484,90
525,161 -> 525,156 -> 525,161 -> 527,161 -> 527,156 -> 527,161 -> 529,161 -> 529,154 -> 529,161 -> 531,161 -> 531,154 -> 531,161 -> 533,161 -> 533,157 -> 533,161 -> 535,161 -> 535,152 -> 535,161 -> 537,161 -> 537,160 -> 537,161
518,144 -> 523,144
525,161 -> 525,156 -> 525,161 -> 527,161 -> 527,156 -> 527,161 -> 529,161 -> 529,154 -> 529,161 -> 531,161 -> 531,154 -> 531,161 -> 533,161 -> 533,157 -> 533,161 -> 535,161 -> 535,152 -> 535,161 -> 537,161 -> 537,160 -> 537,161
494,26 -> 494,27 -> 505,27
503,34 -> 503,37 -> 495,37 -> 495,40 -> 512,40 -> 512,37 -> 505,37 -> 505,34
500,111 -> 504,111
504,76 -> 508,76
517,116 -> 517,119 -> 516,119 -> 516,126 -> 527,126 -> 527,119 -> 520,119 -> 520,116
512,139 -> 512,132 -> 512,139 -> 514,139 -> 514,136 -> 514,139 -> 516,139 -> 516,135 -> 516,139
507,67 -> 507,63 -> 507,67 -> 509,67 -> 509,61 -> 509,67 -> 511,67 -> 511,66 -> 511,67 -> 513,67 -> 513,60 -> 513,67 -> 515,67 -> 515,62 -> 515,67 -> 517,67 -> 517,62 -> 517,67 -> 519,67 -> 519,59 -> 519,67
504,90 -> 508,90
511,43 -> 511,46 -> 510,46 -> 510,50 -> 516,50 -> 516,46 -> 515,46 -> 515,43
511,43 -> 511,46 -> 510,46 -> 510,50 -> 516,50 -> 516,46 -> 515,46 -> 515,43
525,161 -> 525,156 -> 525,161 -> 527,161 -> 527,156 -> 527,161 -> 529,161 -> 529,154 -> 529,161 -> 531,161 -> 531,154 -> 531,161 -> 533,161 -> 533,157 -> 533,161 -> 535,161 -> 535,152 -> 535,161 -> 537,161 -> 537,160 -> 537,161
525,161 -> 525,156 -> 525,161 -> 527,161 -> 527,156 -> 527,161 -> 529,161 -> 529,154 -> 529,161 -> 531,161 -> 531,154 -> 531,161 -> 533,161 -> 533,157 -> 533,161 -> 535,161 -> 535,152 -> 535,161 -> 537,161 -> 537,160 -> 537,161
507,67 -> 507,63 -> 507,67 -> 509,67 -> 509,61 -> 509,67 -> 511,67 -> 511,66 -> 511,67 -> 513,67 -> 513,60 -> 513,67 -> 515,67 -> 515,62 -> 515,67 -> 517,67 -> 517,62 -> 517,67 -> 519,67 -> 519,59 -> 519,67
507,67 -> 507,63 -> 507,67 -> 509,67 -> 509,61 -> 509,67 -> 511,67 -> 511,66 -> 511,67 -> 513,67 -> 513,60 -> 513,67 -> 515,67 -> 515,62 -> 515,67 -> 517,67 -> 517,62 -> 517,67 -> 519,67 -> 519,59 -> 519,67
507,67 -> 507,63 -> 507,67 -> 509,67 -> 509,61 -> 509,67 -> 511,67 -> 511,66 -> 511,67 -> 513,67 -> 513,60 -> 513,67 -> 515,67 -> 515,62 -> 515,67 -> 517,67 -> 517,62 -> 517,67 -> 519,67 -> 519,59 -> 519,67
525,161 -> 525,156 -> 525,161 -> 527,161 -> 527,156 -> 527,161 -> 529,161 -> 529,154 -> 529,161 -> 531,161 -> 531,154 -> 531,161 -> 533,161 -> 533,157 -> 533,161 -> 535,161 -> 535,152 -> 535,161 -> 537,161 -> 537,160 -> 537,161
492,86 -> 496,86

@ -0,0 +1,14 @@
Sensor at x=2, y=18: closest beacon is at x=-2, y=15
Sensor at x=9, y=16: closest beacon is at x=10, y=16
Sensor at x=13, y=2: closest beacon is at x=15, y=3
Sensor at x=12, y=14: closest beacon is at x=10, y=16
Sensor at x=10, y=20: closest beacon is at x=10, y=16
Sensor at x=14, y=17: closest beacon is at x=10, y=16
Sensor at x=8, y=7: closest beacon is at x=2, y=10
Sensor at x=2, y=0: closest beacon is at x=2, y=10
Sensor at x=0, y=11: closest beacon is at x=2, y=10
Sensor at x=20, y=14: closest beacon is at x=25, y=17
Sensor at x=17, y=20: closest beacon is at x=21, y=22
Sensor at x=16, y=7: closest beacon is at x=15, y=3
Sensor at x=14, y=3: closest beacon is at x=15, y=3
Sensor at x=20, y=1: closest beacon is at x=15, y=3

@ -0,0 +1,37 @@
lines = open("input.txt", "r").read().splitlines()
def parse_lines(lines: list) -> (set, set):
sensors = []
beacons = []
for line in lines:
_, _, sx, sy, _, _, _, _, bx, by = line.split(" ")
sensors.append([int(sx.split("=")[1][:-1]), int(sy.split("=")[1][:-1])])
beacons.append([int(bx.split("=")[1][:-1]), int(by.split("=")[1])])
return sensors, beacons
def manhatten(a, b):
return abs(a[0] - b[0]) + abs(a[1] - b[1])
critical = 2000000
sensors, beacons = parse_lines(lines)
taken = set()
critical_beacons = set(tuple(x) for x in beacons if x[1] == critical)
print(critical_beacons)
for i in range(len(sensors)):
print(i)
s = sensors[i]
b = beacons[i]
d = manhatten(s, b)
min_y, max_y = s[1] - d, s[1] + d
if min_y <= critical <= max_y:
critical_d = abs(s[1] - critical)
critical_reach = d - critical_d
taken.update(
(x, critical)
for x in range(s[0] - critical_reach, s[0] + critical_reach + 1)
)
print(len(taken) - len(critical_beacons))

@ -0,0 +1,68 @@
lines = open("input.txt", "r").read().splitlines()
def parse_lines(lines: list) -> (set, set):
sensors = []
beacons = []
for line in lines:
_, _, sx, sy, _, _, _, _, bx, by = line.split(" ")
sensors.append((int(sx.split("=")[1][:-1]), int(sy.split("=")[1][:-1])))
beacons.append((int(bx.split("=")[1][:-1]), int(by.split("=")[1])))
return sensors, beacons
def manhatten(a, b):
return abs(a[0] - b[0]) + abs(a[1] - b[1])
def build_search_space(sensors, beacons):
space = set()
for sensor, beacon in zip(sensors, beacons):
space.update(sensor_diamond(sensor, beacon))
return space
def sensor_diamond(sensor, beacon):
points = set()
d = manhatten(sensor, beacon)
xr = range(d + 2)
yr = xr[::-1]
xrneg = range(0, (d + 2) * -1, -1)
yrneg = xrneg[::-1]
for x, y, xneg, yneg in zip(xr, yr, xrneg, yrneg):
points.add((sensor[0] + x, sensor[1] + y))
points.add((sensor[0] + xneg, sensor[1] + y))
points.add((sensor[0] + x, sensor[1] + yneg))
points.add((sensor[0] + xneg, sensor[1] + yneg))
return points
def search_candidates(sensors, beacons, space):
candidates = set()
counter = 0
for point in space:
is_candidate = False
if x_min <= point[0] <= x_max and y_min <= point[1] <= y_max:
is_candidate = True
for sensor, beacon in zip(sensors, beacons):
if manhatten(sensor, point) <= manhatten(sensor, beacon):
is_candidate = False
if is_candidate:
print("candidate found")
candidates.add(point)
counter += 1
if counter % 100000 == 0:
print(f"{counter} points searched")
return candidates
x_min, x_max = 0, 4000000
y_min, y_max = 0, 4000000
sensors, beacons = parse_lines(lines)
space = build_search_space(sensors, beacons)
print("space set up")
candidates = search_candidates(sensors, beacons, space)
print(candidates)
x, y = candidates.pop()
print(x * 4000000 + y)

@ -0,0 +1,33 @@
Sensor at x=2302110, y=2237242: closest beacon is at x=2348729, y=1239977
Sensor at x=47903, y=2473047: closest beacon is at x=-432198, y=2000000
Sensor at x=2363579, y=1547888: closest beacon is at x=2348729, y=1239977
Sensor at x=3619841, y=520506: closest beacon is at x=2348729, y=1239977
Sensor at x=3941908, y=3526118: closest beacon is at x=3772294, y=3485243
Sensor at x=3206, y=1564595: closest beacon is at x=-432198, y=2000000
Sensor at x=3123411, y=3392077: closest beacon is at x=2977835, y=3592946
Sensor at x=3279053, y=3984688: closest beacon is at x=2977835, y=3592946
Sensor at x=2968162, y=3938490: closest beacon is at x=2977835, y=3592946
Sensor at x=1772120, y=2862246: closest beacon is at x=2017966, y=3158243
Sensor at x=3283241, y=2619168: closest beacon is at x=3172577, y=2521434
Sensor at x=2471642, y=3890150: closest beacon is at x=2977835, y=3592946
Sensor at x=3163348, y=3743489: closest beacon is at x=2977835, y=3592946
Sensor at x=2933313, y=2919047: closest beacon is at x=3172577, y=2521434
Sensor at x=2780640, y=3629927: closest beacon is at x=2977835, y=3592946
Sensor at x=3986978, y=2079918: closest beacon is at x=3998497, y=2812428
Sensor at x=315464, y=370694: closest beacon is at x=-550536, y=260566
Sensor at x=3957316, y=3968366: closest beacon is at x=3772294, y=3485243
Sensor at x=2118533, y=1074658: closest beacon is at x=2348729, y=1239977
Sensor at x=3494855, y=3378533: closest beacon is at x=3772294, y=3485243
Sensor at x=2575727, y=210553: closest beacon is at x=2348729, y=1239977
Sensor at x=3999990, y=2813525: closest beacon is at x=3998497, y=2812428
Sensor at x=3658837, y=3026912: closest beacon is at x=3998497, y=2812428
Sensor at x=1551619, y=1701155: closest beacon is at x=2348729, y=1239977
Sensor at x=2625855, y=3330422: closest beacon is at x=2977835, y=3592946
Sensor at x=3476946, y=2445098: closest beacon is at x=3172577, y=2521434
Sensor at x=2915568, y=1714113: closest beacon is at x=2348729, y=1239977
Sensor at x=729668, y=3723377: closest beacon is at x=-997494, y=3617758
Sensor at x=3631681, y=3801747: closest beacon is at x=3772294, y=3485243
Sensor at x=2270816, y=3197807: closest beacon is at x=2017966, y=3158243
Sensor at x=3999999, y=2810929: closest beacon is at x=3998497, y=2812428
Sensor at x=3978805, y=3296024: closest beacon is at x=3772294, y=3485243
Sensor at x=1054910, y=811769: closest beacon is at x=2348729, y=1239977

@ -0,0 +1,13 @@
2,2,2
1,2,2
3,2,2
2,1,2
2,3,2
2,2,1
2,2,3
2,2,4
2,2,6
1,2,5
3,2,5
2,1,5
2,3,5

@ -0,0 +1,22 @@
lines = open("input.txt", "r").read().splitlines()
drops = set()
for line in lines:
drop = line.split(",")
drop = (int(drop[0]), int(drop[1]), int(drop[2]))
drops.add(drop)
def check_adjacent(drop, drops):
pos = ((0, 0, 1), (0, 1, 0), (1, 0, 0), (0, 0, -1), (0, -1, 0), (-1, 0, 0))
sides = 6
for p in pos:
if (drop[0] + p[0], drop[1] + p[1], drop[2] + p[2]) in drops:
sides -= 1
return sides
s = 0
for drop in drops:
s += check_adjacent(drop, drops)
print(s)

@ -0,0 +1,86 @@
import itertools
lines = open("input.txt", "r").read().splitlines()
drops = set()
for line in lines:
drop = line.split(",")
drop = (int(drop[0]), int(drop[1]), int(drop[2]))
drops.add(drop)
def check_adjacent(drop, drops):
pos = ((0, 0, 1), (0, 1, 0), (1, 0, 0), (0, 0, -1), (0, -1, 0), (-1, 0, 0))
sides = 6
for p in pos:
if (drop[0] + p[0], drop[1] + p[1], drop[2] + p[2]) in drops:
sides -= 1
return sides
def get_dims(drops):
maxx, maxy, maxz = -1, -1, -1
minx, miny, minz = 9999, 9999, 9999
for drop in drops:
if drop[0] > maxx:
maxx = drop[0]
if drop[0] < minx:
minx = drop[0]
if drop[1] > maxy:
maxy = drop[1]
if drop[1] < miny:
miny = drop[1]
if drop[2] > maxz:
maxz = drop[2]
if drop[2] < minz:
minz = drop[2]
return maxx, maxy, maxz, minx, miny, minz
def generate_full_cube(drops):
dims = get_dims(drops)
maxdims = [x + 2 for x in dims[:3]]
mindims = [x - 2 for x in dims[3:]]
ranges = [range(x, y + 1) for x, y in zip(mindims, maxdims)]
return set(itertools.product(*ranges))
def steam(drops):
dims = get_dims(drops)
maxdims = [x + 2 for x in dims[:3]]
mindims = [x - 2 for x in dims[3:]]
start = tuple((x - 1 for x in maxdims))
visited = set()
rim = set()
pos = ((0, 0, 1), (0, 1, 0), (1, 0, 0), (0, 0, -1), (0, -1, 0), (-1, 0, 0))
free = {start}
while len(free) > 0:
current = free.pop()
visited.add(current)
for p in pos:
n = (current[0] + p[0], current[1] + p[1], current[2] + p[2])
if n in drops:
rim.add(n)
elif (
maxdims[0] >= n[0] >= mindims[0]
and maxdims[1] >= n[1] >= mindims[1]
and maxdims[2] >= n[2] >= mindims[2]
and n not in visited
):
free.add(n)
return visited
steam = steam(drops)
cube = generate_full_cube(drops)
air = cube.symmetric_difference(steam.union(drops))
b = 0
for c in air:
b += 6 - (check_adjacent(c, drops))
s = 0
for d in drops:
s += check_adjacent(d, drops)
print(s - b)

File diff suppressed because it is too large Load Diff

@ -1,47 +0,0 @@
from math import prod
lines = open('inputs/day2.txt').readlines()
red_max = 12
green_max = 13
blue_max = 14
def cubes(lines: list) -> list[int]:
max_cubes = []
for line in lines:
line = line.strip('\n').split(":")
rounds = line[1].split(";")
reds = [0]
greens = [0]
blues = [0]
for round in rounds:
cubes = round.split(",")
for cube in cubes:
cube = cube.split(" ")
_, nr, clr = cube
if clr == "red":
reds.append(int(nr))
elif clr == "green":
greens.append(int(nr))
else:
blues.append(int(nr))
max_cubes.append([max(reds), max(greens), max(blues)])
return max_cubes
def possible_games(games: list[int]) -> list[int]:
valid_game_nrs = []
for idx, game in enumerate(games):
possible = True
if game[0] > red_max:
possible = False
if game[1] > green_max:
possible = False
if game[2] > blue_max:
possible = False
if possible:
valid_game_nrs.append(idx+1)
return valid_game_nrs
def cube_power(games: list[int]) -> list[int]:
return [prod(x) for x in games]
print(f"Solution Part 1: {sum(possible_games(cubes(lines)))}")
print(f"Solution Part 2: {sum(cube_power(cubes(lines)))}")

@ -0,0 +1,40 @@
def score_match(x, y):
if x == "A":
if y == "X":
return 3
if y == "Y":
return 6
else:
return 0
if x == "B":
if y == "X":
return 0
if y == "Y":
return 3
else:
return 6
else:
if y == "X":
return 6
if y == "Y":
return 0
else:
return 3
def score(x):
if x == "X":
return 1
if x == "Y":
return 2
else:
return 3
f = open("input.txt", "r")
lines = f.read().splitlines()
current = 0
for line in lines:
x, y = line.split(" ")
current = current + score(y) + score_match(x, y)
print(current)

@ -0,0 +1,40 @@
def score_symbol(x, y):
if x == "A":
if y == "X":
return 3
if y == "Y":
return 1
else:
return 2
if x == "B":
if y == "X":
return 1
if y == "Y":
return 2
else:
return 3
else:
if y == "X":
return 2
if y == "Y":
return 3
else:
return 1
def score_match(x):
if x == "X":
return 0
if x == "Y":
return 3
else:
return 6
f = open("input.txt", "r")
lines = f.read().splitlines()
current = 0
for line in lines:
x, y = line.split(" ")
current = current + score_symbol(x, y) + score_match(y)
print(current)

File diff suppressed because it is too large Load Diff

@ -0,0 +1,7 @@
1
2
-3
3
-2
0
4

@ -0,0 +1,23 @@
numbers = [int(i) for i in open("input.txt", "r").read().split()]
idx = [i for i in range(len(numbers))]
for i in range(len(idx)):
index = idx.index(i)
n = numbers[index]
if n == 0:
continue
new_index = index + n
if abs(new_index) > len(numbers) - 1:
new_index = new_index % (len(numbers) - 1)
if new_index == 0:
new_index = len(numbers) - 1
elif new_index == len(numbers) - 1:
new_index = 0
numbers.pop(index)
idx.pop(index)
numbers.insert(new_index, n)
idx.insert(new_index, i)
rotated = numbers[numbers.index(0) :] + numbers[: numbers.index(0)]
rest = [x % len(rotated) for x in [1000, 2000, 3000]]
print(sum([rotated[r] for r in rest]))

@ -0,0 +1,32 @@
key = 811589153
numbers = [int(i) * key for i in open("input.txt", "r").read().split()]
idx = [i for i in range(len(numbers))]
def mix(numbers, idx):
for i in range(len(idx)):
index = idx.index(i)
n = numbers[index]
if n == 0:
continue
new_index = index + n
if abs(new_index) > len(numbers) - 1:
new_index = new_index % (len(numbers) - 1)
if new_index == 0:
new_index = len(numbers) - 1
elif new_index == len(numbers) - 1:
new_index = 0
numbers.pop(index)
idx.pop(index)
numbers.insert(new_index, n)
idx.insert(new_index, i)
# idx = idx[numbers.index(0) :] + idx[: numbers.index(0)]
return numbers, idx
for i in range(10):
numbers, idx = mix(numbers, idx)
rotated = numbers[numbers.index(0) :] + numbers[: numbers.index(0)]
rest = [x % len(rotated) for x in [1000, 2000, 3000]]
print(sum([rotated[r] for r in rest]))

File diff suppressed because it is too large Load Diff

@ -0,0 +1,15 @@
root: pppw + sjmn
dbpl: 5
cczh: sllz + lgvd
zczc: 2
ptdq: humn - dvpt
dvpt: 3
lfqf: 4
humn: 5
ljgn: 2
sjmn: drzm * dbpl
sllz: 4
pppw: cczh / lfqf
lgvd: ljgn * ptdq
drzm: hmdt - zczc
hmdt: 32

@ -0,0 +1,40 @@
lines = open("input.txt", "r").read().splitlines()
class Monkey:
def __init__(self, name=None, number=None, childA=None, childB=None, op=None):
self.name = name
self.number = number
self.childA = childA
self.childB = childB
self.op = op
def yell(self):
if self.number != None:
return self.number
else:
if self.op == "+":
return monkeys[self.childA].yell() + monkeys[self.childB].yell()
elif self.op == "-":
return monkeys[self.childA].yell() - monkeys[self.childB].yell()
elif self.op == "*":
return monkeys[self.childA].yell() * monkeys[self.childB].yell()
elif self.op == "/":
return monkeys[self.childA].yell() / monkeys[self.childB].yell()
monkeys = {}
for line in lines:
print(line)
name = line.split(" ")[0][:-1]
rest = line.split(" ")[1:]
if len(rest) == 1:
monkeys[name] = Monkey(name=name, number=int(rest[0]))
else:
childA = rest[0]
childB = rest[2]
op = rest[1]
monkeys[name] = Monkey(name=name, childA=childA, childB=childB, op=op)
print(int(monkeys["root"].yell()))

@ -0,0 +1,39 @@
lines = open("input.txt", "r").read().splitlines()
class Monkey:
def __init__(self, name=None, number=None, childA=None, childB=None, op=None):
self.name = name
self.number = number
self.childA = childA
self.childB = childB
self.op = op
def yell(self):
if self.number != None:
return self.number
else:
if self.name == "root":
return monkeys[self.childA].yell() == monkeys[self.childB].yell()
if self.op == "+":
return monkeys[self.childA].yell() + monkeys[self.childB].yell()
elif self.op == "-":
return monkeys[self.childA].yell() - monkeys[self.childB].yell()
elif self.op == "*":
return monkeys[self.childA].yell() * monkeys[self.childB].yell()
elif self.op == "/":
return monkeys[self.childA].yell() / monkeys[self.childB].yell()
monkeys = {}
for line in lines:
name = line.split(" ")[0][:-1]
rest = line.split(" ")[1:]
if len(rest) == 1:
monkeys[name] = Monkey(name=name, number=int(rest[0]))
else:
childA = rest[0]
childB = rest[2]
op = rest[1]
monkeys[name] = Monkey(name=name, childA=childA, childB=childB, op=op)

File diff suppressed because it is too large Load Diff

@ -1,98 +0,0 @@
lines = open('inputs/day3.txt').readlines()
xlen = len(lines)
ylen = len(lines[0])
def symbol_positions(lines: list[str]) -> list[tuple]:
positions = []
symbols = []
for idx, line in enumerate(lines):
for idy, c in enumerate(line.strip('\n')):
if not c.isdigit() and c != ".":
positions.append((idx, idy))
symbols.append(c)
return positions, symbols
def find_first_digit(lines: list[str], coords: tuple) -> tuple:
x, y = coords
if y == 0:
return coords
elif not lines[x][y-1].isdigit():
return coords
else:
return find_first_digit(lines, (x, y-1))
def full_number(lines: list[str], coords: tuple) -> int:
x, y = coords
nr = lines[x][y]
counter = 1
while (y + counter) < (ylen - 1):
if lines[x][y + counter].isdigit():
nr += lines[x][y + counter]
counter += 1
else:
break
return int(nr)
def adjacent_numbers(lines: list[str], xy: tuple) -> tuple:
# returns bool and coords of first digit in number
coords = []
x, y = xy
neighbours_exist = False
if x > 0:
if lines[x-1][y].isdigit():
neighbours_exist = True
coords.append(find_first_digit(lines, (x-1, y)))
if y > 0:
if lines[x-1][y-1].isdigit():
neighbours_exist = True
coords.append(find_first_digit(lines, (x-1, y-1)))
if y < (ylen - 1):
if lines[x-1][y+1].isdigit():
neighbours_exist = True
coords.append(find_first_digit(lines, (x-1, y+1)))
if x < (xlen - 1):
if lines[x+1][y].isdigit():
neighbours_exist = True
coords.append(find_first_digit(lines, (x+1, y)))
if y > 0:
if lines[x+1][y-1].isdigit():
neighbours_exist = True
coords.append(find_first_digit(lines, (x+1, y-1)))
if y < (ylen - 1):
if lines[x+1][y+1].isdigit():
neighbours_exist = True
coords.append(find_first_digit(lines, (x+1, y+1)))
if y > 0:
if lines[x][y-1].isdigit():
neighbours_exist = True
coords.append(find_first_digit(lines, (x, y-1)))
if y < (ylen - 1):
if lines[x][y+1].isdigit():
neighbours_exist = True
coords.append(find_first_digit(lines, (x, y+1)))
return neighbours_exist, set(coords)
positions, symbols = symbol_positions(lines)
numbers_pos = []
for s in positions:
has_neighbour, coords = adjacent_numbers(lines, s)
if has_neighbour:
numbers_pos.append(coords)
number_coords = set([x for y in numbers_pos for x in y])
numbers = []
for nr in number_coords:
numbers.append(full_number(lines, nr))
print(f'Solution Part 1: {sum(numbers)}')
gear_ratios = []
for p, c in zip(positions, symbols):
if c == "*":
has_neighbour, coords = adjacent_numbers(lines, p)
coords = list(coords)
if len(coords) == 2:
gear_ratios.append(full_number(lines, coords[0]) * full_number(lines, coords[1]))
print(f"Solution Part 2: {sum(gear_ratios)}")

@ -0,0 +1,6 @@
vJrwpWtwJgWrhcsFMMfFFhFp
jqHRNqRjqzjGDLGLrsFMfFZSrLrFZsSL
PmmdzqPrVvPwwTWBwg
wMqvLMZHhHMvwLHjbvcjnnSBnvTQFn
ttgJtRGJQctTZtZT
CrZsJsPPZsGzwwsLwLmpwMDw

@ -0,0 +1,19 @@
f = open("input.txt", "r")
lines = f.read().splitlines()
def score(char):
if char.lower() == char:
return ord(char) - 96
else:
return ord(char) - 38
summed = 0
for line in lines:
first = line[: len(line) // 2]
second = line[len(line) // 2 :]
dups = list(set(first).intersection(second))
for dup in dups:
summed = summed + score(dup)
print(summed)

@ -0,0 +1,17 @@
f = open("input.txt", "r")
lines = f.read().splitlines()
def score(char):
if char.lower() == char:
return ord(char) - 96
else:
return ord(char) - 38
summed = 0
for i in range(0, len(lines), 3):
group = lines[i : i + 3]
symbol = list(set(group[0]).intersection(group[1]).intersection(group[2]))
summed = summed + score(symbol[0])
print(summed)

@ -0,0 +1,300 @@
lDDWVvlVVQfDMlWjGJTRjQCgTGLCLj
ZLZpwzLBhwZhSLBsjntGCtgJRjbnJgSG
qppdZzzsdsmZphrNsNwZhllDHLcVVDWFPvFWcWdFlv
ztdhgJDBJghmQtPFQPpmbw
lVlLRcnfllcfVcccGnSQVLcsTPFbpwsPFspTSqmbpswpbF
cCHRGcGcCRGlGrGcVGnrdWHWBDzBNhhQZWWNBhJz
NfnSSQpdnRSSpvWdSsjZDGNDjGDwTGTjHG
wlPzPqzPFbMmqPCFCJmbsjbHLDDHDZjDjbGHsT
gwMlgmtmPcqVVvhVnvcRnn
cBNBBCHhbhNhblBcCCvcBHSwTwDQSqRwDQpDRsjHST
dPmzMVWdmmMnnZJtZVdqjTSrjTjrpQrsTTVwQRSj
qzmZMmdZPtnGqclblGlbGvgBFc
ZfpmNDfRhzbbqDnD
SFtFjTTZVTFvVTjHrsVvqGBJqhnSSnbJznLGJwJq
TjdPPtdMPPWCcZgW
qsbmGCsjHNhmhmhzTDznpnlQZlbWlZ
LTSSfSvggVVgBgfLtvvtTSczzpWnZQZnlnzpBcnWpQWc
FrLvrrrVPgdPftSHHdNsjTHjmGThhm
wGQlMjvMwpvjvZjZTZlWjplWJJTggDTgfCnntPgTJPbtPgSP
qNhJmcVmdJqhHnPnDNtnPDCg
LrrchqhRdLVzRdmhJcFFQWGGMjpGlvZzlQQv
ZqZMbZMfQZptpjlF
PJCggvHlwWHvSSvCJNvSPvDBtFDQThFQjtRQhhFTsVThQtsF
PwWCnBBCClcMMznMdG
rNwwQJrJrnQswrQrRRwCShBSLndZpdnhpGFSdhBp
PvzzWVzbclGFhLFGdZll
VWjPWvbjcVbVcGVzjcgzgwQQRRRrqwRJQwwstCRR
zjBMMzznjbssrBrMBbvHDmrlprlrpwGpwQDV
LhRwPPTLLNRZqScPWPWPTSmQvQQDGGdQHVDlmVpQGD
NtfhNwhLLNwRwRNcTBgnJMCBzsBFjsJfCz
jZjsWNDlPfClfMlM
GjqbVSqjhgvgSVSBCPmMmCmfpwTBfh
nGbjqtqcGzsLDFcJLs
ZQtmZdtdQcLndRncdQQLFjWWDHNPfhpnqhqsHNNDnpHs
TrMBGbJTwwlmDPPPWshWHfJq
wmVzbrwbwvBlBlVGtSVLSdFjdFtdjLVR
LBhZFhRPbbnPddMdPPlD
NQszQNczlCSlJSsg
mwmrVQwpQVWwTlvBpHHHFhZj
pzzDffWpQBzMpHvzMfRnTNhZdrdBcnLrcdrTLZ
msgJgtmbgmqJJcdrGcJjGn
bSVPgwntmVnngQWvWSSMpMMHWH
gmGMDHHdpngdrGmGcwbNCCnNcbbCSLwL
zQPPPffQQlVlsPFQFzQchZZbLZNVcbqbNqbZgq
PRjQzfRgRfjQBTfJQTlPFRHWmmvmWHGWrWvWWtjrdHpD
vfrHfqrLfLwwNHdvnthpnnFFpstn
gWcMclgmcRcWgDMWgBgGGFnntqQnGphdQhtbdFnh
qRWmRDlcDqWBBPwPNrZHrwSHjTfr
HVVbhdCdndhZSShMzRrzSM
qBjWqvtWvDJjTjjGJtJtnqBvZMrgSGZlgfSgSRrMQGQRMgMR
wmwtJsvjtTJwsNnVsHpdnsHdds
FCJNZDMPNCNvzqQJHqzGqv
hwjWcSTHwRpSWnQtGgQgGStgQQ
WpwhRHTRpcLRjwlwwTWBcWdlFbCrsPrrLCMDrZCFsCDPrZPM
DJjjShSGhGDSNdpfrWWcLFzrDWrDlF
wtqZgwMBBPVMCBPQggMwqMMzfLlWrWLLzsWcFzTzVTzLss
tgtwQqZBQQZbBZtPgbHpNJnJShcmJppSHh
tHrWmrdzzdHflmHmHrSmqswlqhqNgssMhGgghssn
pJcCBPPQPCcPpRpgwZNZBMnDhMsMBw
RJCvRRVcQpjLpCJPWrftWvSnrFffWbrz
jzlwwzDzTlQftzlWjfrBGBgVHBgpgBtPGVtP
vhsshbMbNhZpgZrrrpHcZr
qhdMqqSLSSbSJMqqSwwjzFzmjFQQFfHzLQ
gDhHNnphPPPNCprHFhHFdbdczzjNqbzjVcdbQTcc
tVJWBtVVZRWtjQbctjqcdj
RfvlGLvLLLlLMZBmZBRhHDVPnVHPHCgFCnhlpn
RFhZFTZvFdjlqqlRNCPwSSPCNPBSwC
spHGswpnWgJLLJCPGg
cWpDrVVbWfWbVfbsdQqcQzjjzlhdwqll
WWJPpQwWdQQPNpQvqlvvCblbvbvwLL
cmRMBMBTbSrTDRMcGBscTGfLZfvfvsCqhLlChZlLhfsC
TVbzGSMGVVgdpdPJpQ
lwsFfsZWGsGmsnlGQcPdBBdMbcPHfcCN
RVvSLtSTrTVrTFPcBdCHRcPHbNNb
LrqzLFTLrgSJLLLtTgJjVJvWlDDnjDWnWWlhlGWGhZWZhn
GQJCMGbrMbbCGrrGtcwhctGjNSvWpVVVRjNJqVqqBBRRJq
ssnglHHsnHzFmHnzHFPVDDSDRgVjvWDNpSSNpB
PZfHmndFzzfPZPZfCdwchwGcbwwhCdMW
DRGVQGmGQVnnGVmnnFpNbzCNRbRttCbpLztC
qdqHBdjTqPlcTchBjJMvvvLtLCcLggLvtmgb
fqhlHjdwqjjJTwldDmDmrGrrWFrDGZwD
wFscLVLrrVhwWgZPrcswgZWFTnQdtTMnpQtjdpqdqvqQMt
JRbHmmbDDSzDmDNpTnBBdpMHQtqtvp
JmCCbvRGzbbGJsLgZsVhgLwwGW
WDQwsBzWbBlMjdVpzTJVMj
fncRngntnPCpJgmdFpFWgm
RGZPZtZCfvWSvRZGSLvPccHwsrHbwHLrwHHQQsBDbllB
PlNZhwgpppccgrqVvttbBfrlls
CznSDDdHDRnRStVsVfDvfrtDZq
QCddZFSFLTmccQmw
rnwfVnclGPPFfSPSqBWZvvBBWqZvqWFh
zLgLQgJssspmQTJmsgjZNmqqzqdHbthDdDDWHbhqBBqb
QgmmjpNgCCZpjJLpmTrfrSrVRPfnrClfPwnS
zDzPPwvwqvPPBqjnqvDqBffSfcSNJpNVfccLLNffBR
MdTMZbgbmmTWGGdmssRCSNsSNVVVcJsNppsC
MJghbhHhbtMMdWhbJhHgdmWvnFzHDQPDjQDvHHwvQwvzwF
gGbqqRDrqDMdcBpVlpMG
WzhPCnWfqMcpBnnNLZ
fCqPHHJCfJhStwhWHbrrgvjFgbQbSbmbQs
fhcchnSpfsNpjVVqnqjrGHqq
zzlFLlPLWdggFqRBjqsrHrBTzz
FDwgFLZWlbbchpwshsCNcw
CmPlqqRJDHRDDsFv
MfSpBQQNNfBfrfVZsmVVdzzrHZmH
QSBSLSgmQBmwPCtgClhjPP
NPNsHHHNsPsvHwDqgpwlqt
rTRWSRrWRzgTzZrRVVLRQzjpbtmmGLlGDDbDwwmtblvDvw
nRzSRrjSVRrnjrgZfrfzNdPdMPBfBMhJhhBcPhcJ
LLhzQSDHDHNpNzHHJBQBMvMBqBRJBBqw
rmbdtmlWCCMnvJrn
FTVdmVgtjdtbWsvjjmdLSDcgHpDzShzDLPLSHh
VFFJQVWHtQVHHWbJRRRHwqPvpMLpLZZWLwlwMllL
jsngsdGssLvlqnZqZw
hhmfDjDsmDNjjNRNVqNVJRtQHJ
jvTnffrgFTwvqMzqGdMMSW
sPbCtCCQQLffZGdWNLWDDzLzGM
PQPBBtfZCZsmJPPplwwmTwpcTcmcgj
NBmBRCCsBTRNTndGdswnlwvwnw
fvbqrbPLqpGwScGGwbbb
HJDPJFJLJtpJHCvCFBBBBNNWvF
HJHgNQJBSlRRbJDRDb
RptsfnshscWMLMZDZp
njmrnPznnsTRTtPzFzRTswgQwqvVVwBNwwvjqCHqHq
CBMgBJCTNgQcsQspPpWjRrWrsWsn
mwLvHLGbdHbGzSHmvmvHzrhjjjPptjWGqZPPZhPRWWGP
vbbrLFwLFDJFDfFN
TnPvZSnQgQPHnnnQvgMSWppWNfWRpWfMtthMNDhN
wLJmLBmGFBFdLBbCBbVCVlsGsWhtHqthRRhqhtHHGqqf
LmHLbCjjBLVZzZSgzQgjrc
wdSwfpBhtFbStpftjSVhBwFrGrsQnQgnGrQmqCPmDrmmDb
zJvzLJLNZNscLzNHHLrGPvGGPrDDqGgDPDgC
RWsNNRMsHTHLHTlMczLHZLWtpFwfpthSjFtwFhjSVplwtj
QbrBDLGGRJMQJQJDbQbGvNscWNnTdvnvtnLcccvl
fqZgpVPZHPmfgPPjBFgcscvNNccdddtdNvdFTs
CgPpghfjjPgVmfBMMCRJQQJzJBwM
jLWDqLdWdwLfHwJwzSSfwS
gCgRRltMrlrCcCMzcBSVfZQfVNZNVSBVNNNh
gMrcPntccGgzgTMlMPrtDWFvLqqdLnDsmLLFFqvp
ttHJNccRRwmnsnHnHWMSwqfgvgfwSQZfQf
ShpLhhzTPBMpQqQgvM
zhbFjVdrjFjVljrVbdPddSTPHNssHnHlRNCHtRtsctJtGsRJ
zMVTscVhQhGGhClv
LfMJmgSBpLRfHmBPgpmJPSBdvQNtlHvrHvNNtNNNClGdGN
JFJmmSFFbFFbRJPBgFPmSBPMzzWWTDjjTsTqqwjVWbjjVVsZ
HZpCnwnggfFggbgLDcTb
SjvWjGzNGGzRjSGmMcLhvhMhFMCcmv
rjrVJNjVrzVNPrwtPwPCHBPB
SWwFbTzsSjPzpjFbsWPTWTcWLCLgLgLBZjGVDjCVBBgCBGCZ
lrJJttQcHqrHrvggHVBgBLffBC
lnhhcqNRJWzhTdsWFz
vzldvzlclbFjFvmtjZ
DDNMNStMsSsGnhSMwQjTQVgVbwMbVTTQ
DsDSCNNGpLtsNLpnNsqLppDzCBcdJHBzllcJfzJBPBdBlR
qWNfDvffbJBFDpNfmpbwhGhwjLgTrGwhbGGwrj
ZctMVCcVVQtTpthlnLtppw
QMcRSPMZcpCZqDFNRFHNJFFF
RmztpGSssNMzJRpCvqsCrqdHCBlBdw
gffPFDcqVbgqWgjlPlwCCrdBdllnBH
cFFZcbcqfQhgbcNJZRSMRtmNJptS
PZthPBWlPNPSPtmHHggFGgBJJbwg
qqzDvLLrfDpvvDLzqvnLzqpzbrCRGJRHwFCmHRwGwgwbbRCj
nnpnMfpMLTVqfmthmsMNSScMhS
dflvbdvpfffzpnNLNbWqtblqHjmVhVRhHrwrwrswhHnjsmwh
gSGMdMcJBgMTGPSPDVZhHhHZmDZhrwwjVm
CPJQGBGGPcSTFcTCScFtLLdWvptWLbNpNzvWQL
WThqhvvRDJDRhwcrscNDNFgDHNct
fnrZVnfVjrSGGLzZbnLzZLjVHstHHHQtgQbPpPcpHsscsFpN
SVjZSzZdndVCdSSZmTRvMWBRWvvWlrvmhJ
BcllhPPmMMBPcbRwgQtgHHgtmwgzmt
rpLqbrbTnNvqjLqLNqrNLvHzDtwpDCzFwggttFFHCQFQ
LrrrNLqjZSTsZZsvjbLjPhcBBlBsBcGPPcPlPVGP
HHhrggvSHDtCDsfF
ZMpLblppNZBDBwLzLLpMssCntfWdCFCnfCCtRNtq
lbmJlzzLMPMmlBzhSJVccSJhTvSTDh
sdjBBFqHscFnHTzCnRSnzgVTlC
LpWWtvZfrpbLpZpWftprLCCNMzCZMmmzTNNTmSSVSM
pLVtrtbGvpbpGLfPddHBscBQJJGcwsQq
hLcLnVVcfQBLZPVZnThfVVmjqjHNjgvNfdvpNdrrvvfp
lbRlWFHJtGNGpqmrqrCN
DzRRDFsbDtFtDJtWRztzJZVBQMhTsLhQZMZHVLcLcP
WgbdmgMmWDDvcPcpbz
jffpllHSpHRptRRGRntSVwvLSCCJDzcCcDLvCzPP
tRFrnlGfZrQpBpgQQsgF
TpbBZbCCHCGZNHbzGqgFdNlcFSdNlStSqg
wvWnWwLCPjJPJhMWtWdMfFSMgcdM
hhmvmJrJLJJJPvvhDjswCRGHHrHzBBHGVRQBzRRQ
zChCSBbpSsQscDHHQh
LNJJRgGltJDvfcrfgHfZ
lJNRGlLnNJtTGVMlFTbwSWqjBbzWWHSW
NDTJQDVwCTCJhVGDLfbBbBfbGqbfHBfBHb
lMgMrggMrmmtzMcgWdlmMlbsRjSRBsTRBWsSHSBTHRBj
cMPlgztzrPMznnMPpgddgdzpwDDNNwhNFCTwNZQFLTVTwV
ZgshQgzQnnwMtDwBwv
SFWFlFZRRcmlWmWRBCDwvwwftBtLmfLf
PjRFdTdWGddrGlPjcsJZpJzTqhzQJzNHhz
PgHQgddszgdGPWpMjljMcj
bSqTqnZLnDJSmnmZmtllGsnVtnWjGGWtjl
fqSLDbRSfBdHsRwsFdHd
RwHWZpCWhHvwvHCBMBpJMJGPJJnJgc
lztljTFljRRBBzBnBMnJMS
QbRljFtQfljbbFqNFrdZVrZfdCCwVwvddH
sHzztVzLTgnssPggHHsnCtzBmfBMrMccBBmqmrBqBCRqMf
ZhDQJhFDqjmSMrRF
dZpwDhNhhZpQJdDQpwnsGttGwLtRRTLRts
QJNhClVgPTTtPNCJJCtJhlNPZZRVZfvfzZzmvvzvsmZsvmzR
blBWBpdbLBDqBpszzffRsvdzjvvd
BLWpqBbqnDHqBbGlnWGBPcPJcHTTPrhtgNtCtgPc
jWVJqVwgsJcHCVlQVVQNBp
vGhGhTPtSSNCddSBCH
ZCCDtbDftZsqrrcnWW
hJThjThhVzVTZZwnNZRdgmzt
lrbSSddsrbPQpsvNtgPRmtHmvtnR
GQrspWdSGbDcsFFLBhCGVBjhjj
rHdlHdZDlTcflcNfcrCgcTWWpWQFsRWsFjRCsCjWCmhF
BnqbvQPLGLBPwqGmsVshsSWShGms
PzzPPQJPMJtJbbznPnDdrHlNldDNltrgtfDg
SmmMQhPSlmTwPpmnpllMSMPrccFDqFrDFGgqrDcCwfDgwq
bVdLLNvdQWVbJbQLVGfGDGfDgrFrqgqJgg
vjjWsbQdBsszhsHlhhPPSHsM
PqzJqNzsJgsgNqPdLJPPPNVpMMVWGlFWNFGMpWppGF
ZnZBjttQZcQZRTQDjQwGFlWMlGdGWVrWWlGn
ZRDBRSZDSdSLsqJHfSbzzL
rljJqtZlJqlJcvBNJBNQfQ
TVMWznvPMTFWznwPFFvwFbbBNBgbcNpQdNcBFQpb
mDnLWsPLvLMnnnmTzLzVCtlRRtjSljCZhDlhtqSq
fgWMHClGMWfgRWWWGCfmfgCSVQNTDFHTtddVQQDZNLDZtVVL
wSqbsvzpwpbpdFTNLQwLNTFN
zscjPnPqsJlmPJCJSC
GZSwQjGwGrCGwrTjdCTwdTBpqqlmNmVpNrNvplJqNNpl
zMfJnDcbRRDRFbzDFRLFBtqNmqqtNBmNBvNm
sHcJRRHzzfQTjjCjQjCH
wJCVVbJgCLCwGsMbbGTlsRWHsztZPZWtPrPrWrHzrz
DBqdvfqDBqFpWZFrtppZJp
djqNfQcjDQjMgbbwLjlJGn
TSwfZMfpQwcCCCCrbbCZ
PLJmGJnjqjrsCjMMVj
LnNNLLLnFFWmLFMGNMDgfRpDQSfwSfgQzBHwTS
CdjNCMmdCrVmCjJdVjFNMtMzhWwpGbpBhPZZZDbGPpDhpr
QSfHzlvgTQffSSHHclgfHnqPbPPPppBhpWDhwWvPhvbwwh
cQfQRgQnQsnsQSgHRQJsCFMsCjLzJJFjCdNC
ltLlJttmQdfVRhNmhB
gWWDrPSvCSWgMMMZBVBdTQPQZNZVPR
vCbwQzcQrCrLFHwJpHHGpp
VbRVvVHRbJVTzVLBVPtt
cSdgSZSZZFhnFcFwdDQcZZhgzpTlzLDzlWTvBWLztBtpLplT
hZZvdrcSZQZSSwncdHCqHmGHqJrCJqbNbq
lwWmsQlDbCZbVWZq
rRShhhhPjTsjTRvHhqfzqfqvBZZvBCZffC
scPThhRSjQmmNpplcg
FChtDTThDqZtjppjvgNvjl
LBwsVdVHLVvvpVGjjgjS
BbHLBfRcsHcBdMbdWJQPWFCQCZZhWrJPQp
zMtWCstzNrQLpbplFwQwhb
gDTDHGvvHVfVdGZVJGDGdnmbwmWFwfhpbnfjwwjpLl
GJcHVJdvZJVGZWHSSvTZMCzrzzRNSBtBNPBMqNBB
pLzZVVGGZmZVlmDsQglgsllc
WSvrjRjrMMFFnFjnrnrdjBRRgdsblQQPbpggsclNDDbPstDs
SMWRBrrrvSRBSSvWWWBTMTCqpZzLCCTCwJZwwzGZzqHL
TvfGwGZpPnSNgSSnGh
srLVHLcjsjVtHqjjrjFjcCqPBggqNQQnMqhgngnznNNB
VtdmPHLmtVHFLdmZWRJlWpWWWlmWfp
SbSbdTsrVrdhfSdDGJWGmNwWWPwTGP
BqlRpBMmllpmnpvvDJPZWPJwZcJgDD
FFRMCnRFtCMRlMplqMBRBppVbtzdrdhssrmHzVVSsVhVHz
dNrhhLsrshSmmRcPhm
WMCngCzCvzvMMpplQvzWlRBPcVStSmTSQbbVSPQmwm
MpzvWnllglJfqfMgsNdZHqNjdDsPHqqZ
rNvGZRsRcRRBtBCttB
DwPPQWnWWnPQnJlPhmTtBFBmqzhpmnFh
QwQQQlbPPMWwDdDwlVDJJPPdvdSjrjdrsgssLLsZLNBrNNNr
VjMMVzngnjQQfJDchZqGNqFPcg
SWBwTtWSFTHwFClHHmwBPcJJDhNGPJNPPhPPGhJt
CBvSBBBWHdmRTvRWRQFLQRnjnfLLzVbs
flSpvLlmZpCpZmVSBtlvHHjFHTdssZdjHFdTWdNh
RmQMQJRQJQmPgrzJrPcRQRJcWdNTGTGGFhGTdFhHThHGMTsF
RzJrqqcqPRqqJDDqttCpmtlwBpDflSLt
hBjPZbPBbWvTRnLRWntD
MNGQNsQwfzsdGfgTGfzQwwffmnCRDVmJLRLCvnvLDvJCDgRL
wTTdFldNHzTMljjFqphrBqhrZb
wDcMCbZbzPDcZDWQdrJLrQrZBLRBQr
FFSHStjtHgllgFdSNmlfFStBqRRssRsRJrLrjrrJBRVhLJ
fGggtfHtgWMwbCGdCT
RQrQDDbVGrRSfbVbGtmGtwHFWsCCzsJSJJHsJPJvWC
hphQnhZQNjlBBcMMpCsHwFjvvHWHWsFvjC
ppcnnBZqllTQfmrffbtGTDGt
dsDFsBZBhCFhshFrpBFnmLQmHmRgRbLqmmmRQDLm
PPBBNNNtGTwJNfTJffNttfLQgqLgHvHbqRwlgmblRvll
NSNTGTJTWPjGWMPSJJzrBSpzdFSddCFdncrs
bPzRlMPTzTMldJMnhswcjzfQVccQhc
HCCqNmNmQQmQssJn
pHptprtgRStTtMJt
nTmhrsPMsTfmHHGcSgtj
bJJwdlrJQLlvwlQDDwSbgffGVNjfgjNtVbcf
QlpDQFJdvdFqJdFpLvDFpLLnzZMnBMRRzMTqnrzqTRPznz
qRVRqBzgwqRpqRgVqQRPpQJJPrPhPGJnsGrCFdFJrZdG
ZvWDmMvmSvCndssrsJ
WcZcNWlcMjBQpzNTqVBp
DpLPZLDDlcgmDmhVgfgfWWRwhwwt
VrVMdbCrrBTjCMQQtMwQNSqMQW
VCBHdJHdvrrFsbsdrBJTdTzZcpmZGDGPlmzmlccFDZDn

@ -1,36 +0,0 @@
lines = open('inputs/day4.txt').readlines()
def ticket_numbers(line: str) -> tuple:
line = line.split("|")
winning = [int(x) for x in line[0].replace(" ", " ").split(":")[1].strip().split(" ")]
ticket = [int(x) for x in line[1].replace(" ", " ").strip().split(" ")]
return winning, ticket
def wins2score(wins: list[int]) -> int:
total = 0
for win in wins:
if win > 0:
total += 2 ** (win-1)
return total
def count_wins(lines: list[str]) -> int:
scores = []
for line in lines:
winning, ticket = ticket_numbers(line)
wins = 0
for nr in winning:
if nr in ticket:
wins += 1
scores.append(wins)
return scores
def count_total_cards(wins: list[int]) -> int:
copies = [1 for x in wins]
for i in range(len(wins)):
win = wins[i]
for w in range(win):
copies[i+w+1] += copies[i]
return copies
print(f'Solution Part 1: {wins2score(count_wins(lines))}')
print(f'Solution Part 2: {sum(count_total_cards(count_wins(lines)))}')

@ -0,0 +1,6 @@
2-4,6-8
2-3,4-5
5-7,7-9
2-8,3-7
6-6,4-6
2-6,4-8

@ -0,0 +1,9 @@
lines = open("input.txt", "r").read().splitlines()
contains = 0
for line in lines:
lots = [int(i) for i in line.replace(",", "-").split("-")]
if (lots[0] >= lots[2]) and (lots[1] <= lots[3]):
contains = contains + 1
elif lots[0] <= lots[2] and lots[1] >= lots[3]:
contains = contains + 1
print(contains)

@ -0,0 +1,13 @@
lines = open("input.txt", "r").read().splitlines()
overlap = 0
for line in lines:
lota, lotb = line.split(",")
lota = [int(i) for i in lota.split("-")]
lotb = [int(i) for i in lotb.split("-")]
intersect = set(range(lota[0], lota[1] + 1)).intersection(
set(range(lotb[0], lotb[1] + 1))
)
if len(intersect) > 0:
overlap = overlap + 1
print(overlap)

File diff suppressed because it is too large Load Diff

@ -1,161 +0,0 @@
from multiprocessing import Pool
lines = open('inputs/day5.txt').readlines()
def parsed_seeds(lines: list[str]) -> list[int]:
seeds = [int(x) for x in lines[0].strip("\n")[6:].split()]
return seeds
def parsed_maps(lines: list[str]) -> dict:
maps = {}
curr = ""
for i in range(2, len(lines)):
if lines[i] == "\n":
continue
elif lines[i] == "seed-to-soil map:\n":
maps[lines[i].split()[0]] = []
curr = lines[i].split()[0]
elif lines[i] == "soil-to-fertilizer map:\n":
maps[lines[i].split()[0]] = []
curr = lines[i].split()[0]
elif lines[i] == "fertilizer-to-water map:\n":
maps[lines[i].split()[0]] = []
curr = lines[i].split()[0]
elif lines[i] == "water-to-light map:\n":
maps[lines[i].split()[0]] = []
curr = lines[i].split()[0]
elif lines[i] == "light-to-temperature map:\n":
maps[lines[i].split()[0]] = []
curr = lines[i].split()[0]
elif lines[i] == "temperature-to-humidity map:\n":
maps[lines[i].split()[0]] = []
curr = lines[i].split()[0]
elif lines[i] == "humidity-to-location map:\n":
maps[lines[i].split()[0]] = []
curr = lines[i].split()[0]
else:
maps[curr].append([int(x) for x in lines[i].strip("\n").split()])
return maps
def traverse(seed: int) -> int:
map_names = list(maps.keys())
for name in map_names:
map_applied = False
for l in maps[name]:
if not map_applied:
if seed in range(l[1],l[1]+l[2]):
seed = seed + l[0] - l[1]
map_applied = True
return seed
def seeds_to_locations(seeds: list[int], maps: dict) -> list[int]:
locations = []
with Pool(4) as p:
locations = p.map(traverse, seeds)
return locations
def parsed_seed_ranges(lines: list[str]) -> list[tuple]:
seeds = [int(x) for x in lines[0].strip("\n")[6:].split()]
seed_ranges = []
for i in range(0, len(seeds), 2):
seed_ranges.append((seeds[i], seeds[i] + seeds[i+1]))
return seed_ranges
def seed_is_valid(seed: int, seed_ranges: list[tuple]) -> bool:
for seed_range in seed_ranges:
if seed >= seed_range[0] and seed < seed_range[1]:
return True
return False
def rev_traverse(loc: int) -> int:
map_names = list(maps.keys()).reverse()
for name in map_names:
map_applied = False
for l in maps[name]:
if not map_applied:
if seed in range(l[0],l[0]+l[2]):
seed = seed - l[0] + l[1]
map_applied = True
return seed
maps = parsed_maps(lines)
seeds = parsed_seeds(lines)
seed_ranges = parsed_seed_ranges(lines)
print(f"Solution Part 1: {min(seeds_to_locations(seeds, maps))}")
print(f"Solution Part 2: {min(min_loc_ranges)}")
""" yikes
def parsed_seed_ranges(lines: list[str]) -> list[tuple]:
seeds = [int(x) for x in lines[0].strip("\n")[6:].split()]
seed_ranges = []
for i in range(0, len(seeds), 2):
seed_ranges.append((seeds[i], seeds[i] + seeds[i+1]))
return seed_ranges
def map_seed_range(seed_range: tuple, mapping: list[int]) -> tuple:
#returns transformed range for one map and remaining range(s) that were not affected
def apply_map(tup: tuple, mapping):
x = tup[0]
y = tup[1]
result = (x + l[0] - l[1], y + l[0] - l[1])
#print(f"mapped {tup, result}")
return result
mapped = []
remaining = seed_range
for l in mapping:
not_mapped = []
#print(f"l: {l}")
#print(f"source range from {l[1]} to {l[1] + l[2]}")
while len(remaining) > 0:
r = remaining.pop()
#print(f"-----r: {r}-----")
if r[0] == r[1]:
pass
#print("just delete, empty range")
else:
if r[1] <= l[1]:
#print("not mapped")
not_mapped.append(r)
elif r[0] >= l[1] + l[2]:
#print("not mapped")
not_mapped.append(r)
elif r[0] >= l[1] and r[1] <= l[1] + l[2]:
mapped.append(apply_map(r, l))
elif r[0] < l[1] and r[1] <= l[1] + l[2]:
mapped.append(apply_map((l[1], r[1]), l))
not_mapped.append((r[0], l[1]))
#print(f"remained: {(r[0], l[1])}")
elif r[0] >= l[1] and r[1] > l[1] + l[2]:
mapped.append(apply_map((r[0], l[1] + l[2]), l))
not_mapped.append((l[1] + l[2], r[1]))
#print(f"remained: {(l[1] + l[2], r[1])}")
elif r[0] < l[1] and r[1] > l[1] + l[2]:
not_mapped.append(apply_map((l[1], l[1] + l[2]), l))
remaining.append((r[0], l[1]))
#print(f"remained: {(r[0], l[1])}")
remaining.append((l[1] + l[2], r[1]))
#print(f"remained: {(l[1] + l[2], r[1])}")
#print(not_mapped)
remaining = list(set(not_mapped))
#print(f"remaining {remaining}")
return mapped + remaining
def seed_range_to_loc_ranges(seed_ranges: list[tuple], maps: dict) -> list[tuple]:
# single seed range going through maps
#print(seed_ranges)
map_names = list(maps.keys())
for name in map_names:
#print(f"apply {name}")
seed_ranges = map_seed_range(seed_ranges, maps[name])
#print(seed_ranges)
return seed_ranges
#loc_ranges = seed_range_to_loc_ranges(parsed_seed_ranges(lines), maps)
#min_loc_ranges = [x for x, y in loc_ranges]
"""

@ -0,0 +1,9 @@
[D]
[N] [C]
[Z] [M] [P]
1 2 3
move 1 from 2 to 1
move 3 from 1 to 3
move 2 from 2 to 1
move 1 from 1 to 2

@ -0,0 +1,44 @@
lines = open("input.txt", "r").read().splitlines()
def get_instr_state(lines):
state = []
instr = []
flag = False
for line in lines:
if line == "":
flag = True
continue
if not flag:
state.append(line)
else:
instr.append(line)
return state, instr
def parse_state(state):
new_state = []
for old_line in state:
new_line = []
for i in range(1, len(old_line), 4):
new_line.append(old_line[i])
new_state.append(new_line)
new_state = list(map(list, zip(*new_state)))
final_state = []
for line in new_state:
final_state.append([x for x in line if x != " "])
return final_state
raw_state, instr = get_instr_state(lines)
state = parse_state(raw_state)
for i in instr:
i = i.split(" ")
x, y, z = int(i[1]), int(i[3]), int(i[5])
for j in range(x):
elem = state[y - 1].pop(0)
state[z - 1].insert(0, elem)
for s in state:
print(s[0], end="")

@ -0,0 +1,45 @@
lines = open("input.txt", "r").read().splitlines()
def get_instr_state(lines):
state = []
instr = []
flag = False
for line in lines:
if line == "":
flag = True
continue
if not flag:
state.append(line)
else:
instr.append(line)
return state, instr
def parse_state(state):
new_state = []
for old_line in state:
new_line = []
for i in range(1, len(old_line), 4):
new_line.append(old_line[i])
new_state.append(new_line)
new_state = list(map(list, zip(*new_state)))
final_state = []
for line in new_state:
final_state.append([x for x in line if x != " "])
return final_state
raw_state, instr = get_instr_state(lines)
state = parse_state(raw_state)
for i in instr:
i = i.split(" ")
x, y, z = int(i[1]), int(i[3]), int(i[5])
elem = state[y - 1][:x]
state[z - 1] = elem + state[z - 1]
for i in range(x):
state[y - 1].pop(0)
for s in state:
print(s[0], end="")

@ -0,0 +1,513 @@
[B] [L] [S]
[Q] [J] [C] [W] [F]
[F] [T] [B] [D] [P] [P]
[S] [J] [Z] [T] [B] [C] [H]
[L] [H] [H] [Z] [G] [Z] [G] [R]
[R] [H] [D] [R] [F] [C] [V] [Q] [T]
[C] [J] [M] [G] [P] [H] [N] [J] [D]
[H] [B] [R] [S] [R] [T] [S] [R] [L]
1 2 3 4 5 6 7 8 9
move 8 from 7 to 1
move 9 from 1 to 9
move 4 from 5 to 4
move 4 from 6 to 1
move 3 from 8 to 5
move 6 from 5 to 9
move 1 from 5 to 1
move 4 from 4 to 9
move 7 from 3 to 7
move 6 from 7 to 3
move 1 from 8 to 7
move 2 from 7 to 6
move 1 from 8 to 9
move 1 from 6 to 3
move 4 from 3 to 5
move 5 from 1 to 3
move 1 from 1 to 8
move 2 from 3 to 4
move 1 from 4 to 1
move 7 from 9 to 2
move 1 from 6 to 3
move 2 from 1 to 9
move 20 from 9 to 7
move 6 from 4 to 9
move 1 from 2 to 9
move 6 from 9 to 4
move 1 from 4 to 6
move 1 from 8 to 6
move 1 from 4 to 7
move 5 from 2 to 3
move 2 from 6 to 4
move 3 from 9 to 5
move 5 from 3 to 5
move 3 from 3 to 8
move 3 from 5 to 6
move 1 from 9 to 8
move 5 from 4 to 5
move 3 from 4 to 9
move 1 from 8 to 2
move 2 from 8 to 2
move 11 from 5 to 6
move 16 from 7 to 1
move 2 from 1 to 7
move 14 from 6 to 1
move 11 from 1 to 6
move 2 from 1 to 4
move 4 from 3 to 4
move 9 from 2 to 4
move 2 from 4 to 8
move 2 from 5 to 3
move 9 from 4 to 7
move 2 from 3 to 2
move 1 from 2 to 7
move 1 from 8 to 4
move 4 from 1 to 4
move 1 from 9 to 1
move 7 from 4 to 7
move 2 from 6 to 5
move 1 from 8 to 6
move 1 from 4 to 2
move 10 from 1 to 6
move 5 from 7 to 3
move 1 from 4 to 7
move 2 from 1 to 2
move 2 from 2 to 4
move 4 from 3 to 4
move 18 from 7 to 6
move 6 from 6 to 4
move 1 from 7 to 4
move 1 from 7 to 6
move 11 from 4 to 5
move 14 from 5 to 9
move 1 from 8 to 7
move 8 from 6 to 2
move 2 from 4 to 5
move 7 from 9 to 1
move 6 from 9 to 7
move 5 from 1 to 8
move 1 from 3 to 6
move 10 from 6 to 3
move 1 from 9 to 6
move 1 from 5 to 4
move 4 from 3 to 8
move 1 from 5 to 9
move 9 from 2 to 3
move 1 from 9 to 5
move 4 from 8 to 4
move 1 from 5 to 3
move 5 from 8 to 7
move 5 from 7 to 2
move 3 from 4 to 1
move 8 from 6 to 5
move 1 from 7 to 9
move 4 from 1 to 3
move 2 from 4 to 6
move 5 from 5 to 2
move 4 from 6 to 9
move 1 from 1 to 2
move 1 from 5 to 6
move 7 from 2 to 8
move 5 from 6 to 8
move 4 from 7 to 9
move 15 from 3 to 9
move 1 from 7 to 3
move 1 from 5 to 3
move 6 from 2 to 6
move 1 from 5 to 2
move 2 from 3 to 9
move 1 from 6 to 8
move 5 from 8 to 9
move 2 from 3 to 8
move 3 from 3 to 6
move 11 from 9 to 4
move 1 from 2 to 1
move 2 from 8 to 4
move 1 from 1 to 4
move 7 from 4 to 7
move 9 from 6 to 3
move 4 from 7 to 8
move 4 from 7 to 6
move 19 from 9 to 4
move 7 from 8 to 5
move 5 from 3 to 6
move 6 from 6 to 9
move 3 from 3 to 5
move 1 from 3 to 9
move 8 from 4 to 5
move 2 from 9 to 6
move 3 from 8 to 2
move 1 from 8 to 4
move 1 from 2 to 5
move 19 from 4 to 1
move 2 from 5 to 7
move 2 from 2 to 4
move 13 from 5 to 2
move 1 from 5 to 1
move 2 from 6 to 9
move 1 from 8 to 7
move 9 from 9 to 3
move 2 from 3 to 8
move 1 from 4 to 2
move 5 from 6 to 7
move 1 from 4 to 6
move 2 from 8 to 7
move 7 from 1 to 5
move 1 from 6 to 7
move 10 from 1 to 8
move 1 from 1 to 3
move 1 from 1 to 2
move 6 from 5 to 3
move 4 from 5 to 3
move 5 from 7 to 1
move 3 from 1 to 2
move 4 from 7 to 5
move 8 from 3 to 6
move 2 from 1 to 7
move 4 from 5 to 8
move 7 from 3 to 5
move 3 from 7 to 2
move 1 from 7 to 3
move 12 from 2 to 8
move 23 from 8 to 2
move 16 from 2 to 6
move 1 from 9 to 6
move 7 from 5 to 7
move 7 from 2 to 4
move 2 from 3 to 8
move 1 from 1 to 9
move 5 from 8 to 1
move 2 from 3 to 9
move 2 from 7 to 1
move 4 from 1 to 3
move 4 from 7 to 2
move 2 from 1 to 4
move 11 from 2 to 9
move 3 from 3 to 4
move 1 from 9 to 1
move 2 from 2 to 7
move 4 from 4 to 8
move 2 from 9 to 5
move 2 from 5 to 7
move 4 from 4 to 6
move 1 from 3 to 8
move 1 from 9 to 8
move 4 from 4 to 2
move 2 from 1 to 3
move 1 from 8 to 4
move 2 from 3 to 5
move 3 from 9 to 7
move 2 from 8 to 9
move 1 from 9 to 6
move 2 from 7 to 3
move 2 from 8 to 1
move 1 from 4 to 9
move 18 from 6 to 2
move 1 from 6 to 5
move 1 from 5 to 9
move 18 from 2 to 3
move 1 from 8 to 7
move 2 from 5 to 9
move 1 from 1 to 4
move 3 from 2 to 1
move 9 from 9 to 4
move 7 from 4 to 6
move 2 from 7 to 3
move 2 from 4 to 9
move 7 from 6 to 7
move 3 from 7 to 2
move 7 from 6 to 3
move 2 from 6 to 9
move 24 from 3 to 9
move 2 from 6 to 8
move 1 from 4 to 2
move 2 from 8 to 5
move 31 from 9 to 3
move 6 from 7 to 4
move 35 from 3 to 7
move 1 from 1 to 8
move 1 from 5 to 7
move 1 from 5 to 4
move 1 from 3 to 9
move 1 from 8 to 2
move 3 from 1 to 7
move 7 from 4 to 5
move 1 from 9 to 8
move 4 from 5 to 6
move 2 from 5 to 2
move 6 from 2 to 5
move 2 from 5 to 7
move 2 from 2 to 1
move 2 from 5 to 4
move 1 from 8 to 4
move 3 from 4 to 6
move 4 from 6 to 7
move 1 from 5 to 2
move 2 from 6 to 9
move 1 from 6 to 4
move 1 from 4 to 8
move 2 from 9 to 6
move 1 from 8 to 9
move 34 from 7 to 9
move 6 from 7 to 3
move 1 from 7 to 2
move 1 from 5 to 8
move 1 from 8 to 6
move 6 from 7 to 4
move 1 from 7 to 3
move 7 from 3 to 5
move 6 from 4 to 6
move 31 from 9 to 1
move 3 from 5 to 7
move 24 from 1 to 3
move 1 from 2 to 4
move 3 from 9 to 1
move 14 from 3 to 5
move 1 from 4 to 3
move 1 from 9 to 7
move 8 from 3 to 7
move 1 from 2 to 9
move 7 from 1 to 5
move 3 from 6 to 8
move 3 from 6 to 1
move 1 from 1 to 3
move 4 from 3 to 2
move 4 from 2 to 3
move 2 from 5 to 1
move 9 from 7 to 4
move 1 from 6 to 5
move 1 from 1 to 7
move 3 from 8 to 9
move 5 from 4 to 2
move 3 from 2 to 3
move 1 from 2 to 3
move 2 from 4 to 1
move 2 from 9 to 4
move 1 from 9 to 3
move 1 from 6 to 1
move 1 from 9 to 6
move 25 from 5 to 4
move 4 from 1 to 9
move 2 from 3 to 7
move 2 from 6 to 9
move 2 from 9 to 5
move 6 from 7 to 1
move 5 from 3 to 6
move 10 from 4 to 3
move 10 from 4 to 8
move 2 from 4 to 2
move 5 from 1 to 9
move 2 from 6 to 4
move 6 from 9 to 6
move 7 from 6 to 4
move 3 from 9 to 4
move 3 from 2 to 4
move 4 from 3 to 8
move 2 from 5 to 3
move 10 from 4 to 9
move 4 from 9 to 7
move 5 from 9 to 5
move 4 from 5 to 1
move 9 from 4 to 6
move 10 from 1 to 3
move 1 from 5 to 4
move 3 from 4 to 5
move 2 from 5 to 7
move 1 from 7 to 3
move 1 from 6 to 9
move 11 from 8 to 6
move 14 from 6 to 5
move 1 from 4 to 7
move 7 from 5 to 3
move 3 from 5 to 4
move 2 from 9 to 5
move 2 from 4 to 3
move 2 from 7 to 4
move 11 from 3 to 9
move 2 from 8 to 2
move 2 from 2 to 3
move 1 from 8 to 2
move 1 from 2 to 9
move 3 from 4 to 5
move 2 from 6 to 9
move 1 from 1 to 8
move 10 from 9 to 7
move 2 from 9 to 3
move 23 from 3 to 9
move 4 from 6 to 4
move 9 from 5 to 6
move 1 from 5 to 3
move 5 from 6 to 7
move 1 from 1 to 7
move 1 from 3 to 9
move 4 from 6 to 7
move 1 from 8 to 7
move 1 from 7 to 5
move 1 from 5 to 1
move 12 from 7 to 6
move 9 from 9 to 3
move 6 from 6 to 4
move 8 from 7 to 3
move 3 from 7 to 4
move 6 from 3 to 1
move 10 from 4 to 8
move 10 from 8 to 7
move 2 from 3 to 7
move 9 from 3 to 8
move 2 from 6 to 3
move 10 from 7 to 1
move 3 from 4 to 6
move 5 from 8 to 5
move 3 from 5 to 7
move 1 from 3 to 2
move 1 from 2 to 6
move 6 from 9 to 1
move 12 from 1 to 3
move 3 from 6 to 9
move 3 from 1 to 7
move 1 from 3 to 2
move 7 from 1 to 7
move 1 from 2 to 7
move 2 from 6 to 4
move 1 from 4 to 5
move 3 from 8 to 7
move 2 from 6 to 3
move 2 from 6 to 1
move 1 from 3 to 8
move 5 from 3 to 4
move 2 from 8 to 5
move 14 from 7 to 4
move 1 from 3 to 2
move 1 from 3 to 7
move 7 from 7 to 4
move 2 from 5 to 3
move 2 from 1 to 4
move 9 from 4 to 6
move 1 from 1 to 2
move 4 from 9 to 4
move 8 from 9 to 3
move 2 from 2 to 7
move 13 from 4 to 8
move 4 from 4 to 1
move 2 from 7 to 6
move 12 from 3 to 2
move 11 from 2 to 9
move 6 from 4 to 9
move 18 from 9 to 4
move 2 from 1 to 6
move 6 from 8 to 1
move 13 from 6 to 5
move 8 from 4 to 5
move 1 from 2 to 9
move 8 from 1 to 4
move 7 from 4 to 8
move 4 from 3 to 5
move 10 from 8 to 5
move 13 from 5 to 8
move 12 from 4 to 5
move 2 from 9 to 8
move 29 from 5 to 9
move 24 from 9 to 2
move 23 from 2 to 4
move 5 from 9 to 2
move 7 from 5 to 7
move 1 from 5 to 1
move 7 from 4 to 8
move 14 from 8 to 1
move 5 from 2 to 6
move 16 from 4 to 7
move 8 from 1 to 6
move 1 from 2 to 8
move 20 from 7 to 6
move 11 from 6 to 4
move 3 from 1 to 5
move 3 from 4 to 3
move 8 from 4 to 9
move 8 from 6 to 1
move 2 from 1 to 4
move 3 from 5 to 2
move 12 from 8 to 2
move 1 from 7 to 1
move 1 from 3 to 5
move 1 from 7 to 8
move 1 from 7 to 3
move 12 from 2 to 8
move 13 from 6 to 4
move 2 from 1 to 9
move 3 from 2 to 6
move 3 from 9 to 7
move 5 from 9 to 1
move 4 from 6 to 4
move 2 from 3 to 6
move 1 from 5 to 9
move 1 from 6 to 7
move 9 from 1 to 5
move 11 from 8 to 3
move 1 from 6 to 8
move 3 from 7 to 1
move 1 from 8 to 7
move 2 from 8 to 9
move 7 from 1 to 2
move 17 from 4 to 7
move 1 from 8 to 6
move 4 from 7 to 2
move 4 from 9 to 7
move 4 from 2 to 3
move 1 from 1 to 4
move 2 from 4 to 3
move 9 from 5 to 4
move 1 from 6 to 8
move 6 from 2 to 1
move 5 from 1 to 9
move 9 from 4 to 3
move 1 from 4 to 6
move 2 from 9 to 7
move 1 from 1 to 5
move 1 from 2 to 7
move 1 from 8 to 9
move 1 from 6 to 8
move 1 from 5 to 4
move 1 from 8 to 7
move 23 from 3 to 7
move 36 from 7 to 6
move 33 from 6 to 1
move 1 from 4 to 8
move 7 from 1 to 5
move 1 from 8 to 1
move 3 from 7 to 2
move 24 from 1 to 3
move 7 from 7 to 3
move 3 from 5 to 1
move 4 from 5 to 3
move 1 from 9 to 8
move 2 from 9 to 6
move 1 from 8 to 5
move 3 from 2 to 5
move 30 from 3 to 5
move 1 from 6 to 7
move 6 from 1 to 8
move 7 from 3 to 2
move 1 from 7 to 5
move 2 from 3 to 2
move 2 from 6 to 8
move 1 from 6 to 1
move 7 from 5 to 8
move 8 from 8 to 7
move 20 from 5 to 8
move 2 from 9 to 7
move 8 from 2 to 1
move 7 from 7 to 3
move 1 from 2 to 1
move 3 from 7 to 9
move 4 from 8 to 3
move 5 from 5 to 6
move 1 from 5 to 9
move 4 from 9 to 4
move 1 from 5 to 9
move 2 from 3 to 6
move 1 from 5 to 8
move 7 from 6 to 3
move 1 from 4 to 1
move 7 from 3 to 2
move 3 from 3 to 5
move 2 from 4 to 7

@ -1,31 +0,0 @@
lines = open('inputs/day6.txt').readlines()
time = [int(x) for x in lines[0].split()[1:]]
dist = [int(x) for x in lines[1].split()[1:]]
time2 = int("".join(lines[0].split()[1:]))
dist2 = int("".join(lines[1].split()[1:]))
def gained_dist(push_t: int, trvl_t: int) -> int:
return trvl_t * push_t
def record_beat(record: int, t: int, push_t: int) -> bool:
trvl_t = t - push_t
return gained_dist(push_t, trvl_t) > record
def count_wins(t: int, d: int) -> int:
counter = 0
for i in range(1, t+1):
counter += record_beat(d, t, i)
return counter
wins = []
win_counter = 1
for t, d in zip(time, dist):
wins.append(count_wins(t,d))
for w in wins:
win_counter *= w
print(f"Solution to Part 1: {win_counter}")
print(f"Solution to Part 2: {count_wins(time2, dist2)}")

@ -0,0 +1 @@
zcfzfwzzqfrljwzlrfnpqdbhtmscgvjw

@ -0,0 +1,6 @@
line = open("input.txt", "r").read()
for i in range(len(line)):
if len(set(line[i : i + 4])) == 4:
print(i + 4)
break

@ -0,0 +1,7 @@
line = open("input.txt", "r").read()
for i in range(len(line)):
if len(set(line[i : i + 14])) == 14:
print(set(line[i : i + 14]))
print(i + 14)
break

@ -0,0 +1 @@
jfnjjwbbqttplpvllqgllmdllfmllscssqmqzmmwzznqnwqnwnqnjjbdbpbtbdbzzzljljzjjpccrmmppzfpzfpfnfccfbbcqcrcffblfbftbfbtbwwwmgwmgmnngnllnfllhghcghhjppchcfcnfffllmmqbmmpwwwwlqwwqgqcqsqjqpqzqqdzdtztltslsljjfqfcqqgbqqqghqgqvgvrggqwggrgjgmmnrmmzgmzgzpzjjctcmtcmcnndppcvpvrrwvrvhrvhrhjhnjnvjnjrjggccvffnqqvfqvvnmvmqmfmfqqzfzbfzzzgpzpllrwwnpwpnwnwgwhhrrdnrrdjjzjszsjjbddcdbbvmbmqbqnbqbsqbsqqwbwhwggssdnnmttvnnvmnmhmfhhjchcttzdzdqqszzcwwhhwzhwhphqhcqqsggddfmmvzmzwmwfwzwrrbmrrnwnfnwnlwnwrwfwnnmtnnzwnwdnnbhhrphrhlhwllpmmbcbtbffmqffddjnjwwzpzfpptbbqqwbwzbzjbjmjljblbtlblqqhqbqggrngrgllbmbccmhmqmqwwqcqssqzzfjzjrjnnqrqssfnsnvvtgvvmsvsqqljjbsbrrjllvfvzfzmzhzzhthjhshlslfljfjqjpqpvvmpmhpmhmqqmmdwmddppjlplhlsstlssgnggrbblggffcdfdzzwqqtztqtwqtwtzzsjsbszsbsvbvwwjqjnnpdpccwssvdsdzzqbqbtbtqtmtltltvlvddzwzzfpzpjpgphprpgpqqwppdwpdplddvffcdffvpvqqgvqgvvrfvrvqrrcjcpjjpttftqqvjqvqsvqsvqssdpdbbbmcmscsddbhhgttwhhjlltqllnqntqtsscnntwwhswswlwggldltlttsjszsnznsznzccbtbblplnnmfmqmrrvjvhjhzhnzzgnnhrrdrllblpbllfdfjjssvnssvlsllnqqhwqhhhsgstsjstthrrhrghrhhfmhmwhwrwwsrwrfwwdnntqnnsvnvmnnfvnntztqzqhqnqjnnjfflbfllrsllqhqdqccgvgnvvcwcfccmssqnqhhqrrfrtrvvnjnpjnjjpplmlppvmpphjhppvhvdvssjcjrrtrdrrsvvbbjzzrtztgzghzhccwmccshhzbhhdwdwsdswwlcwllpblpphrppfhfnffrbbcgcmggnvnzzmvvcrrftrftrffcscvcsslbljlglzgzbzczszmsmbmnbbhdhvvsqvqhvvfrfddbpwgvztwwqcpzhhwnhphnrwldjmztsptbbgsqbqqccwbdqzvhfjlfldgphzbfprclgpfztbrgvsvfpghmdchscbdqjqgzvmrtdrfzbhgdvgznjcsmglcfwhdtpsljnvvzjcbbrczwtgpdmgpzhctvbbmvsjzthffsjqhfsdrclpqslbhnmpczwvggpzbjcchfjzjhhgtrmlgnzlndfvzrccgggrpmprbmjbfjjhzrhrtwgqdbgdlqghssrnmtmpvttcqwnwdzhgfnddgbqcsdvzvwqdnmmpwrwhfbqtcpqhvwbczrmjqzsntvdrncwjsmvvwcngrtlwtjmnctwrrtvphbjhlqmgzfsfsrblzzvmzlbhzjhwbdfpncdrfchmrqhspdszcjrnvwtmjzmsmzcdphsdzjgqswwrpdvlpvrdnhplnlmswvcrzlcmbtqtscjfwrnrctrvdqcqzwcvgvpdgrndrgsrvzftwpqjjgjhzwhvrjlqntdtcjdrqzhqlqqdffcgvttlhvwgggnwmdlvghfgjpsmntbvbjbbttrwsljwsrvtmznvqdptpwtdcwtcsfdjlmdqthqggjcptrqhbsbjzqqmvvjmgmppqmjmnjdqvspzlbgzjsjshpslmszqnzghsszpsmpzfcrqqjdwvtbnzstvvjzvtzgpptcmvmbvmpvpzvgfnwtlmdzhvhshtwvnbgwmtzqhcptflpqsqvmptchpfcbwhvjzdcnsnqrgdwfcthqfssnbqnvgvvhlzqfqmdlcwnshtvhhhpghjbmhdbfbqcvbnbvwbzcbbmjnrqmsdqnmnbsrvhggzsrlbwtfmgwrnlhrbrrrqdcspnrpnppngrtdqtbmbhcbjrlhpfjpdnfndmqvwvhlgmsntpwrlrwwqhwvzbpzqqggnbqlsjjqtbqjcdpmndgmtdhfbqrpdzzsnmhzmqqnbdqftqmnhfbdzdlfwgjsjhrcsmtfzgwbvbbzdrlbmcgmppqfppmbqrnsmrmhrdsvgcfmzpfnvrbbgfccfcbphszwdbnnwcjjvvlpdtfzgtslvgqwmsvlpzjcbqwqclrjrsgthhtqrqrhvsdfjntgllsvslrvdtnsdmrgtqcmswnqwlrwlfmcfftbjpvdnmczqzldsssszhjtqtqvqtwhjcqchjvqvntvzzzprbmjcctsqfdcvpbtsgnnsqtqnmjhrgqcjnzrdsgrbtdpqjbgcmnfwhnsrfwcdmncjzwcngfbmmrsbvgvvqpvrdjfsqwjdmqjdpzcbjjfmzjjgbnwqgrvpmbzdhsgtldrzvglscfwbmjltcrzrgdslgprwscwbrhtdtglznjdcvfjzjjqzntdqdbcrcbbmvnzdshjzcsfsgpghmgdqdwsnwjtvtbqbqccbcwjpnhdhzcvdssvnvqtvzwprhpgftdwwvgsbnlzzjppcrrwmrsthvjjrvrsdrbdqfgsjsmwfplpstrbnpdhhcblhjfwzngmhlwbvnfcbgwshspsbbgbldrvmcnczszpgnddrfwrtgcqjggrrcbjwrdjlrvtspbftrtjbzjwchpfnjctcjtwtpmtblczcftqlphdjczfrvtzlsglpvhqsqqblttdjrlczhrqsgpggmvnhpqtrfbpgvzftwtsmwhwswtpvtwnsshmlcffpcjshqhqqsjtpbgszscmcbnhjjtjmpgfdhgmljqmmwlfptstjjvqhcbjpjpwzwqflhslclzzjlmcttbsncqmfzhgnzwbdtnvfwbtztwbhtfsqjfzwmfflmbwnqzqhcjwdpbvngsgzlwvwcqhqjsndznbbdcqqhmjjpqjbsnvwztgmqwdcbbjvcndmhsbvbjnzlbscmgnjcrrwrfdljtcsgmwtffgcjflpzzdcnzvmrbnrjbbmhzqqjtgsrwqmmrhpndwlbnrtrhhpqlmdrcrtdmzsslrmffpftdjvfcpvvhzhjhqtrrsclvtbsccgmmqrjbqgbmpnbzlsncssdhmjppjptvddfgbbnjzjjldjlqjzhhttsclrmsgzctwjqqvtjlfzwgtffgrdjzwdcnrprlcswffghngrqcgsbzqhhvbfjtwcjlrrmbtqjdrgpnbftnmzqnndnqwgrqndlwmjnnspbhjlnzrnptnrmcjhpbfcqpvbchvdwthjlcrfpssgtfbsgfrftcrwttrspbsvzpvcczmdqslcdgfljvtjsdpjnwmdvfzfllrdrbgvpltzlqcrlwbncswhfvrdthspmhfhfdlvpbcqlmjfznhnqblffftgzqrtswnmtnvjprqqhhhvrscvbbzgmnlnprghfdjqbgjppjzjrnclfdssbmgspwcscnlcrrqmtlljrmcwgdgcqwvvjzvsjdjvsspszlcthwzrwqtzdgmqvnlvvzrvrpqqwswzcchncrpnjdmflvmhhwvrrstpvnszfrmvpdtpqpbdmwvvbbpjnwmtststtlcvqdnvqqphzlhhzbbbjssgdcnhlmwrzwvwmcmgrcngqzcnffqzfnvldpdjmsspgpbrzhnszfnljfcrgsjvqjjbstvghlcslhqlzhltpglwffrzfgjghssfgrptbnpbhqnhhfbjsnmsvltqpthdmzzrhrhhmzlplvrtdqfrfrppdpqnllblcfjqpdwznsbrhcncdpmztcrjrfnlwtznrmpbzqsbrqrbnthgfpshrdhnwjmrnsmsfqwdjsmsvhfrbdpjrwcvmdvvmdtfqjgmdsrqtctsdmznngbsrfjvhllgwt

@ -1,190 +0,0 @@
lines = open('inputs/day7.txt').readlines()
strength = ['A', 'K', 'Q', 'J', 'T', '9', '8', '7', '6', '5', '4', '3', '2'][::-1]
strength2 = ['J'] + strength[:9] + strength[10:]
def parse_hands(lines: list[str]) -> tuple:
hands, bids = [], []
for line in lines:
hands.append(line.split()[0])
bids.append(line.split()[1])
return hands, [int(x) for x in bids]
def rel_occ(hand: str) -> list[int]:
occ = []
for i in hand:
occ.append(hand.count(i))
return occ
def fiveofakind(hand: str, j: int) -> bool:
if j == 5:
return True
elif j == 4:
return True
elif j == 3:
return onepair(hand, 0) or twopair(hand, 0)
elif j == 2:
return threeofakind(hand, 0)
elif j == 1:
return fourofakind(hand, 0)
else:
if rel_occ(hand)[0] == 5:
return True
return False
def fourofakind(hand: str, j: int) -> bool:
if j == 3:
return True
elif j == 2:
return twopair(hand, 0)
elif j == 1:
return threeofakind(hand, 0)
else:
occ = rel_occ(hand)
for i in occ:
if i == 4:
return True
return False
def fullhouse(hand: str, j: int) -> bool:
if j == 3:
return True
elif j == 2:
occ = rel_occ(hand)
counter = 0
for i in occ:
if i == 2:
counter += 1
if counter == 4:
return True
elif j == 1:
return twopair(hand, 0)
else:
threes = False
twos = False
occ = rel_occ(hand)
for i in occ:
if i == 3:
threes = True
if i == 2:
twos = True
return twos and threes
def threeofakind(hand: str, j: int) -> bool:
if j == 2:
return True
if j == 1:
return onepair(hand, 0)
else:
threes = False
ones = False
occ = rel_occ(hand)
for i in occ:
if i == 3:
threes = True
if i == 1:
ones = True
return ones and threes
def twopair(hand: str, j: int) -> bool:
if j == 2:
return True
else:
occ = rel_occ(hand)
counter = 0
for i in occ:
if i == 2:
counter += 1
if counter == 4:
return True
return False
def onepair(hand: str, j:int) -> bool:
if j == 1:
return True
else:
occ = rel_occ(hand)
counter = 0
for i in occ:
if i == 2:
counter += 1
if counter == 2:
return True
return False
def value(hand: str, joker: bool) -> int:
if joker:
j = hand.count('J')
else:
j = 0
if fiveofakind(hand, j):
return 6
elif fourofakind(hand, j):
return 5
elif fullhouse(hand, j):
return 4
elif threeofakind(hand, j):
return 3
elif twopair(hand, j):
return 2
elif onepair(hand, j):
return 1
else:
return 0
def compare_equal(hand1: str, hand2: str, part2: bool = False) -> bool:
if part2:
for i in range(len(hand1)):
if strength2.index(hand1[i]) > strength2.index(hand2[i]):
return True
if strength2.index(hand1[i]) < strength2.index(hand2[i]):
return False
else:
for i in range(len(hand1)):
if strength.index(hand1[i]) > strength.index(hand2[i]):
return True
if strength.index(hand1[i]) < strength.index(hand2[i]):
return False
def stronger(hand1: str, hand2: str, part2: bool = False) -> bool:
if value(hand1, part2) > value(hand2, part2):
return True
elif value(hand1, part2) < value(hand2, part2):
return False
else:
return compare_equal(hand1, hand2, part2)
hands, bids = parse_hands(lines)
ranks1 = []
ranks2 = []
for j in range(len(hands)):
count1 = 0
count2 = 0
for i in range(len(hands)):
if hands[j] == hands[i]:
count1 += 1
count2 += 1
else:
if stronger(hands[j], hands[i]):
count1 += 1
if stronger(hands[j], hands[i], part2 = True):
count2 += 1
ranks1.append(count1)
ranks2.append(count2)
earnings1 = []
earnings2 = []
for bid, rank in zip(bids, ranks1):
earnings1.append(bid * rank)
for bid2, rank2 in zip(bids, ranks2):
earnings2.append(bid2 * rank2)
#print(f"Solution Part 1: {sum(earnings1)}")
#print(f"Solution Part 2: {sum(earnings2)}")
for hand in hands:
if hand.count('J') == 2:
print(hand, value(hand, True))

@ -0,0 +1,23 @@
$ cd /
$ ls
dir a
14848514 b.txt
8504156 c.dat
dir d
$ cd a
$ ls
dir e
29116 f
2557 g
62596 h.lst
$ cd e
$ ls
584 i
$ cd ..
$ cd ..
$ cd d
$ ls
4060174 j
8033020 d.log
5626152 d.ext
7214296 k

@ -0,0 +1,52 @@
lines = open("input.txt", "r").read().splitlines()
class Directory:
def __init__(self, path, parent):
self.path = path
self.parent = parent
self.children = []
self.files = []
def mb(self):
val_self = sum(self.files)
for child in self.children:
val_self = val_self + paths[child].mb()
return val_self
ls = False
root = Directory("/", None)
cwd = root
paths = {"/": root}
for line in lines:
cmd = line.split(" ")
if cmd[0] == "$":
ls = False
if cmd[1] == "cd":
if cmd[2] == "..":
path = cwd.parent.path
cwd = cwd.parent
elif cmd[2] == "/":
path = "/"
cwd = root
else:
path = cwd.path + cmd[2] + "/"
if path not in paths:
paths[path] = Directory(path, cwd)
cwd = paths[path]
if cmd[1] == "ls":
ls = True
elif ls:
if cmd[0] != "dir":
cwd.files.append(int(cmd[0]))
else:
cwd.children.append(cwd.path + cmd[1] + "/")
sizes = []
for dirs in paths.values():
if dirs.mb() <= 100000:
sizes.append(dirs.mb())
print(sum(sizes))

@ -0,0 +1,57 @@
lines = open("input.txt", "r").read().splitlines()
class Directory:
def __init__(self, path, parent):
self.path = path
self.parent = parent
self.children = []
self.files = []
def mb(self):
val_self = sum(self.files)
for child in self.children:
val_self = val_self + paths[child].mb()
return val_self
ls = False
root = Directory("/", None)
cwd = root
paths = {"/": root}
for line in lines:
cmd = line.split(" ")
if cmd[0] == "$":
ls = False
if cmd[1] == "cd":
if cmd[2] == "..":
path = cwd.parent.path
cwd = cwd.parent
elif cmd[2] == "/":
path = "/"
cwd = root
else:
path = cwd.path + cmd[2] + "/"
if path not in paths:
paths[path] = Directory(path, cwd)
cwd = paths[path]
if cmd[1] == "ls":
ls = True
elif ls:
if cmd[0] != "dir":
cwd.files.append(int(cmd[0]))
else:
cwd.children.append(cwd.path + cmd[1] + "/")
sizes = {}
for dirs in paths.values():
if (70000000 - paths["/"].mb()) + dirs.mb() >= 30000000:
sizes[dirs.path] = dirs.mb()
smallest = 70000000
for i in sizes:
if sizes[i] < smallest:
smallest = sizes[i]
print(smallest)

File diff suppressed because it is too large Load Diff

@ -1,90 +0,0 @@
lines = open('inputs/day8.txt').readlines()
class Node():
def __init__(self, name, l, r):
self.name = name
self.l = l
self.r = r
def parse_nodes(lines: str) -> dict:
nodes = {}
for i in range(2, len(lines)):
line = lines[i].split('=')
name = line[0].strip()
ns = line[1].strip().strip('\n').strip('(').strip(')').split(',')
l = ns[0].strip()
r = ns[1].strip()
nodes[name] = Node(name, l, r)
return nodes
def all_zs_reached(nodes: list[str]) -> bool:
for node in nodes:
if node[2] != "Z":
return False
return True
def traverse_nodes(nodes: list[str], start: str = "AAA", ghost: bool = False) -> int:
instructions = lines[0].strip("\n")
found = False
counter = 0
curr = nodes[start]
while not found:
for instr in instructions:
if ghost:
if curr.name[2] == "Z":
found = True
break
if curr.name == "ZZZ":
found = True
break
if instr == 'L':
curr = nodes[curr.l]
else:
curr = nodes[curr.r]
counter += 1
return counter
nodes = parse_nodes(lines)
print(f"Solution Part 1: {traverse_nodes(nodes)}")
def traverse_nodes_ghost(nodes: list[str]) -> int:
instructions = lines[0].strip("\n")
found = False
counter = 0
currs = [node for node in nodes if node[2] == "A"]
while not found:
for instr in instructions:
if all_zs_reached(currs):
found = True
break
if instr == 'L':
currs = [nodes[c].l for c in currs]
else:
currs = [nodes[c].r for c in currs]
counter += 1
return counter
def traverse_all_XXA(nodes: list[str]) -> list[int]:
currs = [node for node in nodes if node[2] == "A"]
steps = []
for curr in currs:
steps.append(traverse_nodes(nodes, curr, True))
return steps
# lcm of multiple numbers stolen from https://stackoverflow.com/questions/147515/least-common-multiple-for-3-or-more-numbers
def gcd(a, b):
"""Return greatest common divisor using Euclid's Algorithm."""
while b:
a, b = b, a % b
return a
def lcm(a, b):
"""Return lowest common multiple."""
return a * b // gcd(a, b)
steps = traverse_all_XXA(nodes)
x = steps[0]
for i in range(1, len(steps)):
x = lcm(x, steps[i])
print(f"Solution Part 2: {x}")

@ -0,0 +1,5 @@
30373
25512
65332
33549
35390

@ -0,0 +1,32 @@
trees = open("input.txt", "r").read().splitlines()
outer = 2 * len(trees) + 2 * len(trees[0]) - 4
visible = [[0 for k in range(len(trees))] for l in range(len(trees[0]))]
for i in range(1, len(trees) - 1):
largest = trees[i][0]
for j in range(1, len(trees[0]) - 1):
if trees[i][j] > largest:
visible[i][j] = 1
largest = trees[i][j]
largest = trees[i][len(trees[0]) - 1]
for j in range(1, len(trees[0]) - 1)[::-1]:
if trees[i][j] > largest:
visible[i][j] = 1
largest = trees[i][j]
for j in range(1, len(trees[0]) - 1):
largest = trees[0][j]
for i in range(1, len(trees) - 1):
if trees[i][j] > largest:
visible[i][j] = 1
largest = trees[i][j]
largest = trees[len(trees) - 1][j]
for i in range(1, len(trees) - 1)[::-1]:
print(i)
if trees[i][j] > largest:
visible[i][j] = 1
largest = trees[i][j]
print(sum(sum(visible, [])) + outer)

@ -0,0 +1,34 @@
trees = open("input.txt", "r").read().splitlines()
score = [[0 for k in range(len(trees))] for l in range(len(trees[0]))]
for i in range(len(trees)):
for j in range(len(trees[0])):
n, s, w, o = 0, 0, 0, 0
for k in range(i)[::-1]:
if trees[i][j] > trees[k][j]:
n += 1
else:
n += 1
break
for k in range(i + 1, len(trees)):
if trees[i][j] > trees[k][j]:
s += 1
else:
s += 1
break
for k in range(j)[::-1]:
if trees[i][j] > trees[i][k]:
w += 1
else:
w += 1
break
for k in range(j + 1, len(trees[0])):
if trees[i][j] > trees[i][k]:
o += 1
else:
o += 1
break
score[i][j] = n * s * w * o
print(max([x for y in score for x in y]))

@ -0,0 +1,99 @@
200120010031113332213034140102430141241124321111512323442304040044220141342121012210022220211111200
111021120230012003124233312003010303204555454332453445353125225214221214442214301113012111020220220
010000112330232223210123331341111021455213441355415452453433542411022110033014112420103200010200112
210220131023203033023421012411405531115123145115445215311422135252541100222231431331003220231121021
020112210133112114444340100410411231114131452544155151415233415312511222041221113442132231003203100
121210122332301142321211440441113455552434332511455325315545354524142541534411112013143013120333022
002022223332143323320030004111431434153352153321414154453442552321332341355132444030442110103203212
212130023213100232130230411132244242133251435525323326611211534441513532233340420321144212221332012
112201210213131241203033341411115513233426453426433653356253533133113511115222441140433214102332200
212012000101044144022321521321444445566546646625625665232323663631331412343532242340023204432003233
101233132121222100241254211542133266356326564552445466322626353633223221135151311240430411433022011
200132020222314334333551152431232424524623645555522366665322366466545513112135535223102441334310202
023113000020114221524122422222662645435544455234636242322656464245462233555511334411233402112203303
323212301014434412315252233452332225554646452654545433445553336343544664455435323243510303023142200
310022200424121333144123222262332322343322244646667564465544426245466232342143412141451122001041322
212301111322001335441132334525635254352425553354565445643472236236266635446421522132452121404230333
222212444300345211222512256444456624535343536756355746664436374344346652444335121144422222340114403
133103420101433344253425324366444265345745457464444766674564476573243345254266312555221132304022243
104024111323421413115464433455553477333456354575666765646757774776752425462423244113225443242031103
102001244212344453145353232652647556546465453563544776667356374453675332254663444121345213131024201
224444241243433331136646422564367344447534333336573546336576477746463642222264422255444411444213332
111102440221143134255523244546456346745346547453543465664363545634575433436342252431313443241200434
134231321331555233423635635366465473563535535586445888474374535544636375425246452265522242444124430
234112414314111344422243544643454775656784865866884848444877466476364476356322553554245224411411221
034400114351525345222546546744637535635657575787587675474664764764736443646462322222525151425423322
200214241324215322354446653764777674587466544685754678446567884767437556756324542252661541311422130
343144113253113264625454456777333344687566876677476786864558645875776364454562645333232242321313142
343024121143435322432236376444777668467756646886688564457885758774655565674476525265433235351133020
403402124545255442342535445764457654765745674556784877787445455686478773563733543423236235255444144
103322531152132266562676355566367676848756788886766967585484486646776553753344443262466623351341241
310355244513624552353465735465555764667556575665597778969594858667646774744555337236256442514154340
023311451112523462333545544537465688645559988688956997665697964748587858337347363225646321434554144
320135522136342345436443367666564847488558589757575579796688785767645678467555334323622425311134113
302355525243323546577736555686874886486985688686888898966978978668487864787645754566534465541511251
334125312126266532347576536548547584696886997768569758698995755875465674754333433642553345425533431
341111335132225635365534457665748575977867585959997886979957965558787465664637533766462255534332423
332515314534343636736373478687676678865555895657977886779567677978977887466835476754353523355412552
223554423243256435734467677444784886576856669787898778968956989875566754875777467667635224535114135
155522522343322534364735656868875656687568869667769697877887796866975856457447636733764232364431215
242345244424435673345476658556448689589759768689899966877768987857579874745884637474453634352133231
415255446645436567674735664645455855996887768879976678686967768687868985856885736776326622253351232
345511155426334655353457846578475998667966669787979667866969678557875668566464436456435236255355314
142554534636264637437346664558867877978687978689679869967766679569789677485678377367342526223134543
445152112563265336347774464854776998568899676687677797996796877777879786686845577654534235322155423
333311452256452445537757558677965658888896678979799998788899698785896978877575444547572432544335251
153342523322435374455644657476596955598987666997999878876686677879688676464687476363732553363413554
144335145664565566437454557675966795686769969779977988878679878778787789465465637576634655354532332
152415343652336664567566647557776598677998979889877998977867798897785759685544636646555455665423232
233452324356364643433768554555595977968766779897887998898666688775789556775758843355374525244243434
415514136342636535455644448567857957878867697988999887897878896698589669784466744746433345345355353
232342145445335734443368474877857768999979889789879797978786868766697957448687837436437246435352325
423142134652644455355368647749855698998886897798977997799867788779868756865564445675347463653623132
221215125542657466763755887857659858677696867997877899797779899996787779754784846775376254442211254
154531463524644747547747455647685566769977767978799879788898879798999996758665537564563322242224125
114543323332546776763457675777969696978788779877889799879998997975759878686666834757774555334611241
353441154256436766664748544445957885788777978878979877989798876799786999466647747557553324526153313
433233236244364537664567776764977668967888876787887977898978679686668778764647857553662664333221513
112335142543334473565677774456986769698869989679787999966877889796668798648474667745633463364123315
113555236654542657737447854474695576987788777767987976776779677896568655666568777374452626625515123
335535115334436455537766485588496998559679678997888767666867796988758985466776445675326242423551222
113534446446435634464566878474597579966586699697988866966997787776788976778774466655756463456235323
432234422656545375357656547448457656589888789768979867898878979959955468888683644466555336562315155
313344415452422533675445775845665999956589788887986877769867786689888565577764433373633363624515141
222432351346446453465663784584875977688789959977876966969658866777886544775874577535665532224311252
225114233145352533344653757488874695566977756698769768695668575699668757584555454357642544414312222
033415322244643242337557674678486867575857998965787859688788778777887745544746656765646262354135222
244444135424622245536477356767676647596876888859989597677576756885858547856577434533266366252341111
043422441154553466473376764757644888596669857975585975898957778585855575867574554436566563342243533
331142132342425642446677456357664865566895568659588999997598897847485545576757377726563624233332331
023252542543632422666654576368776445864568889675685656595757555564576478356355573264462564525315531
401013153355343645357335364463874854866687865999886679877556446867474565563474773455256232432344241
021145311524153334266573666344586785645787666877957988698886547444446737764473344255436645355133043
343022114235145422524664767447348848745548778464684486768568675765556575337775543626443412212441440
111402455441135334663624565477563468586767564584754776865658486876757446535673333342623334312243002
300312451335434322222245676775746358685854756547745674447587647487533473336654232544332431554454412
433111155454541556355524273356653577688858857767884847858548544877576457444762553325524214215402141
131233333423335563265232427676636343767667757678865557657665545337553674363435662333422331253432142
424110224332255444554444426563344537343587775787775766858448446366677553432226234426335534235001312
333412002215124441543424366273747763767633456777658554454464446357566564765333524264253113145112300
101110030515255434456252656567734365435643756543777575374763565634563366532624443621453215143234300
303322412424455315323623364345353365376676743654344676735433644466637676342646445331232331222232310
323112211415542144152522545435246756534467755554567676637543357465766366552324534423444455001240332
104010010231221552145233456226456635564775656444567465773637433733444632663325561451234351230241312
121411232340543435321316435636242655564355535365574763633547465475523553325562122152444444042300041
131012210332331125512334254246234345354543573744464635755354544666345534262435114123351541032131413
320204021134412321515435566234224352423426577577364457356445435455454244243342521425351312003010221
323114214132034241313542544555435465334424654666346364554655422236635456436354122354410044244241323
013302120424301452153353441245652435266525344656664634425626224355262362255351231351513443132401213
320030122021334215313244242334523262333453263233364243362363226452453421344311524253311414201210001
232000301112410134252124412414346224626463252363536262245565624425334453135542241232142142113023001
023101113421202000305251552134255163452646652324334242436543224522235515444445314014323100240020120
320223110031202012323335553432231212252653563665545464422324656333443431535442453303001103202231020
102033222010100142203435155413125314311166645446465322244546532441244154143433143443342400201012012
103310002120123402241302221241151441435355114335344522434421453552354154135223134443030043002000021
112323110033212002113322411233332355223342424233213123445224135331545115152043042400020200022133330
022111301200101044211214231433231311322554214331413543414521424255241531111410022413003020200231110
012022111212202121003233141343155411314255551134343533133453252153433344441013011221420230021203220
221101122202110034040022441212441254112211113355531534335143125434435312222200311411322330203331100
210122210200133032213341213111433213432513121525124133544144433541201142230241123430213303001122221

@ -0,0 +1,8 @@
R 4
U 4
L 3
D 1
R 4
D 1
L 5
R 2

@ -0,0 +1,8 @@
R 5
U 8
L 8
D 3
R 17
D 10
L 25
U 20

@ -0,0 +1,64 @@
lines = open("input.txt", "r").read().splitlines()
class Knots:
def __init__(self):
self.x = 0
self.y = 0
self.pos = []
def visited(self):
return len(set(self.pos))
t= Knots()
h = Knots()
def move(h, t):
if abs(h.x - t.x) <= 1 and abs(h.y - t.y) <= 1:
pass
elif abs(h.x - t.x) > 1 and abs(h.y - t.y) == 0:
if h.x > t.x:
t.x += 1
else:
t.x -= 1
elif abs(h.x - t.x) == 0 and abs(h.y - t.y) > 1:
if h.y > t.y:
t.y += 1
else:
t.y -= 1
else:
if h.x > t.x and h.y > t.y :
t.x += 1
t.y += 1
elif h.x > t.x and h.y < t.y:
t.x += 1
t.y -= 1
elif h.x < t.x and h.y < t.y:
t.x -= 1
t.y -= 1
else:
t.x -= 1
t.y += 1
t.pos.append((t.x,t.y))
t.pos.append((0,0))
for line in lines:
cmd = line.split(" ")
if cmd[0] == "R":
for i in range(int(cmd[1])):
h.x = h.x + 1
move(h, t)
if cmd[0] == "L":
for i in range(int(cmd[1])):
h.x = h.x - 1
move(h, t)
if cmd[0] == "U":
for i in range(int(cmd[1])):
h.y = h.y + 1
move(h, t)
if cmd[0] == "D":
for i in range(int(cmd[1])):
h.y = h.y - 1
move(h, t)
print(t.visited())

@ -0,0 +1,69 @@
lines = open("input.txt", "r").read().splitlines()
class Knots:
def __init__(self):
self.x = 0
self.y = 0
self.pos = []
def visited(self):
return len(set(self.pos))
k = []
for i in range(10):
k.append(Knots())
k[i].pos.append((0,0))
def move(h, t):
if abs(h.x - t.x) <= 1 and abs(h.y - t.y) <= 1:
pass
elif abs(h.x - t.x) > 1 and abs(h.y - t.y) == 0:
if h.x > t.x:
t.x += 1
else:
t.x -= 1
elif abs(h.x - t.x) == 0 and abs(h.y - t.y) > 1:
if h.y > t.y:
t.y += 1
else:
t.y -= 1
else:
if h.x > t.x and h.y > t.y :
t.x += 1
t.y += 1
elif h.x > t.x and h.y < t.y:
t.x += 1
t.y -= 1
elif h.x < t.x and h.y < t.y:
t.x -= 1
t.y -= 1
else:
t.x -= 1
t.y += 1
t.pos.append((t.x,t.y))
for line in lines:
cmd = line.split(" ")
if cmd[0] == "R":
for _ in range(int(cmd[1])):
k[0].x = k[0].x + 1
for i in range(1, 10):
move(k[i-1], k[i])
if cmd[0] == "L":
for _ in range(int(cmd[1])):
k[0].x = k[0].x - 1
for i in range(1, 10):
move(k[i-1], k[i])
if cmd[0] == "U":
for _ in range(int(cmd[1])):
k[0].y = k[0].y + 1
for i in range(1, 10):
move(k[i-1], k[i])
if cmd[0] == "D":
for _ in range(int(cmd[1])):
k[0].y = k[0].y - 1
for i in range(1, 10):
move(k[i-1], k[i])
print(k[-1].visited())

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

@ -1,4 +0,0 @@
1abc2
pqr3stu8vwx
a1b2c3d4e5f
treb7uchet

@ -1,7 +0,0 @@
two1nine
eightwothree
abcone2threexyz
xtwone3four
4nineeightseven2
zoneight234
7pqrstsixteen

@ -1,100 +0,0 @@
Game 1: 2 blue, 3 red; 3 green, 3 blue, 6 red; 4 blue, 6 red; 2 green, 2 blue, 9 red; 2 red, 4 blue
Game 2: 4 red, 1 green; 3 red; 13 green, 5 red, 3 blue; 3 green, 2 red; 3 blue, 5 red, 3 green; 2 red, 3 blue, 12 green
Game 3: 4 red, 1 green, 1 blue; 1 red, 1 blue; 6 red, 1 green; 6 red, 3 blue, 1 green; 4 red
Game 4: 4 blue, 12 red, 4 green; 6 green, 3 blue, 19 red; 3 blue, 2 red, 2 green
Game 5: 1 red, 5 blue, 16 green; 1 red, 6 green, 3 blue; 2 red, 12 blue; 17 blue, 3 green; 7 green, 2 red, 6 blue
Game 6: 3 green, 1 blue, 5 red; 5 green, 5 red; 2 green, 2 blue, 3 red; 5 green, 2 red; 3 green, 6 red, 3 blue; 5 green, 4 red
Game 7: 15 blue, 1 red, 6 green; 4 blue, 7 green, 2 red; 14 blue, 5 green, 2 red
Game 8: 6 blue, 3 green, 10 red; 2 blue, 1 green, 5 red; 6 blue, 3 green, 12 red; 11 red, 1 green, 1 blue; 5 blue, 14 red, 3 green; 3 red
Game 9: 15 red, 3 blue; 1 blue, 16 red; 1 red, 3 blue; 1 blue, 1 green, 9 red
Game 10: 1 red; 1 blue, 7 green; 1 green, 5 blue; 3 blue, 3 green; 1 green
Game 11: 19 blue, 13 green; 19 blue, 2 green; 10 blue, 3 red, 12 green; 11 blue, 1 red, 6 green
Game 12: 7 green, 5 blue; 6 green, 3 red, 6 blue; 2 red, 5 blue, 15 green; 2 red, 1 blue, 1 green; 4 red, 4 green, 2 blue; 3 blue, 6 green
Game 13: 9 red, 2 blue, 2 green; 1 blue, 2 red, 15 green; 9 green, 2 blue, 9 red; 5 blue, 8 green, 5 red; 2 blue, 11 green, 5 red
Game 14: 9 blue, 1 red; 10 blue, 4 green, 3 red; 2 red, 6 blue; 4 green, 2 blue, 1 red; 5 green, 2 red, 11 blue; 12 blue, 2 red, 1 green
Game 15: 9 blue, 7 green, 12 red; 9 red, 17 green, 8 blue; 6 red, 4 blue, 4 green; 5 red, 17 green
Game 16: 5 green, 4 red; 3 blue, 3 red, 14 green; 6 red, 5 blue, 12 green
Game 17: 8 blue, 5 green, 2 red; 6 red, 6 blue; 9 red; 5 blue, 2 green, 8 red; 13 red, 4 blue, 4 green; 9 blue, 3 green, 5 red
Game 18: 8 green, 1 red, 2 blue; 4 green, 4 red, 1 blue; 6 blue, 2 red
Game 19: 3 green, 9 blue; 4 blue, 10 red; 6 red, 3 green, 3 blue; 6 red, 4 green, 9 blue
Game 20: 11 green, 3 blue; 6 green; 3 green, 6 blue; 1 red, 5 green; 6 blue, 7 green
Game 21: 1 green, 1 blue, 12 red; 6 red, 2 blue; 5 green, 4 red, 2 blue; 11 red, 8 green, 1 blue
Game 22: 10 red; 1 red, 13 green, 9 blue; 6 blue, 12 red, 12 green; 10 red, 8 blue, 11 green; 2 green, 1 red, 3 blue; 7 red, 1 blue, 8 green
Game 23: 11 red, 15 blue; 10 blue, 16 red, 1 green; 14 blue, 5 red; 1 green, 9 red, 9 blue; 1 red, 7 blue, 3 green; 6 red, 2 green, 3 blue
Game 24: 6 blue, 11 red; 16 green, 2 red, 1 blue; 8 red, 7 blue; 14 blue, 9 green, 9 red; 13 green, 4 red, 8 blue; 2 red, 7 blue, 1 green
Game 25: 2 green, 12 blue, 1 red; 10 blue, 5 red, 5 green; 2 blue, 9 red, 3 green; 5 blue, 4 red, 2 green
Game 26: 7 blue, 6 red, 1 green; 2 blue, 3 green, 12 red; 2 blue, 6 red, 5 green
Game 27: 2 green, 3 red; 4 green; 2 red, 1 blue, 1 green; 2 red, 1 green, 2 blue
Game 28: 11 blue, 1 red, 5 green; 2 blue, 2 red, 4 green; 10 blue, 4 red, 1 green
Game 29: 6 blue, 17 red, 1 green; 8 blue, 4 red; 14 blue, 1 red, 3 green
Game 30: 2 blue, 4 green; 7 green, 1 blue, 1 red; 1 blue, 8 green
Game 31: 15 blue, 9 green, 2 red; 5 green, 4 blue, 1 red; 1 green, 15 red, 7 blue; 5 red, 2 blue
Game 32: 1 blue, 5 red, 3 green; 3 green, 8 red, 1 blue; 5 green, 1 red; 4 green, 3 blue, 15 red; 2 green, 1 blue; 4 blue, 15 red, 4 green
Game 33: 3 red, 10 blue; 4 red, 9 blue; 1 green, 10 blue
Game 34: 3 blue, 1 green, 9 red; 4 green, 2 red, 9 blue; 7 blue, 3 red; 6 blue, 13 red; 4 green, 13 blue, 9 red
Game 35: 14 red, 1 green; 1 red, 2 green, 4 blue; 3 blue, 10 red, 6 green; 5 blue, 6 red, 7 green; 7 blue, 5 red
Game 36: 2 blue, 8 red, 9 green; 9 green, 3 red, 10 blue; 6 red, 8 blue, 1 green; 6 green, 8 red, 4 blue
Game 37: 10 green, 3 red, 6 blue; 2 blue, 9 red, 5 green; 13 green, 9 red, 10 blue; 2 blue, 4 green, 9 red
Game 38: 4 red, 14 blue, 12 green; 6 red, 12 green, 18 blue; 6 green, 1 blue, 1 red
Game 39: 5 red, 1 blue, 3 green; 1 blue, 3 green, 8 red; 15 red, 1 blue, 5 green; 3 green, 5 red; 1 blue, 14 red; 3 green, 1 blue, 12 red
Game 40: 8 green, 4 blue; 5 blue, 7 red, 8 green; 5 blue, 8 green; 6 green, 3 red, 12 blue; 14 blue, 7 green, 2 red; 1 green, 7 red, 5 blue
Game 41: 7 red, 10 green; 10 red, 6 green; 9 red, 7 green, 1 blue; 3 red, 1 blue
Game 42: 3 green, 2 blue, 13 red; 1 blue, 3 red; 11 green, 16 red; 3 green, 1 blue, 16 red; 5 red, 8 green
Game 43: 12 blue, 9 red; 16 blue, 2 red, 7 green; 4 red, 1 blue, 11 green; 15 blue, 4 red, 9 green
Game 44: 17 green, 5 blue, 2 red; 9 green, 11 blue, 1 red; 20 green, 3 blue, 8 red; 2 red, 13 green, 9 blue; 15 green, 12 blue; 4 blue, 7 green, 9 red
Game 45: 5 green; 5 green, 1 red; 3 green, 2 blue; 1 green, 1 blue, 1 red
Game 46: 10 red, 11 green; 16 green, 8 blue, 12 red; 9 green, 9 blue
Game 47: 20 green, 17 red, 1 blue; 16 red, 2 blue, 11 green; 3 blue, 19 red, 1 green; 3 blue, 17 red, 17 green; 12 green, 2 blue, 7 red
Game 48: 1 red, 4 blue, 6 green; 19 green, 1 red, 1 blue; 16 green, 3 blue, 1 red; 3 blue, 17 green; 4 blue, 12 green
Game 49: 13 green, 2 blue, 1 red; 1 green, 8 red, 2 blue; 11 red, 11 green, 3 blue; 7 red, 8 green, 4 blue
Game 50: 11 blue, 1 red, 2 green; 1 green, 10 blue; 1 blue; 6 blue; 1 green, 2 blue
Game 51: 3 red, 3 green, 1 blue; 3 green, 3 red; 10 green, 4 red; 3 red, 2 green
Game 52: 1 red, 4 blue; 1 green, 11 blue; 1 green, 3 red, 6 blue; 4 red, 1 green, 4 blue; 9 blue, 1 green; 10 blue, 1 green
Game 53: 2 blue, 4 green, 1 red; 8 blue, 4 red, 7 green; 9 red, 7 blue, 6 green; 3 red, 7 green, 1 blue; 2 red, 9 blue, 5 green; 1 green, 7 red, 10 blue
Game 54: 1 red, 1 blue, 5 green; 2 red, 1 green, 2 blue; 3 green, 3 blue, 2 red; 4 red; 12 red, 5 green, 2 blue
Game 55: 2 red, 11 blue; 16 green, 7 red, 16 blue; 4 blue, 11 green, 7 red; 8 green, 18 blue, 8 red
Game 56: 2 blue, 2 green, 1 red; 1 red, 1 green; 1 red; 4 green; 1 blue; 1 blue, 7 green
Game 57: 4 blue, 3 green; 16 green, 2 red, 5 blue; 1 red, 13 green, 2 blue; 3 blue, 12 green, 2 red; 2 red, 5 blue, 4 green; 10 green, 2 blue
Game 58: 3 blue, 8 green; 4 green, 3 blue; 7 green, 5 blue, 5 red; 8 green; 3 red, 6 blue, 9 green; 2 red, 10 green, 4 blue
Game 59: 7 blue, 6 green, 5 red; 7 red, 2 blue; 5 red, 11 green, 14 blue; 8 green, 17 red
Game 60: 3 green, 8 blue, 2 red; 4 green, 7 blue, 6 red; 13 blue, 8 green, 2 red; 10 red, 6 blue, 5 green; 11 green, 3 blue, 4 red; 9 red, 5 green, 9 blue
Game 61: 4 red, 18 blue, 13 green; 9 green, 5 red, 3 blue; 4 green, 3 blue, 4 red; 8 red, 4 green, 7 blue; 8 red, 4 blue, 6 green; 10 green, 5 red, 14 blue
Game 62: 12 red, 14 blue, 9 green; 9 blue, 6 red, 4 green; 2 red, 5 blue; 1 red, 12 blue
Game 63: 11 blue, 13 red, 11 green; 4 blue, 9 green; 8 blue, 9 red; 7 red, 11 green, 7 blue
Game 64: 10 blue, 8 red, 12 green; 10 red, 12 blue, 9 green; 3 green, 17 red; 12 green, 15 blue, 16 red; 6 green, 15 blue, 1 red; 9 red, 6 blue, 10 green
Game 65: 7 red, 7 blue; 3 blue, 1 red, 1 green; 3 red, 8 blue
Game 66: 1 blue, 3 red; 10 green, 5 blue; 4 green; 3 red, 11 green; 3 blue, 15 green, 3 red
Game 67: 1 red; 2 blue, 2 green, 1 red; 6 green, 1 blue
Game 68: 7 red, 4 blue; 4 blue, 6 red, 7 green; 2 green, 19 red, 11 blue; 11 green, 9 red
Game 69: 4 blue, 3 green, 1 red; 7 blue, 1 red, 3 green; 5 blue, 1 green; 2 blue, 10 green, 2 red; 2 red, 6 green, 5 blue; 1 red, 4 green, 2 blue
Game 70: 9 blue, 7 red, 6 green; 19 blue, 4 red, 5 green; 6 blue, 7 red, 4 green; 3 blue, 4 red, 2 green
Game 71: 6 green, 12 blue, 4 red; 11 red, 10 green, 11 blue; 3 red, 14 blue, 13 green; 4 blue, 3 green
Game 72: 2 green, 1 blue, 9 red; 10 red, 3 green, 1 blue; 11 red, 2 green; 2 green, 1 blue, 5 red; 1 red, 1 blue, 3 green; 13 red, 4 blue, 1 green
Game 73: 11 green, 6 blue; 7 green, 6 blue, 7 red; 12 green, 8 blue, 11 red; 4 red, 2 blue, 9 green; 4 green, 7 blue, 2 red
Game 74: 3 blue, 7 red; 3 blue, 5 green, 2 red; 5 red, 1 green, 3 blue; 8 green, 2 blue, 11 red; 3 blue, 8 green, 10 red
Game 75: 2 green; 5 blue; 1 blue, 1 red; 1 red, 9 blue, 2 green; 2 blue, 2 green
Game 76: 12 blue, 13 green; 5 red, 11 blue, 9 green; 12 green, 6 red
Game 77: 1 blue, 15 green, 12 red; 15 green, 5 blue; 14 green, 3 blue, 8 red
Game 78: 11 green, 8 blue, 1 red; 9 green, 8 blue, 1 red; 13 green, 5 red, 6 blue; 5 red, 7 green, 20 blue; 10 blue, 5 red
Game 79: 3 blue; 6 blue, 5 red; 4 red, 1 green, 4 blue; 7 blue, 6 red; 7 red, 1 blue; 1 red, 1 blue, 1 green
Game 80: 11 green, 3 red, 8 blue; 2 red, 15 green, 2 blue; 5 green, 8 blue, 2 red; 8 blue, 14 green; 2 blue, 13 green
Game 81: 9 red, 4 green; 7 green, 4 red; 2 red, 4 blue, 6 green; 6 red, 4 blue, 9 green; 1 green, 3 red; 6 green, 1 blue, 8 red
Game 82: 5 blue, 3 red, 3 green; 5 red; 2 red, 3 green, 8 blue
Game 83: 10 green, 1 red, 1 blue; 3 red, 1 green, 1 blue; 4 red, 10 green
Game 84: 16 red, 2 green, 6 blue; 6 red, 3 green, 8 blue; 3 green, 10 red, 5 blue; 4 blue, 3 green; 15 red
Game 85: 3 green, 2 red; 5 green, 4 blue; 5 green, 8 red, 3 blue
Game 86: 7 green, 16 blue, 7 red; 1 green, 12 red, 2 blue; 15 green, 16 blue, 7 red
Game 87: 1 red, 6 green, 5 blue; 2 green, 1 blue; 2 green, 1 red, 1 blue; 5 green, 4 blue
Game 88: 3 green, 3 red, 4 blue; 1 red, 1 green; 6 blue, 9 red, 1 green; 1 green, 11 red, 3 blue; 7 red, 6 blue
Game 89: 2 blue, 3 red, 4 green; 5 red, 7 blue, 14 green; 8 blue, 5 red, 16 green; 2 blue, 5 red, 7 green; 5 green, 9 blue, 1 red
Game 90: 1 blue, 3 red, 7 green; 11 green, 4 red, 1 blue; 1 red, 1 blue, 6 green; 2 blue, 2 green; 8 green, 2 blue; 3 red, 2 blue, 4 green
Game 91: 6 blue, 4 red, 1 green; 8 red, 3 blue, 3 green; 1 green, 2 blue, 5 red; 1 blue, 3 green
Game 92: 8 green, 1 red, 5 blue; 2 green, 7 blue; 11 blue, 5 green, 8 red; 7 blue, 3 red, 4 green
Game 93: 3 green, 1 red, 9 blue; 13 red, 5 blue, 8 green; 5 green, 2 red, 7 blue
Game 94: 4 green, 10 blue, 8 red; 4 red, 10 blue, 2 green; 2 green, 10 blue, 5 red; 5 green, 2 red, 10 blue
Game 95: 5 green, 1 blue; 3 blue, 11 green, 8 red; 8 blue, 2 red, 12 green; 4 green, 4 blue, 4 red
Game 96: 1 blue, 13 green; 8 blue, 3 red, 4 green; 1 red, 3 blue, 10 green
Game 97: 18 green, 4 red; 1 blue, 2 red, 9 green; 6 red, 3 blue, 10 green; 3 blue, 15 green, 4 red
Game 98: 2 blue, 3 green, 6 red; 1 green, 1 blue, 8 red; 8 red, 3 green, 1 blue; 2 blue; 8 red, 2 green, 2 blue
Game 99: 1 green, 2 red, 1 blue; 8 green, 4 blue, 1 red; 7 blue, 1 red, 11 green; 9 green, 3 blue; 1 red, 2 blue; 1 red, 6 blue
Game 100: 7 blue, 9 green, 2 red; 5 red, 9 green; 1 blue, 8 red, 13 green

@ -1,5 +0,0 @@
Game 1: 3 blue, 4 red; 1 red, 2 green, 6 blue; 2 green
Game 2: 1 blue, 2 green; 3 green, 4 blue, 1 red; 1 green, 1 blue
Game 3: 8 green, 6 blue, 20 red; 5 blue, 4 red, 13 green; 5 green, 1 red
Game 4: 1 green, 3 red, 6 blue; 3 green, 6 red; 3 green, 15 blue, 14 red
Game 5: 6 red, 1 blue, 3 green; 2 blue, 1 red, 2 green

@ -1,140 +0,0 @@
...317..........214.....................................751.................................630...479..205....41.993............416.........
...*....813........%....572........%...629.154......518....*....365..................-.......*.......#.....................422...........661
269.......*...58...........=......264.....*..........*......937.-...........235...303.........848..............195.....154*.........144.-...
........476..@...162.855................$....288...821..............107.....-...........290......../..301.........=...........135..*........
618.............=....*...547...........441....*........................@................*........851....+...................+..*...102.310..
...*961....905......534..$...377...............854...341.342....485.......109....89.995..927..............................90..997......*....
............*...................*.................../.....*......@...........%....*...*.......................+44.....913.........9.....891.
....62......724...592....946.878...854....$.701............480......575.246....119.....54..296.906..684..................*.........*838.....
.................+......*...............478....................469.....*..................*...........+..502..156.........821...........983.
....................315.764..996..571...............=........................804.......&...892....958.....*......*.............61...........
........+...697*.....+.........*...*...........@.448........................*.......322.............*....309..37.602.....775....*...........
32.480..665.....557......+...435..449..691..327....................#....921..535..........755...43...597........................322..7......
......*.....848.........745.............*.......679/............106.......&........404......+....*...................888..750........*......
......93...*....=.............*297......550...........324.597............................................819.....997*......-...734$..588....
.........363..112..754...............&..........723....................14..954.............175....773...*.............&.....................
..................*.......#..........502......../...............606.........@..778*.......#.........*....844...713...743....-.........&.....
............827.895.-539...469...938...../.248.....................*.49............749.............783.........$...+.........33....471......
..............*.................../...517...&......368*710......432...*............................................841.=.................194
.....*491....395.......&481.................../.#...................83................668..181.....698..155*...........981.200..............
...................219.................196.473..224.....=.....733*.......=.........98*.......*.420..........671.....*......*......369.205...
........@......696*....669.....50.....................853.593.........168....@.............802..*...388............3......792........*......
......641............./....62..*...836#.......*169.........@...............872.................416....*.................-...................
..........................#...377..........179.......101........+504.................*554.............947..............447.............830..
243........*902.....#................480*...........+.....*258.........*243.......389.......&....................723.........838...991......
........182.........33..........840......616.733.......756..........290.....................145..119..........................+......&......
..............................................*....807...................777......+..556............@....85#................................
.212.664..3......316..579..462..............435.......*............@....*........36...$........572................703..732........@.........
...........=....@.....*.....*............*.......-..337......656...411.357.373.....................*21....37.........%./.....918...185.387..
...350.................338...161.856..157.906...527...........*............+.........*336.......204............755.............*............
....&...........683...................................801......313............831.230......374.......................383.....940.48.........
...............*........447......635....335......%.........627........44@..........................895....................@.................
....$....958..943.......#...935.%..........*...794......16.*..................+...........100..469........743.*.........529....=.......883..
..308.....*........*776.......*.....*....430............*..562.......895......765.................*.........*..776..........246..921&.......
.........200...............*..1....572................814...........$......#..........138...&....487..668..58.......485.....................
...*845.............935...958.................................667.....%.121.......691.......245.........*..............*........131.........
.........*............*.............=............................*.593.............*..................380........189...219.211......@.......
.....152..783........634...........521.+.......26.............659...............328...%.............................*........$......397.*...
......*.......124..........299..........808.....*........359................424.....%..454..........553.............49..562.....257......723
......641.........24.............576.............975........=..............*.......974.............*...........146......*......../...@......
940.........&....@....221........*.........149.......&...............689....418...........538...................*.....985............526....
.............192.........*816...582...561..+..........915..981%.......*..................*......&8....+.........497..........145............
.........144........$....................@......................425.933....846*824.$...370.342*....375...641..=........927.....*.......160..
............$.......925...67.655....57.............=905..881....@..................585.........746.............224..........224...864...*...
.....872................#..*...$.....*.........#............*...........979....699...................947.........................*.....788..
............949......676..42........340.....694...144......712..296..45...*.......*..............191.@.......889-......=786.....417.........
...........*.................846....................*..160.......*.......403.....347...914.91...=...........................................
.371.=....904.643......816...*...647...$.858.......431..........486..........706......*....-..............961........................698....
......398.....*....252*....591..../..224...$..341...........#................*................956............*...27..............57.....*534
.............363...............................&.............69........163.233.580....113*367..............44...*..................*406.....
...893..457..........91%........................................538.....$......*..............................475....864.......289..........
..........-........................549............909..572.....-..............385.............97.....................=.....159..*...........
...174...............................*...576.875....*.....=...................................*....506..115...............*....856....408...
.....=.......685....58........177.965...-.....*....489......402/..&603.....................357......=..&....84.....451&.810........93...*...
.....................*...87.........................................................447........@............*................-......*...117.
......205.593........298..................................622....955.......34*325......*....965...................604......729....509.......
........=..*.......+...............966.......................$.$...................206......................99....-....424..............$...
378..........636..141.543%....34...........437-.................303.........80....*.............915...........*........*...885...........148
............*................=......................39......-.......208.560*...906...................320.860.975....532....*.........740....
....834...13...................426.395*962...44.......-......552...................*539.+........953.......%............647.........*.......
..............589...............*..........................................179...71.....207........#.577......758...247..........958........
....930.......*......&139...820.56.....%164....................536.=31......*.............................................89................
.....#.........569............*.............882....296......&................465.......21............=.....331........998*..................
..........847..............206....$............%.....#.464.318..=.....751*........................501..971...*..............227.......854...
.466......*......768..../.......110......................*.......612......551......868.......727.......*......39.850..-.....*.........*.....
.........377.561....&.718...94............246..........159...........255............%.........*...........445........472...520.......304.472
...............*..........................@.....292.............................476......&.........135......*...223.........................
..............288.....................944........*......775*934................+......152.............*55..806............239#..............
...181*552...............................*....238...............499...880.476...................................417.#66.........472.........
.....................*........%...629.853............*......@9...@......=.....443...673........271...*..........-...........98..............
.........567*288...10.257..837......*.........862..14................21......*...................%..714...........963.........%.450....528..
....................................862..................889.....604...*424..350...812..34........................*...646...................
...............*....*933.....355@..................*528....=......................+.....*...&996..493.....992..840.......*..271.............
..............984...............................678.................+571.....648......262............*......*..............*......293..197..
..........386..............463..984......129................-588..............*..361...............408..269.652...........406........*..+...
.........*............494....*.......847...*..#..942..825.............&......32.........................*........427...........-....339.....
.......415.=434..439.....*..23........$..34..410.........+.......746.976.............731..../.1*.........709.......*.........197........#...
................*......493.......760.............................................654*....398.........158....../......396.............922....
.....845.=....955...................*.....*574....954*........@...........$.......................-....*.....796......-...426...$732........
.......*.88.............@.........738..924............213...40....115......315...................299...108...................*.......320....
....567...............%..13.................*14...........$.......@.....%.........../...518.......................-.810...514..952..........
........892...275....485.......820.......367.......@.....544...........428.........54..-.............*....108..964...*..........*...........
.......@...................861......#.........893.116.........836.982......961.............../...615.188.....*.....914.........761....765...
...........169.962.........*......81...769...#...............................-..714.424..759.390...@.........855...........562.........*....
....../906......../......81..968.......-..............................185..............*.%............=......................*.205.....72...
................*............*....110........./.907....241.......708...*...383.701..869...............346..............649.771.#............
.............531.976...670...288...........382....*.......*116.........820.-...*............764..556...........@..984....$.......638...165..
........................-..........479.............55..........................515.....345...#................533...*.......................
.....$....569.936.301.........914..*.......-.....=................453..............209..*..........................551.-.......479..........
..233.....*......*.....506.........931..246....221.639....#..................@......*....784........591.................818...%.......523...
.......233....%.........................................416...714&........448.......698......387........432............................*....
...........718.......@......465....................430........................603.......491..*..........*...22.164...+...............179....
...............450.462.549.=....283.185...880......................652.......................142..430.372.....*.......633...................
.370....143....*.........*.........*......*.....962...........*.....*....................537........%...........&136........................
.....39.......956......213...........476.143.......*.......321.60....708..........966.......#...921......+146............+...665............
...........................941...321*.............880.499...........................*.............*.383........668.....212...*....827*428...
..236..527...................=..........................*........../..854......................489...-........................234...........
.....*.................................622..........289..599....207...*............&953.599=...............885............682.....914.....12
793...754.............$497..............*............*................163....................+.........15.....*..*....338*..................
...*.......864................348..........758.......439...................1........83....748...............325.535...................=.....
...368....*........382*250....*.....317.......*................473*....877.+.........*..................@................%....331..513......
.........55..239...........2...377...=......1.792...294*607........831..........*.950...&....-....#....864.....139.......512................
....427.......*...*...#....%...........765...............................418.995.........6..492.465...........@....................*218.....
......*......939.410.371......#...-......#.................&............*.............................496..........503..........629.........
.....410....................215.193.................678.786.....370...71..598......329..........262.................*.......473.............
.........979..855..432=................212.....346..*....................*........*............#...................249...=.....+...525.217..
.........*....*...............387.....*...........*.228......./....%....245..&.....690.....429............................685.........*.....
129....907.423........949.772......666....173..679........992.313...398......427..............*...................244.......................
.........................*.....*............................*........................../....998..........510..825*..........................
.....132....867........%.....42.780..............776*744...898.......664....196....360..823......899.211..=.................+...............
.....*.......%......703................916...%...............................*....*................*....&.....689..$......591.......64*238..
...684..160.......................445.....*...164.......602....249...........431.12.............=..758............138..........983..........
..........@..766.92..............*......334........671..*...............&646..................797.............950.........935.........469...
................*..................510..............*..285..........................................650.......*....807...*............#.....
..205.669...768...88........................+59..148............682........#.................3..............376...*.......191...............
.........&....*..%........................................183......*......61................/........657..........163............255........
..674.......46..............392..251....507.................*.248...74..........+...775.97.....222.........%..........135...950.....*.......
....*...........*967..533...*............*......949..245.276...#.........*.....728...................677..137.....*.....*..&........522.....
...367.......196.......$..239..........510.748..*............/...481..722....................800........*........735..268...................
.........442...................111...............752........567...*.........*..........696..%............790................................
.............182....677..613............................/..........814...372.86........*......915*..............799.................*....253
....&....739*........../....*206.........284...........584...427................727..485..........781.992.........-...............619.......
.....603.........................907........*....607......../.............................617............*...=.......986-.............918...
.........819..667..341...........*....#..397................................#........$..................822...20...........359.....43.......
.......&....*...#....*.......*....88.691.........................700.675....910...227........350...&591............301.......$.......*......
..404$..259.......557....876.218...........216.=211.7...=569........*........................=.................320..*....462...480....747...
..........................+.............#..*........*.................=518........................274............@...276........../.........
.......#...904......622..............923....543....969../..................571..778......#888.253..................+.....163.........-679...
295.207.........708......................................942...496....#...*.......*.373@.......*..645...............580.......177...........
................................982*317............304........*.......28.823....994.......370..96........@.=...*675............*.....604....
644.138.522......%......901.................374*..*.........458.....................#135....=..........730.355........955...=.47.277*.......
...*....*.........288..*.............+.433.........240.................317/........................609............#90.*...623...............
.....%..675....87.......110...126.408..*......355.............................@131......110....778...*..519.834.......537.....19........502.
..831............*460........*..........824.....*..751...467.829..........850..........*............365....*................................
..........398..............473....-..........751.....*......*................@.446*....780...........................732....................
.......................#.........333..................170........596...............943......66..186......@...........@.....=................
......124....780.....58.....933........926.../.............693...*..........*828...............*........666.............=..337..............
.......*.........197..........$.......*......67............-...335...........................122...582................197..........328......
.....151...............................763......180....@............890../....835...578..871..........*295..#....%...........-541.$.........
........................153.........-........@.....*...661..*833......*.775.....-...........................40....665...............701.....
..890....252......................544........809..425..............925......................................................................

@ -1,10 +0,0 @@
467..114..
...*......
..35..633.
......#...
617*......
.....+.58.
..592.....
......755.
...$.*....
.664.598..

@ -1,219 +0,0 @@
Card 1: 98 16 95 90 53 33 43 7 46 45 | 85 15 78 57 34 10 46 90 33 13 8 54 4 37 25 63 55 41 7 82 69 16 30 76 2
Card 2: 55 34 32 64 52 76 54 8 36 94 | 94 95 76 66 38 26 80 54 32 91 19 64 21 55 36 96 52 82 15 56 70 89 46 71 74
Card 3: 35 26 78 89 82 92 37 10 3 43 | 41 81 62 52 92 63 26 57 28 55 93 30 72 71 99 84 96 60 82 78 73 65 43 50 25
Card 4: 71 27 75 73 79 83 44 55 31 49 | 74 79 17 38 28 41 88 25 61 55 12 40 43 44 6 73 71 83 49 75 67 80 27 10 31
Card 5: 26 10 58 57 85 65 42 23 97 30 | 65 26 85 97 31 10 23 88 58 16 80 22 67 44 7 77 30 69 34 42 24 57 66 27 99
Card 6: 56 24 39 96 36 46 48 94 30 58 | 16 24 99 48 73 30 91 7 87 57 23 49 69 39 94 63 17 58 56 9 34 36 31 46 96
Card 7: 82 75 29 17 66 41 25 52 98 5 | 30 41 73 66 25 57 47 22 89 34 75 21 5 63 90 85 13 38 82 17 29 71 98 52 1
Card 8: 45 56 10 72 89 61 64 32 82 7 | 64 32 45 67 84 28 2 56 10 82 55 72 6 61 97 91 89 7 22 70 88 3 41 98 13
Card 9: 92 39 44 48 96 72 43 78 98 86 | 76 87 9 45 98 47 31 44 34 92 43 54 72 39 50 96 77 86 62 13 16 6 78 48 8
Card 10: 66 44 15 56 88 27 54 51 5 92 | 44 92 18 56 22 85 40 76 90 83 5 13 35 59 27 65 62 15 95 94 81 39 88 54 6
Card 11: 13 42 7 36 46 82 78 60 1 55 | 42 7 95 43 13 82 94 32 74 16 46 70 60 78 86 30 53 36 55 96 4 92 49 44 26
Card 12: 65 39 28 30 99 73 95 92 55 58 | 23 86 39 28 88 48 41 73 89 95 34 92 5 21 72 10 97 30 20 32 40 85 27 68 65
Card 13: 68 60 92 16 70 71 15 94 43 83 | 70 59 88 67 27 77 51 54 15 22 49 71 94 60 7 72 47 1 38 39 36 19 68 12 16
Card 14: 73 83 6 7 67 48 24 13 17 70 | 72 77 78 96 50 83 12 92 80 60 10 87 38 23 31 30 58 47 1 43 59 34 75 8 5
Card 15: 69 53 76 5 55 85 42 10 94 63 | 59 66 87 60 28 6 24 32 40 70 69 63 54 97 96 82 94 10 53 74 42 16 76 44 55
Card 16: 84 77 93 78 46 70 5 12 98 83 | 89 4 27 30 98 91 93 52 67 39 88 56 92 79 25 1 83 60 11 68 53 69 84 73 85
Card 17: 26 37 9 58 78 49 52 31 97 34 | 39 99 37 81 49 72 84 94 76 70 33 41 12 89 85 47 51 65 97 16 3 24 19 79 8
Card 18: 49 74 17 93 46 15 85 59 24 36 | 46 25 20 94 47 90 61 84 63 4 41 79 18 74 54 80 43 29 97 86 77 52 5 99 8
Card 19: 85 64 79 31 53 92 42 69 93 3 | 47 62 61 21 3 49 7 74 98 22 86 34 48 15 76 13 89 81 31 77 37 56 99 97 50
Card 20: 73 64 45 77 19 33 82 14 84 29 | 17 90 95 78 54 35 49 55 62 60 30 56 59 81 68 88 69 87 77 7 83 65 92 6 1
Card 21: 91 38 35 34 53 92 66 82 55 21 | 23 39 87 34 27 31 15 5 36 64 80 97 52 89 94 50 26 37 45 44 17 30 88 1 82
Card 22: 64 85 88 91 87 84 43 35 39 41 | 73 3 89 63 75 99 24 5 9 70 26 2 21 30 86 96 40 81 78 60 61 32 74 51 17
Card 23: 84 72 32 92 44 94 46 7 19 4 | 73 39 45 18 76 65 25 40 32 66 78 51 15 50 69 9 11 6 26 90 61 35 22 54 55
Card 24: 57 78 95 5 97 47 42 10 73 35 | 77 67 28 93 52 55 54 51 92 66 49 56 27 17 37 7 89 74 14 62 87 88 82 53 2
Card 25: 21 69 58 54 90 1 95 45 72 53 | 72 81 77 1 69 9 58 21 29 22 95 45 68 80 90 54 78 97 48 53 59 36 31 46 75
Card 26: 12 46 92 10 21 97 35 27 68 74 | 47 74 27 72 90 25 49 30 7 26 97 60 61 3 31 51 68 92 41 10 4 9 35 88 63
Card 27: 21 27 52 20 85 42 5 70 56 37 | 55 57 2 5 79 11 58 77 49 45 74 69 27 70 21 56 66 12 76 20 92 84 37 85 61
Card 28: 95 39 51 30 19 90 75 3 25 21 | 20 97 83 95 25 84 30 22 78 33 51 46 74 79 19 89 63 61 39 90 21 3 2 52 31
Card 29: 53 5 71 37 67 81 19 52 36 74 | 52 93 15 5 33 36 28 8 12 32 31 43 2 13 74 62 59 10 20 70 68 14 87 19 38
Card 30: 9 67 73 21 20 64 11 84 97 31 | 13 57 40 58 21 84 80 30 67 52 85 74 56 55 50 97 72 10 51 89 6 70 64 96 11
Card 31: 64 54 68 67 50 6 88 29 63 38 | 38 67 3 31 61 83 28 44 1 99 66 65 74 98 64 55 51 8 54 94 46 68 95 79 50
Card 32: 86 43 79 54 5 7 78 38 10 23 | 39 92 54 6 38 23 5 8 57 91 41 7 70 10 45 82 9 35 62 87 56 69 4 78 36
Card 33: 66 58 52 9 27 81 1 17 94 78 | 34 3 95 56 69 78 91 45 32 30 59 84 64 52 36 62 26 16 63 99 27 89 74 28 24
Card 34: 73 58 80 18 17 67 70 41 29 75 | 81 27 76 63 20 31 72 46 33 53 45 38 39 29 57 92 78 28 70 61 19 55 36 32 24
Card 35: 79 31 6 76 62 27 97 40 92 41 | 26 97 5 47 76 40 21 87 3 4 38 61 53 48 43 36 41 65 55 25 57 96 79 18 49
Card 36: 34 43 78 88 72 74 97 3 10 38 | 55 62 96 44 79 33 68 52 75 22 98 26 71 82 36 56 86 15 64 41 46 24 83 11 67
Card 37: 26 61 31 17 4 56 12 50 86 51 | 17 68 22 61 85 78 9 51 14 6 39 31 28 27 96 50 52 4 86 43 12 26 59 74 7
Card 38: 7 99 77 74 6 43 85 33 53 19 | 94 45 19 36 6 55 66 82 16 47 65 42 78 12 76 77 48 79 8 75 93 62 56 50 33
Card 39: 57 97 81 84 25 60 16 44 1 78 | 4 78 9 51 90 40 34 64 89 38 80 16 71 35 88 87 41 6 65 23 39 15 67 52 72
Card 40: 81 44 16 11 53 72 46 91 86 20 | 17 47 80 40 1 69 93 55 54 12 26 82 64 45 61 58 70 83 28 98 94 89 92 59 23
Card 41: 55 89 25 91 42 45 80 59 84 82 | 83 31 11 42 61 48 77 95 89 84 13 79 92 25 68 33 26 40 52 24 66 45 97 29 17
Card 42: 2 96 32 73 8 34 66 9 6 41 | 55 90 96 29 45 14 9 6 75 30 60 47 51 37 81 3 72 58 73 87 70 18 23 69 80
Card 43: 65 3 18 82 67 22 62 79 17 94 | 51 11 26 23 89 55 13 32 77 9 12 38 60 20 25 64 14 43 24 35 56 80 42 99 86
Card 44: 30 47 49 35 19 82 26 85 27 95 | 43 97 86 69 42 94 78 11 27 31 17 39 79 46 90 18 57 48 4 22 32 87 38 29 84
Card 45: 83 15 74 94 99 1 57 82 68 16 | 95 97 84 6 87 81 20 64 69 5 28 30 29 88 43 15 98 7 24 55 34 39 47 92 3
Card 46: 73 22 25 83 84 55 53 34 51 2 | 27 90 24 61 29 43 50 17 18 68 15 80 8 81 87 16 10 85 54 31 56 91 46 52 95
Card 47: 70 19 17 60 46 78 75 86 27 59 | 86 99 19 45 8 17 29 41 52 75 60 47 79 54 57 70 46 59 51 68 94 78 27 53 1
Card 48: 45 6 22 51 11 30 31 1 83 77 | 2 73 85 49 61 86 77 90 59 97 47 89 10 22 45 41 31 6 83 11 1 65 58 82 60
Card 49: 60 78 33 6 11 36 72 56 61 94 | 43 16 62 46 31 61 78 56 60 67 33 6 13 72 94 68 18 77 11 5 36 54 10 8 66
Card 50: 88 21 74 31 20 46 75 10 89 77 | 23 88 43 10 74 64 5 77 55 76 28 78 21 31 27 89 1 72 20 96 75 82 46 47 35
Card 51: 12 8 3 94 21 26 24 86 45 85 | 6 14 12 10 7 69 78 31 64 5 44 3 80 4 52 71 20 84 50 59 13 8 94 77 99
Card 52: 14 84 36 27 8 46 99 30 7 44 | 30 16 89 87 60 9 14 78 99 8 65 58 38 88 7 46 67 29 69 37 40 44 97 36 51
Card 53: 39 37 12 83 4 98 96 92 41 73 | 67 20 91 99 4 10 63 26 6 75 40 92 37 65 39 73 68 84 12 83 96 98 54 41 7
Card 54: 1 27 72 18 88 99 64 19 86 37 | 88 19 37 64 5 22 80 99 1 27 65 8 9 53 14 16 79 95 71 72 32 21 86 39 98
Card 55: 39 88 93 55 97 9 34 92 45 2 | 92 55 21 1 78 34 97 94 11 38 2 44 64 15 80 35 60 9 81 54 88 91 96 85 45
Card 56: 79 74 85 84 65 87 27 44 16 90 | 98 79 48 77 52 82 58 18 57 72 16 84 3 85 90 74 64 87 44 14 27 71 75 4 21
Card 57: 96 53 75 92 9 43 56 52 91 97 | 7 76 56 3 92 75 16 43 96 72 29 49 66 91 28 70 87 33 58 1 52 19 9 97 53
Card 58: 44 25 31 71 95 73 10 54 53 17 | 37 99 57 16 80 73 24 47 17 83 68 31 13 52 93 71 76 95 12 81 14 21 49 7 34
Card 59: 29 45 26 80 95 57 20 13 14 63 | 83 51 36 19 5 58 44 3 97 1 16 67 15 41 53 31 28 91 84 40 90 24 88 60 18
Card 60: 50 63 56 53 14 35 18 1 91 19 | 25 96 66 45 36 58 90 91 1 32 35 14 3 47 33 22 86 40 95 24 23 4 27 68 48
Card 61: 42 83 31 68 92 7 26 4 29 22 | 7 17 31 43 79 2 33 4 63 88 26 61 81 93 69 85 89 11 65 77 42 92 37 57 32
Card 62: 64 85 65 55 43 53 10 69 33 97 | 78 61 31 76 18 30 39 12 90 42 8 58 27 67 89 46 26 69 82 11 16 62 1 44 10
Card 63: 6 33 83 73 17 30 32 81 49 5 | 52 90 76 93 5 86 73 34 92 47 67 55 43 61 26 18 1 33 16 50 49 74 24 46 89
Card 64: 87 91 82 58 84 50 48 3 27 55 | 60 96 72 26 81 1 6 52 78 99 4 23 40 30 36 47 48 69 25 34 83 87 37 70 20
Card 65: 92 76 38 30 50 39 75 90 44 1 | 68 71 39 13 53 25 63 76 16 59 41 43 18 22 17 98 4 10 86 89 12 26 72 95 19
Card 66: 76 41 77 37 23 94 96 27 66 22 | 59 24 20 92 4 37 91 33 16 53 3 90 5 69 50 27 99 62 98 61 35 28 86 95 82
Card 67: 37 98 85 97 69 64 72 47 13 50 | 43 10 6 41 67 80 82 29 40 94 61 33 36 63 65 76 24 9 86 57 79 73 8 45 2
Card 68: 55 35 94 69 38 26 63 33 98 76 | 7 41 71 84 21 25 12 20 98 46 82 72 38 8 56 89 39 27 75 43 96 44 29 78 35
Card 69: 24 86 74 36 66 84 90 61 1 94 | 55 57 18 85 69 97 16 34 32 54 93 35 64 9 8 4 98 5 72 59 75 23 62 91 26
Card 70: 56 52 41 51 88 93 17 44 32 7 | 46 57 16 69 10 50 26 5 36 92 24 55 63 98 11 3 75 31 33 99 74 1 89 60 61
Card 71: 15 41 67 78 51 72 12 77 32 88 | 83 93 91 13 50 87 47 96 16 19 11 34 6 27 82 5 46 56 69 79 62 85 35 40 61
Card 72: 2 58 18 85 23 66 40 9 50 79 | 41 2 50 8 10 75 7 61 62 87 11 99 33 30 56 25 98 54 59 82 94 74 35 60 15
Card 73: 75 90 45 31 56 86 11 42 89 26 | 89 90 28 11 57 49 24 35 14 19 72 94 79 44 30 3 43 41 53 46 26 86 97 51 20
Card 74: 27 24 43 10 84 39 96 22 25 78 | 39 33 42 11 63 50 91 43 35 4 80 84 32 26 70 48 18 6 29 23 78 24 89 45 8
Card 75: 79 38 25 51 77 84 68 43 83 10 | 75 74 13 3 24 6 55 81 11 39 49 66 99 50 48 15 14 37 61 57 17 59 87 36 9
Card 76: 24 9 81 35 34 1 59 80 56 58 | 9 56 36 60 1 58 80 59 72 34 12 24 35 81 17 68 77 62 67 97 69 78 41 90 93
Card 77: 84 55 45 44 36 80 97 5 64 70 | 57 22 49 54 43 71 53 90 12 35 6 64 79 84 99 7 94 17 38 70 45 72 68 80 74
Card 78: 24 49 27 96 77 18 82 33 50 19 | 60 6 67 19 9 82 98 11 15 50 49 62 14 18 22 33 27 77 96 3 2 4 24 57 37
Card 79: 83 54 1 2 26 55 33 37 76 20 | 30 55 1 51 50 7 26 34 76 62 89 92 17 38 33 20 13 95 2 65 45 54 37 6 25
Card 80: 72 60 47 97 98 37 24 71 92 38 | 76 60 68 93 24 82 22 45 19 97 53 61 98 88 49 77 70 92 8 40 15 38 52 75 74
Card 81: 78 90 38 77 11 47 1 80 64 30 | 90 2 67 95 70 75 83 19 11 18 86 38 30 93 62 1 77 7 65 41 84 64 78 47 4
Card 82: 65 17 18 85 47 25 89 84 28 1 | 92 40 96 66 5 25 61 48 73 71 13 35 70 18 19 84 43 12 87 57 37 1 30 65 51
Card 83: 99 71 23 76 61 19 58 57 78 15 | 96 19 98 71 34 38 95 93 48 79 53 42 15 61 56 29 23 99 39 60 78 40 49 12 57
Card 84: 65 13 8 63 12 61 45 34 38 75 | 13 89 79 18 83 24 56 34 8 23 15 19 71 12 26 45 86 72 76 25 17 42 46 35 88
Card 85: 29 85 81 70 92 51 67 83 48 13 | 28 53 4 11 55 61 27 9 36 82 47 98 65 43 33 74 88 64 2 3 37 22 62 6 84
Card 86: 92 75 84 17 33 18 46 81 77 2 | 36 53 13 25 6 28 54 42 70 34 61 31 86 68 67 4 48 73 41 62 60 57 38 65 1
Card 87: 29 68 34 54 22 33 6 28 1 47 | 4 79 62 77 82 78 75 70 93 58 38 56 97 13 80 2 45 76 31 90 15 37 81 63 95
Card 88: 49 30 56 59 7 20 38 28 90 68 | 61 39 32 22 51 81 41 60 14 77 7 19 89 47 43 38 23 65 36 35 80 4 78 62 26
Card 89: 17 70 26 62 84 57 67 31 15 87 | 59 74 32 72 7 97 23 5 99 77 50 22 17 76 73 30 10 20 44 70 55 38 75 29 24
Card 90: 33 56 47 17 6 51 71 42 1 83 | 82 6 52 50 45 49 66 16 60 97 85 62 90 64 58 7 41 43 83 25 3 48 69 80 32
Card 91: 69 37 35 55 42 57 78 80 60 43 | 16 91 92 10 32 68 84 64 60 79 2 9 21 58 77 93 53 11 52 83 50 4 86 89 22
Card 92: 94 76 95 35 25 21 36 75 99 55 | 58 54 41 85 27 42 69 30 89 53 68 52 33 56 3 39 26 73 97 47 10 38 17 64 62
Card 93: 30 38 15 75 10 78 45 57 51 96 | 51 57 46 78 6 55 96 35 38 15 45 63 28 41 26 10 18 64 24 93 75 62 32 92 30
Card 94: 2 3 80 42 55 29 95 49 67 96 | 3 66 49 92 13 51 42 67 28 37 95 99 71 5 17 29 30 2 98 32 12 96 8 55 80
Card 95: 54 8 7 36 81 32 62 66 92 6 | 77 92 8 54 53 34 88 62 84 48 6 35 68 32 66 23 95 81 7 18 17 36 3 60 75
Card 96: 10 94 86 82 85 62 89 45 15 8 | 5 94 30 69 82 12 10 42 92 39 52 46 85 89 84 55 78 62 8 24 45 77 15 58 59
Card 97: 21 92 18 5 25 95 55 67 52 78 | 11 68 32 41 67 66 80 82 72 15 49 25 97 12 18 38 37 76 92 34 74 53 55 36 78
Card 98: 87 23 17 15 72 86 91 70 19 21 | 64 17 13 45 87 10 86 59 73 19 27 94 91 70 23 50 39 46 51 48 21 72 54 15 90
Card 99: 10 14 71 83 92 54 52 64 27 15 | 58 89 63 24 57 55 1 95 53 43 84 54 65 61 26 87 96 71 3 9 82 77 91 62 92
Card 100: 14 88 31 96 27 22 75 21 33 94 | 66 87 76 81 51 57 36 64 96 90 5 39 37 97 8 65 77 35 85 49 84 94 14 86 52
Card 101: 32 70 58 16 57 5 34 79 12 74 | 37 29 87 68 84 16 54 27 24 65 48 62 60 85 86 55 19 61 35 9 17 69 32 99 75
Card 102: 49 94 51 52 5 98 86 59 67 29 | 34 48 59 87 92 28 81 44 58 47 97 11 75 99 69 85 66 60 80 76 64 56 72 23 90
Card 103: 22 96 38 63 73 62 57 18 93 19 | 97 87 5 68 47 88 78 70 77 62 17 94 81 19 28 36 79 72 64 53 29 3 20 89 60
Card 104: 14 18 46 49 60 90 9 22 17 44 | 26 94 56 99 21 55 47 86 27 51 28 96 64 70 87 45 62 81 63 30 35 20 50 48 76
Card 105: 40 5 36 22 90 29 58 54 53 64 | 64 47 95 43 16 60 22 1 9 71 94 27 18 59 32 20 52 92 12 90 55 83 19 61 89
Card 106: 59 48 97 50 67 99 89 39 90 95 | 3 40 56 68 6 16 41 38 62 54 97 10 14 44 30 86 37 84 48 65 52 36 53 63 5
Card 107: 55 34 89 15 93 2 31 43 87 17 | 88 70 83 32 98 53 86 68 50 37 27 56 51 10 45 36 20 94 59 80 66 44 73 99 8
Card 108: 53 26 99 90 39 25 66 80 82 37 | 34 46 28 60 89 96 15 84 7 88 95 31 22 94 61 78 93 62 81 87 44 5 20 72 2
Card 109: 50 31 91 6 92 72 90 18 71 37 | 18 86 37 50 68 71 35 95 16 85 93 55 96 80 52 6 77 4 92 20 91 56 90 31 72
Card 110: 66 18 11 94 16 58 54 63 47 82 | 81 42 24 47 16 54 59 38 67 66 35 49 96 10 64 63 11 94 58 78 65 82 44 74 18
Card 111: 98 21 14 86 68 94 60 31 24 38 | 84 98 22 11 71 9 83 14 89 94 85 42 63 30 16 86 2 23 3 31 61 18 68 54 4
Card 112: 71 62 11 73 54 74 12 82 69 31 | 78 1 5 72 92 74 18 11 71 10 93 83 81 21 31 62 61 82 54 8 68 73 69 9 12
Card 113: 42 62 85 51 61 40 76 8 78 12 | 85 78 2 42 71 28 25 75 69 40 88 24 98 84 92 51 10 21 27 12 62 8 56 41 76
Card 114: 55 11 43 33 97 83 30 37 52 6 | 94 71 81 20 4 43 97 30 33 56 69 99 13 8 32 37 96 58 55 26 29 31 83 80 67
Card 115: 4 40 9 71 18 59 19 84 91 72 | 62 43 73 87 42 61 7 99 45 70 97 18 6 77 8 93 81 55 41 38 12 64 1 82 51
Card 116: 60 21 16 17 29 83 46 20 64 18 | 83 21 18 41 43 73 53 29 35 17 4 46 1 57 81 20 70 97 5 16 64 30 84 38 60
Card 117: 51 54 92 49 29 82 43 58 19 50 | 7 50 71 4 82 22 23 56 31 27 58 26 19 29 49 11 69 52 92 54 24 43 51 93 73
Card 118: 91 4 57 51 13 18 8 34 24 3 | 18 4 65 97 17 47 99 41 57 91 94 8 34 40 48 68 37 3 2 13 53 60 44 24 90
Card 119: 81 80 42 19 62 23 86 5 20 45 | 96 27 94 86 39 67 20 93 81 66 14 23 45 98 84 37 85 19 62 80 5 61 82 12 59
Card 120: 17 47 14 32 51 92 87 37 68 93 | 97 54 31 39 69 99 41 2 26 75 86 13 25 55 81 44 77 4 72 74 80 95 40 76 63
Card 121: 75 68 67 87 7 16 71 12 8 19 | 8 42 99 66 70 64 5 73 67 15 40 72 34 28 18 61 30 83 49 17 87 93 25 24 43
Card 122: 72 8 67 23 21 77 66 28 19 82 | 47 59 90 55 75 36 52 17 70 28 91 15 11 66 80 82 34 25 44 83 53 67 63 23 87
Card 123: 48 80 92 9 12 61 29 32 41 55 | 53 28 21 64 24 56 89 9 80 29 85 67 46 15 52 90 11 62 74 69 47 32 75 60 31
Card 124: 83 79 14 51 85 13 91 98 66 2 | 53 48 34 70 46 44 18 54 50 67 73 8 61 81 40 29 17 65 86 30 76 59 47 16 74
Card 125: 1 11 69 75 62 45 35 53 34 23 | 97 12 16 45 31 21 87 95 22 7 25 62 64 6 11 10 29 91 9 24 53 74 75 40 41
Card 126: 85 31 48 37 11 26 44 69 61 82 | 46 34 11 87 68 86 39 73 90 23 98 32 71 28 22 29 20 49 77 63 70 76 6 52 3
Card 127: 11 15 54 44 46 82 78 74 26 23 | 29 11 18 99 20 17 67 55 83 65 22 27 10 3 62 89 69 1 45 91 84 61 90 92 44
Card 128: 80 55 19 83 49 18 72 37 68 21 | 64 53 67 47 65 41 34 15 89 10 32 51 91 61 58 69 23 56 87 57 79 84 78 5 4
Card 129: 30 46 40 21 99 2 51 95 74 97 | 62 67 68 44 86 93 47 5 39 12 49 88 9 36 89 3 38 65 79 42 20 45 14 70 91
Card 130: 54 65 73 3 21 93 68 43 10 20 | 51 66 6 4 76 27 48 87 86 81 47 92 82 28 91 18 62 8 96 59 88 37 25 46 49
Card 131: 71 43 15 32 16 50 28 80 1 81 | 76 64 21 55 12 6 96 20 77 22 26 32 54 8 62 68 17 86 56 53 10 81 33 41 24
Card 132: 55 64 61 49 79 90 8 34 85 97 | 50 6 40 30 91 48 41 57 22 8 62 70 84 38 98 76 83 94 82 68 2 42 32 47 14
Card 133: 48 60 44 27 13 41 99 35 78 74 | 88 25 8 19 69 34 79 83 46 72 52 6 16 97 62 15 70 4 56 30 3 7 36 23 73
Card 134: 40 72 54 4 18 20 3 39 46 91 | 3 18 91 69 66 29 60 33 39 96 84 9 20 24 41 16 53 46 49 72 95 81 4 40 54
Card 135: 82 66 29 16 86 89 15 23 95 11 | 14 43 57 68 80 11 89 92 59 67 86 39 8 18 16 23 83 64 82 66 95 29 15 37 6
Card 136: 30 36 52 77 67 75 76 1 11 79 | 36 85 67 16 76 52 69 47 14 22 20 26 11 30 18 13 75 87 79 93 39 89 1 99 77
Card 137: 54 79 25 62 93 65 7 68 90 11 | 94 73 86 78 64 71 25 82 20 30 97 28 9 65 90 35 70 87 32 31 49 51 74 26 72
Card 138: 6 76 2 87 89 20 95 23 42 21 | 95 32 59 60 46 84 79 81 80 17 86 18 36 98 52 3 83 68 88 38 67 72 51 22 26
Card 139: 61 81 70 50 3 47 88 54 60 90 | 26 63 75 70 81 13 90 8 60 46 56 61 14 68 88 82 47 36 50 18 73 54 98 3 76
Card 140: 58 71 64 80 27 99 29 94 30 40 | 58 53 31 76 65 23 29 54 45 22 94 30 99 70 27 80 5 81 3 71 37 7 14 64 40
Card 141: 12 73 17 11 89 3 80 72 92 63 | 23 78 2 80 35 96 41 72 30 39 48 10 51 87 12 34 92 73 6 45 89 76 27 11 60
Card 142: 82 22 6 68 97 86 15 56 84 7 | 52 40 91 39 92 32 84 26 78 24 37 38 74 90 86 50 64 77 3 95 94 2 87 75 34
Card 143: 28 59 68 11 93 48 63 96 39 54 | 98 15 56 11 45 78 54 93 44 66 33 59 90 74 63 97 39 30 96 5 48 26 76 42 28
Card 144: 92 18 45 37 69 99 26 43 81 91 | 26 91 64 55 18 57 11 95 9 37 45 38 92 31 3 34 69 87 24 97 98 99 81 14 10
Card 145: 11 69 35 21 10 49 84 75 50 68 | 16 67 48 15 43 54 95 11 91 27 39 9 34 88 86 20 4 89 47 75 62 61 64 85 8
Card 146: 27 44 15 92 93 56 76 72 34 81 | 86 43 66 95 33 76 27 60 32 25 37 29 1 53 72 61 85 36 93 62 97 58 96 56 47
Card 147: 54 67 15 21 28 99 33 63 96 82 | 76 54 91 95 8 73 30 28 65 82 67 98 43 81 39 33 44 53 49 16 21 88 12 45 15
Card 148: 80 74 55 33 70 92 63 21 79 23 | 86 84 40 53 20 49 97 5 66 95 93 96 46 18 24 28 51 9 52 67 89 14 30 8 11
Card 149: 65 14 55 81 1 73 41 44 47 87 | 71 87 90 34 25 36 82 59 88 85 4 27 63 98 30 13 17 44 93 14 32 55 68 41 29
Card 150: 51 34 46 92 85 57 59 62 42 40 | 22 93 39 44 83 37 4 48 33 7 41 95 70 26 30 56 78 65 6 67 81 14 58 87 27
Card 151: 89 79 66 24 39 35 9 32 76 30 | 69 80 83 86 22 4 15 92 87 11 64 40 94 77 82 29 57 36 54 95 43 78 65 74 84
Card 152: 63 26 47 96 13 14 8 7 32 51 | 40 65 90 80 33 9 99 67 42 1 29 83 2 93 23 45 53 94 79 39 18 35 72 91 3
Card 153: 76 45 64 13 85 42 5 47 2 40 | 34 46 19 21 35 77 71 56 94 27 37 8 60 90 96 63 57 55 32 95 68 10 73 4 51
Card 154: 96 31 79 16 50 15 92 67 91 47 | 27 44 86 41 18 63 28 21 38 12 68 48 39 66 58 99 52 53 80 64 24 7 93 95 55
Card 155: 84 46 62 78 15 29 87 73 27 67 | 50 25 75 90 66 34 72 31 33 24 8 41 29 69 20 54 32 85 65 68 21 94 64 9 42
Card 156: 57 55 36 90 19 73 42 5 17 21 | 60 26 47 37 51 86 9 65 69 92 88 44 53 42 54 15 63 17 91 72 83 89 8 4 81
Card 157: 32 39 2 75 90 5 85 50 22 80 | 19 29 5 85 20 90 87 61 75 78 47 95 34 63 57 2 33 82 24 56 80 49 70 72 21
Card 158: 36 76 91 66 19 88 59 24 11 87 | 48 72 97 45 75 29 70 9 31 96 3 16 36 24 90 67 76 82 42 18 80 81 40 5 46
Card 159: 97 33 68 61 50 87 77 92 36 38 | 6 58 78 65 36 42 80 98 12 47 7 54 67 60 5 9 1 17 90 32 62 39 11 64 26
Card 160: 83 97 81 82 90 68 54 57 24 96 | 26 90 51 86 47 93 43 32 14 46 54 50 79 37 28 3 21 24 96 33 83 31 82 29 72
Card 161: 40 64 36 35 17 82 15 52 20 79 | 36 32 57 52 60 46 17 16 20 79 75 35 58 65 44 63 47 49 82 48 76 64 40 15 4
Card 162: 82 68 31 74 28 39 94 34 61 80 | 74 25 38 3 66 32 1 19 28 39 31 94 67 78 99 7 68 80 18 42 61 72 82 49 34
Card 163: 73 89 42 20 85 80 45 71 75 32 | 14 39 54 81 69 47 79 46 20 2 43 88 92 31 45 32 80 55 30 85 27 40 63 73 75
Card 164: 75 44 66 52 15 32 53 99 19 48 | 27 26 44 55 48 96 32 29 2 53 52 15 51 83 79 22 41 66 50 28 91 99 61 75 19
Card 165: 63 15 31 95 9 83 77 42 80 68 | 31 13 48 93 78 69 82 44 57 28 11 84 86 20 40 76 99 30 47 1 88 6 49 51 21
Card 166: 93 15 3 43 88 77 24 36 70 74 | 58 36 21 77 15 37 28 22 46 41 88 7 23 47 9 63 3 93 91 70 74 43 26 24 76
Card 167: 59 10 26 33 69 4 47 21 78 54 | 78 21 85 44 52 5 80 64 42 30 11 59 22 10 33 69 47 23 86 50 20 4 54 26 96
Card 168: 93 33 56 73 7 32 66 75 35 18 | 54 83 8 29 81 19 51 77 36 26 86 56 76 90 85 46 18 96 79 3 13 57 40 53 59
Card 169: 4 25 15 63 18 35 64 88 43 29 | 15 1 7 21 84 67 36 33 37 17 65 25 30 18 51 83 63 99 98 66 92 73 39 52 22
Card 170: 70 44 78 92 43 99 58 36 45 52 | 21 53 74 78 83 95 20 27 69 8 18 15 7 51 2 13 46 57 9 50 17 33 48 6 10
Card 171: 14 18 42 99 88 89 76 5 60 67 | 11 43 99 89 85 84 53 41 23 60 13 59 18 9 95 88 8 2 25 77 76 54 28 79 14
Card 172: 14 36 61 7 96 68 48 3 25 26 | 90 21 7 78 3 44 33 34 62 61 31 10 8 37 12 94 11 20 60 91 41 28 9 80 48
Card 173: 23 13 66 64 57 61 62 12 85 55 | 78 58 36 84 66 19 95 60 31 98 50 75 83 64 96 16 14 47 72 74 86 61 6 65 63
Card 174: 87 17 65 38 93 64 23 35 44 30 | 18 74 73 34 58 46 54 97 85 42 67 53 92 21 90 70 12 32 82 61 57 37 3 94 29
Card 175: 16 40 45 76 34 43 82 29 15 65 | 74 15 25 5 16 93 18 84 33 17 37 34 44 72 59 47 43 95 54 39 75 48 69 7 61
Card 176: 97 38 94 13 74 37 95 17 73 40 | 93 44 64 39 15 46 30 16 35 50 85 71 49 99 36 34 98 47 43 83 76 2 78 52 29
Card 177: 47 35 15 69 3 28 31 36 99 19 | 29 53 70 11 37 22 50 92 76 80 71 30 58 63 20 32 83 68 34 17 81 14 13 62 59
Card 178: 20 89 11 12 41 26 49 82 27 56 | 73 40 86 43 75 59 46 81 78 67 44 68 93 98 22 51 92 66 14 5 13 31 7 83 3
Card 179: 77 72 54 47 44 12 74 80 19 35 | 87 85 17 34 73 31 25 23 39 79 75 82 15 41 68 58 57 1 61 36 50 65 2 96 94
Card 180: 20 15 32 52 24 80 25 23 41 92 | 52 61 67 28 29 80 16 25 97 2 86 53 9 33 57 56 1 23 41 20 32 12 24 92 15
Card 181: 89 45 15 68 1 54 27 12 78 11 | 54 28 17 56 98 27 3 89 15 45 87 24 12 11 20 53 1 9 78 68 57 90 36 43 22
Card 182: 89 91 25 36 50 81 32 75 52 15 | 85 90 76 96 93 36 67 99 75 32 91 29 50 18 66 89 11 40 39 52 35 81 15 25 16
Card 183: 21 74 42 66 75 99 89 50 24 6 | 88 54 64 29 80 35 69 36 91 25 40 53 8 39 92 58 26 44 60 49 27 46 93 71 77
Card 184: 40 12 28 35 29 77 91 83 27 38 | 99 58 90 49 85 26 33 64 15 30 40 97 61 41 52 5 22 2 56 17 74 62 84 51 89
Card 185: 86 29 49 67 58 15 2 25 92 94 | 15 36 18 71 39 49 48 58 86 88 68 67 27 92 47 91 37 90 2 25 41 23 31 29 94
Card 186: 28 63 5 29 4 25 53 61 81 34 | 52 98 45 33 79 27 51 37 29 38 2 81 25 95 85 77 13 78 63 82 97 71 62 8 50
Card 187: 24 38 16 63 49 28 86 39 21 2 | 64 24 95 98 80 54 96 19 46 18 82 66 41 28 49 72 90 17 44 71 81 13 25 50 15
Card 188: 40 88 91 96 21 65 46 38 10 89 | 80 40 89 68 54 96 71 79 70 11 97 93 91 69 65 75 32 38 46 61 67 12 78 88 36
Card 189: 64 99 58 43 42 51 5 57 86 6 | 77 35 64 88 72 10 58 21 23 6 80 41 55 24 48 11 98 59 52 30 53 57 71 26 49
Card 190: 44 59 64 10 49 33 4 35 45 5 | 8 5 49 67 26 12 78 48 60 44 51 20 47 99 93 30 9 10 69 72 6 33 37 35 77
Card 191: 65 48 31 5 19 90 85 40 36 38 | 66 46 92 53 6 56 23 34 12 75 28 44 47 42 76 39 86 49 33 35 70 32 37 18 8
Card 192: 12 40 48 60 14 23 21 78 6 42 | 90 61 57 85 66 83 43 82 7 67 55 93 17 60 15 20 70 81 89 80 62 18 53 44 3
Card 193: 19 63 70 77 73 13 33 83 72 49 | 48 71 18 49 99 47 91 83 16 26 51 31 3 12 5 73 88 1 95 10 54 90 8 22 70
Card 194: 48 51 17 59 61 25 13 70 33 12 | 4 68 37 80 3 61 42 85 57 51 87 65 12 35 21 15 5 19 17 2 58 70 59 73 6
Card 195: 97 8 45 27 2 14 94 92 37 51 | 30 80 59 35 23 66 24 62 20 54 99 73 82 51 93 60 28 46 95 89 40 61 38 39 14
Card 196: 67 90 56 86 73 96 40 91 75 25 | 32 71 34 25 85 72 65 51 7 59 83 94 52 49 58 21 53 42 93 63 46 45 24 64 47
Card 197: 34 60 30 42 2 58 50 6 8 65 | 79 92 57 76 20 78 86 47 58 99 65 80 84 16 5 30 36 77 46 73 29 26 96 45 98
Card 198: 27 14 25 8 32 93 59 94 89 98 | 46 82 57 37 45 41 33 18 73 55 38 21 13 40 96 87 23 83 49 10 74 2 61 99 56
Card 199: 3 36 72 71 13 85 45 35 79 93 | 75 7 51 59 81 15 18 57 77 8 1 70 42 34 63 49 69 67 89 99 94 2 39 46 86
Card 200: 72 10 70 76 33 82 25 19 46 6 | 23 83 41 5 84 78 32 74 47 16 89 7 54 48 14 40 50 31 24 79 97 96 49 53 55
Card 201: 69 33 86 4 98 77 3 51 63 84 | 63 32 59 3 51 90 98 86 42 88 33 84 12 4 41 60 78 17 25 66 18 54 69 77 26
Card 202: 32 71 80 75 17 47 90 33 59 60 | 19 90 51 82 2 30 29 5 86 56 11 75 33 39 59 12 3 71 60 6 80 47 32 46 22
Card 203: 2 6 88 74 73 49 98 3 63 29 | 4 60 48 69 5 19 49 96 73 78 89 99 29 74 25 71 47 44 35 32 43 31 27 23 90
Card 204: 82 96 98 15 30 50 63 95 6 14 | 25 11 15 81 27 95 1 68 40 4 6 30 59 64 66 97 31 98 74 54 77 71 60 76 72
Card 205: 24 97 90 42 15 62 21 23 36 31 | 29 30 66 10 23 62 31 69 26 75 20 34 90 27 32 41 24 14 36 59 42 93 21 91 17
Card 206: 92 8 83 85 47 74 42 35 87 16 | 92 89 13 42 35 23 60 36 45 21 8 80 87 85 83 16 14 49 47 76 91 72 15 54 74
Card 207: 26 3 38 10 20 46 27 81 66 91 | 94 48 81 46 77 35 91 37 3 99 63 43 60 44 16 38 20 82 66 15 88 12 56 45 13
Card 208: 65 15 67 49 89 94 72 98 17 55 | 90 63 93 55 18 72 41 58 73 19 89 96 59 82 15 20 52 57 81 3 74 25 98 67 94
Card 209: 41 69 22 59 45 53 52 21 78 34 | 87 63 96 61 18 37 9 50 90 39 7 23 59 99 81 12 38 30 42 31 94 51 52 86 78
Card 210: 8 66 74 64 11 68 5 57 18 36 | 89 83 19 75 41 33 20 67 99 43 87 7 81 55 69 97 31 12 50 27 35 58 80 39 44
Card 211: 2 63 10 57 71 65 40 54 9 42 | 37 81 54 35 65 67 83 10 24 61 41 52 42 53 71 56 63 58 62 11 9 80 84 99 68
Card 212: 23 39 30 14 28 79 46 55 52 50 | 15 73 78 25 61 46 27 93 51 88 5 99 87 20 32 66 26 58 77 42 94 47 7 76 91
Card 213: 81 3 71 56 91 87 93 37 47 49 | 56 71 41 85 81 42 20 38 79 39 90 7 55 40 49 60 37 78 61 1 65 35 28 34 66
Card 214: 22 23 90 10 52 37 71 72 60 32 | 87 9 94 19 34 89 57 53 1 48 44 33 4 32 49 51 98 2 41 66 27 54 23 17 64
Card 215: 75 39 31 5 71 87 92 72 8 50 | 32 56 34 50 86 64 4 85 49 81 26 74 42 47 70 17 67 95 2 7 99 77 83 91 73
Card 216: 61 77 58 37 12 20 25 68 18 22 | 76 70 65 17 9 98 61 33 7 30 66 95 44 27 72 46 32 14 40 81 49 87 56 4 11
Card 217: 30 73 66 90 65 71 84 1 10 27 | 4 52 56 49 17 39 53 3 69 88 8 55 68 43 41 59 99 44 81 47 91 5 50 45 97
Card 218: 27 40 32 35 55 13 98 94 16 12 | 63 96 50 19 36 65 71 48 49 51 78 46 75 88 24 16 70 84 53 1 30 3 34 9 29
Card 219: 74 89 55 5 24 77 64 83 84 94 | 32 19 93 92 82 69 12 38 3 60 39 95 11 71 88 99 98 51 20 40 9 17 18 57 16

@ -1,6 +0,0 @@
Card 1: 41 48 83 86 17 | 83 86 6 31 17 9 48 53
Card 2: 13 32 20 16 61 | 61 30 68 82 17 32 24 19
Card 3: 1 21 53 59 44 | 69 82 63 72 16 21 14 1
Card 4: 41 92 73 84 69 | 59 84 76 51 58 5 54 83
Card 5: 87 83 26 28 32 | 88 30 70 12 93 22 82 36
Card 6: 31 18 13 56 72 | 74 77 10 23 35 67 36 11

@ -1,244 +0,0 @@
seeds: 1482445116 339187393 3210489476 511905836 42566461 51849137 256584102 379575844 3040181568 139966026 4018529087 116808249 2887351536 89515778 669731009 806888490 2369242654 489923931 2086168596 82891253
seed-to-soil map:
3356468240 2934525445 29117552
4275689831 4042213712 19277465
949730239 1589971986 381295142
2205130246 3387543719 106537240
2442849314 2188173171 261901063
2027919967 875104547 177210279
4258838211 4278115676 16851620
1969509044 3125327238 8268732
3602491835 652291761 28146990
3630638825 3122528592 2798646
1725486280 3012647256 109881336
3232765106 192460045 36910273
4042213712 4061491177 216624499
2311667486 3256361891 131181828
2849273982 3133595970 102505596
1365732141 2963642997 49004259
3093408594 3494080959 139356512
3385585792 1971267128 216906043
2954083526 56695294 82629774
1331025381 2483732118 34706760
3322810356 2450074234 33657884
3269675379 139325068 53134977
2704750377 680438751 144523605
1977777776 824962356 50142191
929469914 3236101566 20260325
0 1363064706 224603332
1835367616 2800384017 134141428
647524775 2518438878 281945139
2951779578 1587668038 2303948
1414736400 1052314826 310749880
224603332 229370318 422921443
3036713300 0 56695294
soil-to-fertilizer map:
1496362907 858318422 178940893
2630847538 53056663 113045954
2283611281 2088524569 46779241
3913589699 3841520880 84292875
2330390522 2567432522 113508448
2524251705 2460836689 106595833
3063003021 2963042999 10035541
3857182342 4222898477 56407357
37310480 2913919563 49123436
740077448 300637488 194492816
1474645818 1456131667 21717089
934570264 166102617 54182136
988752400 1796958285 94278756
1717132707 1928547521 159977048
521508712 2758310702 26883128
3092599643 495130304 257125345
1877109755 2785193830 128725733
3997882574 3925813755 297084722
548391840 2269151081 191685608
3841520880 4279305834 15661462
86433916 2187553774 81597307
1675303800 816489515 41828907
2443898970 220284753 80352735
2005835488 2973078540 277775793
0 1891237041 37310480
1299192340 1390736804 45833782
1345026122 2680940970 77369732
168031223 1037259315 353477489
1083031156 3250854333 138997462
3073038562 1436570586 19561081
1275085281 792382456 24107059
1222028618 0 53056663
3349724988 752255649 40126807
2743893492 1477848756 319109529
1422395854 2135303810 52249964
fertilizer-to-water map:
4238460975 3150676058 14156194
4014738493 2552067322 165315151
2782663538 3067003586 60442604
718350022 1496692875 242681298
0 662267357 48987302
73802866 465780476 196486881
270289747 736070223 448060275
2501821195 4263593575 31373721
961031320 0 47107691
2448671317 2498917444 53149878
2843106142 3164832252 729755546
4180053644 2717382473 58407331
2533194916 4223942180 39651395
48987302 711254659 24815564
2037107882 2799681618 267321968
2424779503 2775789804 23891814
1547175259 1304493961 192198914
4252617169 4084472268 19120259
1871165319 3918529705 61914957
3572861688 1871165319 441876805
2758721631 3894587798 23941907
2304429850 4103592527 120349653
1933080276 3980444662 104027606
1008139011 47107691 418672785
1426811796 1184130498 120363463
4271737428 3127446190 23229868
2572846311 2313042124 185875320
water-to-light map:
1985898327 3318267441 140753926
1347635148 2083526793 398378839
3514250773 2747115878 571151563
2126652253 1347635148 86837038
3336431644 3459021367 177819129
2927342235 1508339551 335222044
0 365247178 425818944
500722155 917309008 28280043
580341873 0 365247178
3262564279 1434472186 73867365
2662131989 2481905632 265210246
2213489291 3636840496 415606487
529002198 791066122 51339675
1746013987 1876597806 206928987
2629095778 1843561595 33036211
425818944 842405797 74903211
1952942974 4052446983 32955353
light-to-temperature map:
2521168614 3718558727 45222681
2372021437 4250929390 44037906
2416059343 3070381062 105109271
391082070 1490595758 135161830
2750033935 3567996322 26024928
2631208948 4085216210 118824987
1606793146 1161017018 154561777
0 27318229 64007187
2566391295 3763781408 64817653
2205452704 2073181756 31511904
2354729618 109736771 15352358
526243900 143079078 467881514
165490760 1625757588 156087087
321577847 610960592 69504223
1116662502 1843304861 180171121
2173847890 2322708438 31604814
64007187 1315578795 101483573
1315244978 1417062368 73533390
2989245773 2722605383 134588769
3800621948 4204041197 46888193
3287840442 2372021437 350583946
1067967658 12382058 14936171
3276570277 3971207241 11270165
3152032800 3594021250 124537477
1761354923 2023475982 49705774
2236964608 680464815 117765010
4152595905 3982477406 102738804
3847510141 3920328030 50879211
3638424388 3429696886 70468591
1098672553 125089129 17989949
1999021216 798229825 174826674
4255334709 3528363735 39632587
1296833623 91325416 18411355
3708892979 3828599061 91728969
1388778368 2104693660 218014778
1811060697 973056499 187960519
1082903829 2354313252 15768724
2776058863 2857194152 213186910
3898389352 3175490333 254206553
994125414 1781844675 61460186
3123834542 3500165477 28198258
1055585600 0 12382058
temperature-to-humidity map:
3270313314 2596058682 35302332
4226607799 1853648898 10548841
2997401183 2994049594 173176623
3460843740 3377888646 164140301
762069527 4252128205 42839091
3170577806 1535455627 99735508
356504730 1864197739 73760842
1176796835 3767577945 398679053
2184102927 1268190151 103654223
1839964412 1995769237 103314277
623505847 2855485914 138563680
551373625 970847216 72132222
2605053483 2099083514 149971726
804908618 510961861 330954039
2476122167 841915900 128931316
3809356495 2631856914 172503566
3981860061 3167226217 210662429
254072453 98437479 41846688
3305615646 1164087491 104102660
98437479 140284167 137804809
236242288 278088976 17830165
2939640029 1477694473 57761154
2390051063 2249055240 86071104
2755025209 3582963125 184614820
1135862657 3542028947 40934178
4237156640 1937958581 57810656
3409718306 2804360480 51125434
1943774589 4166256998 85871207
2029645796 356504730 154457131
3624984041 1827821728 25827170
430265572 1042979438 121108053
1575475888 1371844374 3556186
4192522490 1635191135 34085309
3650811211 1669276444 158545284
1943278689 2631361014 495900
1579032074 2335126344 260932338
2287757150 1375400560 102293913
humidity-to-location map:
4260564640 3164238850 33008819
2293789713 3286584985 52546193
2087002602 2864270962 68938922
1297747555 1309838844 89337809
3093628267 3842203176 155987450
2609276317 3498417185 343785991
658125616 1701481170 20754060
1593540119 1399176653 128695111
2283933279 2244808425 9856434
3849705959 3012295008 151943842
678879676 1170609407 139229437
1009204170 485451665 270016861
2155941524 4227835566 67131730
4032228982 4161145047 66690519
3532191685 2179585888 65222537
2953062308 2268317830 85579399
2252523457 3339131178 23090374
818109113 755468526 17485651
4098919501 2254664859 13652971
3379699400 2416907530 152492285
4293573459 2662947015 1393837
835594764 1527871764 173609406
2275613831 3422250936 8319448
4112572472 2933209884 24098564
1279221031 466925141 18526524
3038641707 2957308448 54986560
397655230 0 260470386
2223073254 3392800733 29450203
0 772954177 397655230
4136671036 3430570384 30346404
3597414222 3998190626 162954421
2546266016 2353897229 63010301
3249615717 3460916788 37500397
1387085364 260470386 206454755
3287116114 2087002602 92583286
3760368643 3197247669 89337316
2346335906 2664340852 199930110
4167017440 2569399815 93547200
4001649801 3362221552 30579181

@ -1,33 +0,0 @@
seeds: 79 14 55 13
seed-to-soil map:
50 98 2
52 50 48
soil-to-fertilizer map:
0 15 37
37 52 2
39 0 15
fertilizer-to-water map:
49 53 8
0 11 42
42 0 7
57 7 4
water-to-light map:
88 18 7
18 25 70
light-to-temperature map:
45 77 23
81 45 19
68 64 13
temperature-to-humidity map:
0 69 1
1 0 69
humidity-to-location map:
60 56 37
56 93 4

@ -1,2 +0,0 @@
Time: 48 87 69 81
Distance: 255 1288 1117 1623

@ -1,2 +0,0 @@
Time: 7 15 30
Distance: 9 40 200

File diff suppressed because it is too large Load Diff

@ -1,5 +0,0 @@
32T3K 765
T55J5 684
KK677 28
KTJJT 220
QQQJA 483

@ -1,788 +0,0 @@
LRRLRRRLLRRLRRLRRRLRLRRLRRLRRRLRRRLRRLRLLRRLRLRRLRRLRLRLRRLRRLRRRLLRLLRRLRLRRRLRRRLLRRRLRRLRLLRRLRRRLRLLRLRLLRRRLRLRRRLLRRRLRRRLRRLLRLRLLRRLRRLLRRRLLRLLRRLRRRLRLRRRLRLRRLRLRLRRLRRLRRLLLRRRLRLRLLLRRRLLRLRRLRRRLRRLRRLRRRLRRRLRRLLRLLRRLRRRLLRRRLRLRLRRRLRRRLRRLRRLRLLRLRRLLRRLLRRRR
LRV = (NNC, BHD)
KBR = (MLH, XGR)
BJB = (RCR, LBC)
SXL = (HTF, LTX)
BLV = (TXF, SPK)
FCH = (DMS, HVX)
GPM = (HJV, JLK)
BRQ = (BLR, BTD)
LNT = (XDS, GTJ)
CHP = (TRF, PQM)
CMF = (CLT, NBM)
HNT = (SGQ, BLP)
GXG = (JFP, JHQ)
NDD = (GTJ, XDS)
KBJ = (FXP, VBJ)
RKM = (HTT, DPG)
GCQ = (CDT, TSQ)
XQX = (CCD, TVG)
BJF = (NHQ, MPM)
SFD = (MJD, MMH)
SGQ = (LNX, BRL)
NXR = (TXD, GCF)
QJH = (FJX, NFV)
RSR = (MCM, RLH)
VBG = (QFH, SXX)
PLH = (XGJ, HTP)
LTK = (SJJ, JBB)
CPK = (TMX, NRX)
BCC = (PVV, PLM)
CGC = (MCF, HFK)
TGB = (TQQ, LRV)
PCF = (GMV, DTG)
PDB = (DPG, HTT)
RFQ = (GKM, VFF)
VKZ = (GCL, VPP)
FGL = (MDS, PGM)
KRZ = (CFT, XPM)
LSR = (GRQ, KKJ)
VKM = (GRQ, KKJ)
SKT = (NXT, KRQ)
FMB = (VBH, NFJ)
RRR = (TJF, QGN)
FHT = (XMT, RKV)
HTF = (SRB, QVD)
GTJ = (CHD, PLJ)
QSM = (CMF, TDS)
VNG = (DKC, SMV)
MNT = (BKN, BKN)
VRV = (GJM, JCG)
QBC = (CKV, LCC)
GPD = (SXD, BML)
SFR = (SVD, BDL)
PBK = (VPQ, NMC)
TJF = (XDN, RMG)
HGM = (GGH, BXS)
PJB = (TPR, VMD)
FDL = (QBC, KLN)
RXB = (BSB, NLD)
MMN = (SGQ, BLP)
BDN = (BJS, NTS)
RRG = (BLV, LPG)
MBF = (DJD, FGF)
FMK = (NDG, XHN)
CMX = (VNV, KBN)
XML = (TQJ, FCX)
TKF = (HQM, LGK)
RVF = (GFG, MQN)
FJX = (GVX, FHK)
JPQ = (STP, GLH)
GLK = (PCR, BBF)
DBR = (JFQ, JFQ)
GJG = (DXX, QLR)
DRH = (QTG, GJG)
FHS = (PHB, NJH)
JCT = (CDT, TSQ)
NDM = (LVV, GPP)
LDF = (XLT, GKX)
NNX = (PQK, DRB)
VKP = (BPF, CPC)
PCG = (FJD, MRT)
TQJ = (LMN, SHR)
CVH = (BRQ, KJK)
VJT = (SLG, XGB)
QHG = (NDG, NDG)
FRL = (GDQ, SMJ)
FTF = (JPD, DCK)
VGF = (XNN, GVN)
LSB = (NMC, VPQ)
NSC = (KPQ, PNK)
QPR = (JFP, JHQ)
CRX = (MQC, HMB)
CQM = (TXD, GCF)
MBS = (LTF, KKG)
VFG = (BPB, MHX)
CCF = (HHS, LDR)
JLB = (PBK, LSB)
GNR = (CMK, FTK)
TSA = (DJG, MFF)
BDL = (BJB, XKR)
CMN = (GDQ, SMJ)
TMR = (MCN, MBF)
FFC = (MFN, STT)
VPM = (VCH, FBB)
RNX = (RGH, SDF)
RDF = (TML, PLH)
NBM = (FLQ, RBD)
MTK = (TDM, XPV)
NFK = (SLD, FRS)
PNB = (QPT, HPC)
MGH = (NDK, KGN)
CRT = (MMB, BBM)
NDG = (JGT, JGT)
GJM = (FMB, NDP)
GPP = (VDJ, CDX)
JFP = (SDH, QFJ)
TSQ = (PQG, GXT)
CNB = (SFD, MQG)
TVN = (CNP, LCS)
XDQ = (LNT, NDD)
JCG = (NDP, FMB)
NDC = (NTH, FSJ)
KRQ = (JVD, LVS)
LMF = (KPQ, PNK)
GTP = (RJD, FCH)
XTV = (VLX, RXB)
GCL = (LJJ, TTC)
THX = (RMQ, VBK)
RJD = (DMS, HVX)
VLV = (LNT, NDD)
BRD = (HTF, LTX)
SMJ = (SKV, HXP)
DLX = (FFC, GNS)
BXS = (RSR, KFB)
KTV = (PLM, PVV)
VCH = (RCF, LXP)
LHK = (SDF, RGH)
VTK = (HNM, MMM)
TRC = (PJB, CKN)
XMX = (BLH, XCF)
VDL = (PCG, DHB)
CPC = (KDC, BFD)
KNG = (VTK, DTL)
LQX = (FGL, TSP)
HXH = (JSB, LSD)
SCS = (VTX, PLG)
DRB = (TGV, QRX)
GDN = (MQX, KPC)
DPG = (NFR, BPN)
HTD = (HGV, BSZ)
GVL = (DGJ, CHP)
PMB = (MTB, JCB)
NKT = (KBJ, JJP)
KGC = (KFR, NRT)
RTT = (XPM, CFT)
LFG = (RCB, NNX)
HTT = (BPN, NFR)
MHX = (JRL, JQB)
RXS = (HQM, LGK)
CJB = (DKD, KMJ)
CXL = (LRN, LFG)
XKR = (RCR, LBC)
BLR = (MLC, CGC)
DGJ = (PQM, TRF)
CPD = (DGJ, CHP)
DRN = (TRQ, TLH)
CFT = (TSH, PHS)
PHQ = (RMQ, VBK)
SXD = (XHC, TDX)
TLQ = (VLX, RXB)
BHF = (VNV, KBN)
PFB = (MQX, KPC)
BRL = (HPN, SRJ)
XFL = (KNG, KTS)
RMX = (VBG, NTD)
HQC = (VXL, GXJ)
GHQ = (CRT, LNJ)
TXD = (VGF, VFJ)
MQG = (MJD, MMH)
HPN = (RST, VDD)
QNL = (TKF, RXS)
NGJ = (NFP, RCP)
NFB = (MHX, BPB)
GNF = (GFG, MQN)
TSP = (PGM, MDS)
QTG = (QLR, DXX)
TXF = (FQQ, HBQ)
BPB = (JQB, JRL)
NHS = (LQS, NDX)
MVV = (PBD, PBD)
GKV = (GXG, QPR)
CNX = (FTV, KFQ)
HQS = (VSX, FTS)
JSB = (MDD, SKT)
FDX = (NTS, BJS)
SNB = (VTX, PLG)
TDS = (CLT, NBM)
LKJ = (JPX, RPQ)
KGN = (SCQ, FLR)
HBD = (SXD, BML)
DSR = (MRC, BFN)
GVN = (QHD, XSJ)
MJB = (NDC, SFH)
RQS = (KND, HGR)
NFG = (NJH, PHB)
PHF = (TFN, NQQ)
MHQ = (THL, VHQ)
KXG = (FFC, GNS)
RTL = (NFK, NTM)
NJH = (VXB, DNR)
TSH = (TRJ, QTP)
STL = (GTL, HJC)
JQL = (LRN, LFG)
SHT = (BSG, PNB)
VCL = (FPP, SQP)
GKX = (LSM, GQF)
TCN = (BLV, LPG)
PLR = (JNJ, FPR)
HBG = (NBP, VKT)
RPQ = (LVH, RDF)
JTA = (TKF, RXS)
XPV = (DQM, JJD)
GJC = (LBN, HFF)
SLG = (TKM, FQH)
HFK = (VJT, DNQ)
TML = (XGJ, HTP)
VCM = (DFX, KBR)
XHC = (KHD, PHF)
JXJ = (VKJ, CVH)
NFJ = (FXL, CJB)
TDN = (JCN, SQS)
SST = (TDS, CMF)
HLN = (QKM, CCF)
MSV = (HDC, KSX)
VPG = (NBD, GTP)
XCF = (CPD, GVL)
PQK = (QRX, TGV)
FVN = (HSJ, RXR)
JBB = (PGR, HTL)
VLX = (NLD, BSB)
BMS = (HJT, PFP)
VVV = (DRH, RGF)
GTL = (KCS, MHQ)
BFD = (DTF, VTN)
DKC = (TXT, JKR)
QRB = (LQS, NDX)
NDL = (LHK, RNX)
XQQ = (LLX, QGR)
FHK = (MMN, HNT)
SNV = (KJP, BPC)
QGK = (DHB, PCG)
HVG = (KXG, DLX)
PNK = (XQD, MPP)
BFN = (PVP, NVL)
HKN = (DLL, FVN)
XGR = (QLP, TXM)
KCS = (VHQ, THL)
RCR = (SXL, BRD)
KHC = (KSX, HDC)
HXN = (RRR, JGK)
MPB = (PLR, TLV)
PRX = (RGF, DRH)
NGN = (GRC, NCT)
QRG = (PHQ, THX)
MFR = (GXJ, VXL)
QQX = (JTL, HQH)
DBN = (HJT, PFP)
LVV = (VDJ, CDX)
JVD = (RFQ, NRR)
JTL = (CRX, LRM)
FJQ = (CMX, BHF)
LNX = (HPN, SRJ)
XQD = (MLS, XPH)
MQN = (CJM, RQS)
NRT = (FNF, VCX)
CGJ = (QMK, MPB)
KRM = (GBJ, FPG)
MPP = (MLS, XPH)
BKN = (GBB, VXV)
JCB = (CNX, RTS)
CJM = (HGR, KND)
DDR = (CPK, QFP)
MGC = (FFV, QJQ)
GJP = (NHQ, NHQ)
QVD = (DPP, FQP)
RBC = (VTV, QTV)
KND = (KSV, JLB)
GGH = (RSR, KFB)
SQB = (XFL, HMP)
DJG = (LHG, GND)
DTF = (TKJ, XPL)
RXR = (VCT, SFR)
LLH = (VLV, XDQ)
SDF = (GCQ, JCT)
BLA = (XPM, CFT)
RLF = (XRH, KFF)
VDD = (DRN, GHB)
MQC = (SHQ, PCV)
VBK = (VHD, FXH)
KJK = (BLR, BTD)
JQB = (JQL, CXL)
FCX = (LMN, SHR)
MQX = (MBS, MQV)
NHQ = (RTT, RTT)
QNG = (DLX, KXG)
FTS = (KQN, GXH)
JXP = (FJQ, LVX)
JMD = (BLH, XCF)
FQQ = (SDB, GNR)
GFH = (LTK, KTT)
HDC = (NNM, HGM)
BTD = (MLC, CGC)
FLQ = (BQS, NBK)
DXP = (MCN, MBF)
QGR = (NXR, CQM)
MLS = (LSH, BJM)
FGV = (DXP, TMR)
RLR = (NFV, FJX)
NNC = (MVV, MVV)
MGK = (CSG, NMV)
FFV = (LSF, QBP)
NCT = (GNF, RVF)
SLD = (XFS, HXH)
GFR = (GPM, GLD)
CXT = (GTP, NBD)
KKG = (LVB, FKX)
VLL = (TVN, JQV)
KFQ = (CGX, NKT)
RMG = (KRM, MKC)
QFL = (TQQ, LRV)
FKX = (SMN, LDH)
QPT = (FCJ, VCM)
XPH = (LSH, BJM)
DHB = (MRT, FJD)
NBK = (QJM, GNN)
DLJ = (MNT, PCS)
TMK = (KJP, BPC)
HQM = (CMB, BVP)
TGV = (QQX, DSP)
DSP = (HQH, JTL)
DLL = (RXR, HSJ)
JLJ = (SNV, TMK)
MMM = (GJP, BJF)
BMQ = (VHX, VRV)
MKC = (GBJ, FPG)
CPL = (QBC, KLN)
SVD = (XKR, BJB)
GXH = (CPQ, BNV)
VTS = (DCK, JPD)
CNJ = (PCF, DFJ)
TDX = (PHF, KHD)
LJJ = (MSV, KHC)
DXX = (LKJ, STN)
KFF = (CNJ, XBC)
RLH = (LQX, RNJ)
LHG = (PSH, SJM)
HSJ = (VCT, SFR)
DFV = (PCR, BBF)
MLC = (HFK, MCF)
JPK = (DPD, JXP)
LVS = (RFQ, NRR)
SMN = (QCL, MQK)
RQL = (PMB, NDT)
GNS = (MFN, STT)
GDD = (DLL, FVN)
GBJ = (CNS, MJB)
LKM = (VCH, FBB)
SPK = (HBQ, FQQ)
KHD = (TFN, NQQ)
GRC = (GNF, RVF)
MLH = (TXM, QLP)
QTQ = (HFF, LBN)
LHS = (DXC, RQL)
QTV = (BMQ, KHB)
QLX = (FHT, RLL)
VKT = (BVK, HHF)
CKV = (QLD, QLD)
LBC = (SXL, BRD)
KFR = (FNF, VCX)
HDT = (BSG, PNB)
SKQ = (NDV, VKN)
TQQ = (NNC, BHD)
XHN = (JGT, VKZ)
PNS = (FTF, VTS)
QBP = (VPG, CXT)
BSG = (HPC, QPT)
GLD = (JLK, HJV)
LTF = (LVB, FKX)
RMQ = (VHD, FXH)
VXL = (GDD, HKN)
GDC = (QSM, SST)
CSS = (NDV, VKN)
BBF = (KBH, THK)
PLM = (GJC, QTQ)
PLX = (KGN, NDK)
NVZ = (RXS, TKF)
TPR = (PVJ, CVJ)
QGN = (RMG, XDN)
SQP = (LQQ, HDS)
QTT = (XRH, KFF)
PGM = (XQX, FQM)
KJP = (CSB, QHR)
PSM = (VKM, LSR)
NBA = (VPP, GCL)
CSB = (LDF, HXG)
XTH = (SGX, NLP)
STP = (CMN, FRL)
HGR = (JLB, KSV)
MRT = (XTH, SML)
DFJ = (GMV, DTG)
RBD = (BQS, NBK)
TCC = (FFV, QJQ)
PHS = (QTP, TRJ)
TQH = (LTK, KTT)
QTP = (XMX, JMD)
HFF = (PFB, GDN)
GXT = (LCT, NHC)
LMP = (RNX, LHK)
KQN = (CPQ, BNV)
JRL = (JQL, CXL)
VSX = (GXH, KQN)
XNN = (QHD, XSJ)
HPC = (VCM, FCJ)
PGJ = (QNL, QNL)
TLH = (FHS, NFG)
MMH = (RLF, QTT)
JXR = (JQV, TVN)
LDH = (MQK, QCL)
SQS = (CGJ, CFS)
VNV = (RBC, MLK)
BML = (TDX, XHC)
MGL = (QXC, LLH)
FXH = (GDC, NTV)
NLD = (MGH, PLX)
HJV = (FPL, RTL)
PLG = (DDR, PNN)
KPH = (TMR, DXP)
LRM = (HMB, MQC)
TRT = (NPC, GFR)
HTL = (SPT, QLX)
VPP = (TTC, LJJ)
FPG = (CNS, MJB)
KJN = (JGK, RRR)
PVV = (QTQ, GJC)
VPQ = (NHS, QRB)
DCC = (LHS, DGL)
KBH = (QJH, RLR)
PFP = (BDN, FDX)
KSV = (LSB, PBK)
NTS = (SCS, SNB)
HTP = (QMM, VCL)
BPC = (QHR, CSB)
XPM = (PHS, TSH)
PQM = (RKM, PDB)
DFC = (CVH, VKJ)
HMP = (KTS, KNG)
PHB = (VXB, DNR)
MTB = (CNX, RTS)
MJD = (QTT, RLF)
HNM = (GJP, GJP)
QLP = (TCN, RRG)
JPD = (VHR, PSM)
KBN = (MLK, RBC)
LDR = (SHT, HDT)
NTH = (QNG, HVG)
RCP = (HBD, GPD)
SGX = (HXN, KJN)
XDK = (JFQ, MDQ)
LLQ = (VSX, FTS)
TXT = (QFL, TGB)
NRR = (VFF, GKM)
DGL = (DXC, RQL)
KKJ = (MGC, TCC)
QJQ = (QBP, LSF)
CPQ = (CSS, SKQ)
TFN = (VDL, QGK)
TVK = (SNV, TMK)
HJC = (KCS, MHQ)
VKJ = (KJK, BRQ)
HQH = (CRX, LRM)
PVJ = (VVV, PRX)
HHS = (SHT, HDT)
XDN = (MKC, KRM)
XGB = (FQH, TKM)
HXG = (XLT, GKX)
NMC = (QRB, NHS)
MFF = (GND, LHG)
JGT = (VPP, GCL)
LLX = (NXR, CQM)
BVK = (GKV, VMV)
NDV = (THG, THG)
CKN = (TPR, VMD)
FTK = (KQG, GHQ)
SGZ = (VXV, GBB)
KFN = (PJB, CKN)
DQM = (HBG, KTB)
LNJ = (MMB, BBM)
JJP = (VBJ, FXP)
XFS = (JSB, LSD)
GBB = (XTV, TLQ)
BJS = (SNB, SCS)
JNJ = (QHG, QHG)
TRJ = (XMX, JMD)
TVG = (HDH, STL)
AAA = (MRC, BFN)
BNV = (CSS, SKQ)
JHQ = (QFJ, SDH)
BVX = (NFB, VFG)
NDP = (VBH, NFJ)
NTD = (QFH, SXX)
NVL = (QRG, HTG)
VDP = (GRC, NCT)
MLK = (VTV, QTV)
JPX = (RDF, LVH)
PBD = (HGV, HGV)
RCF = (DFC, JXJ)
CVJ = (VVV, PRX)
DTL = (HNM, MMM)
VCX = (MFR, HQC)
VFF = (DFV, GLK)
MQK = (TVK, JLJ)
TKJ = (XFH, MTS)
SBX = (KMD, NDM)
VXV = (TLQ, XTV)
GRQ = (MGC, TCC)
NTV = (QSM, SST)
LVX = (BHF, CMX)
QXC = (XDQ, VLV)
QCL = (JLJ, TVK)
QXA = (GBB, VXV)
RKV = (PQQ, PQH)
QLD = (MNT, MNT)
LBQ = (TQJ, FCX)
NXT = (JVD, LVS)
CPX = (VFG, NFB)
KQG = (LNJ, CRT)
GHB = (TRQ, TLH)
TRF = (PDB, RKM)
SHQ = (JPQ, RKS)
NBD = (FCH, RJD)
CSG = (JPK, CPV)
DNR = (MGK, DPF)
TMX = (MGL, HBN)
KMD = (LVV, GPP)
TLV = (JNJ, FPR)
MCN = (DJD, FGF)
BSZ = (MFF, DJG)
GMV = (RSQ, HLN)
LCT = (KTV, BCC)
KPQ = (MPP, XQD)
VBH = (FXL, CJB)
NDK = (SCQ, FLR)
VTX = (PNN, DDR)
HGV = (DJG, MFF)
TRG = (BVG, SQB)
THG = (PGJ, PGJ)
SDB = (CMK, FTK)
NTM = (SLD, FRS)
KMJ = (PBM, SXJ)
MTM = (LLQ, HQS)
NFP = (GPD, HBD)
TKM = (NCC, TRG)
XMT = (PQQ, PQH)
THL = (TRC, KFN)
CPV = (JXP, DPD)
GVX = (HNT, MMN)
XSJ = (CJT, RMX)
HMB = (PCV, SHQ)
SRJ = (VDD, RST)
STT = (KGV, VNG)
LSH = (KPK, MTK)
CHD = (XQQ, CTF)
NFV = (GVX, FHK)
XDS = (PLJ, CHD)
BVP = (VKC, PNS)
VFJ = (GVN, XNN)
TSC = (JCN, SQS)
RGF = (GJG, QTG)
VMD = (PVJ, CVJ)
GPR = (GCB, VKP)
PNN = (CPK, QFP)
DKD = (PBM, SXJ)
FSJ = (QNG, HVG)
KGV = (SMV, DKC)
LSM = (DBR, DBR)
QLR = (LKJ, STN)
FLR = (GPR, HVJ)
NHC = (BCC, KTV)
LQS = (XML, LBQ)
NNM = (GGH, BXS)
FNF = (HQC, MFR)
MTS = (FTG, CNB)
FBB = (RCF, LXP)
JGK = (QGN, TJF)
SHR = (LQR, SBX)
QHD = (CJT, RMX)
LXF = (NRT, KFR)
PGR = (SPT, QLX)
PLJ = (CTF, XQQ)
DPF = (CSG, NMV)
MDQ = (DSR, ZZZ)
NLP = (HXN, KJN)
SJJ = (HTL, PGR)
GDQ = (SKV, HXP)
BPF = (KDC, BFD)
SXJ = (LKM, VPM)
VDJ = (NGJ, TCK)
JCN = (CGJ, CFS)
BJM = (KPK, MTK)
XLT = (LSM, GQF)
KHB = (VRV, VHX)
RKS = (STP, GLH)
CLT = (FLQ, RBD)
MMB = (FDL, CPL)
HVJ = (GCB, VKP)
LTX = (SRB, QVD)
KLN = (CKV, LCC)
PCS = (BKN, SGZ)
HDH = (HJC, GTL)
VBJ = (MTM, MHR)
QMK = (PLR, TLV)
THK = (QJH, RLR)
VHX = (JCG, GJM)
GKM = (DFV, GLK)
FXL = (KMJ, DKD)
LSD = (SKT, MDD)
FGF = (VDP, NGN)
TSL = (DGL, LHS)
VCT = (BDL, SVD)
MDD = (KRQ, NXT)
SML = (SGX, NLP)
FTG = (SFD, MQG)
QMM = (SQP, FPP)
TXM = (TCN, RRG)
LVB = (LDH, SMN)
KSX = (HGM, NNM)
LSF = (VPG, CXT)
LQQ = (LMF, NSC)
FRS = (XFS, HXH)
KTB = (NBP, VKT)
JJD = (HBG, KTB)
DFX = (XGR, MLH)
BBM = (CPL, FDL)
PQQ = (JXR, VLL)
DXC = (NDT, PMB)
KTT = (JBB, SJJ)
SFH = (NTH, FSJ)
XPL = (XFH, MTS)
CCD = (STL, HDH)
RTS = (KFQ, FTV)
MPM = (RTT, KRZ)
XBC = (PCF, DFJ)
HVX = (BMS, DBN)
SDH = (KGC, LXF)
HHF = (VMV, GKV)
FQM = (CCD, TVG)
LCC = (QLD, DLJ)
GCF = (VFJ, VGF)
HTG = (PHQ, THX)
CMK = (KQG, GHQ)
NFR = (GJX, TRT)
DTG = (HLN, RSQ)
VXB = (MGK, DPF)
NCC = (SQB, BVG)
CFS = (MPB, QMK)
VKN = (THG, BBV)
PQH = (VLL, JXR)
KDC = (DTF, VTN)
CDT = (PQG, GXT)
HVQ = (QNL, NVZ)
KTS = (VTK, DTL)
FCJ = (KBR, DFX)
CDX = (NGJ, TCK)
DCK = (VHR, PSM)
RNJ = (FGL, TSP)
NDX = (XML, LBQ)
DPD = (LVX, FJQ)
CGX = (KBJ, JJP)
TCK = (NFP, RCP)
JFQ = (DSR, DSR)
PCV = (RKS, JPQ)
HBQ = (GNR, SDB)
PSH = (FGV, KPH)
MHR = (HQS, LLQ)
SCQ = (HVJ, GPR)
SPT = (FHT, RLL)
GJX = (NPC, GFR)
CTF = (QGR, LLX)
LCS = (LMP, NDL)
RGH = (GCQ, JCT)
BBV = (PGJ, HVQ)
KFB = (MCM, RLH)
VHR = (VKM, LSR)
FJD = (XTH, SML)
FQH = (TRG, NCC)
NPC = (GPM, GLD)
DJD = (NGN, VDP)
XRH = (XBC, CNJ)
LMN = (LQR, SBX)
QFP = (NRX, TMX)
KPC = (MBS, MQV)
NMV = (CPV, JPK)
LBN = (GDN, PFB)
GCB = (BPF, CPC)
MDS = (FQM, XQX)
MRC = (NVL, PVP)
GFG = (RQS, CJM)
MCF = (DNQ, VJT)
VHQ = (KFN, TRC)
XFH = (FTG, CNB)
SRB = (FQP, DPP)
NBP = (HHF, BVK)
BQS = (GNN, QJM)
NDT = (MTB, JCB)
LPG = (SPK, TXF)
RST = (GHB, DRN)
HBN = (QXC, LLH)
LGK = (CMB, BVP)
QFJ = (KGC, LXF)
TTC = (KHC, MSV)
QHR = (LDF, HXG)
VKC = (VTS, FTF)
FTV = (CGX, NKT)
PCR = (THK, KBH)
NRX = (MGL, HBN)
SKV = (TQH, GFH)
FPR = (QHG, FMK)
PQG = (LCT, NHC)
BHD = (MVV, HNR)
XGJ = (VCL, QMM)
ZZZ = (BFN, MRC)
BLH = (GVL, CPD)
HJT = (BDN, FDX)
PBM = (LKM, VPM)
TRQ = (FHS, NFG)
JKR = (TGB, QFL)
JQV = (LCS, CNP)
SXX = (DCC, TSL)
CMB = (PNS, VKC)
MCM = (RNJ, LQX)
GLH = (FRL, CMN)
DNQ = (SLG, XGB)
FPP = (HDS, LQQ)
DMS = (BMS, DBN)
CNS = (SFH, NDC)
VTV = (KHB, BMQ)
HNR = (PBD, HTD)
GNN = (CPX, BVX)
KPK = (TDM, XPV)
GXJ = (GDD, HKN)
MFN = (VNG, KGV)
BVG = (XFL, HMP)
QRX = (QQX, DSP)
VTN = (XPL, TKJ)
QFH = (TSL, DCC)
GND = (PSH, SJM)
LVH = (PLH, TML)
QJM = (CPX, BVX)
NQQ = (VDL, QGK)
LQR = (KMD, NDM)
HXP = (TQH, GFH)
RSQ = (QKM, CCF)
PVP = (QRG, HTG)
RCB = (DRB, PQK)
SJM = (KPH, FGV)
CNP = (NDL, LMP)
LRN = (NNX, RCB)
SMV = (JKR, TXT)
HDS = (NSC, LMF)
VHD = (NTV, GDC)
TDM = (DQM, JJD)
BLP = (BRL, LNX)
JLK = (FPL, RTL)
FPL = (NTM, NFK)
FXP = (MTM, MHR)
LXP = (DFC, JXJ)
GQF = (DBR, XDK)
QKM = (HHS, LDR)
STN = (RPQ, JPX)
BSB = (PLX, MGH)
DPP = (TDN, TSC)
VMV = (QPR, GXG)
FQP = (TDN, TSC)
BPN = (GJX, TRT)
RLL = (XMT, RKV)
CJT = (VBG, NTD)
MQV = (LTF, KKG)

@ -1,5 +0,0 @@
LLR
AAA = (BBB, BBB)
BBB = (AAA, ZZZ)
ZZZ = (ZZZ, ZZZ)

@ -1,10 +0,0 @@
LR
11A = (11B, XXX)
11B = (XXX, 11Z)
11Z = (11B, XXX)
22A = (22B, XXX)
22B = (22C, 22C)
22C = (22Z, 22Z)
22Z = (22B, 22B)
XXX = (XXX, XXX)

Some files were not shown because too many files have changed in this diff Show More

Loading…
Cancel
Save