Compare commits
32
Commits
5c59e7b253
...
master
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
ef764ef2be | ||
|
|
2b2261905f | ||
|
|
0b6a222015 | ||
|
|
5757e5fb19 | ||
|
|
9a0e5314e3 | ||
|
|
fcf7546442 | ||
|
|
e478cf9030 | ||
|
|
4bd6014a6e | ||
|
|
3aa0c74003 | ||
|
|
3298e5cc8a | ||
|
|
e88cfd643a | ||
|
|
638d856417 | ||
|
|
6069495db4 | ||
|
|
9d6ae2527b | ||
|
|
b64d593a51 | ||
|
|
73c816e5a7 | ||
|
|
201077b551 | ||
|
|
4ae9fde7e9 | ||
|
|
dc4447ccfb | ||
|
|
369e4c1e63 | ||
|
|
90756ec10c | ||
|
|
cac6ced738 | ||
|
|
6d87bf0038 | ||
|
|
731ce4b177 | ||
|
|
e48758bd3a | ||
|
|
b3306371b3 | ||
|
|
4790d7bc53 | ||
|
|
4a5a3ba757 | ||
|
|
312113ce81 | ||
|
|
5f260fcfe2 | ||
|
|
f63d67f005 | ||
|
|
435d4c6c83 |
No files matched your search
@@ -1 +1,2 @@
|
|||||||
AoC2021/Bene/
|
AoC2021/Bene/
|
||||||
|
__pycache__
|
||||||
+22
-47
@@ -1,16 +1,14 @@
|
|||||||
#!/usr/bin/env python3
|
#!/usr/bin/env python3
|
||||||
|
|
||||||
import sys, re
|
import sys
|
||||||
from itertools import combinations
|
|
||||||
from more_itertools import locate
|
|
||||||
|
|
||||||
|
|
||||||
def memo(f):
|
def memo(f):
|
||||||
memo = {}
|
memo = {}
|
||||||
|
|
||||||
def f2(x,y):
|
def f2(x,y):
|
||||||
if (x,y) not in memo: memo[(x,y)] = f(x,y)
|
if (x,tuple(y)) not in memo: memo[(x,tuple(y))] = f(x,tuple(y))
|
||||||
return memo[(x,y)]
|
return memo[(x,tuple(y))]
|
||||||
return f2
|
return f2
|
||||||
|
|
||||||
|
|
||||||
@@ -18,58 +16,35 @@ def fulfills(spring, cond):
|
|||||||
return [len(b) for b in spring.split('.') if len(b) > 0] == cond
|
return [len(b) for b in spring.split('.') if len(b) > 0] == cond
|
||||||
|
|
||||||
|
|
||||||
def solve_row1(spring, cond):
|
def dot(spring, cond):
|
||||||
if fulfills(spring, cond): return 1
|
if len(spring) == 0 or spring[0] != '#': return solve_r(spring[1:], cond)
|
||||||
sols = 0
|
else: return 0
|
||||||
not_dam = spring.count('?') + spring.count('#') - sum(cond)
|
|
||||||
if not_dam < 1: return 0
|
|
||||||
inds = list(locate(spring, lambda x: x == '?'))
|
def hashtag(spring, cond):
|
||||||
for c in combinations(inds, not_dam):
|
c = cond[0]
|
||||||
rs = list(spring)
|
if len(spring) < c: return 0
|
||||||
for i in c:
|
for x in range(c):
|
||||||
rs[i] = '.'
|
if spring[x] == '.': return 0
|
||||||
if fulfills(''.join(rs),cond): sols += 1
|
return dot(spring[c:], cond[1:])
|
||||||
return sols
|
|
||||||
|
|
||||||
|
|
||||||
@memo
|
@memo
|
||||||
def solve_r(spring, cond):
|
def solve_r(spring, cond):
|
||||||
if cond == '': return 1
|
cond = [int(c) for c in cond]
|
||||||
cond = [int(c) for c in cond.split(',')]
|
if cond == []: return 1 if spring.count('#') == 0 else 0
|
||||||
spring = spring.strip('.')
|
if not '?' in spring: return 1 if fulfills(spring, cond) else 0
|
||||||
inds = list(locate(spring.strip('.'), lambda x: x == '.'))
|
if spring == '': return 0
|
||||||
if inds == []: return solve_row1(spring, cond)
|
return dot(spring, cond) + hashtag(spring, cond)
|
||||||
i = inds[0]
|
|
||||||
sols = 0
|
|
||||||
for j in range(0, len(cond)):
|
|
||||||
if sum(cond[:j]) <= len(list(locate(spring[:i], lambda x: x != '.'))) and sum(cond[j:]) <= len(list(locate(spring[i:], lambda x: x != '.'))):
|
|
||||||
cond1, cond2 = ','.join([str(c) for c in cond[:j]]), ','.join([str(c) for c in cond[j:]])
|
|
||||||
sols += solve_r(spring[:i], cond1) * solve_r(spring[i+1:], cond2)
|
|
||||||
return sols
|
|
||||||
|
|
||||||
|
|
||||||
def solve_reg(spring, cond):
|
|
||||||
reg = r'^(\.|\?)*'
|
|
||||||
cond = [int(c) for c in cond.split(',')]
|
|
||||||
for i, z in enumerate(cond):
|
|
||||||
reg += '(\?|\#){' + f'{z}' + '}'
|
|
||||||
if i < (len(cond)-1): reg += '(\.|\?)+'
|
|
||||||
reg += '(\.|\?)*$'
|
|
||||||
print(reg, [i for i in re.findall(reg, spring, overlapped = True)])
|
|
||||||
return sum([1 for i in re.finditer(reg, spring)])
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
springs = [line.strip('\n').split(' ') for line in open(sys.argv[1])]
|
springs = [line.strip('\n').split(' ') for line in open(sys.argv[1])]
|
||||||
res1 = 0
|
res1 = 0
|
||||||
res2 = 0
|
res2 = 0
|
||||||
for s in springs[0:2]:
|
for s in springs:
|
||||||
# res1 += solve_row1(*s)
|
res1 += solve_r(s[0], [int(c) for c in s[1].split(',')])
|
||||||
res1 += solve_reg(*s)
|
res2 += solve_r('?'.join([s[0]]*5),[int(c) for c in s[1].split(',')*5])
|
||||||
# print(solve_row1(*s))
|
|
||||||
# solve_reg('?'.join([s[0]] * 5), ','.join([s[1]] * 5))
|
|
||||||
print(res1, s)
|
|
||||||
|
|
||||||
# challenge 1
|
# challenge 1
|
||||||
res1 = str(res1)
|
res1 = str(res1)
|
||||||
|
|||||||
Whitespace-only changes.
Executable
+71
@@ -0,0 +1,71 @@
|
|||||||
|
#!/usr/bin/env python3
|
||||||
|
|
||||||
|
import sys
|
||||||
|
from copy import deepcopy
|
||||||
|
import numpy as np
|
||||||
|
|
||||||
|
|
||||||
|
def show(rocks):
|
||||||
|
st = ''
|
||||||
|
for line in rocks:
|
||||||
|
st += ''.join(line)
|
||||||
|
return st
|
||||||
|
|
||||||
|
|
||||||
|
def tilt_north(r):
|
||||||
|
rocks = deepcopy(r)
|
||||||
|
for i in range(0, len(rocks)):
|
||||||
|
for j, rock in enumerate(rocks[i]):
|
||||||
|
if rock == 'O':
|
||||||
|
for a in range(i-1,-1,-1):
|
||||||
|
if rocks[a][j] == '.':
|
||||||
|
rocks[a+1][j] = '.'
|
||||||
|
rocks[a][j] = 'O'
|
||||||
|
else: break
|
||||||
|
return rocks
|
||||||
|
|
||||||
|
|
||||||
|
def cycle(rocks):
|
||||||
|
new = deepcopy(rocks)
|
||||||
|
for _ in range(4):
|
||||||
|
new = tilt_north(new)
|
||||||
|
new = np.rot90(new,3)
|
||||||
|
return new
|
||||||
|
|
||||||
|
|
||||||
|
def load(rocks):
|
||||||
|
res = 0
|
||||||
|
for i, line in enumerate(rocks):
|
||||||
|
res += (len(rocks)-i) * np.count_nonzero(np.array(line) == 'O')
|
||||||
|
return res
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == '__main__':
|
||||||
|
rocks = [list(line.strip('\n')) for line in open(sys.argv[1])]
|
||||||
|
|
||||||
|
# challenge 1
|
||||||
|
tilted = tilt_north(rocks)
|
||||||
|
show(tilted)
|
||||||
|
res1 = load(tilted)
|
||||||
|
|
||||||
|
# challenge 2
|
||||||
|
cycled = cycle(rocks)
|
||||||
|
forms, maps = {}, {}
|
||||||
|
forms[show(cycled)] = 0
|
||||||
|
maps[0] = cycled
|
||||||
|
for i in range(1,1000000000):
|
||||||
|
cycled = cycle(cycled)
|
||||||
|
if show(cycled) in forms.keys():
|
||||||
|
round = forms[show(cycled)]
|
||||||
|
n = round + ((1000000000-round-1)%(i-round))
|
||||||
|
val = maps[n]
|
||||||
|
break
|
||||||
|
forms[show(cycled)] = i
|
||||||
|
maps[i] = cycled
|
||||||
|
|
||||||
|
res1 = str(res1)
|
||||||
|
print(f"challenge 1:\n{res1}\n")
|
||||||
|
|
||||||
|
res2 = str(load(val))
|
||||||
|
print(f"challenge 2:\n{res2}\n")
|
||||||
|
|
||||||
@@ -0,0 +1,10 @@
|
|||||||
|
O....#....
|
||||||
|
O.OO#....#
|
||||||
|
.....##...
|
||||||
|
OO.#O....O
|
||||||
|
.O.....O#.
|
||||||
|
O.#..O.#.#
|
||||||
|
..O..#O..O
|
||||||
|
.......O..
|
||||||
|
#....###..
|
||||||
|
#OO..#....
|
||||||
@@ -0,0 +1,100 @@
|
|||||||
|
#...#..O#.OO...#......#...O.#.O#.O........O#..O#.O.OO..O.......O....##..O#O.........#O....O..O#.....
|
||||||
|
OO..O....#.####...#.O..#.....OO.O...O.#OOO.##..O.#.OO.#....O.#....#..#.O#..O#.O...#OO.#....#.O.#...O
|
||||||
|
..........O..#..OO.O...##.O........O#O#.#...#O....O.........O.....OO#....O..............#......#...#
|
||||||
|
#..O.O.#OO#....O#OO.#.#.O..O#...#.OO#.O#.O......#.....OO...O#.O....O..#.O#..#..O.#.O........#..#..O#
|
||||||
|
...#..O#.OO..#O...#..#..O###.........#.....OOOOOO.........#O.O.O#O.O.......O........#.OO....O..#...O
|
||||||
|
..OO...O.#.......#.#O....#..O##....O.O..OOO...#O.#..O.#O...#.O..O..#O#.#OO...O.OO..#..O..O.O.O....O#
|
||||||
|
.OO#............O.O...#.OO.#..##O......OO...#......##......#.#..#.O..O.O...#..#...O#......O..OOO....
|
||||||
|
..........O..#O...O.#....OOO.#........#.##O.#......#..###O...O...O..O.#.O..O.#..O.O.O.O.##.....#.#..
|
||||||
|
.##.O#O.........O.#.OOOO..O..O#.#..O.O...O..#......O.O.#O........O..#.#..#OO...#......##O.#O..O.OO..
|
||||||
|
.O.O.O##...O...O.........O##O##....#O....O#...OO.O.#..#O....OO...O.O.....##.....#..O#O#.#...O..O..#.
|
||||||
|
..OO#.#O.#...............#...#.#.O..#..O.#.#..O.##O..OOO..#O#....##.#.#...#.#.O#.#.O..#.#......#....
|
||||||
|
.#...#.#....O..O.#..O.O..O.....##O#..#.##..OO.....OO.OO..OO...O#...O.O...O.OO##.....O..............O
|
||||||
|
.....O.....#........#O..#.OO#..O...#O....OO..O.#.OOO.#O.O......#O.#.....#O..O..O#..#.#.#.O..O.#...OO
|
||||||
|
#.....#..OO.#....#.##.O.##..O.#.O#.O...O...#O.#.O#..O.#...##....OO#OO......#.O...O.O#.#...O...##.OO#
|
||||||
|
O.......O......O..O...#...#..#...##.##..O...O....O.##.#.#OO#.....#.O#...O.##O...O..........#..##.O.O
|
||||||
|
..............OO.O##.....#.O......##O#....O.O....O..##.#.............O#...O.#OO...O....#...O..O#..OO
|
||||||
|
.#O#...OO...#.#.....O#...O#.O.O#..O..##O.#.#..OO.O.##.#......O..O.O.O...#......OO#.#.#.#.O.OOO#.O.O.
|
||||||
|
..#...#..O.........O.O.O..O.........#..#....#.O#..#O...............O##.O##O.O..O#.#....O.#OO.#.#....
|
||||||
|
..#.#OO.OO..OO#..#O..O##.....O......OO..O.#..O#.......O..##..##.O.O..O.#O....O.O.......O....O....#.#
|
||||||
|
....OOOOO.#.#......#.........#.O.O....O....#.O..O#.....O##..........#..#.....O..O.....O....O.#O.#...
|
||||||
|
OOO.O#..#...O#...O.#..OOO.#.....O..#.O#.O.O.O.#O..#...#...#O....O.#..O..#O..O.#O#.OOOO..............
|
||||||
|
.#.O#OO#..##...O.#..O.O....#O........#O.....O..O....O.....#...#O.O..........#.......OO#...O..OO.##.O
|
||||||
|
OO.....O#.O....O..O.O.#.#O#.......#..##...O.......O...OOO...#...#OO.OO#....O#........OO.OO..OO....##
|
||||||
|
..O..#..#.#.O..O...#.#.#.O......O....O...#....#...#O.....O.#.#O.O..O#......OO.O...#.#OO.#...O.O.O..#
|
||||||
|
.#.O#.O.....O..OO...O..O..#....O#..O..O#....#......O#O....OO....#...O#O....#........O.O##..O....#...
|
||||||
|
#.OOO#..##..O#.#....#.O##..#......O#..OO.....O.....O..OO..#..OO..O..#..#...O.....#.#..O.O.O..#.O...#
|
||||||
|
#.O.#..#.....O.....#O.O...##.O....OO...OO.#....O.#.........O.O#.#....#.#......O....O..O....#.O....#O
|
||||||
|
.#O...O.O....OO#.....O......#...O#..#.O#.O....#...O.O#..O...O...........#......#.##...OO......OO##..
|
||||||
|
........#.#O......#O..#OO....O......#.O.#O#O...O...#O....O...O.........O..OO..##...O.#.#OO#.....##.O
|
||||||
|
.#.OOO.....#...#..O#....#.O....OO.O.O..OO..#.O..OOO.#....O.#..#O#O.#...O.#...O......#.O.O#O...O.OO..
|
||||||
|
.#..#.O#...O....O....O...#.O..#.O...##.##O.O....O..#.#.#.O..#.O.OO..O...#..O#...##.O.....O...O....#.
|
||||||
|
...##...#.##OO.O.O...O...#...##.O..#OOO..#.OO#..O..O....O.O#.#.#O..##.O...O.O..O...O......#.......O.
|
||||||
|
.##.#O..#....O........O..O.O..##...#...#O#...O.....O##.#..#.O........O........O##....#....#.O..O...O
|
||||||
|
O.#.O..O..#..#O.##O.......O.O...O#.O......OO.O.O....O..#.O...#O.O..#..O....O..#..OO#.#.O#..#.#..#.#.
|
||||||
|
...................OO.#O..O...#.O...O...O.O#....#....O.OO.#O.O#.#.O#O.O#.#..O...OOOO..#..O...O.#..#.
|
||||||
|
#.....#....#OO..O...O#..#.##....#.#..#.#O..#.O.O....#.#O.........##OOO...OO...O..#.##.O#..O.#....#..
|
||||||
|
O..#.##....O##.....O.......O.#...#...#.##.....OO.O..O#.#O.#....#.....#.....#.....O.....#............
|
||||||
|
#..#..#...O.#....#......O...#...#.#O.........#O#.#O...O...O...#.#.......#O...............O#....O....
|
||||||
|
##.#..OO..OO#...#.OO.....#....O#O...O.O.O.#....#......O...O#..OO.O..#.#...O.#O...O...#........O.O.O#
|
||||||
|
O.#...O..#.#.O...#O..O#..O.#..O#O#OOO.......#..#O..#....O#...O.O...O....O.............OO..O..O#.#...
|
||||||
|
O##.OO....#..#.....O..O..#..O.#...O..OO.......#...#.#....#...##.#.....#..#..OO#O.#..OO..O#..#..#...O
|
||||||
|
#.O.#...#O.#...#.OO.OO..##.#...#.....O#.O#O.OO.........O...O..O.O...#.........O......OO..#..O...#O..
|
||||||
|
.....#....O.##..O#..O.....#.O.....O...O.OO#OO.O......O..O..O.....#.#...#.O..#...O.O#.OOO.O.#....O...
|
||||||
|
..O...#....O....#.O.O#.#.#.O.OOO........O..OO..O##.....##.....#.O.......#....#.#O.O.#..#.O...#..#..O
|
||||||
|
O#...O...##.#.#..O#O#......#.O..#....O...OO.#...#.OOO##..O.O#.#.#..O#OO.OO###.....O..#...#O.#..O....
|
||||||
|
O.OO..#...O..O......O.#....O.O##....O.#O.O.O###..O...#..#.....#....O###..#...#O.OOO..O.#O.....#.....
|
||||||
|
#O....#....O..O..O#.O.OOO...O.OOO......#....O.##O##O....#.OO..O#..#......O#.........#.#...OO...O....
|
||||||
|
.#..OO.....O..#....O..........O..O.O..O.##...O.O.O.#.O.#...#O..#....O.#........#.#..O.##....#O##.#.#
|
||||||
|
.OO.......O..O#.O..#OOO.O...#.#.O#.##....#.O..#.#.O.OO......#O##.O...........OO..#.......#...O#.....
|
||||||
|
....#......#..........#.#.O..O.....#...O....O.O.OO#.#......O..#.#O..OO..OO#.O#.#O#.O..O.O......#...#
|
||||||
|
O.O.O..#O#......O.#O..#####...O.....#.O..#..O.........O...##.#O.....##.....#..#.....O.#...#O.#O#OO.O
|
||||||
|
.....O..O#...O..#...O.......O..###O...O..O...OO.O...O..O#OO.....O#.O.#.O......#........O.O.O..OO#.O.
|
||||||
|
.O...#.O....O#OO...OO#.#.......OO.....#.#.....#O..#..#.#.#O#..#.O.O.....##.#.#.#...#O...O......O....
|
||||||
|
.#..#.OO....O.#..O..O..O...O..........O.#.OO..#..O............O#.O.#.O#...OO...O#.O.O.###.#O.#..O.O.
|
||||||
|
..#O...#..#..O....#............O..#.O....#...O...#.....O..##.##OO#....#...O#.O.O....OO#O..##..O...#O
|
||||||
|
..OO.#O#....O..#..#..O.#O..O....O.........#.O...#.O....##..#.O........O....O...#.OO..#........O.OOO.
|
||||||
|
.O..#.OOO.O.O..O...#O..#..OO.....##....#..#..O.OO#O...#.O...#.....O#..##.##.#.....O..O....O..#O..OO.
|
||||||
|
...#.O.#.#.....O...#....O..O..##OO.........O.#..O..O......O#.#....O.O..O..O.......O.#.#..#...##...O.
|
||||||
|
..O....##...O...O.#OOOO.O..#.....OO.O.......#O..O..#..O...#....OO....O...##.#....##....O...O...O##.O
|
||||||
|
O..O#.....#O...O...#O...#...O.....#......O...#..#O............#.###O.....O.....O.O.#..#OOOO...#O#...
|
||||||
|
O.O...OO.##....#....#.#.#O....O.#.#..O..O..O.....OOO#.#.......#.....O...O...O...#..#....OO.#.O.....#
|
||||||
|
..#.#.O.O...O..#..O#..O..#..#.OO..##......#OO#....#.O.O.O##..O...O#..#O.........OO.#...OO.O.O.OOO...
|
||||||
|
.......O.O..#.......O.O..#.O#..#...O.......O....O....##OOOO..#....#.#....#.....#O#....#.....O..OO.#.
|
||||||
|
O..#OO..#.##.......##..O..O.#..O.O##.....OOO#..#....#..O.O..O....#..O.O.....#O..#.OO..O#....#.#.....
|
||||||
|
OOO..O.....##....O..#.O.#...O##OOOOO....O.#..O.O#.O..##O.O#OO...O........O.O..O..O..#.O..OOO..#.O.OO
|
||||||
|
...O.O.O..OOO..O..#...#..O...##O#OO.OO..O.........O.....O#O.O.O....#..O#.O#..O.O.O.#.#O##O..#.......
|
||||||
|
OO....O...OO..#..#OO..#......#.O.OO.O.O.#.......#OO........OO...#..O...##..O.....O...O.O#O.O.O#OO...
|
||||||
|
O...O#.OO.....O.O.O...#O.O..O#O........#O.#....#...#.O.#...OOO#..........O.....O...##.....O#O.#.O##.
|
||||||
|
...O....#.O......OO......##..O..O.O....##........O.....#....##...##..#........#..##..O....O.O.#..O#O
|
||||||
|
..##.O....#.O##.OO#O....#OO#OO....O#.O......##..##.O..OO.O...O....O...OO....#.O..O....O#..#...#....O
|
||||||
|
.###....#OOO...#....OOO.#..#....O.O#.......#............O......#...#..##..O#..O..O.##.O...O#....O...
|
||||||
|
..##O..#OO#...O....##.O..#...O.....#.O..O.O.....O..#O#O...##.#O.#....#OOO..O....O....#...OOO.#O..##.
|
||||||
|
.O.O......#OO.......#.O.....#...OOO.O.O.#.O..#.O..##.O..O..O...O.#O##.O....#......#.O.#......#....O.
|
||||||
|
##......O.OO..O#.#O.###O....#...O#......##.......O.OO#O.....O....OO.........#....O.#.O.......O#...#.
|
||||||
|
.O.....##..#....#.O.....O.#..OO...#O...#.#...##....O....#OO.#.O.#O.....#O.O.O#O.OO.....#...OO#...O.O
|
||||||
|
.O#....OO.OO..O..OO.O....##...#..OO.O....O...O.O..O..O..O..#OO...#O...O...O.OO#...O.O.....#O....O...
|
||||||
|
#O......O#....OO###.O...O##...#.........O.....O..##.##....O......O##....#...#..O...O.O.......O...###
|
||||||
|
.....O##O..O..####.#O.OO..#..#..OO.#O.....O...O####.#......#..O....O.#.#......OOOOO.O.O...#.##......
|
||||||
|
O##.#..#..#.#..#.#....#......OO#...O..O#..OO.#O.....O.........O#..#.......#.....##...#O#.#O..OO.....
|
||||||
|
.O..O#O..#.OO.O....O..##O......O.##...O...#.O#.........O...O.O...O.#...OO.........#...#..#OO#.#....#
|
||||||
|
........O#....OO.#.O..O...OO#O..OO#OOO.O#.#.#O..#.....O.OO...O...OO.#..O..O....##..O#...OOO.O.##.O..
|
||||||
|
..#.O....##O.O.#.#....O.#.O.#...OO.O.....#..O.....O....##.......O#.......O.#..O.#.O#.O.O..##......O.
|
||||||
|
#O#O.#...OOOO..OOO.O###....OO....#.O..OOO#..O...#....O.....O..OO.#.O..O###.O...O..#.#...OO...O......
|
||||||
|
......O#.O..#.O.......OOOO..#.O........O.#O##.#.#O#O.....O.#O....#...O...OO.O......OO........O.#..#.
|
||||||
|
O..#..O..##..O.O....#....#..#O...OOO.OO.#O...#.........O..#..O........O#....O.#O#.#O.OO.......O.....
|
||||||
|
..O.OO#..O..O......O...OO...#.....#.....O......O.....O..#....#.....O.O..O#..O.#...#...#O..#..O..O...
|
||||||
|
O.#..O.#O.OO.O#..OO...O#O..OO..O...#.O..#O..#...O....OO#..OO.....OOOO...#O...O#O..OO.........#......
|
||||||
|
....O.O#.#......O.O#....O#.......#....#.#.#O.#O...O#O.#..#.#.OO........O.#.#O....O#.......#..OO#O.O.
|
||||||
|
...O...O..###..#......#.#.O..O....OO##..##OO.......O...O#..OO#OO..#..O........O...#.#.#O.....#O#OOOO
|
||||||
|
...O..O.O#.O.#......O.#OO..OO.O....O.O....#.#O#.O.....O.....O..O.#.OO.....O...O.......O....O.#....O.
|
||||||
|
#..O....O.O.O#..O..#..........#O...##..OO.#.O.O#O...#..O...#.......O.........O....O#O#O.O.O.#.OO.OO#
|
||||||
|
O...#.....O..O#.#O...O...O.##..#O..#.##.O...O##.#O...O..O..O#....#.O..#O##..#...O.O.O..##..OO.O....O
|
||||||
|
#.....#.O....O......OO...OO.#.O..O#..O.O#O......#O...#.#..O.#...#.O.#..#..#....O.O....OOO#..O.......
|
||||||
|
#....#...O#.....O..O.#...O.O..O#..#.O.O.#...#.O..O#.......O......O..O....O....##OO.#O....##.OO....#.
|
||||||
|
O...O.O..#..O#..#O.....#.#.O#O.O......#OOO...OO........O#.O.....#..#.#..#.O.#....#.......OO.#....#O.
|
||||||
|
OO.##.#O...#.O.....O..#.#...#OO......##O......O..###...#.......O#.OO..O...#.#.....O.O......O##......
|
||||||
|
#.O....OO.O.OO.....OO..O...........O..O..#OO#...O#....OO.O.......#.#.OO..OO.OO.#.O...O.#O.O........#
|
||||||
|
..##...O.O.O.O.O...OO.O...O..O.#.#......O.#.#.O.....#.O...O#..O.##O...#....O..#...O.OO.........O#.#.
|
||||||
|
.....OOO#O#OO.O...#......#.O..##OOO#.#.#O.O.#O..#O..O..##O.#.#.....#.....#.#...OO.......O#...O....O#
|
||||||
|
O..##.##...O...O.O#..#....O..O.....O#O#O#O#O....#.O.#O..#....O.O...O..O.#...O.OO..O..O.O#..#O##.#O.O
|
||||||
@@ -0,0 +1,165 @@
|
|||||||
|
--- Day 15: Lens Library ---
|
||||||
|
|
||||||
|
The newly-focused parabolic reflector dish is sending all of the collected light to a point on the side of yet another mountain - the largest mountain on Lava Island. As you approach the mountain, you find that the light is being collected by the wall of a large facility embedded in the mountainside.
|
||||||
|
|
||||||
|
You find a door under a large sign that says "Lava Production Facility" and next to a smaller sign that says "Danger - Personal Protective Equipment required beyond this point".
|
||||||
|
|
||||||
|
As you step inside, you are immediately greeted by a somewhat panicked reindeer wearing goggles and a loose-fitting hard hat. The reindeer leads you to a shelf of goggles and hard hats (you quickly find some that fit) and then further into the facility. At one point, you pass a button with a faint snout mark and the label "PUSH FOR HELP". No wonder you were loaded into that trebuchet so quickly!
|
||||||
|
|
||||||
|
You pass through a final set of doors surrounded with even more warning signs and into what must be the room that collects all of the light from outside. As you admire the large assortment of lenses available to further focus the light, the reindeer brings you a book titled "Initialization Manual".
|
||||||
|
|
||||||
|
"Hello!", the book cheerfully begins, apparently unaware of the concerned reindeer reading over your shoulder. "This procedure will let you bring the Lava Production Facility online - all without burning or melting anything unintended!"
|
||||||
|
|
||||||
|
"Before you begin, please be prepared to use the Holiday ASCII String Helper algorithm (appendix 1A)." You turn to appendix 1A. The reindeer leans closer with interest.
|
||||||
|
|
||||||
|
The HASH algorithm is a way to turn any string of characters into a single number in the range 0 to 255. To run the HASH algorithm on a string, start with a current value of 0. Then, for each character in the string starting from the beginning:
|
||||||
|
|
||||||
|
Determine the ASCII code for the current character of the string.
|
||||||
|
Increase the current value by the ASCII code you just determined.
|
||||||
|
Set the current value to itself multiplied by 17.
|
||||||
|
Set the current value to the remainder of dividing itself by 256.
|
||||||
|
|
||||||
|
After following these steps for each character in the string in order, the current value is the output of the HASH algorithm.
|
||||||
|
|
||||||
|
So, to find the result of running the HASH algorithm on the string HASH:
|
||||||
|
|
||||||
|
The current value starts at 0.
|
||||||
|
The first character is H; its ASCII code is 72.
|
||||||
|
The current value increases to 72.
|
||||||
|
The current value is multiplied by 17 to become 1224.
|
||||||
|
The current value becomes 200 (the remainder of 1224 divided by 256).
|
||||||
|
The next character is A; its ASCII code is 65.
|
||||||
|
The current value increases to 265.
|
||||||
|
The current value is multiplied by 17 to become 4505.
|
||||||
|
The current value becomes 153 (the remainder of 4505 divided by 256).
|
||||||
|
The next character is S; its ASCII code is 83.
|
||||||
|
The current value increases to 236.
|
||||||
|
The current value is multiplied by 17 to become 4012.
|
||||||
|
The current value becomes 172 (the remainder of 4012 divided by 256).
|
||||||
|
The next character is H; its ASCII code is 72.
|
||||||
|
The current value increases to 244.
|
||||||
|
The current value is multiplied by 17 to become 4148.
|
||||||
|
The current value becomes 52 (the remainder of 4148 divided by 256).
|
||||||
|
|
||||||
|
So, the result of running the HASH algorithm on the string HASH is 52.
|
||||||
|
|
||||||
|
The initialization sequence (your puzzle input) is a comma-separated list of steps to start the Lava Production Facility. Ignore newline characters when parsing the initialization sequence. To verify that your HASH algorithm is working, the book offers the sum of the result of running the HASH algorithm on each step in the initialization sequence.
|
||||||
|
|
||||||
|
For example:
|
||||||
|
|
||||||
|
rn=1,cm-,qp=3,cm=2,qp-,pc=4,ot=9,ab=5,pc-,pc=6,ot=7
|
||||||
|
|
||||||
|
This initialization sequence specifies 11 individual steps; the result of running the HASH algorithm on each of the steps is as follows:
|
||||||
|
|
||||||
|
rn=1 becomes 30.
|
||||||
|
cm- becomes 253.
|
||||||
|
qp=3 becomes 97.
|
||||||
|
cm=2 becomes 47.
|
||||||
|
qp- becomes 14.
|
||||||
|
pc=4 becomes 180.
|
||||||
|
ot=9 becomes 9.
|
||||||
|
ab=5 becomes 197.
|
||||||
|
pc- becomes 48.
|
||||||
|
pc=6 becomes 214.
|
||||||
|
ot=7 becomes 231.
|
||||||
|
|
||||||
|
In this example, the sum of these results is 1320. Unfortunately, the reindeer has stolen the page containing the expected verification number and is currently running around the facility with it excitedly.
|
||||||
|
|
||||||
|
Run the HASH algorithm on each step in the initialization sequence. What is the sum of the results? (The initialization sequence is one long line; be careful when copy-pasting it.)
|
||||||
|
|
||||||
|
Your puzzle answer was 511257.
|
||||||
|
--- Part Two ---
|
||||||
|
|
||||||
|
You convince the reindeer to bring you the page; the page confirms that your HASH algorithm is working.
|
||||||
|
|
||||||
|
The book goes on to describe a series of 256 boxes numbered 0 through 255. The boxes are arranged in a line starting from the point where light enters the facility. The boxes have holes that allow light to pass from one box to the next all the way down the line.
|
||||||
|
|
||||||
|
+-----+ +-----+ +-----+
|
||||||
|
Light | Box | | Box | ... | Box |
|
||||||
|
----------------------------------------->
|
||||||
|
| 0 | | 1 | ... | 255 |
|
||||||
|
+-----+ +-----+ +-----+
|
||||||
|
|
||||||
|
Inside each box, there are several lens slots that will keep a lens correctly positioned to focus light passing through the box. The side of each box has a panel that opens to allow you to insert or remove lenses as necessary.
|
||||||
|
|
||||||
|
Along the wall running parallel to the boxes is a large library containing lenses organized by focal length ranging from 1 through 9. The reindeer also brings you a small handheld label printer.
|
||||||
|
|
||||||
|
The book goes on to explain how to perform each step in the initialization sequence, a process it calls the Holiday ASCII String Helper Manual Arrangement Procedure, or HASHMAP for short.
|
||||||
|
|
||||||
|
Each step begins with a sequence of letters that indicate the label of the lens on which the step operates. The result of running the HASH algorithm on the label indicates the correct box for that step.
|
||||||
|
|
||||||
|
The label will be immediately followed by a character that indicates the operation to perform: either an equals sign (=) or a dash (-).
|
||||||
|
|
||||||
|
If the operation character is a dash (-), go to the relevant box and remove the lens with the given label if it is present in the box. Then, move any remaining lenses as far forward in the box as they can go without changing their order, filling any space made by removing the indicated lens. (If no lens in that box has the given label, nothing happens.)
|
||||||
|
|
||||||
|
If the operation character is an equals sign (=), it will be followed by a number indicating the focal length of the lens that needs to go into the relevant box; be sure to use the label maker to mark the lens with the label given in the beginning of the step so you can find it later. There are two possible situations:
|
||||||
|
|
||||||
|
If there is already a lens in the box with the same label, replace the old lens with the new lens: remove the old lens and put the new lens in its place, not moving any other lenses in the box.
|
||||||
|
If there is not already a lens in the box with the same label, add the lens to the box immediately behind any lenses already in the box. Don't move any of the other lenses when you do this. If there aren't any lenses in the box, the new lens goes all the way to the front of the box.
|
||||||
|
|
||||||
|
Here is the contents of every box after each step in the example initialization sequence above:
|
||||||
|
|
||||||
|
After "rn=1":
|
||||||
|
Box 0: [rn 1]
|
||||||
|
|
||||||
|
After "cm-":
|
||||||
|
Box 0: [rn 1]
|
||||||
|
|
||||||
|
After "qp=3":
|
||||||
|
Box 0: [rn 1]
|
||||||
|
Box 1: [qp 3]
|
||||||
|
|
||||||
|
After "cm=2":
|
||||||
|
Box 0: [rn 1] [cm 2]
|
||||||
|
Box 1: [qp 3]
|
||||||
|
|
||||||
|
After "qp-":
|
||||||
|
Box 0: [rn 1] [cm 2]
|
||||||
|
|
||||||
|
After "pc=4":
|
||||||
|
Box 0: [rn 1] [cm 2]
|
||||||
|
Box 3: [pc 4]
|
||||||
|
|
||||||
|
After "ot=9":
|
||||||
|
Box 0: [rn 1] [cm 2]
|
||||||
|
Box 3: [pc 4] [ot 9]
|
||||||
|
|
||||||
|
After "ab=5":
|
||||||
|
Box 0: [rn 1] [cm 2]
|
||||||
|
Box 3: [pc 4] [ot 9] [ab 5]
|
||||||
|
|
||||||
|
After "pc-":
|
||||||
|
Box 0: [rn 1] [cm 2]
|
||||||
|
Box 3: [ot 9] [ab 5]
|
||||||
|
|
||||||
|
After "pc=6":
|
||||||
|
Box 0: [rn 1] [cm 2]
|
||||||
|
Box 3: [ot 9] [ab 5] [pc 6]
|
||||||
|
|
||||||
|
After "ot=7":
|
||||||
|
Box 0: [rn 1] [cm 2]
|
||||||
|
Box 3: [ot 7] [ab 5] [pc 6]
|
||||||
|
|
||||||
|
All 256 boxes are always present; only the boxes that contain any lenses are shown here. Within each box, lenses are listed from front to back; each lens is shown as its label and focal length in square brackets.
|
||||||
|
|
||||||
|
To confirm that all of the lenses are installed correctly, add up the focusing power of all of the lenses. The focusing power of a single lens is the result of multiplying together:
|
||||||
|
|
||||||
|
One plus the box number of the lens in question.
|
||||||
|
The slot number of the lens within the box: 1 for the first lens, 2 for the second lens, and so on.
|
||||||
|
The focal length of the lens.
|
||||||
|
|
||||||
|
At the end of the above example, the focusing power of each lens is as follows:
|
||||||
|
|
||||||
|
rn: 1 (box 0) * 1 (first slot) * 1 (focal length) = 1
|
||||||
|
cm: 1 (box 0) * 2 (second slot) * 2 (focal length) = 4
|
||||||
|
ot: 4 (box 3) * 1 (first slot) * 7 (focal length) = 28
|
||||||
|
ab: 4 (box 3) * 2 (second slot) * 5 (focal length) = 40
|
||||||
|
pc: 4 (box 3) * 3 (third slot) * 6 (focal length) = 72
|
||||||
|
|
||||||
|
So, the above example ends up with a total focusing power of 145.
|
||||||
|
|
||||||
|
With the help of an over-enthusiastic reindeer in a hard hat, follow the initialization sequence. What is the focusing power of the resulting lens configuration?
|
||||||
|
|
||||||
|
Your puzzle answer was 239484.
|
||||||
|
|
||||||
|
Both parts of this puzzle are complete! They provide two gold stars: **
|
||||||
Executable
+47
@@ -0,0 +1,47 @@
|
|||||||
|
#!/usr/bin/env python3
|
||||||
|
|
||||||
|
import sys, re
|
||||||
|
|
||||||
|
|
||||||
|
def HASH(string):
|
||||||
|
res = 0
|
||||||
|
for a in string:
|
||||||
|
res += ord(a)
|
||||||
|
res = res * 17 % 256
|
||||||
|
return res
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == '__main__':
|
||||||
|
instr = open(sys.argv[1]).read().strip('\n').split(',')
|
||||||
|
|
||||||
|
# challenge 1
|
||||||
|
res1 = sum([HASH(a) for a in instr])
|
||||||
|
|
||||||
|
boxes = {}
|
||||||
|
for i in instr:
|
||||||
|
label, op, focus = re.findall(r'(\w+)(\-|\=)(\d*)', i)[0]
|
||||||
|
box = HASH(label)
|
||||||
|
if not box in boxes.keys(): boxes[box] = []
|
||||||
|
present = boxes[box]
|
||||||
|
if op == '=':
|
||||||
|
for i, lens in enumerate(present):
|
||||||
|
if lens[0] == label: present[i] = (label, int(focus))
|
||||||
|
if not (label, int(focus)) in present: present.append((label, int(focus)))
|
||||||
|
elif op == '-':
|
||||||
|
for i, lens in enumerate(present):
|
||||||
|
if lens[0] == label:
|
||||||
|
present.remove(lens)
|
||||||
|
break
|
||||||
|
|
||||||
|
res2 = 0
|
||||||
|
for b, lenses in boxes.items():
|
||||||
|
for i,l in enumerate(lenses):
|
||||||
|
res2 += (b+1) * (i+1) * l[1]
|
||||||
|
|
||||||
|
res1 = str(res1)
|
||||||
|
print(f"challenge 1:\n{res1}\n")
|
||||||
|
|
||||||
|
# challenge 2
|
||||||
|
res2 = str(res2)
|
||||||
|
print(f"challenge 2:\n{res2}\n")
|
||||||
|
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
rn=1,cm-,qp=3,cm=2,qp-,pc=4,ot=9,ab=5,pc-,pc=6,ot=7
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
fzl-,tcjp=8,vkjr=9,xs-,jktcpk=3,gzp-,kfsxsd-,zxkv=7,fxz-,pj=7,mhbdch=7,xlss-,smk-,ppz-,kqggd-,dqh=7,gmv=6,tjjfm=2,gbv=5,gn-,ld=7,jdr-,phq=3,rd-,qz=3,sh-,gzsb=2,glrt=7,vjkrjg-,gjqmpc=7,qnx=7,mf=1,tnrm-,lppg-,gnvx=1,rv-,vnt-,bst-,gkb-,tl=1,bggff-,lm=8,mqq=7,hr-,gkb-,fspkn=2,tjjfm-,shshb=3,qfczq-,zk-,zcsc-,lnrjh=2,fz-,bkb-,rg-,bcfzn=6,xsbb=5,sm=3,rqs-,rvlv=9,pvh=9,rl-,zrb=9,lftk=1,cdn-,zp=8,hc-,mf-,hp-,zk-,dbj=5,tm=9,zx-,gmp=4,gcq-,mxq-,lvh-,lkhb-,vn=9,gzsb=6,xlss=9,drkhc=8,rgqg=1,hkr-,fxz=7,xsm-,fvmf=4,hsm=7,dlrss=9,rv-,kj-,ndtc-,zjf-,zj=9,kv=5,sxvv-,hj-,mltm-,qggz-,mntr-,td=5,lppg=1,xqb-,brt-,nm-,vlp=7,zcjnv=6,chh-,dd=2,fh-,hxfkx=6,hj=6,rzk=7,skpq-,rxb=1,fn=1,nc=1,vqq-,ndq-,xtgd=6,qlgv-,dl-,xln-,rqs=5,vpmmf=1,llvv-,hzp=6,dnbql=3,rqz=5,nfhb=7,vdb-,gmp-,hskv-,xs-,vk-,xll-,ng=2,xb-,mjjph-,tss-,lsd-,qsj-,tbdb-,tdnm=6,bv-,qz=5,zp=8,jn-,fh-,dqh=1,rgrd=5,kqggd-,ddccc-,gdx=3,br-,cnb=4,tfx-,scp=5,rgch-,xltvn=4,xdblmh-,jdr-,fz-,crd-,hfr-,xlss=2,fxz=5,rzl-,vdb-,tss=6,kc=2,bdmrg=6,mkv-,hdr=9,pv-,qcr=4,ntxqq-,mhbdch=8,npghs-,jb-,lzcp=1,zbl-,vsjs-,dmv=1,zhc-,tfx-,jc=8,vlhhb-,zcbg=2,fcbzpl=8,gkb-,zppn-,jj=6,xlc=6,xltvn-,cnb-,lftk-,ptmc-,fxz=6,ncn-,gzp-,lgtd=4,znp-,ncn=8,fg-,lnrjh=6,lkhb-,tnrm=4,hkr-,ltc-,lv-,ck-,dn=5,srt-,hk-,fspkn=9,drnvhj=5,gvf-,gzp-,pq-,lbq=8,lm-,lsx-,jf-,vkjr-,lcvzfp-,vqqp-,glrt=7,zx=4,hskv=9,bqm=6,jm=6,tshhq=7,sg-,pq-,rgqg=4,bcpb-,df=4,qpqx=6,fn=7,drnvhj=5,vf=8,zsx-,jbd-,kczn=9,fspkn=1,cjd=5,hzp=1,zpkc-,kczn=7,mrd=9,ndq-,hp=4,nfmf-,npghs-,zvd=9,dt=2,jdf=2,xzq-,xb=7,cpbb-,nd-,sgq=2,fc=1,tdnm-,fvmf-,ncn=4,zrdk=1,bvb-,gmp=2,pvh=2,klzj=7,lqlh-,tgm-,vf-,xll=3,lcvzfp=4,jrp=1,jq-,cjd-,nxqhqd=9,lx=4,ltc-,kc=9,gddghs=4,lj=9,bggff=8,pxk-,glgpxh-,mrd=6,mhkbd=1,lbq-,rgch-,vf-,ks=8,dt=5,tb=2,cdn=3,vlxv=6,rgrd-,mcfh=9,bkg-,fd-,bdz=4,vk=7,phd=4,bkg-,krz=6,flk=1,jf=8,zxkv=2,hdhk-,nxqhqd-,dvgz=7,dbj-,rvc-,fshfd=7,tb=4,mjx-,vnsgg=1,zppn=6,zx-,kk=2,xs-,xprp=7,hh=9,xnp=8,vndj=9,qnzlf=3,bdmrg-,dxl=5,ss=4,clv-,hk=3,kgx-,qqvmc=9,xzq-,kfsxsd-,bdt-,vqq-,lqlh-,jvp=7,tshhq=5,pvh=4,cp=4,bpd-,bqql-,dvx=8,qtql=7,zxkv=3,qfv-,xlss-,lzs-,kt=3,ltsb-,pfs=2,dmv-,qcr-,sl-,qsjch-,hmd-,bcpb-,drnvhj=4,bf=3,qx=1,gddghs-,zcjnv-,bdmrg-,rd-,ddccc=2,hvk=6,kk=1,chh=5,mxq=9,kcq-,vkjr-,ntxqq-,glgpxh=6,dvzlc-,lnt=2,rkk-,mzpgh=7,pl-,vndj-,nc-,xx=5,klzj=2,xhs-,cx-,jz=7,rmh=7,gjqmpc-,zdr=4,csqh-,zppn-,zc-,bvb=4,tjjfm-,rdzzjm=8,dbj-,sr=4,npghs=1,pxs-,blxq-,rqz=1,grxx-,sg-,fqmdgn-,jf-,pqjf-,xzljl=9,zdr-,hh-,cnb=5,jrq=1,dvx=2,pzbsd-,xpm=5,znp-,gqsr=2,qtql-,kssg=4,qm=3,scd=1,lzcp=4,gdx=9,shshb=2,sxmq=2,mtqb-,xn-,xln=4,vv-,nj-,tjjfm=7,rp=5,kcq=3,bcfzn-,dbj=9,zcbg-,bfx-,gvf=2,ptmc=7,jb=7,kv-,znl=5,gsk-,zjf=8,kmx-,rbft=1,csqh-,zp-,rq=1,rrx=9,mh=2,gnvx=9,mqq=9,bqql=6,gj=2,mhv=3,dcc-,kgx-,vhrd=6,ztj=2,ng-,rl-,bqm=1,rgqg=6,blmgvg=5,jx-,vqqp=8,jb-,lnk=2,rvlv=9,tz-,hj-,ltc=7,gcjgs=7,tm=2,mn=4,ss=7,vlhhb=4,hkd-,xf-,ltsb-,rzl=7,zx=5,phq=8,srt-,jvp=5,sgq-,qnzlf=9,lsd-,fbrz-,dsnd=3,hj-,tcjp-,vnsgg=9,xn-,mzpgh-,sxvv-,gjqmpc-,ncn-,mqq=2,tmpd-,rkk=6,qrlrxg-,csnq-,ltsb=6,pq-,mjx=6,bkc-,bvb-,kgpnf=2,xv=7,cjd=6,hp=3,vf-,pg-,jnq=2,tnng=7,qq-,dxl=5,nfpqv-,rg=9,dmv-,gd-,rgch-,nfpqv=9,gjqmpc=6,sgq-,cjd-,qnn-,ztj-,gn-,jqhg-,pzbsd-,qjn-,gggk=6,mntr=8,sxvv=3,jtx-,krz-,lzs-,pvh-,rrx=1,kgpnf-,bkg-,krz=4,vpmmf=8,rm=5,jr-,lx-,hbsv=1,pq=4,txs=9,mltm=3,sr=1,hr=8,dqh-,rm-,vdb=8,hdhk-,fzx-,xpm=1,hkr=1,qx=3,xn=1,zjf-,bpd=7,vxb=4,mcfh-,dcc=7,sgq-,vpmmf-,zcsc-,gggk=2,hr-,sgq-,tmpd-,rbft-,xm-,pqjf=6,vnt-,hmd-,vg-,sv-,bqm-,dsnd=2,hbq-,zc-,fxjc-,vsjs-,xv-,jqhg=2,bqm=6,qtz-,rxb-,mjx=3,br=8,hp-,bf=8,hbq-,lnrjh=3,xb=9,cdf=4,pm-,xlc-,tm=8,jrq=1,hq-,kqggd-,dhh-,tf-,nxqhqd-,qpqx=9,vpmmf=8,kgx-,glgpxh=2,rzl=1,qtz-,rl=5,sb=5,lfz-,bcpb-,xsdlmd=8,fshfd-,vlkx-,ss=3,xs=2,mn=5,dl-,lzcp=8,bqql=3,nd=4,lsx-,znl-,ltc=1,qggz-,zrb-,tbdb=4,drkhc=7,dkvqm-,tz-,hvk-,ld=5,mjx-,bl=5,qx=2,zppn=7,rgrd=1,bpd=7,bdmrg-,rl-,rqz=7,kc=1,gzp-,kcx=6,kmx-,rxptm=4,rrn=4,mhv=4,zjf-,blmgvg-,csnq-,ttgzdn-,ptmc=6,jq-,rxptm=8,mtqb=5,bpt=7,pxs-,cx=7,cz-,mn-,qfv=5,kgv=2,xv-,blmgvg-,cp=4,hq-,vlp-,xnp-,hh-,lbrn-,crd=3,jc=2,sr=9,vkxm-,mtqb-,sf=3,sv-,hfdzfc-,gbv=3,xsdlmd=9,nst=2,kf-,vn=4,nfhb=8,gkb-,rvlv-,drqq=5,kx=9,hp=8,dh=3,hbq-,pfxqhx=9,zx=9,jc-,zjttq-,vc-,lnk=6,tnrm=8,nxz=1,lcvzfp-,dnbql=6,xs-,tshhq-,kgv-,dvgz-,zhg=8,ksm-,kt=4,jqhg=8,xpllk-,fspkn=6,fc=3,rbft-,scp=5,hk-,hbsv-,drqq=8,kv=6,zlt=6,sxmq=8,qz=9,brt-,smr-,zsx=2,jvp-,vxcfp-,sf-,zhg=1,rmh=8,ztj=9,tb-,jdf-,xb=6,fvmf=5,vqq-,lm-,rlx-,zjttq-,lzcp-,fd-,vkjr=7,hj-,qnn=1,rv-,tb=9,sfrd=7,dhh-,smk=3,xb-,glms=3,jgmsl-,xzq-,mmx=8,zcbg-,pxs=8,cz-,ksm-,skpq-,rrn-,td-,hfr=4,pq-,vt-,krz-,crd-,dnbql=2,mmx=3,rq-,tgm-,fbrz=7,xm-,rv=1,sv-,nfmf-,pptj=7,kgpnf-,cnd=1,vdb-,sb-,pzbsd-,pqc=3,mf=3,rm=7,cjd-,tnng-,mcfh-,fvmf=5,qsjch=5,dt-,hmd=2,hkd-,hvhd=7,nm=3,mpd-,gsk=1,cbnq=2,sl=8,zhc=8,xnp=7,jrq=8,xzljl=1,ht-,tcjp=4,jgmsl=6,vn-,fqmdgn-,xln=4,tfx-,kfjgqb-,pv=3,dz=5,dj-,bpd=9,rqz=1,cc-,nxqhqd-,kkz=4,drqq=8,rzk=9,skk-,tz=4,nfpqv=4,kfsxsd-,pxk-,hk-,nxqhqd=7,rdzzjm=3,dz-,xx=5,sb=6,phd-,cnk-,zqvb-,rzl-,hxfkx=9,llb=3,sr-,gsk=7,bfx-,dmv-,qm-,lf-,jrq=3,hp=2,scp=7,mcfh=7,lnrjh=8,fvmf=2,hvk-,sv-,drnvhj-,jbd=2,hdLine truncated
|
||||||
Whitespace-only changes.
Executable
+62
@@ -0,0 +1,62 @@
|
|||||||
|
#!/usr/bin/env python3
|
||||||
|
|
||||||
|
import sys
|
||||||
|
|
||||||
|
|
||||||
|
ENERGY = []
|
||||||
|
|
||||||
|
|
||||||
|
# direction given as tuple, e.g., (1,0) for right
|
||||||
|
def move_beam(x,y,d,grid):
|
||||||
|
while True:
|
||||||
|
if (x > len(grid[0])-1) or (x < 0) or (y > len(grid)-1) or (y < 0): break
|
||||||
|
if d in ENERGY[x+y*len(grid[0])]: break
|
||||||
|
ENERGY[x+y*len(grid[0])].append(d)
|
||||||
|
tile = grid[y][x]
|
||||||
|
if tile == '.':
|
||||||
|
x, y = x+d[0], y+d[1]
|
||||||
|
elif (tile == '-' and d[1] == 0) or (tile == '|' and d[0] == 0):
|
||||||
|
x,y = x+d[0], y+d[1]
|
||||||
|
elif tile == '\\':
|
||||||
|
d = (d[1],d[0])
|
||||||
|
x,y = x+d[0], y+d[1]
|
||||||
|
elif tile == '/':
|
||||||
|
d = (-d[1],-d[0])
|
||||||
|
x,y = x+d[0], y+d[1]
|
||||||
|
elif tile == '-':
|
||||||
|
move_beam(x-1, y, (-1,0), grid)
|
||||||
|
move_beam(x+1, y, (1,0), grid)
|
||||||
|
elif tile == '|':
|
||||||
|
move_beam(x, y-1, (0,-1), grid)
|
||||||
|
move_beam(x, y+1, (0,1), grid)
|
||||||
|
|
||||||
|
|
||||||
|
def energize(x,y,d,grid):
|
||||||
|
global ENERGY
|
||||||
|
ENERGY = []
|
||||||
|
for i in range(len(grid) * len(grid[0])):
|
||||||
|
ENERGY.append([])
|
||||||
|
move_beam(x,y,d,grid)
|
||||||
|
return len(ENERGY) - ENERGY.count([])
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == '__main__':
|
||||||
|
grid = [list(line.strip('\n')) for line in open(sys.argv[1])]
|
||||||
|
res2 = 0
|
||||||
|
for i in range(len(grid)):
|
||||||
|
res2 = max(energize(0,i,(1,0),grid),res2)
|
||||||
|
for i in range(len(grid[0])):
|
||||||
|
res2 = max(energize(i,0,(0,1),grid),res2)
|
||||||
|
for i in range(len(grid)):
|
||||||
|
res2 = max(energize(len(grid)-1,i,(-1,0),grid),res2)
|
||||||
|
for i in range(len(grid[0])):
|
||||||
|
res2 = max(energize(i,len(grid[0])-1,(0,-1),grid),res2)
|
||||||
|
|
||||||
|
# challenge 1
|
||||||
|
res1 = str(energize(0,0,(1,0),grid))
|
||||||
|
print(f"challenge 1:\n{res1}\n")
|
||||||
|
|
||||||
|
# challenge 2
|
||||||
|
res2 = str(res2)
|
||||||
|
print(f"challenge 2:\n{res2}\n")
|
||||||
|
|
||||||
@@ -0,0 +1,10 @@
|
|||||||
|
.|...\....
|
||||||
|
|.-.\.....
|
||||||
|
.....|-...
|
||||||
|
........|.
|
||||||
|
..........
|
||||||
|
.........\
|
||||||
|
..../.\\..
|
||||||
|
.-.-/..|..
|
||||||
|
.|....-|.\
|
||||||
|
..//.|....
|
||||||
@@ -0,0 +1,110 @@
|
|||||||
|
\.................-....-.-.|....................|......./.|.\................|...........|....--..............
|
||||||
|
............-...................|.............|..-.......-/..............-....\...............................
|
||||||
|
|.......//...........................................|...............-......../.....\....................\....
|
||||||
|
....|......-.-.............-......\.....\......../..................../.......................................
|
||||||
|
..\..\../................../.............-............|....-.........................|......|...............|.
|
||||||
|
-..|........................./.................\.........\./.............\..|..-...-.............\............
|
||||||
|
.\......||-..................../................-................./....|........................|.............
|
||||||
|
..............\./...........-.........../-................-.........\...\........../-.......|.................
|
||||||
|
....-..........-.-.....\......................../.......-..........-/.....................||................|.
|
||||||
|
./..........|/............................\./............................./....../........\...-|............\-
|
||||||
|
........\.............................-...../............---...........|...............|......\\..............
|
||||||
|
........//....|.\......./...\.............|..............\............./...........-.|..-.............|.......
|
||||||
|
...................\...........-/..-......\...|........-.|................\-.......|........\.................
|
||||||
|
|.|....../|............\./..-........\..............................-.....................|....../............
|
||||||
|
............-....................-..............-..-................|.//.............-.............-..........
|
||||||
|
..........-.......-......|-................./........../...\........-.......................-..\.......\......
|
||||||
|
................../....|............-....../................./.....................|.................-........
|
||||||
|
...\..............--..|.....||.....\.............\../................................................-.-...../
|
||||||
|
.........-......|....-.................-.......\-................./..|...................|\.....\.....|.|-....
|
||||||
|
......................-......................-............/....................\...../...\..../...............
|
||||||
|
...../......-...............\...-....|......../.........\................................|.........../........
|
||||||
|
........../.......\..............-...............\........-|....-......-.............|...........|........./..
|
||||||
|
./...............\....../....../..../...................................................|.....|.|../......./..
|
||||||
|
....|\........\-...../...................-.............\.\..................................././..........\...
|
||||||
|
....................................-..../......................-..///......-...|.|..........................|
|
||||||
|
.........-\.....-...........|........./..........-..\.....\./...................-........................-....
|
||||||
|
....../.......././......--.....|.\..-...-....\..........................-....-...-..|.|.....|.......\-./......
|
||||||
|
...-....................-................|.............-../........|../........-.............|\...............
|
||||||
|
...../...........-......../................|................|.....\.....-.............../...|....../\.........
|
||||||
|
./...\.....\..-./.........................|................................-....................-.............
|
||||||
|
.............\|.../....\\.....\..|...........\.....................|......|.|.....|.....-............\.\......
|
||||||
|
........................|......-..........-.../......-........|...../.\|...-................................|.
|
||||||
|
.......\...-...\..........|.....\...................\.........|..........-/.........\...................../...
|
||||||
|
.-|.......|............./..|./....-.../...\............-......../..............-.......//...-...........||.\..
|
||||||
|
..|..\./..-........\..|....-..\.........../..............................|..\..................../..|...../-..
|
||||||
|
.|.........-.\...........................\..../......./....||............\..........|............-.\|.........
|
||||||
|
....................\..../|............................\.../..|........./...../............||........\....../.
|
||||||
|
....................../.....|...................|......|.................|..|.......|................|........
|
||||||
|
.....................\.........-..../.........../../..-......\.................|.../....................../...
|
||||||
|
........\.-................/........\...../....../.|.\...|/../..........................................-.....
|
||||||
|
....................................|......./...../............-................-/..|.-....................\..
|
||||||
|
..|.........................-....................../...|.....|.............../.........../.....|\.............
|
||||||
|
.......................................|.\.|.......................-.......|..............\............-./....
|
||||||
|
..........//................\..|./................-.................-..../../|................................
|
||||||
|
.|......................................./............/..-.......-.|.........................\|..|............
|
||||||
|
............................/.-..................-./..../..............|-.........-|..........................
|
||||||
|
.................-...|................\.........|\...............................\...........\...//...........
|
||||||
|
........\..|.|--.............|.......\.................|......|\./.........................\.|................
|
||||||
|
.-|.............|\|.....\|././...|..\.............\..\...................\...........\...../..................
|
||||||
|
..../..............-..|...|.........-.........\.....-...........-.....|...\.-....-../.................\.......
|
||||||
|
........\.|........\\.........-...............-.......-..................................../..........|.......
|
||||||
|
...............-...................\/...............\..-\...........|.-........-.\-.....\....\..../......-....
|
||||||
|
.../-......./..............|.......|..//......-....................../.|....\......|..\.........../-\.........
|
||||||
|
.-....|./....-.../....../.....-..............\..-..\..-............\................|...|..........-.......|..
|
||||||
|
|......../...................\..../....\......./..|.................\...............\.........\../.|......../.
|
||||||
|
../............/........|..|.......................................\../\...............\............/.......\.
|
||||||
|
........-.-...\........../.......-....-............./.............-......./................\..........-.......
|
||||||
|
.../-................/......|/........-......|..........|..-..............|/..........................-.......
|
||||||
|
......./............../...................|../...../................./../..........\../.....\....\............
|
||||||
|
..............-..|../-........................|...\.../...-/..........\.......\......\.................-....-.
|
||||||
|
......................................-/.\........................../......-..\..\........\...............|..\
|
||||||
|
.............-.........../-|........-........\....-.....\....../..\........................\......|.......\...
|
||||||
|
.././....................|\.../\.........\.|.............../..../...|......./.\...|.......\.........|.........
|
||||||
|
......................./........./-./...........................|/...\........-.../.................||........
|
||||||
|
..............|./........\..............\.............................|/................../............|.-..|.
|
||||||
|
.........................-......../........./.....|....-..-.-..............-.-......../.......\...\./.........
|
||||||
|
.-............../../....\//......../...|......|......\..................-......\.....-....\|.........|........
|
||||||
|
..............-.....................\.................\.|...-............................|......\.............
|
||||||
|
\\.....|...........\............|............................../............................................\.
|
||||||
|
.-........../|...\..............-...............................\...........\.....|......\..........\.........
|
||||||
|
.\............\.|....-........./....../../.....-..\........|...............-..................|............-.|
|
||||||
|
.....\......-.........-.........|....../..-....|.....\..../....|........-.....................................
|
||||||
|
..........\-..-..../\.....................\.........-...........|..../-.......................\....-..........
|
||||||
|
...../............./..|..................../............../../.........|...............-../...................
|
||||||
|
.....|...../.....|......-.............................|...........-......................./............/......
|
||||||
|
.....................||./.-.................-.........\.\..................-..............\...--.........\....
|
||||||
|
.|......-......-.\.......-......\....\..\..|.........../......./.....................-..........|.............
|
||||||
|
.....\.....\............................--..................|..-........\....\...\.|.\.-...........\...\......
|
||||||
|
./...........\.......\/......|........./..|................\-................/....\...................\.\.....
|
||||||
|
..|...............................-.........-.|/......|.....|........\........................................
|
||||||
|
.......|............-............../............-......../..-...\|-...-..../...........-..........-..-/.......
|
||||||
|
............................-..\.......................................-.........................\..........-.
|
||||||
|
........................\.........|................||...-....\......\.....\.................\...\\....../.....
|
||||||
|
....\../.....-.......-.................-|...................-../.|-............|........-|......./../...\.....
|
||||||
|
..................................................\.......|......./..\./......../....|....-|.-................
|
||||||
|
....../.........|.......|...|.......\.../|...............-.......-\..\......././..................|..\.|...../
|
||||||
|
............|.....\...........-.............................../.....-.................-.../............/.../..
|
||||||
|
...../.......\............................|.....\....\................/..................\......../...........
|
||||||
|
..................-....\.........\|................/|......../.-................|...\......................--.
|
||||||
|
......-..-.....................................-\.........|.../.....................|..|.-.....\...|....\....-
|
||||||
|
......-......-.................-......|..................................................|....................
|
||||||
|
..\...............|......../........-......./.............../...........-..........|/.....///\.....-..........
|
||||||
|
.........../..|.............../..........\|.........................\...|.....\||....\...|.|/.....-....../....
|
||||||
|
...../...../.....-............................................|........|............|.........................
|
||||||
|
......-../\................../..............\............\.................../|...........|.............\.....
|
||||||
|
...........-..........................-....\..\..|.-..............................................\........|..
|
||||||
|
/.--..//....\...............................-............|..././..............................................
|
||||||
|
/...............|.........../..../......................\.....|............|...........|...................-..
|
||||||
|
..-................\../|......../...................../...........\..|.|\../..................................
|
||||||
|
....|...../.....-......\.........................-.....//...............|.........-.......|...-....--.........
|
||||||
|
....|..\.-..../....................|..........\............./...........\.../.................................
|
||||||
|
............................\...................................../.......................|...........\.......
|
||||||
|
.........../.....-.....................\..\.-..|............-...............\.........................-.......
|
||||||
|
......-.......-\.\......\..-.-........./...........\..........|........................\.....-.....\..........
|
||||||
|
..............-....../.-............./........../..............\-....-.../...../.-............\......./.-.....
|
||||||
|
......|...................................................||..../...|\.....................-.../...\........|.
|
||||||
|
......|.//........................-...../...........-..\...|......|..................../........../...........
|
||||||
|
.....................................................|.........//...........|\.....\....................|.../.
|
||||||
|
............-..||...........|....../....................\...\................................../.......|......
|
||||||
|
..\....\......./-\.\...........-\................|.........../................||.../.....-...........\........
|
||||||
@@ -0,0 +1,78 @@
|
|||||||
|
--- Day 1: Historian Hysteria ---
|
||||||
|
|
||||||
|
The Chief Historian is always present for the big Christmas sleigh launch, but nobody has seen him in months! Last anyone heard, he was visiting locations that are historically significant to the North Pole; a group of Senior Historians has asked you to accompany them as they check the places they think he was most likely to visit.
|
||||||
|
|
||||||
|
As each location is checked, they will mark it on their list with a star. They figure the Chief Historian must be in one of the first fifty places they'll look, so in order to save Christmas, you need to help them get fifty stars on their list before Santa takes off on December 25th.
|
||||||
|
|
||||||
|
Collect stars by solving puzzles. Two puzzles will be made available on each day in the Advent calendar; the second puzzle is unlocked when you complete the first. Each puzzle grants one star. Good luck!
|
||||||
|
|
||||||
|
You haven't even left yet and the group of Elvish Senior Historians has already hit a problem: their list of locations to check is currently empty. Eventually, someone decides that the best place to check first would be the Chief Historian's office.
|
||||||
|
|
||||||
|
Upon pouring into the office, everyone confirms that the Chief Historian is indeed nowhere to be found. Instead, the Elves discover an assortment of notes and lists of historically significant locations! This seems to be the planning the Chief Historian was doing before he left. Perhaps these notes can be used to determine which locations to search?
|
||||||
|
|
||||||
|
Throughout the Chief's office, the historically significant locations are listed not by name but by a unique number called the location ID. To make sure they don't miss anything, The Historians split into two groups, each searching the office and trying to create their own complete list of location IDs.
|
||||||
|
|
||||||
|
There's just one problem: by holding the two lists up side by side (your puzzle input), it quickly becomes clear that the lists aren't very similar. Maybe you can help The Historians reconcile their lists?
|
||||||
|
|
||||||
|
For example:
|
||||||
|
|
||||||
|
3 4
|
||||||
|
4 3
|
||||||
|
2 5
|
||||||
|
1 3
|
||||||
|
3 9
|
||||||
|
3 3
|
||||||
|
|
||||||
|
Maybe the lists are only off by a small amount! To find out, pair up the numbers and measure how far apart they are. Pair up the smallest number in the left list with the smallest number in the right list, then the second-smallest left number with the second-smallest right number, and so on.
|
||||||
|
|
||||||
|
Within each pair, figure out how far apart the two numbers are; you'll need to add up all of those distances. For example, if you pair up a 3 from the left list with a 7 from the right list, the distance apart is 4; if you pair up a 9 with a 3, the distance apart is 6.
|
||||||
|
|
||||||
|
In the example list above, the pairs and distances would be as follows:
|
||||||
|
|
||||||
|
The smallest number in the left list is 1, and the smallest number in the right list is 3. The distance between them is 2.
|
||||||
|
The second-smallest number in the left list is 2, and the second-smallest number in the right list is another 3. The distance between them is 1.
|
||||||
|
The third-smallest number in both lists is 3, so the distance between them is 0.
|
||||||
|
The next numbers to pair up are 3 and 4, a distance of 1.
|
||||||
|
The fifth-smallest numbers in each list are 3 and 5, a distance of 2.
|
||||||
|
Finally, the largest number in the left list is 4, while the largest number in the right list is 9; these are a distance 5 apart.
|
||||||
|
|
||||||
|
To find the total distance between the left list and the right list, add up the distances between all of the pairs you found. In the example above, this is 2 + 1 + 0 + 1 + 2 + 5, a total distance of 11!
|
||||||
|
|
||||||
|
Your actual left and right lists contain many location IDs. What is the total distance between your lists?
|
||||||
|
|
||||||
|
Your puzzle answer was 1660292.
|
||||||
|
--- Part Two ---
|
||||||
|
|
||||||
|
Your analysis only confirmed what everyone feared: the two lists of location IDs are indeed very different.
|
||||||
|
|
||||||
|
Or are they?
|
||||||
|
|
||||||
|
The Historians can't agree on which group made the mistakes or how to read most of the Chief's handwriting, but in the commotion you notice an interesting detail: a lot of location IDs appear in both lists! Maybe the other numbers aren't location IDs at all but rather misinterpreted handwriting.
|
||||||
|
|
||||||
|
This time, you'll need to figure out exactly how often each number from the left list appears in the right list. Calculate a total similarity score by adding up each number in the left list after multiplying it by the number of times that number appears in the right list.
|
||||||
|
|
||||||
|
Here are the same example lists again:
|
||||||
|
|
||||||
|
3 4
|
||||||
|
4 3
|
||||||
|
2 5
|
||||||
|
1 3
|
||||||
|
3 9
|
||||||
|
3 3
|
||||||
|
|
||||||
|
For these example lists, here is the process of finding the similarity score:
|
||||||
|
|
||||||
|
The first number in the left list is 3. It appears in the right list three times, so the similarity score increases by 3 * 3 = 9.
|
||||||
|
The second number in the left list is 4. It appears in the right list once, so the similarity score increases by 4 * 1 = 4.
|
||||||
|
The third number in the left list is 2. It does not appear in the right list, so the similarity score does not increase (2 * 0 = 0).
|
||||||
|
The fourth number, 1, also does not appear in the right list.
|
||||||
|
The fifth number, 3, appears in the right list three times; the similarity score increases by 9.
|
||||||
|
The last number, 3, appears in the right list three times; the similarity score again increases by 9.
|
||||||
|
|
||||||
|
So, for these example lists, the similarity score at the end of this process is 31 (9 + 4 + 0 + 0 + 9 + 9).
|
||||||
|
|
||||||
|
Once again consider your left and right lists. What is their similarity score?
|
||||||
|
|
||||||
|
Your puzzle answer was 22776016.
|
||||||
|
|
||||||
|
Both parts of this puzzle are complete! They provide two gold stars: **
|
||||||
Executable
+24
@@ -0,0 +1,24 @@
|
|||||||
|
#!/usr/bin/env python3
|
||||||
|
|
||||||
|
import sys
|
||||||
|
|
||||||
|
if __name__ == '__main__':
|
||||||
|
tuples = [[int(l) for l in line.strip('\n').split(' ')] for line in open(sys.argv[1])]
|
||||||
|
first, second = [sorted(a) for a in zip(*tuples)]
|
||||||
|
# first = []
|
||||||
|
# second = []
|
||||||
|
# for line in lines:
|
||||||
|
# f, s = line.split(' ')
|
||||||
|
# first.append(int(f))
|
||||||
|
# second.append(int(s))
|
||||||
|
# first.sort()
|
||||||
|
# second.sort()
|
||||||
|
|
||||||
|
# challenge 1
|
||||||
|
res1 = sum([abs(x-y) for (x,y) in zip(first, second)])
|
||||||
|
print(f"challenge 1:\n{res1}\n")
|
||||||
|
|
||||||
|
# challenge 2
|
||||||
|
res2 = sum([x * second.count(x) for x in first])
|
||||||
|
print(f"challenge 2:\n{res2}")
|
||||||
|
|
||||||
+1000
@@ -0,0 +1,1000 @@
|
|||||||
|
15244 50562
|
||||||
|
81245 49036
|
||||||
|
92897 21393
|
||||||
|
63271 60643
|
||||||
|
49672 33212
|
||||||
|
92232 76048
|
||||||
|
53492 58600
|
||||||
|
92941 61161
|
||||||
|
58509 86979
|
||||||
|
28174 73806
|
||||||
|
70084 21118
|
||||||
|
24410 68037
|
||||||
|
84499 63407
|
||||||
|
66548 35177
|
||||||
|
65580 63759
|
||||||
|
87805 49036
|
||||||
|
83099 19486
|
||||||
|
18390 12243
|
||||||
|
26848 76511
|
||||||
|
18807 86451
|
||||||
|
72147 24247
|
||||||
|
79927 19614
|
||||||
|
11257 32484
|
||||||
|
58028 46123
|
||||||
|
75951 64756
|
||||||
|
50715 78058
|
||||||
|
95795 74458
|
||||||
|
32111 39063
|
||||||
|
46546 38789
|
||||||
|
72734 39167
|
||||||
|
98182 93444
|
||||||
|
62716 53597
|
||||||
|
89475 25175
|
||||||
|
39176 55091
|
||||||
|
40923 88724
|
||||||
|
62512 51774
|
||||||
|
86618 93444
|
||||||
|
52758 47249
|
||||||
|
13428 93526
|
||||||
|
21791 94210
|
||||||
|
93809 21118
|
||||||
|
17938 14392
|
||||||
|
60129 64756
|
||||||
|
70192 49036
|
||||||
|
12155 79882
|
||||||
|
40333 53270
|
||||||
|
23806 88706
|
||||||
|
46661 85277
|
||||||
|
88336 57672
|
||||||
|
87513 36284
|
||||||
|
41580 97455
|
||||||
|
39488 79018
|
||||||
|
53900 78058
|
||||||
|
63780 98092
|
||||||
|
18471 20090
|
||||||
|
77849 73059
|
||||||
|
93111 78100
|
||||||
|
52950 22317
|
||||||
|
81379 35177
|
||||||
|
91351 19771
|
||||||
|
14227 53597
|
||||||
|
51335 39645
|
||||||
|
98624 98092
|
||||||
|
21994 54585
|
||||||
|
60107 60337
|
||||||
|
63161 47739
|
||||||
|
42618 96226
|
||||||
|
94665 84252
|
||||||
|
79153 34048
|
||||||
|
78730 80552
|
||||||
|
75722 70308
|
||||||
|
68857 47918
|
||||||
|
88672 98092
|
||||||
|
59881 27613
|
||||||
|
85772 32111
|
||||||
|
30276 98092
|
||||||
|
14586 84246
|
||||||
|
67593 49036
|
||||||
|
72269 13771
|
||||||
|
25858 56490
|
||||||
|
33541 15922
|
||||||
|
16446 54557
|
||||||
|
47844 62540
|
||||||
|
78173 49722
|
||||||
|
50682 88706
|
||||||
|
75282 74146
|
||||||
|
62042 83481
|
||||||
|
18797 76066
|
||||||
|
24212 35217
|
||||||
|
55048 57348
|
||||||
|
91631 84573
|
||||||
|
93807 97649
|
||||||
|
88119 98092
|
||||||
|
19366 77445
|
||||||
|
76255 50452
|
||||||
|
98264 93444
|
||||||
|
64583 34766
|
||||||
|
96480 54682
|
||||||
|
67367 64709
|
||||||
|
12629 53597
|
||||||
|
55622 98092
|
||||||
|
48715 75722
|
||||||
|
38717 98460
|
||||||
|
88940 42098
|
||||||
|
57583 21667
|
||||||
|
13512 32111
|
||||||
|
89814 60737
|
||||||
|
64756 93444
|
||||||
|
16224 53597
|
||||||
|
10346 46433
|
||||||
|
73809 55198
|
||||||
|
80544 20677
|
||||||
|
11856 76359
|
||||||
|
59087 21118
|
||||||
|
72673 20090
|
||||||
|
49449 45231
|
||||||
|
20810 98650
|
||||||
|
28257 76359
|
||||||
|
72761 88706
|
||||||
|
87721 84970
|
||||||
|
33910 17682
|
||||||
|
71512 76359
|
||||||
|
51593 34928
|
||||||
|
52645 73953
|
||||||
|
65785 21745
|
||||||
|
29202 39203
|
||||||
|
84191 30175
|
||||||
|
90538 28190
|
||||||
|
36816 33095
|
||||||
|
74544 38282
|
||||||
|
97584 54184
|
||||||
|
58739 93390
|
||||||
|
75540 64756
|
||||||
|
68067 64756
|
||||||
|
52407 25292
|
||||||
|
15044 66413
|
||||||
|
20591 93444
|
||||||
|
25885 37703
|
||||||
|
26653 32104
|
||||||
|
42596 88313
|
||||||
|
23950 64756
|
||||||
|
52254 88313
|
||||||
|
70806 44075
|
||||||
|
42195 20677
|
||||||
|
36372 36394
|
||||||
|
47944 93575
|
||||||
|
38297 21118
|
||||||
|
19998 76359
|
||||||
|
88241 78058
|
||||||
|
73698 44859
|
||||||
|
92258 29814
|
||||||
|
98092 78058
|
||||||
|
28030 88927
|
||||||
|
53514 59214
|
||||||
|
77999 30893
|
||||||
|
66582 71673
|
||||||
|
79423 10257
|
||||||
|
46938 86494
|
||||||
|
42971 21118
|
||||||
|
11339 13583
|
||||||
|
71889 43763
|
||||||
|
25429 62716
|
||||||
|
81687 15843
|
||||||
|
35428 14294
|
||||||
|
21885 88053
|
||||||
|
98374 37224
|
||||||
|
81362 34784
|
||||||
|
41486 20677
|
||||||
|
20831 98092
|
||||||
|
26838 45057
|
||||||
|
89226 64709
|
||||||
|
11351 66528
|
||||||
|
20955 49036
|
||||||
|
34764 42441
|
||||||
|
43198 21118
|
||||||
|
54892 21799
|
||||||
|
64587 51818
|
||||||
|
62645 88706
|
||||||
|
39255 32111
|
||||||
|
65266 40330
|
||||||
|
20283 30516
|
||||||
|
56574 21118
|
||||||
|
12809 35177
|
||||||
|
23338 15079
|
||||||
|
58721 76273
|
||||||
|
68541 33747
|
||||||
|
46673 34048
|
||||||
|
59073 25694
|
||||||
|
80216 62716
|
||||||
|
81975 28478
|
||||||
|
44297 45993
|
||||||
|
34344 98092
|
||||||
|
63009 28253
|
||||||
|
43350 24492
|
||||||
|
95286 35177
|
||||||
|
33964 82330
|
||||||
|
87854 76359
|
||||||
|
23407 81183
|
||||||
|
95569 74797
|
||||||
|
45440 77445
|
||||||
|
80991 19568
|
||||||
|
30893 61274
|
||||||
|
26305 69824
|
||||||
|
60205 68773
|
||||||
|
12663 76359
|
||||||
|
43419 89650
|
||||||
|
39569 77945
|
||||||
|
73240 17501
|
||||||
|
84277 39378
|
||||||
|
94177 89662
|
||||||
|
95690 94786
|
||||||
|
92242 91731
|
||||||
|
73905 51412
|
||||||
|
35977 13583
|
||||||
|
27680 20677
|
||||||
|
79830 79733
|
||||||
|
84278 52001
|
||||||
|
85984 62716
|
||||||
|
39122 37115
|
||||||
|
78800 35929
|
||||||
|
33253 76179
|
||||||
|
83659 33516
|
||||||
|
91248 15310
|
||||||
|
89362 39762
|
||||||
|
15884 24386
|
||||||
|
98545 18731
|
||||||
|
15249 34048
|
||||||
|
47287 77445
|
||||||
|
68392 27779
|
||||||
|
62854 73116
|
||||||
|
43214 39063
|
||||||
|
65154 73341
|
||||||
|
71451 89287
|
||||||
|
85490 10108
|
||||||
|
10175 60337
|
||||||
|
79597 54843
|
||||||
|
15040 15044
|
||||||
|
96993 21393
|
||||||
|
36177 66813
|
||||||
|
44659 38606
|
||||||
|
10713 49127
|
||||||
|
95267 84970
|
||||||
|
38841 75464
|
||||||
|
33233 71632
|
||||||
|
73302 93444
|
||||||
|
40471 21118
|
||||||
|
26947 80385
|
||||||
|
39627 51365
|
||||||
|
47637 30893
|
||||||
|
53778 29214
|
||||||
|
79782 45138
|
||||||
|
10038 45411
|
||||||
|
86184 64709
|
||||||
|
69322 93444
|
||||||
|
70602 88706
|
||||||
|
85109 49036
|
||||||
|
58501 31677
|
||||||
|
97931 25694
|
||||||
|
24913 88313
|
||||||
|
19478 93437
|
||||||
|
51774 23744
|
||||||
|
45194 46530
|
||||||
|
78436 13583
|
||||||
|
75773 53334
|
||||||
|
24862 77445
|
||||||
|
98325 49788
|
||||||
|
68242 44288
|
||||||
|
21878 78058
|
||||||
|
22527 15044
|
||||||
|
53407 98092
|
||||||
|
33702 78511
|
||||||
|
76946 86061
|
||||||
|
34943 94066
|
||||||
|
66974 23236
|
||||||
|
87132 37827
|
||||||
|
28641 88706
|
||||||
|
78825 49515
|
||||||
|
14741 98092
|
||||||
|
56627 38087
|
||||||
|
47539 85498
|
||||||
|
40528 88706
|
||||||
|
71885 11213
|
||||||
|
83869 60337
|
||||||
|
13761 97944
|
||||||
|
75267 94765
|
||||||
|
76391 40872
|
||||||
|
84919 45561
|
||||||
|
82510 26839
|
||||||
|
42950 66528
|
||||||
|
53597 88930
|
||||||
|
51068 43621
|
||||||
|
41152 77639
|
||||||
|
82758 52077
|
||||||
|
38873 70358
|
||||||
|
88084 36028
|
||||||
|
96405 64127
|
||||||
|
24799 34048
|
||||||
|
77846 98859
|
||||||
|
20374 69465
|
||||||
|
63292 73846
|
||||||
|
11172 84410
|
||||||
|
23525 74835
|
||||||
|
94244 21118
|
||||||
|
32196 95922
|
||||||
|
28936 38955
|
||||||
|
27350 25044
|
||||||
|
20053 63490
|
||||||
|
62187 53533
|
||||||
|
15008 20677
|
||||||
|
44778 75218
|
||||||
|
34221 98092
|
||||||
|
39018 98053
|
||||||
|
23017 49363
|
||||||
|
87337 21579
|
||||||
|
72930 17695
|
||||||
|
93295 39063
|
||||||
|
66854 16885
|
||||||
|
34104 34048
|
||||||
|
60507 13583
|
||||||
|
10728 15374
|
||||||
|
24778 14446
|
||||||
|
71424 89693
|
||||||
|
40413 18036
|
||||||
|
78058 75722
|
||||||
|
37560 88706
|
||||||
|
13236 77445
|
||||||
|
87173 93444
|
||||||
|
73989 37520
|
||||||
|
14985 45194
|
||||||
|
24184 81289
|
||||||
|
28240 76359
|
||||||
|
12680 21118
|
||||||
|
97498 36199
|
||||||
|
93727 75722
|
||||||
|
17373 64709
|
||||||
|
15927 39063
|
||||||
|
30358 20677
|
||||||
|
65650 35177
|
||||||
|
46846 81415
|
||||||
|
53260 86686
|
||||||
|
32998 80757
|
||||||
|
61488 21055
|
||||||
|
95554 23175
|
||||||
|
19043 88313
|
||||||
|
99442 65217
|
||||||
|
35322 56161
|
||||||
|
58264 30893
|
||||||
|
48887 76048
|
||||||
|
96519 97502
|
||||||
|
88445 49036
|
||||||
|
22815 21393
|
||||||
|
26997 56009
|
||||||
|
45084 25370
|
||||||
|
82066 63417
|
||||||
|
88706 13583
|
||||||
|
37524 92452
|
||||||
|
67340 90779
|
||||||
|
37641 60337
|
||||||
|
84745 45323
|
||||||
|
11631 83982
|
||||||
|
19247 76359
|
||||||
|
92635 34048
|
||||||
|
36981 35177
|
||||||
|
31598 74065
|
||||||
|
54121 28812
|
||||||
|
76881 60337
|
||||||
|
99584 27133
|
||||||
|
55312 55677
|
||||||
|
83419 35177
|
||||||
|
13942 23226
|
||||||
|
89059 79979
|
||||||
|
45943 14892
|
||||||
|
49359 83296
|
||||||
|
68331 84970
|
||||||
|
36265 20090
|
||||||
|
46411 98346
|
||||||
|
25016 74405
|
||||||
|
61228 86987
|
||||||
|
47787 64766
|
||||||
|
61125 43591
|
||||||
|
23793 91663
|
||||||
|
20371 49202
|
||||||
|
40797 98092
|
||||||
|
45793 88706
|
||||||
|
68119 25069
|
||||||
|
93194 73910
|
||||||
|
29041 68173
|
||||||
|
40414 90131
|
||||||
|
35827 54613
|
||||||
|
95241 34755
|
||||||
|
34804 49863
|
||||||
|
19037 54929
|
||||||
|
15853 56399
|
||||||
|
28746 57681
|
||||||
|
33009 13250
|
||||||
|
37386 50787
|
||||||
|
89907 88313
|
||||||
|
65824 37078
|
||||||
|
29642 18922
|
||||||
|
25336 60337
|
||||||
|
77952 46523
|
||||||
|
44241 87880
|
||||||
|
25674 39063
|
||||||
|
21393 48408
|
||||||
|
58355 99461
|
||||||
|
69496 39332
|
||||||
|
27282 98092
|
||||||
|
69938 71743
|
||||||
|
83723 88313
|
||||||
|
88439 45323
|
||||||
|
46485 88255
|
||||||
|
39718 23226
|
||||||
|
23065 93444
|
||||||
|
27197 78058
|
||||||
|
72503 76359
|
||||||
|
20982 64709
|
||||||
|
60535 63346
|
||||||
|
38653 13583
|
||||||
|
77768 52721
|
||||||
|
11298 49544
|
||||||
|
42013 66528
|
||||||
|
18141 45194
|
||||||
|
81075 96111
|
||||||
|
39115 37630
|
||||||
|
18584 71632
|
||||||
|
73719 94863
|
||||||
|
85615 69932
|
||||||
|
16171 24776
|
||||||
|
78057 89054
|
||||||
|
97570 12724
|
||||||
|
51603 32111
|
||||||
|
62411 76116
|
||||||
|
72300 95646
|
||||||
|
34238 21393
|
||||||
|
38052 45323
|
||||||
|
29020 84647
|
||||||
|
41893 45194
|
||||||
|
39513 48753
|
||||||
|
11610 14667
|
||||||
|
95685 21393
|
||||||
|
95779 20677
|
||||||
|
15324 63196
|
||||||
|
76334 94163
|
||||||
|
68091 45194
|
||||||
|
38482 70862
|
||||||
|
15369 88313
|
||||||
|
89175 64021
|
||||||
|
60543 34048
|
||||||
|
56673 50331
|
||||||
|
49457 34048
|
||||||
|
71887 13583
|
||||||
|
88321 21118
|
||||||
|
71071 23226
|
||||||
|
67178 49036
|
||||||
|
91821 21118
|
||||||
|
20076 10076
|
||||||
|
87303 84970
|
||||||
|
57511 12268
|
||||||
|
43501 30007
|
||||||
|
91975 66528
|
||||||
|
15448 72284
|
||||||
|
69907 43654
|
||||||
|
25571 11414
|
||||||
|
52353 15044
|
||||||
|
69803 78058
|
||||||
|
40474 52042
|
||||||
|
26253 70310
|
||||||
|
39802 97896
|
||||||
|
83210 97215
|
||||||
|
37474 88313
|
||||||
|
31093 97572
|
||||||
|
42301 23226
|
||||||
|
19726 13583
|
||||||
|
94312 49036
|
||||||
|
58482 25755
|
||||||
|
98687 38510
|
||||||
|
19047 98092
|
||||||
|
26950 78058
|
||||||
|
71158 28096
|
||||||
|
96412 84970
|
||||||
|
35920 30893
|
||||||
|
44526 99812
|
||||||
|
42755 51182
|
||||||
|
24379 30893
|
||||||
|
70947 60543
|
||||||
|
54882 71632
|
||||||
|
51233 33596
|
||||||
|
20462 79975
|
||||||
|
53935 84134
|
||||||
|
74070 62410
|
||||||
|
54102 22085
|
||||||
|
13298 20677
|
||||||
|
26602 92907
|
||||||
|
42648 49332
|
||||||
|
22183 93444
|
||||||
|
30822 98092
|
||||||
|
86804 77932
|
||||||
|
10838 88167
|
||||||
|
24523 65219
|
||||||
|
41568 62650
|
||||||
|
80060 79089
|
||||||
|
21439 70889
|
||||||
|
66602 41342
|
||||||
|
19704 34111
|
||||||
|
67226 95394
|
||||||
|
65479 92893
|
||||||
|
37260 49036
|
||||||
|
31997 30937
|
||||||
|
97707 31068
|
||||||
|
13170 78674
|
||||||
|
26045 35177
|
||||||
|
24059 35177
|
||||||
|
32491 33653
|
||||||
|
75897 71632
|
||||||
|
10612 84970
|
||||||
|
11001 88313
|
||||||
|
35498 68825
|
||||||
|
96341 10573
|
||||||
|
23226 39063
|
||||||
|
69398 67618
|
||||||
|
17730 60337
|
||||||
|
86503 45099
|
||||||
|
72504 98743
|
||||||
|
82150 90026
|
||||||
|
68294 54832
|
||||||
|
80912 34048
|
||||||
|
96999 49036
|
||||||
|
97530 20090
|
||||||
|
35480 49036
|
||||||
|
20998 30893
|
||||||
|
70873 60337
|
||||||
|
91802 62572
|
||||||
|
54034 15709
|
||||||
|
32710 84970
|
||||||
|
58337 58861
|
||||||
|
59198 59125
|
||||||
|
61993 93321
|
||||||
|
79647 21393
|
||||||
|
26291 54259
|
||||||
|
74198 76048
|
||||||
|
57851 49450
|
||||||
|
75838 37799
|
||||||
|
60309 13382
|
||||||
|
86676 72545
|
||||||
|
29406 23958
|
||||||
|
76718 75217
|
||||||
|
33197 67338
|
||||||
|
65924 20094
|
||||||
|
88612 52547
|
||||||
|
75554 14101
|
||||||
|
36525 94200
|
||||||
|
70266 20090
|
||||||
|
36358 87645
|
||||||
|
36508 93007
|
||||||
|
28589 91657
|
||||||
|
48088 77015
|
||||||
|
22798 11552
|
||||||
|
56726 20677
|
||||||
|
80189 32314
|
||||||
|
21360 96490
|
||||||
|
90866 88706
|
||||||
|
39003 18500
|
||||||
|
27798 10095
|
||||||
|
66032 15135
|
||||||
|
11051 34048
|
||||||
|
94174 88313
|
||||||
|
15442 61388
|
||||||
|
10452 20090
|
||||||
|
11929 13583
|
||||||
|
34739 41426
|
||||||
|
64828 49036
|
||||||
|
73891 39034
|
||||||
|
52449 99470
|
||||||
|
71065 77445
|
||||||
|
89965 71632
|
||||||
|
60544 34717
|
||||||
|
21118 78369
|
||||||
|
49478 35177
|
||||||
|
26213 93444
|
||||||
|
49857 23226
|
||||||
|
74220 32262
|
||||||
|
72833 27081
|
||||||
|
38455 99610
|
||||||
|
54342 61755
|
||||||
|
43456 26783
|
||||||
|
24034 76570
|
||||||
|
32201 17321
|
||||||
|
23799 39823
|
||||||
|
72637 37646
|
||||||
|
10964 34048
|
||||||
|
42818 20090
|
||||||
|
21006 39063
|
||||||
|
39063 82696
|
||||||
|
30375 66442
|
||||||
|
15052 93444
|
||||||
|
87906 50391
|
||||||
|
17028 10100
|
||||||
|
81936 32511
|
||||||
|
12837 64709
|
||||||
|
16027 78058
|
||||||
|
49036 60337
|
||||||
|
99212 39063
|
||||||
|
28629 21118
|
||||||
|
65863 84395
|
||||||
|
20677 39063
|
||||||
|
92405 60182
|
||||||
|
55155 39063
|
||||||
|
39167 69664
|
||||||
|
74584 30893
|
||||||
|
69147 41166
|
||||||
|
75535 23751
|
||||||
|
41314 88960
|
||||||
|
47916 76048
|
||||||
|
95846 15467
|
||||||
|
14883 29065
|
||||||
|
85080 93428
|
||||||
|
52335 68547
|
||||||
|
98645 93444
|
||||||
|
39194 96760
|
||||||
|
73927 23226
|
||||||
|
90575 88313
|
||||||
|
46134 11217
|
||||||
|
85511 31236
|
||||||
|
10109 37785
|
||||||
|
20240 30893
|
||||||
|
26094 56917
|
||||||
|
35316 34048
|
||||||
|
73503 25694
|
||||||
|
89783 93444
|
||||||
|
76048 84368
|
||||||
|
63277 64756
|
||||||
|
70675 53597
|
||||||
|
44803 20677
|
||||||
|
47915 20090
|
||||||
|
12885 20090
|
||||||
|
96783 88706
|
||||||
|
55441 39063
|
||||||
|
28482 98092
|
||||||
|
91088 20088
|
||||||
|
56209 49036
|
||||||
|
73427 54203
|
||||||
|
84253 46441
|
||||||
|
45378 88313
|
||||||
|
61961 65758
|
||||||
|
68877 21118
|
||||||
|
99259 53597
|
||||||
|
52459 33058
|
||||||
|
52656 56240
|
||||||
|
95881 45231
|
||||||
|
77445 13060
|
||||||
|
91203 71632
|
||||||
|
80736 20127
|
||||||
|
33376 22802
|
||||||
|
35538 34048
|
||||||
|
98323 92633
|
||||||
|
51634 45231
|
||||||
|
55669 87627
|
||||||
|
21536 17362
|
||||||
|
32629 77445
|
||||||
|
49199 71632
|
||||||
|
57371 20583
|
||||||
|
23040 90921
|
||||||
|
73189 76359
|
||||||
|
18892 84970
|
||||||
|
75932 53597
|
||||||
|
35376 53731
|
||||||
|
29756 88313
|
||||||
|
80575 64370
|
||||||
|
11795 42629
|
||||||
|
72509 82819
|
||||||
|
80073 66528
|
||||||
|
39611 78343
|
||||||
|
55678 77155
|
||||||
|
74003 35177
|
||||||
|
82981 87429
|
||||||
|
44472 88313
|
||||||
|
15879 43889
|
||||||
|
92293 30401
|
||||||
|
68169 72422
|
||||||
|
46139 13583
|
||||||
|
25753 71632
|
||||||
|
29238 13583
|
||||||
|
65772 94594
|
||||||
|
72372 98661
|
||||||
|
49282 29132
|
||||||
|
59258 51774
|
||||||
|
20268 19289
|
||||||
|
68202 10161
|
||||||
|
30853 12555
|
||||||
|
79108 66252
|
||||||
|
93219 49036
|
||||||
|
97625 14093
|
||||||
|
15662 78058
|
||||||
|
74532 12621
|
||||||
|
84970 66528
|
||||||
|
43513 68633
|
||||||
|
24015 37782
|
||||||
|
61575 50110
|
||||||
|
75452 32111
|
||||||
|
95466 69622
|
||||||
|
27039 13583
|
||||||
|
72285 35711
|
||||||
|
84251 33375
|
||||||
|
29424 76359
|
||||||
|
58618 70025
|
||||||
|
14379 66528
|
||||||
|
89386 88706
|
||||||
|
93381 20090
|
||||||
|
91398 98680
|
||||||
|
42769 45231
|
||||||
|
12169 87022
|
||||||
|
25979 78058
|
||||||
|
72635 41261
|
||||||
|
17059 63554
|
||||||
|
47259 79838
|
||||||
|
76636 98092
|
||||||
|
73546 95012
|
||||||
|
91197 19703
|
||||||
|
65589 88706
|
||||||
|
73955 16375
|
||||||
|
23737 62914
|
||||||
|
57497 65544
|
||||||
|
89971 53597
|
||||||
|
65549 60337
|
||||||
|
49793 76048
|
||||||
|
47384 76610
|
||||||
|
23011 71632
|
||||||
|
50105 41881
|
||||||
|
56427 43543
|
||||||
|
30880 76048
|
||||||
|
24879 88313
|
||||||
|
68581 69278
|
||||||
|
74682 15597
|
||||||
|
43180 76048
|
||||||
|
90603 49036
|
||||||
|
52305 12532
|
||||||
|
22850 81110
|
||||||
|
83915 39167
|
||||||
|
19676 43682
|
||||||
|
18372 71954
|
||||||
|
89452 88706
|
||||||
|
59733 65480
|
||||||
|
70454 82540
|
||||||
|
60701 46004
|
||||||
|
90655 83636
|
||||||
|
70929 71632
|
||||||
|
28216 29450
|
||||||
|
96165 67274
|
||||||
|
34322 77426
|
||||||
|
31874 57584
|
||||||
|
54166 90667
|
||||||
|
99511 98508
|
||||||
|
31060 92465
|
||||||
|
55106 51095
|
||||||
|
79552 22669
|
||||||
|
27806 75575
|
||||||
|
46797 33693
|
||||||
|
64746 32111
|
||||||
|
76861 10157
|
||||||
|
76339 65246
|
||||||
|
13583 91436
|
||||||
|
14467 16938
|
||||||
|
85582 35177
|
||||||
|
13718 20378
|
||||||
|
99759 66607
|
||||||
|
59581 15550
|
||||||
|
96543 22529
|
||||||
|
86658 75460
|
||||||
|
65202 88706
|
||||||
|
38311 38185
|
||||||
|
19721 38534
|
||||||
|
20090 65369
|
||||||
|
21044 60105
|
||||||
|
45323 93444
|
||||||
|
41853 88706
|
||||||
|
48731 39841
|
||||||
|
44220 71632
|
||||||
|
49345 80849
|
||||||
|
77455 96766
|
||||||
|
64991 79807
|
||||||
|
84833 99183
|
||||||
|
15508 15491
|
||||||
|
31649 95360
|
||||||
|
47963 15187
|
||||||
|
32556 10033
|
||||||
|
98424 72571
|
||||||
|
20214 45512
|
||||||
|
92261 73300
|
||||||
|
83550 30893
|
||||||
|
40965 30434
|
||||||
|
73994 76048
|
||||||
|
55035 53597
|
||||||
|
25828 60337
|
||||||
|
75771 88313
|
||||||
|
67673 77526
|
||||||
|
44405 93052
|
||||||
|
18454 90175
|
||||||
|
88189 33126
|
||||||
|
87628 49036
|
||||||
|
71632 71504
|
||||||
|
37621 85292
|
||||||
|
23775 66528
|
||||||
|
52816 35363
|
||||||
|
30089 60337
|
||||||
|
98618 96587
|
||||||
|
44216 21118
|
||||||
|
26104 88313
|
||||||
|
42299 45510
|
||||||
|
45953 35177
|
||||||
|
88461 49036
|
||||||
|
94707 98092
|
||||||
|
44832 34048
|
||||||
|
30018 97006
|
||||||
|
10073 60126
|
||||||
|
32801 21118
|
||||||
|
93444 78058
|
||||||
|
14724 75670
|
||||||
|
88496 89181
|
||||||
|
97226 64756
|
||||||
|
44779 84970
|
||||||
|
20417 20090
|
||||||
|
74763 34048
|
||||||
|
86926 21988
|
||||||
|
82229 51396
|
||||||
|
41522 77498
|
||||||
|
97004 64462
|
||||||
|
94063 53597
|
||||||
|
33439 77445
|
||||||
|
52901 86349
|
||||||
|
95858 45194
|
||||||
|
46763 37729
|
||||||
|
99339 32386
|
||||||
|
97353 39063
|
||||||
|
30474 20090
|
||||||
|
29221 48754
|
||||||
|
54778 62716
|
||||||
|
32771 39063
|
||||||
|
20116 71632
|
||||||
|
69722 87766
|
||||||
|
51398 43440
|
||||||
|
97793 76359
|
||||||
|
56926 32111
|
||||||
|
66003 75722
|
||||||
|
11344 94388
|
||||||
|
45264 39251
|
||||||
|
94465 49036
|
||||||
|
12978 38585
|
||||||
|
17184 53348
|
||||||
|
87705 34048
|
||||||
|
32187 85695
|
||||||
|
51481 78692
|
||||||
|
54232 60337
|
||||||
|
99572 51669
|
||||||
|
29822 15075
|
||||||
|
65918 82780
|
||||||
|
66528 23226
|
||||||
|
40810 85626
|
||||||
|
71957 88313
|
||||||
|
93701 88706
|
||||||
|
10667 73326
|
||||||
|
51857 77839
|
||||||
|
13968 15900
|
||||||
|
99521 15237
|
||||||
|
43540 92443
|
||||||
|
27624 12544
|
||||||
|
65271 76048
|
||||||
|
44186 14578
|
||||||
|
33230 21393
|
||||||
|
33874 35177
|
||||||
|
54932 45194
|
||||||
|
18315 53578
|
||||||
|
69769 71632
|
||||||
|
75322 51896
|
||||||
|
20861 47764
|
||||||
|
88546 23226
|
||||||
|
29838 93444
|
||||||
|
83883 52312
|
||||||
|
67889 35177
|
||||||
|
59762 39167
|
||||||
|
30665 65756
|
||||||
|
13966 93444
|
||||||
|
38266 43913
|
||||||
|
60711 39167
|
||||||
|
42774 72205
|
||||||
|
76359 37929
|
||||||
|
65904 13043
|
||||||
|
34048 77445
|
||||||
|
38275 66528
|
||||||
|
84943 34580
|
||||||
|
50731 74327
|
||||||
|
64612 53597
|
||||||
|
14016 49346
|
||||||
|
55402 66508
|
||||||
|
93047 76359
|
||||||
|
49251 20090
|
||||||
|
75392 87115
|
||||||
|
90871 76589
|
||||||
|
13432 49036
|
||||||
|
18501 19808
|
||||||
|
73315 38104
|
||||||
|
18380 78457
|
||||||
|
56744 85328
|
||||||
|
44147 13583
|
||||||
|
98969 79480
|
||||||
|
16683 63967
|
||||||
|
83183 68296
|
||||||
|
33184 80175
|
||||||
|
36362 93444
|
||||||
|
40671 53597
|
||||||
|
65788 71632
|
||||||
|
23573 75722
|
||||||
|
50571 60337
|
||||||
|
67765 76048
|
||||||
|
73101 48453
|
||||||
|
67112 35176
|
||||||
|
46594 70172
|
||||||
|
75172 17447
|
||||||
|
45231 76197
|
||||||
|
20392 53244
|
||||||
|
35352 32191
|
||||||
|
20609 45194
|
||||||
|
78496 95165
|
||||||
|
12271 85861
|
||||||
|
89991 76048
|
||||||
|
65923 30779
|
||||||
|
71880 30893
|
||||||
|
73845 19368
|
||||||
|
25694 77445
|
||||||
|
44679 71632
|
||||||
|
95542 29625
|
||||||
|
72865 48533
|
||||||
|
43025 65302
|
||||||
|
38909 78058
|
||||||
|
38961 77445
|
||||||
|
12553 66528
|
||||||
|
66378 76359
|
||||||
|
79514 46457
|
||||||
|
96727 76359
|
||||||
|
12664 91220
|
||||||
|
22671 32111
|
||||||
|
60272 21393
|
||||||
|
54910 43373
|
||||||
|
78968 52670
|
||||||
|
31357 84820
|
||||||
|
98176 98092
|
||||||
|
43398 88955
|
||||||
|
51128 13514
|
||||||
|
97517 39212
|
||||||
|
53814 40263
|
||||||
|
56961 35177
|
||||||
|
90552 31236
|
||||||
|
13602 13583
|
||||||
|
12187 44890
|
||||||
|
47432 44401
|
||||||
|
84078 64709
|
||||||
|
77515 71632
|
||||||
|
88313 70149
|
||||||
|
69118 78954
|
||||||
|
75221 27687
|
||||||
|
64709 20090
|
||||||
|
89680 59037
|
||||||
|
31715 65294
|
||||||
|
61413 21118
|
||||||
|
75865 32111
|
||||||
|
67755 31175
|
||||||
|
52584 94277
|
||||||
|
47546 95471
|
||||||
|
91225 55015
|
||||||
|
28913 58527
|
||||||
|
65645 71632
|
||||||
|
19183 39377
|
||||||
|
47460 95947
|
||||||
|
75848 23226
|
||||||
|
56518 43259
|
||||||
|
60240 48233
|
||||||
|
31724 84970
|
||||||
|
37699 76048
|
||||||
|
18796 64805
|
||||||
|
37497 45231
|
||||||
|
42751 75722
|
||||||
|
28509 34048
|
||||||
|
90061 17966
|
||||||
|
65385 83274
|
||||||
|
72856 25904
|
||||||
|
41016 21118
|
||||||
|
86979 93485
|
||||||
|
18571 88706
|
||||||
|
37984 84970
|
||||||
|
36879 21118
|
||||||
|
72715 56620
|
||||||
|
88099 34048
|
||||||
|
61613 85581
|
||||||
|
15090 77445
|
||||||
|
35177 86160
|
||||||
|
52551 58172
|
||||||
|
60337 20677
|
||||||
|
95870 77445
|
||||||
|
51272 34048
|
||||||
|
31236 15332
|
||||||
|
77046 35697
|
||||||
@@ -0,0 +1,62 @@
|
|||||||
|
--- Day 2: Red-Nosed Reports ---
|
||||||
|
|
||||||
|
Fortunately, the first location The Historians want to search isn't a long walk from the Chief Historian's office.
|
||||||
|
|
||||||
|
While the Red-Nosed Reindeer nuclear fusion/fission plant appears to contain no sign of the Chief Historian, the engineers there run up to you as soon as they see you. Apparently, they still talk about the time Rudolph was saved through molecular synthesis from a single electron.
|
||||||
|
|
||||||
|
They're quick to add that - since you're already here - they'd really appreciate your help analyzing some unusual data from the Red-Nosed reactor. You turn to check if The Historians are waiting for you, but they seem to have already divided into groups that are currently searching every corner of the facility. You offer to help with the unusual data.
|
||||||
|
|
||||||
|
The unusual data (your puzzle input) consists of many reports, one report per line. Each report is a list of numbers called levels that are separated by spaces. For example:
|
||||||
|
|
||||||
|
7 6 4 2 1
|
||||||
|
1 2 7 8 9
|
||||||
|
9 7 6 2 1
|
||||||
|
1 3 2 4 5
|
||||||
|
8 6 4 4 1
|
||||||
|
1 3 6 7 9
|
||||||
|
|
||||||
|
This example data contains six reports each containing five levels.
|
||||||
|
|
||||||
|
The engineers are trying to figure out which reports are safe. The Red-Nosed reactor safety systems can only tolerate levels that are either gradually increasing or gradually decreasing. So, a report only counts as safe if both of the following are true:
|
||||||
|
|
||||||
|
The levels are either all increasing or all decreasing.
|
||||||
|
Any two adjacent levels differ by at least one and at most three.
|
||||||
|
|
||||||
|
In the example above, the reports can be found safe or unsafe by checking those rules:
|
||||||
|
|
||||||
|
7 6 4 2 1: Safe because the levels are all decreasing by 1 or 2.
|
||||||
|
1 2 7 8 9: Unsafe because 2 7 is an increase of 5.
|
||||||
|
9 7 6 2 1: Unsafe because 6 2 is a decrease of 4.
|
||||||
|
1 3 2 4 5: Unsafe because 1 3 is increasing but 3 2 is decreasing.
|
||||||
|
8 6 4 4 1: Unsafe because 4 4 is neither an increase or a decrease.
|
||||||
|
1 3 6 7 9: Safe because the levels are all increasing by 1, 2, or 3.
|
||||||
|
|
||||||
|
So, in this example, 2 reports are safe.
|
||||||
|
|
||||||
|
Analyze the unusual data from the engineers. How many reports are safe?
|
||||||
|
|
||||||
|
Your puzzle answer was 624.
|
||||||
|
--- Part Two ---
|
||||||
|
|
||||||
|
The engineers are surprised by the low number of safe reports until they realize they forgot to tell you about the Problem Dampener.
|
||||||
|
|
||||||
|
The Problem Dampener is a reactor-mounted module that lets the reactor safety systems tolerate a single bad level in what would otherwise be a safe report. It's like the bad level never happened!
|
||||||
|
|
||||||
|
Now, the same rules apply as before, except if removing a single level from an unsafe report would make it safe, the report instead counts as safe.
|
||||||
|
|
||||||
|
More of the above example's reports are now safe:
|
||||||
|
|
||||||
|
7 6 4 2 1: Safe without removing any level.
|
||||||
|
1 2 7 8 9: Unsafe regardless of which level is removed.
|
||||||
|
9 7 6 2 1: Unsafe regardless of which level is removed.
|
||||||
|
1 3 2 4 5: Safe by removing the second level, 3.
|
||||||
|
8 6 4 4 1: Safe by removing the third level, 4.
|
||||||
|
1 3 6 7 9: Safe without removing any level.
|
||||||
|
|
||||||
|
Thanks to the Problem Dampener, 4 reports are actually safe!
|
||||||
|
|
||||||
|
Update your analysis by handling situations where the Problem Dampener can remove a single level from unsafe reports. How many reports are now safe?
|
||||||
|
|
||||||
|
Your puzzle answer was 658.
|
||||||
|
|
||||||
|
Both parts of this puzzle are complete! They provide two gold stars: **
|
||||||
Executable
+36
@@ -0,0 +1,36 @@
|
|||||||
|
#!/usr/bin/env python3
|
||||||
|
|
||||||
|
import sys
|
||||||
|
|
||||||
|
|
||||||
|
def safe(report):
|
||||||
|
if report == sorted(report) or report == sorted(report, reverse=True):
|
||||||
|
start = report[0]
|
||||||
|
for l in report[1:]:
|
||||||
|
if 1 > abs(l-start) or 3 < abs(l-start): return False
|
||||||
|
start = l
|
||||||
|
return True
|
||||||
|
return False
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == '__main__':
|
||||||
|
reports = [[int(x) for x in line.strip('\n').split(' ')] for line in open(sys.argv[1])]
|
||||||
|
|
||||||
|
# challenge 1
|
||||||
|
saferep = sum([safe(r) for r in reports])
|
||||||
|
res1 = saferep
|
||||||
|
print(f"challenge 1:\n{res1}\n")
|
||||||
|
|
||||||
|
# challenge 2
|
||||||
|
for r in reports:
|
||||||
|
if not safe(r):
|
||||||
|
tolerate = False
|
||||||
|
for i in range(len(r)):
|
||||||
|
r1 = r[0:i] + r[i+1:len(r)]
|
||||||
|
if safe(r1):
|
||||||
|
tolerate = True
|
||||||
|
break
|
||||||
|
saferep += tolerate
|
||||||
|
|
||||||
|
res2 = saferep
|
||||||
|
print(f"challenge 2:\n{res2}")
|
||||||
@@ -0,0 +1,6 @@
|
|||||||
|
7 6 4 2 1
|
||||||
|
1 2 7 8 9
|
||||||
|
9 7 6 2 1
|
||||||
|
1 3 2 4 5
|
||||||
|
8 6 4 4 1
|
||||||
|
1 3 6 7 9
|
||||||
+1000
@@ -0,0 +1,1000 @@
|
|||||||
|
31 34 36 38 40 43 46 44
|
||||||
|
67 68 70 72 74 77 79 79
|
||||||
|
32 35 36 38 42
|
||||||
|
18 21 22 24 27 30 35
|
||||||
|
63 66 67 66 69 72
|
||||||
|
63 64 67 64 65 67 64
|
||||||
|
35 36 38 41 38 40 42 42
|
||||||
|
59 62 63 64 66 64 67 71
|
||||||
|
55 57 55 56 61
|
||||||
|
58 60 62 62 65 67 68
|
||||||
|
84 86 89 91 93 94 94 91
|
||||||
|
32 34 36 36 37 39 41 41
|
||||||
|
13 15 18 19 19 21 22 26
|
||||||
|
61 64 64 67 68 74
|
||||||
|
56 57 58 61 65 66 68
|
||||||
|
53 56 57 61 62 64 62
|
||||||
|
78 80 84 85 85
|
||||||
|
38 39 41 45 47 51
|
||||||
|
2 5 8 9 12 16 18 24
|
||||||
|
50 51 53 55 60 61
|
||||||
|
31 32 37 39 40 42 40
|
||||||
|
46 48 53 54 54
|
||||||
|
40 43 45 51 55
|
||||||
|
31 32 35 37 44 45 51
|
||||||
|
15 12 15 18 20 23 25 27
|
||||||
|
78 76 79 80 78
|
||||||
|
46 45 48 49 52 54 54
|
||||||
|
17 16 17 20 24
|
||||||
|
80 78 80 82 83 90
|
||||||
|
48 47 44 46 48
|
||||||
|
62 60 59 62 61
|
||||||
|
26 23 24 26 24 26 28 28
|
||||||
|
4 3 1 4 5 7 9 13
|
||||||
|
48 45 43 45 47 52
|
||||||
|
93 90 92 95 95 98
|
||||||
|
80 79 81 81 83 84 83
|
||||||
|
6 4 4 6 8 8
|
||||||
|
8 5 6 9 12 12 16
|
||||||
|
42 41 41 44 45 47 54
|
||||||
|
66 63 64 68 70 73
|
||||||
|
45 43 44 46 50 49
|
||||||
|
5 4 7 11 12 14 14
|
||||||
|
72 71 75 78 80 84
|
||||||
|
79 77 79 82 83 87 88 93
|
||||||
|
75 74 76 77 84 85
|
||||||
|
26 25 28 30 36 39 38
|
||||||
|
26 25 26 32 32
|
||||||
|
49 47 50 53 60 61 65
|
||||||
|
18 16 17 18 23 29
|
||||||
|
73 73 74 75 78
|
||||||
|
43 43 46 47 49 50 51 50
|
||||||
|
87 87 89 90 93 93
|
||||||
|
52 52 55 58 62
|
||||||
|
78 78 81 82 83 85 91
|
||||||
|
48 48 46 49 51
|
||||||
|
89 89 92 93 91 92 95 94
|
||||||
|
13 13 15 14 16 19 19
|
||||||
|
68 68 65 66 68 72
|
||||||
|
39 39 37 38 39 46
|
||||||
|
23 23 25 25 26 29
|
||||||
|
90 90 93 94 94 95 98 96
|
||||||
|
26 26 27 30 30 31 32 32
|
||||||
|
61 61 64 66 66 70
|
||||||
|
34 34 34 36 41
|
||||||
|
35 35 37 39 40 44 45
|
||||||
|
70 70 74 77 79 82 84 82
|
||||||
|
16 16 19 23 26 28 29 29
|
||||||
|
41 41 42 46 50
|
||||||
|
33 33 34 38 40 46
|
||||||
|
28 28 29 36 39
|
||||||
|
79 79 85 87 88 90 89
|
||||||
|
66 66 69 72 77 77
|
||||||
|
49 49 51 52 59 63
|
||||||
|
38 38 40 42 49 56
|
||||||
|
78 82 84 86 88 90 91
|
||||||
|
41 45 48 50 52 49
|
||||||
|
60 64 67 68 69 72 75 75
|
||||||
|
78 82 83 85 89
|
||||||
|
33 37 40 42 48
|
||||||
|
78 82 85 87 89 87 88 89
|
||||||
|
2 6 5 6 7 9 7
|
||||||
|
1 5 3 5 6 8 8
|
||||||
|
81 85 83 84 86 90
|
||||||
|
65 69 67 68 69 72 74 81
|
||||||
|
15 19 21 24 26 26 28
|
||||||
|
4 8 11 14 14 16 15
|
||||||
|
9 13 14 14 17 17
|
||||||
|
15 19 20 20 22 26
|
||||||
|
9 13 15 16 16 22
|
||||||
|
16 20 23 27 30
|
||||||
|
18 22 25 29 31 29
|
||||||
|
1 5 6 8 10 13 17 17
|
||||||
|
9 13 17 20 22 26
|
||||||
|
28 32 33 37 40 46
|
||||||
|
30 34 36 38 40 47 50
|
||||||
|
44 48 54 57 59 60 61 58
|
||||||
|
9 13 16 22 22
|
||||||
|
62 66 68 71 77 81
|
||||||
|
36 40 42 49 54
|
||||||
|
43 50 53 55 56 58 60 63
|
||||||
|
5 10 11 13 10
|
||||||
|
5 11 12 15 17 19 19
|
||||||
|
34 39 40 43 47
|
||||||
|
50 57 59 60 61 63 70
|
||||||
|
38 43 44 43 46 48 51
|
||||||
|
79 85 88 85 87 86
|
||||||
|
72 78 79 76 78 80 81 81
|
||||||
|
42 48 47 48 52
|
||||||
|
55 62 63 66 68 65 70
|
||||||
|
47 54 55 55 58 59 60
|
||||||
|
79 85 87 87 89 88
|
||||||
|
7 14 17 20 23 24 24 24
|
||||||
|
68 73 75 75 76 77 79 83
|
||||||
|
9 16 19 19 24
|
||||||
|
66 72 73 77 79
|
||||||
|
12 18 22 23 24 23
|
||||||
|
26 32 33 36 38 42 44 44
|
||||||
|
30 37 39 43 46 50
|
||||||
|
66 73 74 75 79 86
|
||||||
|
47 53 58 60 62
|
||||||
|
46 53 59 62 59
|
||||||
|
56 61 63 66 68 75 76 76
|
||||||
|
23 29 32 34 39 40 44
|
||||||
|
33 40 41 43 48 49 56
|
||||||
|
13 12 11 9 11
|
||||||
|
41 38 35 33 33
|
||||||
|
99 96 94 93 90 88 84
|
||||||
|
20 19 17 16 13 7
|
||||||
|
80 79 78 75 72 70 71 70
|
||||||
|
88 87 88 86 85 83 84
|
||||||
|
44 42 41 44 43 43
|
||||||
|
23 20 17 18 15 14 10
|
||||||
|
22 19 18 19 12
|
||||||
|
17 16 16 13 12 9
|
||||||
|
38 36 36 35 32 31 34
|
||||||
|
41 40 40 39 38 37 35 35
|
||||||
|
63 61 59 58 56 56 53 49
|
||||||
|
30 27 26 26 21
|
||||||
|
47 45 41 38 37
|
||||||
|
48 46 45 41 43
|
||||||
|
27 26 24 20 19 19
|
||||||
|
17 14 10 7 3
|
||||||
|
66 64 60 57 52
|
||||||
|
82 81 78 73 70 68 65
|
||||||
|
93 90 87 84 82 75 77
|
||||||
|
83 81 80 73 73
|
||||||
|
41 38 32 29 25
|
||||||
|
50 49 48 41 36
|
||||||
|
83 86 83 81 78 75
|
||||||
|
39 41 39 37 36 37
|
||||||
|
39 41 39 37 37
|
||||||
|
61 62 59 58 57 54 50
|
||||||
|
61 62 59 57 51
|
||||||
|
72 73 72 71 74 73
|
||||||
|
90 92 93 91 88 87 88
|
||||||
|
31 33 30 31 28 25 25
|
||||||
|
74 75 73 72 71 70 73 69
|
||||||
|
78 81 78 79 78 71
|
||||||
|
66 69 69 66 63 61 60 57
|
||||||
|
7 9 6 5 5 7
|
||||||
|
51 53 52 52 51 51
|
||||||
|
90 92 89 86 86 84 80
|
||||||
|
88 91 91 90 89 83
|
||||||
|
52 55 54 50 48 46 45 44
|
||||||
|
87 90 88 86 82 81 78 81
|
||||||
|
46 49 48 45 41 38 38
|
||||||
|
41 42 38 37 33
|
||||||
|
90 93 91 90 88 84 81 76
|
||||||
|
52 54 52 46 43 42
|
||||||
|
43 46 43 36 38
|
||||||
|
12 14 11 10 8 7 2 2
|
||||||
|
29 30 23 22 21 17
|
||||||
|
68 71 65 64 61 59 56 51
|
||||||
|
99 99 97 94 93 90
|
||||||
|
46 46 45 44 47
|
||||||
|
65 65 62 60 59 57 54 54
|
||||||
|
90 90 87 86 84 81 80 76
|
||||||
|
22 22 20 19 18 17 10
|
||||||
|
56 56 55 53 55 54 51 49
|
||||||
|
46 46 47 44 45
|
||||||
|
94 94 95 92 90 90
|
||||||
|
51 51 54 51 47
|
||||||
|
64 64 62 64 62 60 55
|
||||||
|
99 99 97 96 96 93 90 89
|
||||||
|
70 70 70 68 66 64 66
|
||||||
|
91 91 89 87 84 84 83 83
|
||||||
|
92 92 92 91 89 85
|
||||||
|
11 11 8 8 6 1
|
||||||
|
81 81 80 76 73 70
|
||||||
|
56 56 54 50 48 45 43 45
|
||||||
|
72 72 69 68 64 61 59 59
|
||||||
|
80 80 77 73 69
|
||||||
|
61 61 59 55 49
|
||||||
|
24 24 21 20 15 14 12 9
|
||||||
|
38 38 35 32 26 28
|
||||||
|
53 53 52 51 49 42 42
|
||||||
|
60 60 54 52 51 50 46
|
||||||
|
42 42 39 36 34 27 20
|
||||||
|
16 12 11 8 7 4
|
||||||
|
34 30 28 27 25 22 25
|
||||||
|
94 90 88 87 84 84
|
||||||
|
84 80 77 76 75 74 70
|
||||||
|
65 61 59 58 57 55 49
|
||||||
|
72 68 71 68 65 64
|
||||||
|
75 71 70 71 70 71
|
||||||
|
97 93 91 88 85 87 86 86
|
||||||
|
29 25 23 26 22
|
||||||
|
92 88 86 89 86 83 80 75
|
||||||
|
85 81 79 78 78 77 75 73
|
||||||
|
80 76 75 75 72 69 72
|
||||||
|
59 55 52 52 49 49
|
||||||
|
60 56 56 54 50
|
||||||
|
75 71 71 70 67 60
|
||||||
|
81 77 76 72 70
|
||||||
|
36 32 31 27 29
|
||||||
|
86 82 79 77 73 71 71
|
||||||
|
56 52 49 45 41
|
||||||
|
94 90 86 85 80
|
||||||
|
95 91 88 87 84 78 76
|
||||||
|
63 59 56 55 54 47 49
|
||||||
|
63 59 56 54 48 48
|
||||||
|
70 66 59 57 55 53 49
|
||||||
|
24 20 18 15 8 7 6 1
|
||||||
|
61 54 51 50 47 46
|
||||||
|
31 25 23 21 19 16 15 17
|
||||||
|
89 82 80 77 77
|
||||||
|
58 53 51 48 44
|
||||||
|
63 56 55 52 50 47 45 38
|
||||||
|
58 52 50 52 50 47 45
|
||||||
|
86 79 80 79 82
|
||||||
|
70 63 61 60 63 63
|
||||||
|
54 48 47 45 46 42
|
||||||
|
58 53 52 54 52 45
|
||||||
|
54 47 44 41 39 39 36 33
|
||||||
|
56 51 50 50 49 47 49
|
||||||
|
79 73 73 70 69 69
|
||||||
|
80 73 72 71 71 69 67 63
|
||||||
|
70 63 62 60 59 58 58 52
|
||||||
|
21 15 12 9 6 2 1
|
||||||
|
42 35 33 29 31
|
||||||
|
36 30 26 23 23
|
||||||
|
30 23 22 21 18 16 12 8
|
||||||
|
29 24 20 17 14 9
|
||||||
|
47 42 36 34 33
|
||||||
|
99 93 90 89 82 81 78 81
|
||||||
|
29 22 17 16 16
|
||||||
|
59 53 52 50 48 46 40 36
|
||||||
|
97 92 85 82 81 79 78 71
|
||||||
|
52 57 60 61 62 64 70 73
|
||||||
|
14 13 11 10 9 7 5 1
|
||||||
|
42 44 47 50 53 57 60 64
|
||||||
|
34 27 27 25 25
|
||||||
|
92 90 90 92 99
|
||||||
|
73 75 76 78 82 85 87 85
|
||||||
|
23 19 21 18 16 14 8
|
||||||
|
21 26 27 28 30 27 33
|
||||||
|
26 23 24 27 31 32 31
|
||||||
|
30 31 33 32 29 28 26 26
|
||||||
|
42 44 45 46 46 48 49 55
|
||||||
|
45 49 52 53 55 60
|
||||||
|
22 26 28 31 32 35 37
|
||||||
|
47 47 46 42 42
|
||||||
|
61 61 60 62 61 58 56 50
|
||||||
|
15 15 15 18 21 19
|
||||||
|
28 26 22 19 12
|
||||||
|
23 29 30 33 30 32 35 39
|
||||||
|
20 20 17 16 13 9 7 2
|
||||||
|
76 72 71 70 67 65 59 55
|
||||||
|
78 81 81 82 83
|
||||||
|
35 40 42 44 47 49 49
|
||||||
|
87 83 86 83 82 82
|
||||||
|
37 32 30 27 24 20 20
|
||||||
|
21 21 23 21 28
|
||||||
|
41 39 40 42 45 48 51 51
|
||||||
|
74 74 73 70 68 67 65
|
||||||
|
84 85 84 82 80 76
|
||||||
|
45 45 39 38 38
|
||||||
|
47 43 43 41 38 31
|
||||||
|
33 33 32 29 22 21 15
|
||||||
|
31 37 40 40 47
|
||||||
|
62 62 63 65 67 68 69
|
||||||
|
70 67 64 63 61 62 57
|
||||||
|
39 34 33 30 29 26 26 19
|
||||||
|
63 63 64 66 66 68 69 71
|
||||||
|
38 45 48 51 50
|
||||||
|
53 59 63 66 65
|
||||||
|
59 59 56 56 55 56
|
||||||
|
71 67 66 64 60
|
||||||
|
48 50 57 60 60
|
||||||
|
73 73 75 76 76 77 77
|
||||||
|
62 62 63 70 71
|
||||||
|
45 41 38 34 33 31 29 26
|
||||||
|
85 85 88 89 92 89 92 90
|
||||||
|
64 61 60 59 56 53 48
|
||||||
|
49 47 48 51 53 53 53
|
||||||
|
17 16 13 15 16 18 18
|
||||||
|
56 57 58 62 65 72
|
||||||
|
13 13 18 20 20
|
||||||
|
76 72 67 66 64 58
|
||||||
|
4 11 12 13 15 19 19
|
||||||
|
32 28 27 24 21 14 11 11
|
||||||
|
11 11 10 10 6
|
||||||
|
42 42 44 45 47 53 56 60
|
||||||
|
96 95 94 93 91 91 89 87
|
||||||
|
77 80 77 75 74 72
|
||||||
|
41 45 49 52 55 56 59
|
||||||
|
30 35 36 37 38 38 41
|
||||||
|
69 72 73 76 78 80 80 84
|
||||||
|
78 74 71 69 68 64 66
|
||||||
|
21 16 12 10 6
|
||||||
|
94 90 86 83 83
|
||||||
|
81 85 88 89 90 88
|
||||||
|
43 45 43 39 37 33
|
||||||
|
99 95 94 91 94
|
||||||
|
57 57 54 52 50 47 45 39
|
||||||
|
24 25 23 22 15 14 14
|
||||||
|
88 84 83 80 79 76 74 74
|
||||||
|
98 94 92 90 89 85 80
|
||||||
|
37 37 38 41 44 44
|
||||||
|
95 96 96 93 92 85
|
||||||
|
6 6 7 9 15 17 16
|
||||||
|
68 71 78 80 81 85
|
||||||
|
35 37 39 40 41 42 43 43
|
||||||
|
30 34 37 40 41 45 45
|
||||||
|
9 13 15 15 16 19 22 26
|
||||||
|
55 49 46 45 42 40 41
|
||||||
|
76 72 68 67 63
|
||||||
|
26 33 36 37 34 35
|
||||||
|
51 44 41 39 41 39 35
|
||||||
|
12 9 11 14 15 16 18 15
|
||||||
|
42 42 45 45 46 48 49 56
|
||||||
|
4 8 9 10 8 8
|
||||||
|
17 15 18 19 21 22
|
||||||
|
53 53 50 49 44 42 44
|
||||||
|
8 12 16 18 20 24
|
||||||
|
67 68 70 69 69
|
||||||
|
56 49 44 43 42 40 43
|
||||||
|
39 41 42 43 49 50
|
||||||
|
39 37 40 43 44 49 53
|
||||||
|
59 63 66 72 72
|
||||||
|
44 44 47 48 49 52 56 56
|
||||||
|
62 59 57 57 58
|
||||||
|
83 83 81 78 77 73
|
||||||
|
54 58 60 62 69 74
|
||||||
|
37 35 35 32 26
|
||||||
|
39 43 46 52 55
|
||||||
|
31 27 24 22 21 20 18
|
||||||
|
73 80 83 84 86 90
|
||||||
|
67 69 67 67 64 63 61
|
||||||
|
53 54 51 48 45 44 45
|
||||||
|
34 34 35 36 38 40 37 37
|
||||||
|
73 75 72 71 68 65 62 62
|
||||||
|
39 46 52 53 55 52
|
||||||
|
32 32 31 29 26 28 28
|
||||||
|
6 9 12 10 7
|
||||||
|
26 26 28 32 35 38 40 44
|
||||||
|
67 70 67 65 58
|
||||||
|
32 33 32 31 30 23 20
|
||||||
|
17 16 16 13 9
|
||||||
|
81 80 79 77 75 69 66
|
||||||
|
22 21 21 22 24 26 29 33
|
||||||
|
91 91 93 91 92
|
||||||
|
28 28 29 31 32 33 32
|
||||||
|
39 39 40 37 34
|
||||||
|
9 9 9 8 5 3 1 1
|
||||||
|
21 19 18 14 13 12 15
|
||||||
|
58 54 51 50 48 48 45 41
|
||||||
|
14 12 6 4 3 5
|
||||||
|
19 22 22 19 16 17
|
||||||
|
87 80 74 72 68
|
||||||
|
94 94 90 88 84
|
||||||
|
16 10 13 10 8 8
|
||||||
|
60 53 50 53 55
|
||||||
|
56 53 50 47 46 47 44 42
|
||||||
|
25 28 30 31 33 35 42 39
|
||||||
|
33 28 25 23 20 19 15
|
||||||
|
44 41 38 36 34 31 30
|
||||||
|
51 49 48 45 42 41 39 37
|
||||||
|
44 43 42 41 38
|
||||||
|
88 85 82 81 78 76 75 74
|
||||||
|
30 27 24 23 22 20 19
|
||||||
|
94 92 90 89 88 85
|
||||||
|
62 65 68 70 71 74
|
||||||
|
48 50 53 54 57
|
||||||
|
49 50 52 54 55 58 61 62
|
||||||
|
51 54 56 57 60 63 66 68
|
||||||
|
29 26 25 23 21
|
||||||
|
17 14 11 8 6 5 2
|
||||||
|
18 19 20 21 23 24
|
||||||
|
67 65 63 62 59 57
|
||||||
|
52 49 48 47 45 44 43
|
||||||
|
55 56 58 61 62 64 66 67
|
||||||
|
60 58 57 54 51 50
|
||||||
|
56 59 60 62 64 66
|
||||||
|
70 72 73 75 76
|
||||||
|
20 21 24 27 28 30
|
||||||
|
52 55 57 60 62 65
|
||||||
|
84 82 79 77 76 74
|
||||||
|
58 59 61 63 66 69 71 74
|
||||||
|
36 35 32 29 26 23 21
|
||||||
|
69 70 72 73 76 78 81
|
||||||
|
53 52 50 47 44 41 38 35
|
||||||
|
62 63 64 65 67 68
|
||||||
|
65 63 61 59 56 54 53 50
|
||||||
|
75 76 77 80 82 85 86
|
||||||
|
68 66 64 61 60 57 56 55
|
||||||
|
14 12 9 8 6 4 3
|
||||||
|
78 76 73 70 67 66 63
|
||||||
|
28 29 30 31 34 35 37
|
||||||
|
32 31 29 27 26 23 22 19
|
||||||
|
66 65 63 60 59 57 54
|
||||||
|
10 11 13 16 17 19 22
|
||||||
|
61 64 65 67 70 73 76 78
|
||||||
|
81 78 77 75 73
|
||||||
|
40 37 34 32 31
|
||||||
|
35 37 39 40 41 43 45 47
|
||||||
|
49 51 52 54 56 59 61 64
|
||||||
|
52 54 55 56 57
|
||||||
|
86 85 84 81 80 79
|
||||||
|
53 50 49 46 43
|
||||||
|
44 42 41 40 37
|
||||||
|
32 35 36 39 41 44 45 48
|
||||||
|
25 27 28 29 30 31
|
||||||
|
90 88 86 85 83
|
||||||
|
42 45 48 50 51 53 54
|
||||||
|
22 20 19 16 13
|
||||||
|
93 90 87 84 82 80 78
|
||||||
|
18 16 15 13 12 10 7 4
|
||||||
|
96 94 92 89 87 85 84 83
|
||||||
|
38 41 44 46 49 52
|
||||||
|
63 62 60 57 55 52 49 46
|
||||||
|
51 52 55 58 61 64 67
|
||||||
|
77 78 79 82 84 87
|
||||||
|
58 61 62 63 65
|
||||||
|
55 58 59 62 65 68 69 70
|
||||||
|
29 28 25 23 22 20 18
|
||||||
|
18 20 22 24 26 29 32
|
||||||
|
77 78 79 81 83 86 87
|
||||||
|
15 14 11 9 6
|
||||||
|
72 71 68 67 66
|
||||||
|
82 84 85 87 88 89 92
|
||||||
|
50 49 48 47 44 42 40 39
|
||||||
|
82 80 78 77 74 71 68
|
||||||
|
60 58 55 54 53
|
||||||
|
71 72 73 76 77 79
|
||||||
|
38 39 41 44 45 47 50 51
|
||||||
|
65 62 61 59 56 53 51
|
||||||
|
56 57 60 62 65
|
||||||
|
34 37 39 42 44 47
|
||||||
|
12 14 16 19 22 25
|
||||||
|
19 17 16 15 14 12 10
|
||||||
|
22 20 19 17 16 15 13 10
|
||||||
|
82 79 78 77 74 71
|
||||||
|
15 13 10 7 6 4
|
||||||
|
56 58 59 61 63 65 66 69
|
||||||
|
86 85 83 81 78 77 74
|
||||||
|
75 74 71 69 67 65
|
||||||
|
33 31 29 28 26 25 24 21
|
||||||
|
58 60 62 63 65 68 71 74
|
||||||
|
43 45 48 50 52
|
||||||
|
15 17 20 23 24 25 26 29
|
||||||
|
73 70 68 67 66 64 62
|
||||||
|
91 88 87 84 82 81
|
||||||
|
51 53 54 56 58
|
||||||
|
9 11 14 17 19 22 23 26
|
||||||
|
55 52 49 47 46
|
||||||
|
9 11 13 15 17 18 20 21
|
||||||
|
89 91 92 94 96 97 98
|
||||||
|
58 59 60 61 64
|
||||||
|
14 13 10 9 8
|
||||||
|
30 33 36 39 41
|
||||||
|
75 78 80 81 84 85 87
|
||||||
|
40 42 43 45 46
|
||||||
|
71 70 68 67 65
|
||||||
|
21 23 25 28 31 33 34 36
|
||||||
|
54 51 50 49 48
|
||||||
|
61 64 67 70 73 74 75 78
|
||||||
|
19 17 16 14 12 9 8 5
|
||||||
|
22 24 27 28 30 32
|
||||||
|
80 83 84 86 88 89 90
|
||||||
|
95 93 90 89 88 85
|
||||||
|
24 26 27 30 33 35 37
|
||||||
|
96 93 90 89 87 85 82 81
|
||||||
|
82 79 76 74 73 71 69 67
|
||||||
|
77 74 71 69 67 65 64 61
|
||||||
|
29 26 23 22 20 19 16 15
|
||||||
|
72 69 66 63 61
|
||||||
|
13 12 10 9 7 6 5
|
||||||
|
15 18 21 22 24
|
||||||
|
30 28 26 23 21 19 18
|
||||||
|
49 46 43 42 39 37 36 33
|
||||||
|
62 64 67 70 73 75 78 79
|
||||||
|
47 46 45 42 41 40
|
||||||
|
44 43 42 41 38 36
|
||||||
|
52 50 49 47 44 41 38 36
|
||||||
|
45 42 40 37 36 34 31
|
||||||
|
16 14 11 8 6 5
|
||||||
|
69 66 65 63 61 59 56
|
||||||
|
29 26 24 21 20 19 18
|
||||||
|
54 52 50 47 46 43 40 38
|
||||||
|
80 83 85 86 88 89 91 92
|
||||||
|
39 40 43 45 48 51 52 55
|
||||||
|
80 79 78 77 76 75 72
|
||||||
|
8 10 11 12 15 16 18 19
|
||||||
|
86 89 90 91 93
|
||||||
|
48 51 52 55 58 59 61 63
|
||||||
|
75 72 70 67 65 62 60 59
|
||||||
|
11 14 17 18 19 20 23 26
|
||||||
|
52 49 47 45 42 41 38 35
|
||||||
|
36 38 39 42 43 45 47 48
|
||||||
|
73 70 67 65 62
|
||||||
|
80 78 75 72 69
|
||||||
|
72 70 67 65 62 61 59
|
||||||
|
59 61 62 64 66
|
||||||
|
8 11 12 14 17
|
||||||
|
45 47 49 50 53 55 58 59
|
||||||
|
51 50 48 47 46 43 42
|
||||||
|
16 18 21 23 24 26
|
||||||
|
21 20 19 16 15 12 11
|
||||||
|
13 16 17 20 23 24 25
|
||||||
|
94 92 91 90 89 86 83 80
|
||||||
|
94 91 90 87 86 83 80
|
||||||
|
17 14 12 11 8 7
|
||||||
|
23 21 18 17 16
|
||||||
|
76 75 74 72 71 70
|
||||||
|
43 41 40 37 36
|
||||||
|
32 34 35 36 39 40 43
|
||||||
|
19 21 22 24 26 28
|
||||||
|
13 14 16 17 19 22 24 26
|
||||||
|
18 15 14 11 9 8
|
||||||
|
63 62 60 58 56 55 52 51
|
||||||
|
71 72 73 75 77 78
|
||||||
|
40 42 43 46 48 50
|
||||||
|
84 83 80 78 75 72 70
|
||||||
|
28 31 32 34 37 39 40 42
|
||||||
|
27 25 24 22 20
|
||||||
|
79 77 75 73 72
|
||||||
|
86 84 83 81 80 79
|
||||||
|
81 83 86 89 92 94 96
|
||||||
|
85 86 88 90 93 96 97
|
||||||
|
81 78 75 72 71
|
||||||
|
14 17 20 23 26 28 30 31
|
||||||
|
66 65 62 59 58 57 54 52
|
||||||
|
54 56 58 61 64 66 67
|
||||||
|
37 35 33 31 30 27 26
|
||||||
|
75 73 70 68 67
|
||||||
|
76 75 73 70 68
|
||||||
|
25 28 29 31 33
|
||||||
|
70 73 75 78 80 83 84
|
||||||
|
42 41 40 38 36 34 33
|
||||||
|
20 21 22 24 26 29 31
|
||||||
|
24 21 19 17 14 11 9
|
||||||
|
77 75 73 70 68 65 63
|
||||||
|
55 54 51 50 48 47
|
||||||
|
78 77 76 75 73 72 69 68
|
||||||
|
29 27 24 21 20 19
|
||||||
|
73 71 70 69 67 64 62
|
||||||
|
91 94 95 96 97
|
||||||
|
11 13 14 16 19 20 23
|
||||||
|
63 64 66 68 70 71 74 76
|
||||||
|
64 63 61 58 57 56 54 53
|
||||||
|
46 49 51 52 54 55
|
||||||
|
20 22 24 25 28 31 32
|
||||||
|
46 49 52 54 56
|
||||||
|
74 77 79 81 82 85 86 89
|
||||||
|
45 47 50 53 54
|
||||||
|
58 57 55 54 51 50
|
||||||
|
91 90 89 86 85 83 82 80
|
||||||
|
49 46 43 42 39 36 35
|
||||||
|
75 72 71 70 69 68 65 64
|
||||||
|
42 41 39 36 33 32 31
|
||||||
|
59 61 63 64 67 69 70 72
|
||||||
|
79 81 83 85 86 87 90
|
||||||
|
35 34 32 31 30
|
||||||
|
76 73 71 68 67 65
|
||||||
|
5 7 8 11 14
|
||||||
|
26 28 29 30 32 33 34
|
||||||
|
80 83 85 86 87 89
|
||||||
|
19 18 16 14 13 10 7 4
|
||||||
|
21 18 16 15 12 11
|
||||||
|
64 67 70 72 75 76 79 80
|
||||||
|
5 6 9 11 13
|
||||||
|
87 85 82 80 77 75 72
|
||||||
|
23 22 19 18 17 16 15
|
||||||
|
51 50 47 44 41 38
|
||||||
|
34 33 31 30 29 27
|
||||||
|
39 36 33 30 27
|
||||||
|
15 13 12 10 9 8
|
||||||
|
27 28 31 33 35 36
|
||||||
|
31 30 29 26 23 20 19
|
||||||
|
47 46 44 41 39
|
||||||
|
60 58 56 54 53 51 49 48
|
||||||
|
50 47 44 42 39 36 33 30
|
||||||
|
70 68 65 64 63 60
|
||||||
|
61 63 66 69 72 75 77 78
|
||||||
|
19 17 16 13 10 7
|
||||||
|
51 50 47 45 44 42 41 40
|
||||||
|
72 73 76 77 80 81
|
||||||
|
69 68 65 64 62 60 58
|
||||||
|
47 44 41 38 35
|
||||||
|
33 30 27 24 22 20
|
||||||
|
54 51 50 48 46 43
|
||||||
|
96 95 94 93 91 88
|
||||||
|
77 76 73 71 69
|
||||||
|
2 3 5 7 9 10 12
|
||||||
|
20 21 23 24 25 26 27
|
||||||
|
28 26 25 23 21 20 18 17
|
||||||
|
52 55 57 59 60 63 64
|
||||||
|
37 35 32 29 26
|
||||||
|
62 61 60 57 55 53 52 50
|
||||||
|
80 82 83 86 87
|
||||||
|
64 66 68 69 71 72
|
||||||
|
22 19 16 14 13 11
|
||||||
|
98 96 93 91 88
|
||||||
|
22 25 27 28 31 32
|
||||||
|
63 61 60 57 56 55 53 50
|
||||||
|
13 10 8 6 4
|
||||||
|
35 37 38 40 41 42 43
|
||||||
|
95 94 93 90 88
|
||||||
|
98 96 93 90 88 87
|
||||||
|
39 40 43 44 45 48
|
||||||
|
21 24 26 27 28 29
|
||||||
|
31 34 36 39 40 41 42 43
|
||||||
|
68 65 64 61 58
|
||||||
|
47 49 52 54 57 60
|
||||||
|
26 28 31 34 36 37 40 43
|
||||||
|
82 84 86 89 91 93
|
||||||
|
78 75 74 72 71 70
|
||||||
|
43 46 49 50 52 53
|
||||||
|
64 66 67 69 71
|
||||||
|
1 4 7 9 10
|
||||||
|
47 49 50 51 53 56
|
||||||
|
54 53 52 49 46 43 42 40
|
||||||
|
59 58 57 56 53
|
||||||
|
29 28 26 23 20 18 15
|
||||||
|
41 42 45 48 49 52 54 55
|
||||||
|
30 32 34 37 40
|
||||||
|
34 37 38 41 43 46 48 50
|
||||||
|
18 20 23 25 26
|
||||||
|
61 63 66 69 72 74 77
|
||||||
|
34 37 40 42 45 48 49 51
|
||||||
|
64 61 60 59 56 53 50
|
||||||
|
71 68 66 63 61 58 55 53
|
||||||
|
25 22 20 19 16 15 14
|
||||||
|
25 22 21 19 18
|
||||||
|
13 15 16 19 22 24 25
|
||||||
|
53 54 56 58 60 62
|
||||||
|
6 7 8 11 14 16
|
||||||
|
61 60 59 58 56 54
|
||||||
|
89 86 85 82 79 76 74 73
|
||||||
|
19 21 23 26 28 30 31
|
||||||
|
90 89 88 86 83
|
||||||
|
68 69 71 72 74 75
|
||||||
|
67 65 63 61 59
|
||||||
|
13 11 9 7 6 5 4 3
|
||||||
|
52 53 54 55 56 59
|
||||||
|
82 80 77 76 74 73
|
||||||
|
11 9 6 3 2
|
||||||
|
59 60 62 64 65 67
|
||||||
|
69 67 66 64 62
|
||||||
|
65 67 68 71 74 75
|
||||||
|
73 74 75 78 80 83 84 87
|
||||||
|
96 93 91 88 85 83 81 80
|
||||||
|
28 25 23 21 19 16
|
||||||
|
61 62 63 66 67 70 73
|
||||||
|
86 87 88 90 91
|
||||||
|
69 66 63 61 59 58 56
|
||||||
|
24 26 27 28 31 34 37
|
||||||
|
15 16 18 20 22 23 24
|
||||||
|
64 66 67 69 71 74 75 76
|
||||||
|
77 76 75 73 70 68 66
|
||||||
|
26 27 29 31 34 36
|
||||||
|
95 94 93 92 90
|
||||||
|
1 4 7 8 10 12 14
|
||||||
|
66 64 62 60 58 56 55 54
|
||||||
|
40 42 44 45 47 50 52 55
|
||||||
|
16 17 18 20 22 24 26 29
|
||||||
|
27 25 24 21 19 16 13
|
||||||
|
99 96 95 93 91 89
|
||||||
|
29 32 35 38 39 40 43
|
||||||
|
96 94 92 91 88 85
|
||||||
|
51 48 47 45 43
|
||||||
|
37 35 34 31 28 27 25 23
|
||||||
|
92 89 87 86 83
|
||||||
|
69 71 74 77 80 83 85
|
||||||
|
17 20 21 22 25 27 28 29
|
||||||
|
15 16 18 19 21 22 23 26
|
||||||
|
50 52 54 56 57 58 59 60
|
||||||
|
63 60 57 54 53 50 47
|
||||||
|
57 59 62 64 66 67 68
|
||||||
|
82 81 79 76 74 73 71 69
|
||||||
|
34 35 37 39 42
|
||||||
|
81 83 86 89 90 92 95 98
|
||||||
|
1 2 5 6 7 10
|
||||||
|
57 55 52 51 50 48
|
||||||
|
2 3 5 7 8 11 12 15
|
||||||
|
14 11 10 8 5 4
|
||||||
|
11 14 16 19 20
|
||||||
|
73 76 78 79 81 84
|
||||||
|
70 71 73 75 78 80 82
|
||||||
|
24 27 28 31 34 37 38
|
||||||
|
47 45 42 40 38 35 33
|
||||||
|
30 29 27 26 23 22
|
||||||
|
13 16 17 18 19 21
|
||||||
|
58 55 52 51 48 46 45 42
|
||||||
|
73 72 69 66 63 62 60 59
|
||||||
|
21 19 16 15 12 11 9 8
|
||||||
|
70 71 74 77 80
|
||||||
|
57 58 59 60 61 62
|
||||||
|
39 36 33 30 29 26 24
|
||||||
|
36 35 33 30 28 25
|
||||||
|
51 48 46 45 43 42
|
||||||
|
69 70 73 74 77 79 80 83
|
||||||
|
33 35 36 38 39 40 43
|
||||||
|
48 47 46 45 44 42
|
||||||
|
14 15 16 19 22 25 28
|
||||||
|
76 79 82 85 88 89 90
|
||||||
|
55 56 58 59 62 64
|
||||||
|
1 4 6 7 9 10 12 15
|
||||||
|
64 61 59 58 57 54
|
||||||
|
30 29 27 25 24 22 20
|
||||||
|
67 65 62 59 56 54
|
||||||
|
70 69 68 65 64 63
|
||||||
|
93 92 89 87 85
|
||||||
|
26 25 22 21 19 16 14 13
|
||||||
|
30 31 34 35 38 40 41 42
|
||||||
|
33 35 37 38 41 44 46
|
||||||
|
91 89 86 85 83 82
|
||||||
|
59 62 65 67 70 73 75
|
||||||
|
62 64 65 68 69 72 73
|
||||||
|
19 22 23 26 28 29 32
|
||||||
|
40 37 34 33 32 29 27
|
||||||
|
34 36 39 41 44 46
|
||||||
|
3 4 7 10 13 15 16 19
|
||||||
|
74 72 69 67 66 65
|
||||||
|
78 76 75 73 72 70 67 65
|
||||||
|
2 5 8 9 11
|
||||||
|
8 11 14 17 19 22 25
|
||||||
|
39 42 44 46 48 51
|
||||||
|
36 35 34 31 30 27 25
|
||||||
|
38 40 43 46 48 49 50
|
||||||
|
64 66 68 71 73 76 78
|
||||||
|
66 69 70 72 73
|
||||||
|
64 61 60 58 55
|
||||||
|
84 81 79 76 74
|
||||||
|
14 17 20 21 23 25 27
|
||||||
|
77 80 81 84 87 88 91 93
|
||||||
|
20 17 14 12 9 6 3
|
||||||
|
81 84 87 89 92 95
|
||||||
|
73 72 71 70 67 64
|
||||||
|
50 48 47 44 43 41 38
|
||||||
|
62 64 66 69 72 74
|
||||||
|
35 34 32 31 28
|
||||||
|
79 78 76 74 73 72 71 70
|
||||||
|
35 32 29 28 27 26
|
||||||
|
63 62 60 58 56 54
|
||||||
|
19 16 13 10 9
|
||||||
|
80 78 75 73 71
|
||||||
|
68 65 62 60 58 57 56
|
||||||
|
36 39 40 43 44
|
||||||
|
46 44 42 39 36 35 34 32
|
||||||
|
29 31 34 37 40 42 43
|
||||||
|
57 55 53 52 49 46
|
||||||
|
87 84 83 82 80
|
||||||
|
13 10 8 6 3
|
||||||
|
92 91 90 88 85 84 83 82
|
||||||
|
36 33 30 29 27 25 23 21
|
||||||
|
39 38 36 34 32 30
|
||||||
|
77 80 81 83 85 86
|
||||||
|
79 81 82 83 85 88 90
|
||||||
|
24 25 28 29 31 33 36 38
|
||||||
|
87 85 83 82 80 79
|
||||||
|
88 90 92 93 94
|
||||||
|
17 19 20 21 22 25 26 29
|
||||||
|
37 34 31 30 27
|
||||||
|
23 21 19 17 16
|
||||||
|
27 25 24 23 22 19 18 17
|
||||||
|
13 12 9 6 4 1
|
||||||
|
81 83 85 88 91 93
|
||||||
|
15 14 12 10 9 7 6
|
||||||
|
44 46 48 51 54 55
|
||||||
|
27 25 23 22 20 18 17 16
|
||||||
|
45 48 49 51 52 53
|
||||||
|
23 25 27 28 30 31
|
||||||
|
60 59 56 54 53
|
||||||
|
70 73 75 76 78 79 80 82
|
||||||
|
32 29 27 26 23
|
||||||
|
7 8 9 11 14
|
||||||
|
80 81 83 86 89 92
|
||||||
|
85 84 82 80 77
|
||||||
|
95 94 92 91 89
|
||||||
|
20 17 14 12 11
|
||||||
|
20 18 16 14 13 10 9
|
||||||
|
26 23 21 19 18 17 15
|
||||||
|
25 27 30 33 36 39
|
||||||
|
58 59 62 65 68 69
|
||||||
|
16 19 22 23 24 25 28 30
|
||||||
|
71 70 68 67 64 62
|
||||||
|
31 28 27 24 22
|
||||||
|
5 8 10 11 12 14 15
|
||||||
|
88 87 85 83 82 79 77
|
||||||
|
52 53 56 57 59
|
||||||
|
45 47 48 50 51 54 56
|
||||||
|
49 51 53 55 56
|
||||||
|
92 90 89 86 85 83 82
|
||||||
|
84 85 88 91 94
|
||||||
|
79 77 75 74 72 70
|
||||||
|
67 66 63 62 61
|
||||||
|
84 87 90 91 93
|
||||||
|
84 83 82 79 78 76
|
||||||
|
78 79 81 82 83 86
|
||||||
|
17 18 19 22 23
|
||||||
|
49 51 52 53 56 59 61
|
||||||
|
29 28 26 23 21
|
||||||
|
73 75 76 79 82 83 85 87
|
||||||
|
52 54 56 58 61
|
||||||
|
83 81 80 77 74 73
|
||||||
|
74 76 79 82 85 88 90 91
|
||||||
|
80 79 78 76 75 73 72 70
|
||||||
|
59 62 65 68 71 73 75
|
||||||
|
27 29 31 34 37 39 41 43
|
||||||
|
12 11 8 6 5 3
|
||||||
|
49 48 45 43 42 39 36 33
|
||||||
|
26 25 22 21 18 17 15 12
|
||||||
|
20 18 17 16 13
|
||||||
|
56 54 53 50 47
|
||||||
|
46 43 41 40 38 36 35 33
|
||||||
|
6 7 9 11 14
|
||||||
|
45 48 50 52 55 57 58
|
||||||
|
35 37 39 42 44 47 50 51
|
||||||
|
93 92 89 88 87 84 81 79
|
||||||
|
15 17 20 22 25 28
|
||||||
|
65 63 60 57 55 53
|
||||||
|
84 81 80 77 76
|
||||||
|
79 82 85 88 89
|
||||||
|
84 85 86 88 91 93 94
|
||||||
|
42 45 46 49 52 53 56
|
||||||
|
16 17 20 23 24
|
||||||
|
59 60 63 65 68 71 72
|
||||||
|
48 49 50 51 54 55 57
|
||||||
|
52 55 57 60 61
|
||||||
|
42 45 48 49 52 55 57
|
||||||
|
18 17 16 14 13
|
||||||
|
20 23 26 28 29 32
|
||||||
|
22 19 17 15 14 12 11
|
||||||
|
72 74 76 78 79 80
|
||||||
|
11 12 13 16 19
|
||||||
|
24 27 29 32 34 37 39 40
|
||||||
|
18 20 22 25 26
|
||||||
|
68 70 71 74 76
|
||||||
|
49 51 52 54 56 59 61
|
||||||
|
29 30 33 34 36 37 39
|
||||||
|
80 81 84 87 89
|
||||||
|
52 55 57 59 62
|
||||||
|
58 56 54 53 50
|
||||||
|
28 29 32 35 36 39 40
|
||||||
|
21 18 15 13 10 7 6 4
|
||||||
|
79 80 82 83 86 89 92 95
|
||||||
|
46 48 50 52 55 56 59
|
||||||
|
41 43 44 45 47 49 50 53
|
||||||
|
18 20 21 22 25 27 29 32
|
||||||
|
22 24 26 27 30
|
||||||
|
82 79 78 75 74
|
||||||
|
86 85 82 81 78 75 73
|
||||||
|
51 49 46 45 42 41
|
||||||
|
85 88 89 90 93 94 95 98
|
||||||
|
52 55 58 61 63
|
||||||
|
60 59 57 54 52 50 47
|
||||||
|
68 69 71 74 75 76 79 80
|
||||||
|
39 42 44 45 47 49 52
|
||||||
|
56 53 51 49 48 45
|
||||||
|
78 81 84 87 90
|
||||||
|
3 4 6 7 8 10
|
||||||
|
25 28 31 33 36 39 40 42
|
||||||
|
59 62 63 65 67
|
||||||
|
93 90 88 86 85 82 80 78
|
||||||
|
35 33 32 30 29 28 26 25
|
||||||
|
28 30 33 36 39 41 42
|
||||||
|
88 85 84 82 81 80 78 75
|
||||||
|
26 25 24 23 20 19
|
||||||
|
81 84 85 88 89 92 93 96
|
||||||
|
31 28 27 24 23 22 20 19
|
||||||
|
96 95 93 90 89
|
||||||
|
69 72 74 77 80
|
||||||
|
97 96 95 92 91 88 87 84
|
||||||
|
86 85 84 82 80 79 77
|
||||||
|
44 42 39 37 36 35 32 31
|
||||||
|
70 68 66 65 62
|
||||||
|
79 80 82 83 85 88
|
||||||
|
28 31 32 33 34
|
||||||
|
15 16 19 21 24
|
||||||
|
73 75 77 78 80 83
|
||||||
|
50 52 53 54 57 60 63
|
||||||
|
81 79 78 75 72 70 68
|
||||||
|
46 49 52 54 55 57
|
||||||
|
57 56 53 50 49
|
||||||
|
41 42 45 46 49 51 54
|
||||||
|
86 83 81 80 79 78
|
||||||
|
50 51 52 55 58 61
|
||||||
|
61 64 66 69 71
|
||||||
|
15 16 17 20 23 26 27
|
||||||
|
56 59 60 61 64 65 68 71
|
||||||
|
72 71 69 66 65 62
|
||||||
|
35 36 39 41 42
|
||||||
|
79 81 84 85 87
|
||||||
|
72 70 69 66 65 64
|
||||||
|
59 60 62 64 65 66 67
|
||||||
|
28 27 26 25 24 23 21
|
||||||
|
34 32 30 29 26 24
|
||||||
|
14 16 19 21 23
|
||||||
|
61 63 66 67 70 73 75
|
||||||
|
62 64 66 69 72
|
||||||
|
52 54 56 57 58
|
||||||
|
67 70 72 75 78 79
|
||||||
|
74 72 70 68 66 64 63 61
|
||||||
|
86 84 81 79 76 75 73 71
|
||||||
|
31 30 28 26 23 22 20
|
||||||
|
78 79 81 82 85 88
|
||||||
|
20 21 22 23 25 26 28 30
|
||||||
|
12 9 7 4 1
|
||||||
|
97 96 95 94 92 90 89 86
|
||||||
|
51 53 55 58 59 60
|
||||||
|
53 52 49 47 46 43
|
||||||
|
44 43 42 39 38
|
||||||
|
67 70 73 75 78 80 83 84
|
||||||
|
68 66 64 61 59 56 53
|
||||||
|
49 46 45 43 41 40 38
|
||||||
|
70 68 67 66 65 63 61
|
||||||
|
40 39 37 34 33 30 28 25
|
||||||
|
16 18 20 22 23 25 28
|
||||||
|
79 78 76 74 73 70 68
|
||||||
|
69 67 64 61 59 57
|
||||||
|
50 52 55 57 58 59 62
|
||||||
|
46 49 51 54 56 58 60 62
|
||||||
|
55 57 60 62 63 66 69
|
||||||
|
99 97 94 93 92
|
||||||
|
26 29 32 33 36 37 39
|
||||||
|
13 15 18 20 22 23 25 27
|
||||||
|
76 77 80 82 85 86
|
||||||
|
32 33 36 39 40 41
|
||||||
|
27 26 24 21 19
|
||||||
|
12 11 10 9 7 6 5 2
|
||||||
|
50 53 54 57 60 62
|
||||||
|
23 25 28 29 31 33 34
|
||||||
|
31 33 35 36 37 39 41 43
|
||||||
|
48 49 51 53 54 55 58
|
||||||
|
70 67 64 62 59 57 55
|
||||||
|
37 38 39 41 42 44
|
||||||
|
71 74 76 78 80 82 84 87
|
||||||
|
61 63 65 67 68 70 72
|
||||||
|
87 84 82 80 79
|
||||||
|
3 5 6 8 11 13 14 17
|
||||||
|
95 93 91 88 87 85 84
|
||||||
|
34 37 39 42 45 46 49
|
||||||
|
61 58 56 55 54
|
||||||
|
17 14 11 8 6
|
||||||
|
50 48 45 42 40 38 35
|
||||||
|
52 51 50 47 44 42
|
||||||
|
21 22 23 26 28 29
|
||||||
|
26 29 31 32 33
|
||||||
|
46 45 43 42 41 39 37 36
|
||||||
|
85 87 89 92 94
|
||||||
|
78 76 75 73 71 70 69 68
|
||||||
|
59 61 63 64 66 69 70 72
|
||||||
|
20 17 15 13 12 11
|
||||||
|
25 27 30 31 32 34 36 37
|
||||||
|
68 71 74 77 79 80
|
||||||
|
73 72 69 67 64 62 60 59
|
||||||
|
22 20 19 18 16
|
||||||
|
49 47 45 43 40 38 36
|
||||||
|
70 71 72 75 76 79 81
|
||||||
|
66 67 69 70 73 75 77
|
||||||
|
94 91 89 87 84 81 79
|
||||||
|
45 46 47 49 52 54
|
||||||
|
31 33 34 35 38 41 43
|
||||||
|
21 19 18 17 14 12 9 8
|
||||||
|
54 57 59 60 61 62 65 66
|
||||||
|
39 42 45 47 48 51 52
|
||||||
|
97 96 93 90 88
|
||||||
|
38 35 34 31 28
|
||||||
|
91 89 86 83 81 79
|
||||||
|
77 80 82 83 86
|
||||||
|
36 35 33 32 31 28 26 23
|
||||||
|
37 40 41 42 44 47 48 50
|
||||||
|
42 43 44 46 48 51 52 54
|
||||||
|
79 81 82 84 85 86 89 91
|
||||||
|
38 40 42 45 46 49 50
|
||||||
|
21 19 16 15 12 11
|
||||||
|
35 33 31 29 28 27
|
||||||
|
42 41 40 37 35
|
||||||
|
85 82 81 78 75 73 72
|
||||||
|
22 25 26 28 31 34
|
||||||
|
77 74 71 69 68 67
|
||||||
|
71 68 67 64 61 58 57
|
||||||
|
68 66 63 61 59
|
||||||
|
31 32 35 36 38 39 41
|
||||||
|
33 30 28 26 23 21
|
||||||
|
18 15 13 11 9 6 5
|
||||||
|
60 63 66 67 68 70 71
|
||||||
|
38 41 43 44 45 47
|
||||||
@@ -0,0 +1,45 @@
|
|||||||
|
--- Day 3: Mull It Over ---
|
||||||
|
|
||||||
|
"Our computers are having issues, so I have no idea if we have any Chief Historians in stock! You're welcome to check the warehouse, though," says the mildly flustered shopkeeper at the North Pole Toboggan Rental Shop. The Historians head out to take a look.
|
||||||
|
|
||||||
|
The shopkeeper turns to you. "Any chance you can see why our computers are having issues again?"
|
||||||
|
|
||||||
|
The computer appears to be trying to run a program, but its memory (your puzzle input) is corrupted. All of the instructions have been jumbled up!
|
||||||
|
|
||||||
|
It seems like the goal of the program is just to multiply some numbers. It does that with instructions like mul(X,Y), where X and Y are each 1-3 digit numbers. For instance, mul(44,46) multiplies 44 by 46 to get a result of 2024. Similarly, mul(123,4) would multiply 123 by 4.
|
||||||
|
|
||||||
|
However, because the program's memory has been corrupted, there are also many invalid characters that should be ignored, even if they look like part of a mul instruction. Sequences like mul(4*, mul(6,9!, ?(12,34), or mul ( 2 , 4 ) do nothing.
|
||||||
|
|
||||||
|
For example, consider the following section of corrupted memory:
|
||||||
|
|
||||||
|
xmul(2,4)%&mul[3,7]!@^do_not_mul(5,5)+mul(32,64]then(mul(11,8)mul(8,5))
|
||||||
|
|
||||||
|
Only the four highlighted sections are real mul instructions. Adding up the result of each instruction produces 161 (2*4 + 5*5 + 11*8 + 8*5).
|
||||||
|
|
||||||
|
Scan the corrupted memory for uncorrupted mul instructions. What do you get if you add up all of the results of the multiplications?
|
||||||
|
|
||||||
|
Your puzzle answer was 166630675.
|
||||||
|
--- Part Two ---
|
||||||
|
|
||||||
|
As you scan through the corrupted memory, you notice that some of the conditional statements are also still intact. If you handle some of the uncorrupted conditional statements in the program, you might be able to get an even more accurate result.
|
||||||
|
|
||||||
|
There are two new instructions you'll need to handle:
|
||||||
|
|
||||||
|
The do() instruction enables future mul instructions.
|
||||||
|
The don't() instruction disables future mul instructions.
|
||||||
|
|
||||||
|
Only the most recent do() or don't() instruction applies. At the beginning of the program, mul instructions are enabled.
|
||||||
|
|
||||||
|
For example:
|
||||||
|
|
||||||
|
xmul(2,4)&mul[3,7]!^don't()_mul(5,5)+mul(32,64](mul(11,8)undo()?mul(8,5))
|
||||||
|
|
||||||
|
This corrupted memory is similar to the example from before, but this time the mul(5,5) and mul(11,8) instructions are disabled because there is a don't() instruction before them. The other mul instructions function normally, including the one at the end that gets re-enabled by a do() instruction.
|
||||||
|
|
||||||
|
This time, the sum of the results is 48 (2*4 + 8*5).
|
||||||
|
|
||||||
|
Handle the new instructions; what do you get if you add up all of the results of just the enabled multiplications?
|
||||||
|
|
||||||
|
Your puzzle answer was 93465710.
|
||||||
|
|
||||||
|
Both parts of this puzzle are complete! They provide two gold stars: **
|
||||||
Executable
+32
@@ -0,0 +1,32 @@
|
|||||||
|
#!/usr/bin/env python3
|
||||||
|
|
||||||
|
import sys, re
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == '__main__':
|
||||||
|
instr = '\n'.join([line.strip('\n') for line in open(sys.argv[1])])
|
||||||
|
res1, res2 = 0, 0
|
||||||
|
do = True
|
||||||
|
dos = []
|
||||||
|
prev = 0
|
||||||
|
do = re.compile(r'(don\'t|do)\(\)')
|
||||||
|
for d in do.finditer(instr):
|
||||||
|
if d.group() == 'don\'t()' and do:
|
||||||
|
do = False
|
||||||
|
dos.append((prev, d.start()))
|
||||||
|
elif d.group() == 'do()' and not do:
|
||||||
|
do = True
|
||||||
|
prev = d.start()
|
||||||
|
if do: dos.append((prev, len(instr)))
|
||||||
|
|
||||||
|
mul = re.compile(r'mul\((?P<d1>\d{1,3}),(?P<d2>\d{1,3})\)', re.DOTALL)
|
||||||
|
for m in mul.finditer(instr):
|
||||||
|
res1 += int(m['d1']) * int(m['d2'])
|
||||||
|
if sum([m.start() in range(*r) for r in dos]): res2 += int(m['d1']) * int(m['d2'])
|
||||||
|
|
||||||
|
# challenge 1
|
||||||
|
print(f"challenge 1:\n{res1}\n")
|
||||||
|
|
||||||
|
# challenge 2
|
||||||
|
print(f"challenge 2:\n{res2}")
|
||||||
|
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
xmul(2,4)%&mul[3,7]!@^do_not_mul(5,5)+mul(32,64]then(mul(11,8)mul(8,5))
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
xmul(2,4)&mul[3,7]!^don't()_mul(5,5)+mul(32,64](mul(11,8)undo()?mul(8,5))
|
||||||
@@ -0,0 +1,6 @@
|
|||||||
|
mul(168,87)}*:mul(911,800)(%,)where()#&&$mul(734,19)?when()why(){$:?mul(829,495)do()mul(724,312){;^mul(520,383) mul(137,485)select()-mul(700,211) <(who()who()/mul(295,600)]~<select()'$why()do()when()mul(310,255)^}where()who()(!+mul(16,916),)what()@:@#where()mul(918,822),when()~/)mul(177,722)<&]:who()where()>mul(439,650)?+$mul(349,399)mul(807,317)what()?@[%mul(674,778)!mul(104,928)~[!!mul(60,636){where()when()&@why()-+mul(742,28)select()why()'&why()@>select()mul(527,483)mul(797,855)how()mul(502,647)what() {(*'}%mul(688,600))!??,+$mul(538,127)&from(),>~&*mul(963,787)~mul(820,259)~}~how()>do()what()^<}[?{'mul(202,9)$select(795,484);from()<!mul(913,93)/{{what()#-select()how()]mul(520,288),^&what()mul(583,623)mul(657,601)>;^@what()mul(671,74)&@how(151,76)!?:{mul(933,567)/)&select()do()>+,~?>mul(627,488) *mul(437,91){!#}%?how()who()mul(741,704)select():where()mul(258,129),&why():)mul(770,13)@ from()?-!what()$mul(229,613)from() select()why()};select()mul(59,263)where()from(97,930)?where()mul(514,278)(-don't()&$[how()why(783,866)&who(589,80)#; mul(130,239)don't()mul(195,249),~>>who()mul(945,698) /}how()>mul(983,248)[~why()({from()-(how()?mul(206,469)&>~who()]mul(661,410)how()&mul(768,601)/!--select()>,%mul(455,805)(}]how();<who(735,631)why()mul(216,340))what(181,514)mul(736,427)^when()]$%where()'<;mul(754,836)*@!why()select()]mul(869,551)~mul(752,713) <(~&@#mul(124,162)why()/mul(512,273); /where()why()mul(471,915)/(where():?}mul(608,515){[@:'select()[][ mul(983,96)%where(),why(){~-+]mul(102,860):#?select()%who(105,947):who(416,728)mul(765,635)@(mul(898,549)$where(580,81){mul(497,154)>/from())mul(728,180)'(what()[mul(915,20)who()+&don't()select()^)}$!who()+>mul(481,439)- *mul(332,923)when()-why()!mul(625,335)?mul(156,134)why()*'$:mul(104,186)^?#>/mul(605,863),,?mul(161,457)!#~,#~>/mul(514how()where(),'$;'$+)mul(207,90)&>$how()mul(394,95),where()'mul(827,742)how()[from()(]:/why()$+mul(46,294)>who()who()^@[^mul(500,356){]{mul(989,398)(}: mul(300,17):how()who()%?#@why()!mul(362,556)>$mul(29,294)who()<;when()mul(108,898),#<<~-*(where()@mul(86,710),'-$&what()(mul(573,832)),?{mul(953,794)why()^what()-*,/?)mul(511,634):how()/how()'what()what()mul(709,593)]mul(721,842)(!&why()where()&mul(259,304/$[*why()+#mul(932,748)? {mul(979,591)mul(576,282)(-when():^,select()>@mul(146,41){[<#(#'*}mul(615,174)&>when()what()&(mul(914,488)[~why(267,875)mul(167,385)+<%~}@![why()mul(221,316):,;[:@(!who()mul(340,617)&*how()%mul(151,744) >},-)'?mul(414,238)mul(100,868)%%what()where()mul(467,880):mul(266,276)!@!#'who()'mul(500,629)[#^select()*+how()(mul(538,599):* [;'mul(919,315)mul(760,200) <$/$}{why()'(mul(794,683)from()**'$,}}mul(915,608)>$$mul(114,893)what()select()do():^from()??from()from()^mul(316,793)>'/when()+mul(199,368)[~mul(539,838) ^(*??%mul(162,286){mul(647,357)who()$(>what()?,why()>from()mul(239,449){select()who()mul(408,790)mul(567,879)
|
||||||
|
when(),who()[what()mul(874,22)mul*'mul(908,653)>~)@mul(773,355)#mul(716,195) ?@who()mul(128,574)^select(),{:mul(799,387)who()-)+]select()'mul[mul(153,811)from(854,516)select()'(',#mul(760,387from()mul(434,344)@?what(),&!'mul(108,675) 'who()%>+why()mul>]%select()[mul(793,13)mul(333,332)~why()/what()mul(774,658)**mul(375,739)[)*what()what(),>::>mul(702,335)%}{-@'~who();mul(992,903)}where()$(~@)'%mul(488,891)where()*);why()what():{&why()mul(29,881)&]where()where()~*mul(886,964)}&):where()who(){?mul(60,664)why()from()< +select()[when(789,49)$mul(40,510)<how()who()mul(755,503)mul(851,686)?#;}{{from()~'do()>from()~ who()>?from(431,14)%[mul(313,439)mul(999,227)[how()']what()(%,don't()who()><{#~'where()?mul(796,988)what()$/why()#select()/#what();mul(401{~mul(949,141)when()why())/^$$}^(mul(472,738){]:+mul(372,612)mul(647,895)>&$***mul(619,883)(;^mul(864,456-}#/?mul(68,612)~,}>from()!>-when()mul(997,365)mul(524,378)where()where()/!mul(301,937) ++?^what()mul(656,303)}{}mul(953,842);select()select()~[)<mul(617,87)where()what(517,442)~{mul(412,205)-?^?from()],+mul#?%#mul(389,357)how()!$<mul(809,511)who()>do() !;!mul(344,321)from()mul(819,403)+how()where()where()<($mul(908(,>%*why()what()^mul(533,374)-,select()mul(905,803)mul(140,691)what()([mul(874,79)]?how()what()?->mul(344,908)$#&#;from()!mul(256,631){where()#@,]~*:why()mul(225,679)where()?[mul(141,585)+)@~#how()mul(933,177)((+select()mul(312,241)+mul(247,632)how()^[,&from():where()%mul(663,72)![@@when()mul(274,536)>who()@mul(269,240)mul(732,115)!%@'%mul(479,836)-why()mul(502,828)#mul(548,385))mul(312,586)/&{//+{^mul(275,705)where(377,884)$ *!who()mul(382,713)+<@(<>)[select()'don't()mul(182,291)select()]:*select()where(872,531)what()&)mul(361,941)why()/+mul(832,469),-$)mul(753,874)^when(){,@mul(865,352),+#what()mul(749,612)!?#]from(),#mul(734,31)when()^mul(992,318)mul(396,187where()mul(134,182)&<&%$[>,mul(527,215)mul(400,794)'~what()mul(427,148)where()from()<<mul(867,258)<>-mul(495,578)where()}-don't()select()%+^{]what()where()mul(730,966)%$where()'mul(507,416)from()~)how(488,343) %<%>$mul(486,368)what()why()[mul}^^{who()what()[select()'why()who()mul(214,853)from()how(301,437)^):)]how()mul(657,161))(^@select()'mul(313,702)(mul(486,323)*&;&why(){'&how()-mul(911,603)-what()%mul(519,498))select():from()mul(652,991)!!/,mul(308,418)- &#+(who())~)mul(749,786);what()(mul(731,76)<!mul(572,33)/%:;select()from()mul(509,810)~mul(861,431)>do(){&what()$+-^how()mul(214,122)mul(540,414)from()mul(640,157)select()< #:;]^mul~mul(705,467)(?[}when()>where()?mul(45,584)~when()^;mul(519,782)}#when()+[mul(670,319?>]mul(451,604):mul(646,328)when()^mul(326,180)why();who();'$mul(642,425)from();?+when()]mul(907,636)what()%;do()what()?{who()mul(974,27)>{how()(^}mul(357,294)${~[@mul(983,221)who(){(!~from()^mul(128,197)*mul(942,48)>:+]{/from()#mul(237,772)<+select()@mul(361,84);why()]!)who()}+mul(740,305)&,[>]how()mul(660,613):)from()do() select()?when()%select() (mul(835,437)why();)</? how()mul(417,353)-( !select(480,286)mul(935,409)who()/*^+$mul(48,5)>how()mul(819<%/{how(675,621)where()@(>from()mul(722,49)
|
||||||
|
+)do()%;!who()who(772,423)]$<-mul(328,361))mul(149,957))do(){#!where()>#what()(select()/mul(756,781) *-select()?why(713,643)mul(514,277)$]how()/^mul(7,203)%when()how()who()mul(389,589~]who()*>$^@mul(129,92)~;mul(759,369)how()*!&from()/when()%mul(650,562),*who()*'%when()mul(236,299) }?how()how():don't(),who()how()'why()who()what()@mul(322,510):-@:$@^mul(634,343)-what()#what()from(38,805),<+mul*where(835,107)where()&where(816,43)(%{mul(617,254)where()!^![ who()?;<mul(166,155),$*:<mul(827>/~*;why()mul(788,442))-what())!?(mul(662,916)mul(401,521)mul(234,405)+~,{>from() :{select()mul(635,416)+[~[,mul(562,550)mul(152,551)#]mul(164,957)~<what()#where()>from() mul(761$who()?--<where()+mul(795,259)[~{?<select()&:mul(229,87)mul(864,182)how()?mul(974,34),mul(627-mul(177,523);,^mul(45,82)[-!}mul(370,437)(#:];:(mul(818,270)'}^]when()how(934,258)don't()'{+*why()}mul(530,297)]^/$from()<who()*$mul(842,310)from()^/)%select())+mul(482why()select()&from(415,942)!]how()why()mul(279,984)~when()>}~'/who()when();mul(796,168)what()mul(199,983)>:]when()?why() mul(410,263) when()how()?mul(413,448)]mul(825,830)# mul$mul(261,686)@~{>{what(276,567)mul(341,638)who(){?*$[why(831,759)^ from()mul(741,711)'who()select(){mul(61,52)[what(){%don't():who()@mul(219!)?];where();' *mul(371,514)>[:mul(53,428!mul(538,853)]$#~do()@mul(200%{$$[$#$)mul(57,357)/mul(399,855)~<(*@~what()(@mul(814select():what()]~[#mul(507,982)**mul(68,893)}#mul(631,348)from()mul(205,133)mul(497,687from() !mul(728,117)[;)'@/}@{mul(678,169)who()@$@@~%how()mul(959,969)%@^&{~! ]%mul(324,123)'from()who()}^%mul(763,855)from()^when()#{ /from()#]mul(316,502)what())^<^%%mul(813,959)&why()~~-?-mul(798,375)$>{#'why()&:,why()mul(83,95)(don't()mul(798,687)when(506,624)from()(,how()^: ]>mul(149,563)why()~mul(41,612)-:?when()^/)mul(974,373)>when()?how()*mul(36,761)what(){&@)mul(390,671)when()mul(696,964,@when()@$/?~>~mul(548,987)select()what()% who();$mul(80,587)&^{+,don't()?what()*why(),( mul(124-^>how()/>'mul(155,901)?<;when()!!mul(90,13))/'^from()&[,)mul(805,998):@select()/~from()+(^/mul(823,626)%where()select()how()%&>mul(257,517))#->mul(304,899))mul(255?mul(302,286)>?@<mul(777,721)^&what() !from()/*where()mul(817,696)why()#+&who()why(351,81)}where()$mul(237,864)<&(do()^?from():*{<who()select())mul(975,616),{+where()/@@who()mul(549,977)@<)when(),mul(508+<$mul(716,515)^,-]who()#select()<+mul(118,226how()mul(543,380)(how()?select()from()@}mul(28,144);;'>mul(899,21)@mul(619,488)$->&^@from()(*-mul(266,282)/]from()@who(109,244)()mul(98,720)why()what()>;% mul(681,256)#~)]from()@&mul(517,40)@@what())mul(725,452)mul(852,71)?$mul(612,673*select()what())#mul(120,4),where()who())mul(808,259)who()'^~mul(325,215)!>select()~mul(853,581)%why()mul(652,100)%<select()##what()~mul(237,441)when()!how(753,120)^mul(890,518)from():,who(196,65)+#$ mul(664,43)}%^how()/from()[[when()mul(39,906)mul(324,714)#[#from()mul(569,489)'<who()*@mul(167,880)*select(){>^@don't()/,when()~what(),+&mul(975,420){+*when()]^how()*why()who()mul(448,331)!/when()~mul(235,190)^$}+*++{#mul(96,137):?%where()mul(511,78)};^{&:when()!don't()&when()''&#:{mul(205,318)*!where()?when()~/&from(733,701)?mul*#&#where()where()]{select()mul(474,265)from(755,678)why()!;#]'>-]mul(132,817);&)]^*what()[mul(831,118)select()<mul(181,530)%)mul,])!<>+how()how()mul(292,875)%&select()[@*mul(868,274)&@select(),{mul(427,903)/@]mul(620,307-+what()select()-where()mul(206,860)-mul(937,784):where()!+mul(347,517)#!/usr/bin/perl(select()~from()mul(730-,what()!where(360,351)what()*how(600,916)mul(929,974)
|
||||||
|
~]#<!when()[~*<mul(132-+why()#%*~:@mul(416,703){@#';>mul(190,848)?{from() }where()<mul(527,529)-mul(209,184)?[what()when()mul(77,529)why()how()<#who(360,918)-mul(417,741)where()what(269,273)from()(mul(322,695)select()@^][don't()]mul(739,357)']when(789,549)/:&when()>mul(532,685)#+~^&]^where(947,658){mul(835,556)mul(785,197)@mul(20,129)>(%*$?,%^]mul(309,855)(!select(){[?](mul(408,217)+;who()why()-&$ ,$mul(824,38)&mul(848,553)@where()who(774,973)-[;mul(590,491)what()'/mul(625,672)!}~~%>-{]-mul(113,831)}+//>(what()mul(822,256):<*$!select()mul(743,335)how()^* (<mul(341,513)do() {,(how()*,^&mul(777,587){>^what()'{[,select(249,901)mul(795,853)@$;mul(486,10)>>?~mulwhere()<~}mul(375,790)/}when()*!mul~-select(){select()select()<]don't()''-'mul(934,731)select()';*select()&why()mul(280,932>mul(530,961)how(),-{how()&what()>(mul(285,204)who()+select()>~>?/<)mul(791,587)from();~mul(142,801),from()~>when()mul(636,737)mul(122,583)select()mul(29,534)[<}>~?;++,mul(853,461)where()&/where()>do()what()where()mul(224,748)when()(from()$%>mul(537,689)@how()from(97,626)%!mul(854,118)when(998,592)-+>how()'when()/mul(548,649)who()who()#) &@!,do()}[^[@mul(154,777)mul(96,225)when()mul(951,144)what()mul(358,785)select()+from()what()-$mul(507,770);select()where()where()mul(696,121)who()when()]&$}how()what(){mul(63,669)+*where()/why()mul}&@where()!?'@;mul(81,559)*]how(372,376)mul(602,773)+mul(511,514)) (,}mul!#%$where()from()%~?>+mul(451,596);from()mul(719,514)^who(533,943)}how()@mul(382,562)!#[,@*)>mul(234,778)&-mul(280,479){, [do()how()!&{mul(971,30)'@why()) ?:+>don't()where()%from()/*&&!mul(551,129)where()!when()@@>[$mul(266,378)&mul(354,236)where()who()mul(198,648)when()~<[what()what()mul(215,213)mul(687,432){,mul(595,927)+<why()*@how()*{%mul(764,459)>who(829,436)^+mul(424,283)@why(),mul(169,939)/[*from()> %!(mul(537,425)%^mul(352,791)*#when()when()-&;what()mul(904,80) select() how()how()mul(34,66)@%<mul(276,65)where()when()how()})mul(52,448)who();select()mul(692,130)what()${%&^%mul(444,170)[)(,<mul(297,209)%&]select(170,397)$mul(577,234),select()^:~,[*>do()mul(921,346)/#what()mul(49,901)mul(734,885)/)(:mul(553,997)(who()mul(62,853)from(535,930);where()#what()mul(457,969)&(+(*}why()mul(317,972)where()when()$do()why() why():~%:^mul(447,529){mul(612,477)how()$when()mul(66,532)>$$*mul(945+*<how(289,725) who() what()how()how()}mul(304,883)select()^':{/':'-mul(715,525)!mul(270,804)from()::['when()why()mul(93,166),-when()!mul(736,616)+;mul(531,606)<how()&[+&mul(967-^'}+-}from()mul(178,389)who()<*mul(116,273)#);#select()mul(628,521)@}where()<where()(;how(376,88)<mul(99,450)}<how()$mul(612(mul(214,455)?:mul(841,59)~~mul(162,250)^]#&>*^)who()mul(291,880)/mul(903,311)*;how()mul(58,539)]-@+&%),what()mul(501,878)*[[mul(626,427)]}how()?when()[mul(280,653)/when()]-<mul(765,466)~-<(select()}{){do()from()*where()!;mul(701,836)'~mul(529,579);!:'+@/'mul(54,282)^<'mul(792,927)&mul(470,236)who() @ ])+??mul(693,230#+~?:-^mul(814,574)from()<when()@#mul(430,705)where(),when()@*$!what()$how()mul(95,323)who()when()mul(38,704)@{where()why(),from()where()[{<mul(455,604)}where()from()~mul(719,681)mul(131why()^where(389,683)**mul(331,541)-}{mul(320,970)
|
||||||
|
:}#mul(737,307) *?)~,]mul(740,642))><mul(666,137)why()where()where()from()why()$ mul(709when(),select()*]when()(mul(510,937)&+>where()why()mul(235,299){;select()mul(543,852)>mul(456,133)(>mul(671,153)'?*who()(mul(12,640)<{##+mul(432,266)*>)'[~>$~?mul(816,840)what()-mul(698,399)how()mul(45,603))~*what()mul(737,715){when()why()~from()mul(995,968)where()mul(262,96)^?who(){; )from()who(615,278)mulhow()mul(838,616)}from())mul(865,576))~-;how()mul(192,403)))[-$]^select(),mul(184,369)#why()*^;)(do()#,'mul(423,897);)]what()/[$]mul(867,533)select(138,395)*-how()mul+#<why()}[~{mul(925,163)<mul(798,343):mul(137,381)~/>;mul(515,882)]:(mul(364,946)&!&,how()select()- mul(111,167):~$from()^]don't()&mul(829,425)!'/how()where()]/<what()mul(521,742)mul(316,792)mul(311,104)from()<%mul(869,189)^&why()[&:mul(683,138)how()mul(533,311)from()%what()@mul(785;select()~?{}++where()mul(102,590)}&what()}(^[<:mul(997,376)'@/$;mul(25,111)~+$]^;+?mul(786,845)@why()&mul(737,79)''from(340,968) how()where()^?mul(803$select()*why()!select()*/%-mul(450,746)who()-(from()where()when(525,894)mul(110,878)-%select()$)@;mul(445)]-~~*/)&mul(205,632)$[^}select(599,536)how()how()who()]mul(952,986)who()/#*:]who()+/mul(346,355)^where() don't()@who()?+&;mul(617,393)&how()>mul(195,257)*mul(953,79);who()when()$,from()<>why()mul(529,405)from()&mul(492,793)&#*[;+;-mul(331,898)?/{+}mul(424,343)$~[mul(523,74)why();mul(772,703):;mul(17,157)! }why()/]!^mul(979,338when()$?mul(898,616)}why(359,279)+from()what())}$from()!mul(612,784)(where()mul(640,368){#!mul(69,807)]how()( #mul(739,987)'*~&%who()!}@mul(834,525)when())::$mul(122,894)%+^(who()@when()%mul>when()from()?mul(464,80)$^! !/@?@,mul-what()!!@:[mul(283,21)([how()[mul(11,617)]}where()/mul(976,268)mul(843,731)<how()why()[mul(601,412)%how()!]@*why(136,791) -mul(371,365)@~$*'~[/ mul(15,594)how(),/{#-}>'mul(676,131)where()}{(]'where()mul(459,88);(where():mul(64,747);[&$})+select()&;mul(750#[{;*&mul(458,334)?where()select()%)mul what()?when()mul(808,879)what()*}-$+from()where()@mul(152,857)'#%where() /<:+?mul(304,149)from()!<when(865,985)mul(238,815))~!+<)@from()mul(401,975)%&mul(625>*!mul(802,11)!*select(),; )-;how()mul(199,993)/!when()^;[)mul(577,723)!?^who()+what()<mul(489,809)~what(625,812)<?;*#)how()do()!(]who()what()where()*from()+mul(705,108)(who()why(815,180)[]^[mul(821,379)&^(&<,%mul(197,678)%-what()mul(944,295)select()how()!mul(357,711))$-what()'&)'mul(114,910)}<*@-from(688,563)[mul(279,269)from()}$mul(707,287)<;*+what()*>when()mul(447,881)+'(+&@&do()mul(192]what()%/mul(463,832)mul?^*>why()where()from()what(){*mul(456,920) $where(911,93)select()+who()select()}don't()}!how()what()~+what()mul(404,558)>,>{(?{'&,mul(936,304);mul(232,989~;>]who()mul(582,897)*!mul(11,23),~>!{<who()$>mul(542,522)^;,from()(?mul(177,928)how(985,316)}who()@](-#why()mul>~why(851,863)[)!@>mul(101,448)select()+?%&select()~((mul(11,450)how()^)mul(344,639)}+;mul(343,648)^why()!where()&{/'#mul(9,810)where()-%mul(877,263)&select();where(240,275)[mul(289,282)how()&<{who()} ['do(){mul(818,421)/}$]mul(617,829)~['why()?&~)mul(741,559)mul(133,701)$]:@&mul(594,307)[',how()^{how()mul(388,657!({'mul(492,896)#@/why()why()mul(127,225)}>where()-/,^mul(219,314))mul(682,893)what()why(){(,from()(?mul(219,360)what()' ](mul(80,569)
|
||||||
|
select(82,585)mul(693,510)%$what()from()mul(740,749){~'<]mul(281,263)when()(!?>/% +mul(116,41)-*-when(506,165)?^}mul(651,943){~,/what(){#{!mul(629,41)/mul(74,998)?mul(525,86)&how()do()+/%mul(15,103)#select(671,57)from()who()]mul(309,559)%>mul(311,459)'when()@#mul(980,750)when()+%how()how()~:mul(484,554) )+{ - :]mul(113,626)[^<%,mul(187,326)*:!]*!mul(374,45)from(),mul(41,137),^)-,#when()?who()mul(93,289)select(853,56)]^where()mul(43,349)*where()mul(406,653)from()from()*&*mul(486,350);)*~how()mul(817,387)>>when()who():mul(417,224)^!&{from()}@mul(342,365)why()^who()+~!}when()do()why()when(939,686)^)((mul(160,438)what()>mul(23,766)+]*mul(618,433[/~where()[;why()what(){mul(292,318)*$why(664,963)how(68,975)why()who(276,89)where()!why(777,555){mul(875,358)@'[#who();)mul(198,992)?:(?~where()what()how()-'mul(956,332)mul(889,561)from()((what()mul(753,443)#>? , -mul(267,527):when()+mul(225,923)>>?^mul(726,980)~when()'mul(760,283)!;why(),;when()mul(358,713)//select()]%^{why()*'mul(406,429,(: {how()!^;mul(363,272)--where()*:select()when()?when()mul(242,130);why()>:!&why()$mul(386,685)@!}>when()why()>how()how(872,684)mul(418,627)why()[{:[-%mul(946,701)(}mul(10,874)&mul(109,151)],mul(676,79:;]}),mul(206,822)mul(228,261)-how()?]+mul(295,706)/]@( how()-mul(558,819)@::!>where()*when()?}mul(709,558)*)~;?}> how()from()mul(489,495)[*where():}(*%mul(189,692)how()/where()why()(mul(895,190))]<select();'who()when(309,317)mul(204,524)from(),&# mul(563,48)what()mul(207,241)&mul(450,18)when()what()select()^]{$why(565,783): mul(422,431){,}?+how()what()where()mul(782,229)[%}:~mul(994,946)){,$*,mul(84,333)#?@^]mul(324,259)<mul(723,626)*)/select()mul(22,373)from()mul(158,952) #mul(862,250)'$#;{mul(816,365)&$who(930,819) mul(440,442)^@@mul(35,883))>{+mul(904,446)~(?-*:select():]?mul(21,770){&?/what()mul(810,761)( <{#^why()select()mul(542,583)mul(517,719)*who()]mul(229,391)^:,;where()who()[&mul(181,416)>when()( %+{mul(376,885)+}/}*what()[%when()mul(412,213)who() mul(151,478)do()+when()mul(683,117)@how()[@>(*%mul(666,434)%+mul(83,30)^}:mul(983,213)@-what()mul(36,788)';%-#+]#mul(575,6)#when()'&@who()<$ who()mul(764,292)<,where()where()mul(230,519)<<^('mul(384,769)%,what()@who()when()where()when()mul(104,361)&select()what()-!mul(523,283)do()mul(920,551)mul(589,394)$(select()?#>&*'mul(672,365)+:]@$)mul(373,982)mul(810,292)-mul(990,386)?mul(372,766)where(),]^mul(651,898)from()from(){?;select()mul(293,197)why()( [;&^~@mul(505,310)what()what()select():]-what(873,670)mul(885,505);-#{';-how(967,119)select() mul(956,774)mul(51,516)mul(756,597)^~select()how()%&from()mul(463,747)&why()who()())mul(193,948)from()when()what()why()from():select()%select();mul(143,694)(mul(448,194)@<(-where(536,660)?select()mul(280,832)select()#^}mul(296,908)where()@{> #*do(); ;how()mul(417,4)mul(939,57)&'~?-'(#do())[where()+<<where()mul(223,643):%/mul(367,601)}*}[mul(451,653)why()<when()from();(#<;mul(960,745)>%:?(}mul(975,356):,select(275,833),#?(when()&]
|
||||||
Binary file not shown.
@@ -0,0 +1,75 @@
|
|||||||
|
--- Day 4: Ceres Search ---
|
||||||
|
|
||||||
|
"Looks like the Chief's not here. Next!" One of The Historians pulls out a device and pushes the only button on it. After a brief flash, you recognize the interior of the Ceres monitoring station!
|
||||||
|
|
||||||
|
As the search for the Chief continues, a small Elf who lives on the station tugs on your shirt; she'd like to know if you could help her with her word search (your puzzle input). She only has to find one word: XMAS.
|
||||||
|
|
||||||
|
This word search allows words to be horizontal, vertical, diagonal, written backwards, or even overlapping other words. It's a little unusual, though, as you don't merely need to find one instance of XMAS - you need to find all of them. Here are a few ways XMAS might appear, where irrelevant characters have been replaced with .:
|
||||||
|
|
||||||
|
..X...
|
||||||
|
.SAMX.
|
||||||
|
.A..A.
|
||||||
|
XMAS.S
|
||||||
|
.X....
|
||||||
|
|
||||||
|
The actual word search will be full of letters instead. For example:
|
||||||
|
|
||||||
|
MMMSXXMASM
|
||||||
|
MSAMXMSMSA
|
||||||
|
AMXSXMAAMM
|
||||||
|
MSAMASMSMX
|
||||||
|
XMASAMXAMM
|
||||||
|
XXAMMXXAMA
|
||||||
|
SMSMSASXSS
|
||||||
|
SAXAMASAAA
|
||||||
|
MAMMMXMMMM
|
||||||
|
MXMXAXMASX
|
||||||
|
|
||||||
|
In this word search, XMAS occurs a total of 18 times; here's the same word search again, but where letters not involved in any XMAS have been replaced with .:
|
||||||
|
|
||||||
|
....XXMAS.
|
||||||
|
.SAMXMS...
|
||||||
|
...S..A...
|
||||||
|
..A.A.MS.X
|
||||||
|
XMASAMX.MM
|
||||||
|
X.....XA.A
|
||||||
|
S.S.S.S.SS
|
||||||
|
.A.A.A.A.A
|
||||||
|
..M.M.M.MM
|
||||||
|
.X.X.XMASX
|
||||||
|
|
||||||
|
Take a look at the little Elf's word search. How many times does XMAS appear?
|
||||||
|
|
||||||
|
Your puzzle answer was 2493.
|
||||||
|
--- Part Two ---
|
||||||
|
|
||||||
|
The Elf looks quizzically at you. Did you misunderstand the assignment?
|
||||||
|
|
||||||
|
Looking for the instructions, you flip over the word search to find that this isn't actually an XMAS puzzle; it's an X-MAS puzzle in which you're supposed to find two MAS in the shape of an X. One way to achieve that is like this:
|
||||||
|
|
||||||
|
M.S
|
||||||
|
.A.
|
||||||
|
M.S
|
||||||
|
|
||||||
|
Irrelevant characters have again been replaced with . in the above diagram. Within the X, each MAS can be written forwards or backwards.
|
||||||
|
|
||||||
|
Here's the same example from before, but this time all of the X-MASes have been kept instead:
|
||||||
|
|
||||||
|
.M.S......
|
||||||
|
..A..MSMS.
|
||||||
|
.M.S.MAA..
|
||||||
|
..A.ASMSM.
|
||||||
|
.M.S.M....
|
||||||
|
..........
|
||||||
|
S.S.S.S.S.
|
||||||
|
.A.A.A.A..
|
||||||
|
M.M.M.M.M.
|
||||||
|
..........
|
||||||
|
|
||||||
|
In this example, an X-MAS appears 9 times.
|
||||||
|
|
||||||
|
Flip the word search from the instructions back over to the word search side and try again. How many times does an X-MAS appear?
|
||||||
|
|
||||||
|
Your puzzle answer was 1890.
|
||||||
|
|
||||||
|
Both parts of this puzzle are complete! They provide two gold stars: **
|
||||||
Executable
+50
@@ -0,0 +1,50 @@
|
|||||||
|
#!/usr/bin/env python3
|
||||||
|
|
||||||
|
import sys, re
|
||||||
|
import numpy as np
|
||||||
|
from scipy.ndimage import rotate
|
||||||
|
from collections import defaultdict
|
||||||
|
|
||||||
|
|
||||||
|
# copied from stackoverflow
|
||||||
|
def groups(data, func):
|
||||||
|
grouping = defaultdict(list)
|
||||||
|
for y in range(len(data)):
|
||||||
|
for x in range(len(data[y])):
|
||||||
|
grouping[func(x, y)].append(data[y][x])
|
||||||
|
return list(map(grouping.get, sorted(grouping)))
|
||||||
|
|
||||||
|
|
||||||
|
def a_cross(puzzle, x, y):
|
||||||
|
if puzzle[y][x] != 'A': return False
|
||||||
|
elif x == 0 or y == 0 or x == len(puzzle[y])-1 or y == len(puzzle)-1: return False
|
||||||
|
elif ((puzzle[y-1][x-1] == 'M' and puzzle[y+1][x+1] == 'S') or (puzzle[y-1][x-1] == 'S' and puzzle[y+1][x+1] == 'M')) and ((puzzle[y+1][x-1] == 'M' and puzzle[y-1][x+1] == 'S') or (puzzle[y+1][x-1] == 'S' and puzzle[y-1][x+1] == 'M')):
|
||||||
|
return True
|
||||||
|
else: return False
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == '__main__':
|
||||||
|
puzzle = [line.strip('\n') for line in open(sys.argv[1])]
|
||||||
|
words = re.compile(r'(?=XMAS|SAMX)')
|
||||||
|
res1 = len(words.findall('D'.join(puzzle)))
|
||||||
|
npuzzle = np.array([list(p) for p in puzzle])
|
||||||
|
# rows = groups(puzzle, lambda x, y: y)
|
||||||
|
#cols
|
||||||
|
res1 += len(words.findall('.'.join(['.'.join([''.join(l) for l in groups(npuzzle, lambda x, y: x)])])))
|
||||||
|
#fdiag
|
||||||
|
res1 += len(words.findall('.'.join(['.'.join([''.join(l) for l in groups(npuzzle, lambda x, y: x + y)])])))
|
||||||
|
#bdiag
|
||||||
|
res1 += len(words.findall('.'.join(['.'.join([''.join(l) for l in groups(npuzzle, lambda x, y: x - y)])])))
|
||||||
|
|
||||||
|
res2 = 0
|
||||||
|
npuzzle = np.array([list(p) for p in puzzle])
|
||||||
|
for y in range(len(npuzzle)):
|
||||||
|
for x in range(len(npuzzle[y])):
|
||||||
|
res2 += int(a_cross(npuzzle, x, y))
|
||||||
|
|
||||||
|
# challenge 1
|
||||||
|
print(f"challenge 1:\n{res1}\n")
|
||||||
|
|
||||||
|
# challenge 2
|
||||||
|
print(f"challenge 2:\n{res2}")
|
||||||
|
|
||||||
@@ -0,0 +1,10 @@
|
|||||||
|
MMMSXXMASM
|
||||||
|
MSAMXMSMSA
|
||||||
|
AMXSXMAAMM
|
||||||
|
MSAMASMSMX
|
||||||
|
XMASAMXAMM
|
||||||
|
XXAMMXXAMA
|
||||||
|
SMSMSASXSS
|
||||||
|
SAXAMASAAA
|
||||||
|
MAMMMXMMMM
|
||||||
|
MXMXAXMASX
|
||||||
@@ -0,0 +1,140 @@
|
|||||||
|
SXMSMMXMASMSSSSXAMXMXAMXXAAXMAMSAMMXMAMXSAMXMXMMMMSMMXMXMASMMSMMSSSMAXXMSMSSXMASMXSSSXSMMSSSSSXMASXSAMXSMMSSMXXXXXMASXMXMSSSMMSSMSSSMMMMSSXM
|
||||||
|
SAMAMSMSMSXAAMAAXMSXMSSSXSXMSMMSASASXSMSMSSMSSMXAAMXMASXSAAMAXASAXMASXSASMASMMSMMAMXSAAXAAXAAAASAMAXAXASAAAAMMSMMSMMMASASAMXSAAAAMASMAASMMAS
|
||||||
|
SAMXSAAXAMMMMMMXAXSAMMAMAMXMAAXSXMASAAMSXAXAAAXSMSSSSXSAMXMMASMMMSXAMSAAXMAMMMAAMASAMXMMMSSMMMMMASMXMMXSMMSXMAAAAAAAXMASMASAMMSMMMAMMMXMAMAM
|
||||||
|
SAMXSMSMAMAAXSXSSXSAMMAMAMASXSMSXXXMMMMSMMSMMXMSAAAMXXMXMXXMXXXASAMXMSMSMMXXAXXXMAXAMSXXAAMXSAASMMMSXAAXMAXMSMSMMSXMXMMMSXMXSXMMMMXSXSMSSMMS
|
||||||
|
MSSXMAXMASMSSMAXMAMXMMASAXMXAMAMXMMMXMXMAMXXAXSMMMSMXMMAMMXMAMSMMMSSXSAXMSASXXSXMSSMMSAMMMSAMMMMAAAAMMMSSXMAMAAAAMMSXXAAXXSASAAAXMASAAAAMAXA
|
||||||
|
XAXASMXSAMAMAMMMMAMASMMMMSXMSMSMSAASXSXSAMAMSMSAXSAMXAAAXMAMAMAAMAAMAMAMAMASAASAMAAXAXAMASMMSSSSSMMSAMAAMAMAMSSMMSAMMSMXXMMASMSMMSAMXMMMSMMM
|
||||||
|
MMSMMMAMMSXSAMAASAMXMAAAXMAXMAXAMSMSAMASXSXAMASMMXAAXXXMXMMMASMSMMSSSMSMSMAMMMMAAXXMXMMMXMAAAAXAAMAMMMMASMMXXAAAAMAMMAMXMXAAMXMAAMXSASXMAXAX
|
||||||
|
XAAAAMMSAAASXMSASASXSSMMSMMMSAMSAMXMAMAMMAMSMAMMXSXMSMSASXMSXSAMXMAXMAXXXAXXXASXMASMXSAMSSMMSXMXMMAXXASAMAASMSSMMSSMMASAASMXSAMMMSMSXSASASXS
|
||||||
|
MSSMMSMMMMMMMMMAXAMAAXMASASASXMXMAMSAMXXSAMXMAMMXSMAAAMSMAASAMXMSXMXMAMSSMMMSASMMXXAASXMAAAMAAMSXSSSMMMSMMMSXAXXXAAXSAXAXMAASXSAMXAXXSAMXSAS
|
||||||
|
XAAASXXAAMAAXAMSMMMXMMMMXAMAXAMXAMMSXSXMXSSXSAXXASMMMSMAMMMMAMMAMXXXMASXMAAXMAXASMMMMSAMSSMMMXMAAAMAAMAMMMSMMMSMMMSAMAXSAMXMSAXXSMMMAXAMAMMM
|
||||||
|
MMSMSAXSSSMMMMAXAXMASAXSMSMXSAMXXXAMMMMMAMMMSMSMASXMXMMMMAXSMMSASMSSSXMASXMXMMMAXMAMSSMMMAMXXSSSSMSSMMASAMAAAAAAAAMMMXMAASAXMXXMXMASMMSMMSAS
|
||||||
|
AXAXMAMMAXAXAMSMSMMAXMXSAXAMSAMXMMMSAAAMAMSAMXAMAXASXMASMMMMMASAMAXAAXSMMMXAAXMXMMMSAMASXAAAAAAAXAXXASASMSSSMSSXMXSXXXMXAMXXSSMMAMMAXSMAXXMA
|
||||||
|
XSASMMMMAMMSXSAAMAASXSASXMAMMSMASAMXMXXXAXMASXXSSSMMXMASAAXAMMXXMSMMMMMAAAXSXXMSASXMASXMSAMMMMMMMMMSMMXSXXXMAXMMSMSMSMSAMASXSAAAASMMMAMMMSXM
|
||||||
|
XSAMMAXMMMMSMSMSMSMMAMASASXMAAXXMASAXXSMSSSMMAXAAMAAXXASMMSSSSMSAMASAAXMMMMMAAAAMMASXMXMAXXXAAAMXSASAXMMMSSMXMAXSASAAAXXSAMXMSMMXMAASAMSASAX
|
||||||
|
AMAMSXSXMASMAMAMMMAMMMXMXAMMXSSMXXMAMSAMXAAMASMMSMSASMXXAASXAAASASAMSSSSSXASMMXMASAMASMMMAMXSSXSAMXSAMSAMXAMASMMMAMSXSXXMAXAXMMSMXSMMMMASXSM
|
||||||
|
AMMMXAMASMMMAMAMSSMMXSASXMMSAMAMAMMMMXAMMXMAAXMXXAMXXAXXMMSMSMMSAMAXXXAAAMXAXMXMAMASAAAAAAMXMMXMMMXMMMSASXMMXAAAMXMXXMMMSSMMASAAMMMMASMMMMMM
|
||||||
|
MSSMSAAAXAASMSMSXAXMMSASAAAMASMMASAMMSMMMXXMSSSMMAMXMSMXSAMMASMMMMSSMMMMMXXSXXAMAXAMXSSMSMSAAAXMAMXAMXXMAAXAMSMSXMXMSMAMAMAMAMMMXAASAXMXXAAM
|
||||||
|
MAAXSAMXMSMSAMXSMXMXAMAMMMXMMMXSMSASAAMAMAXXAAAMSAMAMAAMMAMSAMMAAAXAAAXAXMMMMMMMSXMMAAAAAASMSMSMAMSAMXMXSSMXAMAMMMAXAXAXXXAMASXXSSMMMSSMSSMS
|
||||||
|
MMSMSXMAMXMMXMAMMSMMXXAMXXSSXSASASAMMXSAMSSMMSMMSMSMSASXXAMMMMSXMXSSSMSMSMAAAASMMASMMSAMMMMAMAMXXXASMMSAAAASMMAMAXSSSXSSMMASASMXAXAAAAAAAAAS
|
||||||
|
MMAAXAMXXSAMXSSMASMAMXSXSSMASXAMMMMMXMXAMAAXXAXXSXSASAMMMSSMMASMMMXAXXAAAMMMSASAXXMAAAAXMXMAMAMMMSMMXAMMSMMAAMMXSMMAXAMAMSAMAXAMMXSMMXSSMMMS
|
||||||
|
MSMSMMSAMXAMAMAMAXMASMMAMXMXMMSMSAMSXMSSMSSMMSXXMAMAMAMSAAAXMASASMMAMSMSMSMAMXSAMSMSMSSMSASASASAAXXXMMMMAAMSMMSAMASAMXMAMXMMXMSXSAXMAXMAMMAX
|
||||||
|
AAXXAAXAXMAMXXAMXXMASAMSMMMSMAXMMAMMAMAMMXAMAXSMMSMSMXMMMSSMXXSAMXMAMXAAAAAMXAMMMAAXAAXASXSAXXSMSMMXMXSSMSXAAAMASMMMSXMAMAXMXXXAAXSXMASAAMAM
|
||||||
|
SXXMMMSXMMSXMSSSMMMASXXAAAAAMAMMMSMXAMASMXAMXMASAAXMSMXMAXAAXMMMMASAMMSMSMSSMAXMXMXMMMMAMMMMMMXMXASAMAMAAXMMMMSAMMASAASASXSXSAMMMSMMXXMAMMAS
|
||||||
|
AMSXSAMXSAMXAAAMAMSXMASXXMMSXSAAAXASMSXAMMXXAAXMXSMMAXMXMSMSMXAXSXSASAAAAXAXMAMSMSMXMMXXXAAAXXAMXSMXSASMMMXXAXSXAMMXMAMXAAAAXAAXXXMASMXSAMAM
|
||||||
|
XMAXMASAMASXMMSMSMSASXXMASXMAMMMMSASAAAMXASXMSMSMMASMMMAMMAMASAMMASAMXSSMMMSMSXSAAAASAMXSMSSMSASMAAASXSAMAMSMMMXSSSSXSMSMMMMMXSMXMMASAAAAMXS
|
||||||
|
SAMXSAMXSMMXMAXXXASXMXAMXSAMAMXXXMXMXMMXMMAAAAAAASAMXMSASMAMXXXAMMSMMAMAMXXAMMAMSMMMSAAMMMMAMSAAXMMMSASXMAMAAAXAXAAMAAXAXMAXSXMMSAMXMMMMXMXM
|
||||||
|
MAXAMASXSAMXSASXMAMXSXMAMMAMMMXMMXXXSMSXSMSMMMSMMXXSAMSASXMXAMXMSAMXMXSAMSSMMMAMXSXMXMXSAMSAMXMAXMAXMMMMSSSSSMSXMMMMSXSSSSSSMXAAMXMXSASMMMMS
|
||||||
|
SXMASMMMSAXXMASAMXXAXASMXXMMXXMSAAMMMMAMSAXAAXXXXSMMAMMAMMSMSSXAMXMXXAXAMMAMXSAMMAMSAMASAMXASMMSMSMSSXAASAAXXAAMMXMAXMAMAMXAMSSMSAAAMAAMAAAX
|
||||||
|
MAMAMASASAMXMAMXMMMMSAMXXSSSSXAMXMMAAAASMAMSMSMSMMXXXMMMMASAAAMMMSSSMSMSMSMMMMASXAMMMMASAMSSMXAXXXMXMSMSMMMMSSMAAXMXXAXMXMSAXAAASMXXMMMSSMSS
|
||||||
|
MMMASMMAXXAMMMSMMMAASXMMMAAAMMAMXMMMMSMSMSMXXMASAAASMMXSMASMMXAAAAAXAMAMMMAAMMMMMXSXXMASAMMXAMXMMMMAMSXAAXMAXAXSSXSMXSXSMASXMMSMSASMXSMAXXAX
|
||||||
|
SASXSXMMMSXXMAAAASMMSASAAMMMMASMSSMSAXAXAAMMSSSMMMXSAMMMMXXAXXSSMXSMSMAXAMSMSASASAAXMAXSAMXMMMAAAAXAXXAXXMMXSAMXAASAMAAAMAMAMAMXMAMXAAMASXMM
|
||||||
|
AMSAMXMMASAMXSSSMSMXSAMXSXXMXSAAAAAAAMAMMMSAMXAMXMXSXMAMXASXMXMAAXMXMMXSMMMXSASASMAMSXAMAMMAMSSXSSSSSMMSAAAXAMXMMMMSAMXXMASXMASAMSMMAMMXXAAA
|
||||||
|
SXXAMXMMAXAAMAMAMXAAMAMXXMAMXXMMMMMMMMXMSAMASXMMAXMSASXXMAASMSXMSMXAXSASXSAAMXMXMASMXXXXAMAMXAXMXAXAAMAAXMMSAMMXSXXAXXMXXAXAMXSAMAAMMXMAXSMM
|
||||||
|
ASXSMXMMSSMXMAMAMMMASAMXMSMXXSXMAXAXMXAAAASAMAASASASXMAASXMXXAAXAXSMMMXMASMXXAMXSAXXSMMSMSSXMASMMSMXMMMXXMXMAXSAMXMMMAMXSSMSMMMMSSMMMAMSMXAA
|
||||||
|
MAMAAXXAMAMASMSSMMXMMASXMAMXMASASXSSMMSMSAMXSSMMMMAMMMMMMAASMSSMMXXXASAMXMMMSSSMMASAMAXMXAMXMSAMXMASMSSMSSSSMMMASMAAMAXAAAAXMAAAMMSXSAAAASXM
|
||||||
|
XXMAMMMXXAMAAAAAASXMMMMMSASXMASMMXXAXXXAMXMAMMMXXMXMAMXMSMMMAAAAXSASAXXMMAXXAAAAMAMXMSMSASMMXMAMXMAMAAAAMXAAAXSMSMMSMSSSMMMMSSSMSAAMSMSMXMAA
|
||||||
|
XXASASXASXMSSMMSMMAMASXXSAXXSAMASXSSMMMMMAMXMAMXMMAMXMAAXXXXMMXMMXAMMSSMSAMMMSMMMASAXMAMMXAXAMAMSMMXMXMMMMSMMXMAMMSMAMAXAMXMMMXAMMMXXAXMASXM
|
||||||
|
XMAXAAXMASAAXMAXAXXMAMAAMAMXMXMAMAAAMAAMSXSSSSMASAMMSAMXMASMXSXMXMXMMAXAAAMXAXAAMXSAMMSMXSAMASAMAAAMSASASAAAXMMAMSASMMAMMMAMAXMXMSMSMSMMMXAA
|
||||||
|
SXAXXMMXAMMSMMMMAXSMSXSAMAMXAAMSMMMMMSXMXMAXAAMASAAASASAMMMMAXMAMSAMXMMXMMMMXSSMMMSAMAMXAXAMXSXMSSMXSASAMSSSMMSMSMAMXMXMMSMSMSAMXAAXAAAMSSMM
|
||||||
|
AMXSSMXMXMSAMASMXMMAXAMXSXSMMMXMAMMXXXSSMSMMSMMMXXMASMSASXAMXSMMMMSAAXMMMAXMAXASAASXMXXMSSMMXSAXMAMXMMMAMAMAMAAMXMAMXMSSMSAXMAMXSMSMMMMMAASX
|
||||||
|
MAXAMXAMMMMASAXAMXMAMAMAAAMXSAMSSMAAXMASAAMMMMSSMXMAMMSAMMSSMMMSAAXXXXMASMSXMMAMMMMASMSMMAMXAXMMSAMXMXSAMXSAMSMMASASAMAAAMXMMSMMXAAXXAAMSXMM
|
||||||
|
XSMXXSXSAXSAMXSSXMASXXMXSXXAMAXAMXXMMMMMMMSAASAXAXMXSAMAMAXXMSASMSMASMMMXAAXXMAMSASXMAAMMAMMMSXXMAMSAMXMMXMXMMXSAXXMMSSMMMMSAAASMSMSSSSMMASA
|
||||||
|
SXSAAMMSAMMXMAMXASAMXSMMMAMSSMMSSMSMSAAMMXSMSMMXSAMAMXSAMXSMXMASAMXMMAMAMXMMXMSXSASMASMSSXMAAMXMSXMAMMAXMAMMMMXMMSMSAMXMAASMMSSMAAXXXAMAMAAS
|
||||||
|
SASMXMAMXMAXMAXMAMXSAMXAMAMAAMAMAXAAXSMSAASXXMXAXAMAXMMAXMAXAMAXMASXSSMAXSAMXAMXMMMXMAXAASMMSSSXSAMSMSSSSSXMAMXAAAXAMASXMXSAMXMASASMMXMAMMMA
|
||||||
|
MAMXMSSSSSSSSSSMSMMMXSAMXAMXMMASMMMSMXMXMASAMXMXSASXSMSAMSMXXXMXXASXMASAMSAMXSSSXAAXSMMMSMMAXAMASAMMAXAAXAASASXMMMSAMXSAXASMMAXMASXAXMSXSSSM
|
||||||
|
MAMAAXAAAAXAAAMAAAAAMMASMXMASMXSMMMAAXAMXAXAMAAXSAMXAASXMAMMSAMSMXSASXXXMMAXAXAMMMSXMXMSMMMSMAMAMAMMAMMMMSMMASXASAMXXXSAMXSASMSXXMMMMMMXMAAX
|
||||||
|
MAXXMMMMMMMMMMMSSSMSSXAAMXXMXMAMAAMMXXSSMMSAMXSAMXMMMMMXSXXASAMXMMSAMMMMSSSMXMMMASMMXAXMAXAMXXMXSAMXXAMAMXAMAMMMMMSMAMMASXSAMXMXAMAMXXXAMSMM
|
||||||
|
SSSMMAXAXXXSMSXMAAAAMMMMXASXMSSSMMSMSMMAAASXMXMXMAXAXSSMMSMASXMAMAMSMAAAXAXAAMASMSAXXMSSMMSMMMMXAASMSSMAMSAMMSMSAMAAXXMAMMSASAMMSSSSSSSMMAMX
|
||||||
|
XAAASXMMMAAMMSAMXMAMXMASMMSAAAAMMSAMAASMMMMMMASMSMSSXMAAAXMMMMSASASMSXSXMXMSASASXSXMSMAAAAMAAAMAMMMAAAXAMAMXAAMMASMSMXMAMAMMXAXAAAAAAAMSAAMX
|
||||||
|
MMMMMMASMSMXAMXMAMXXMSAXAASMMMMMMSASXXMAXXASMXMAMXAMASXMMSMAMASMSXSAMXXXMMXAXMAXAMMAAMSSMMSSMMMMSMXXMSMXMXSMMSMSAMXMASMMMSSSSSMMSSMMMMMAMSMM
|
||||||
|
ASXSMSASAAAMSSMXXSAAXMSMMMSXMXMAXSAMXMMSMSXSAXMMMMASXMASXXXAMASASMMXMAMAMSXMAXSMASASMXMAXMMMMSMSAMXSAAAASASAXAAMASXMMMAMXMAMAMMMAMMXXXXMAXXA
|
||||||
|
SXAAXMASMMMMMAXMASMSMAMXMASASXSMMMSMMSMMASASAMSMSAAXMMXSXASMSASMMMSMMASAMAMXMAMXXMAMXSXAMMAAAAMXAMAAMMSMMASMMMSMSXMAXSAMAMAMAMASAMMAMXSMXMAX
|
||||||
|
MMMMMMAMXXXASAMMAMAXMAMAMAXAMAXSXAXMAAAMSMXMAMAAAMMMSMAMMXMMMMSASAAMSASXSAMAMMSASMAMAMMMSSSMSSSSSMSMXMAAMXMAAXAXMASMMAMSXSXSXSMSASXXXASMSSSM
|
||||||
|
SAXMASMMXASXMAXMSSSXMSSSMSMSMMMMMMMSSSSMMMAXAMMSMXSAAMSSSSSMSSSXMMXXMASASXSXSAAAMMMMMSMXAAAAXXMAXAMASXSSMMMSMSMSMXMMAMXMASMMXSXMXMASMMMAAAAS
|
||||||
|
SMMMXMAASMMMXSMAXAMASAAAAXAMXSAXSAAMMAAMXXSSSSMXXAMMASXAAAAAXASAXMXMMMMMMMMXMXMSMXSAMAAMXSMMMSMAMXMASAMAXAXAAAAAAAXMAXXMAMASAMMXSAAXAAMMMXMM
|
||||||
|
MAAXAXMMSAAMAXMMMAMXMMXMMMASXXASMMXMMMMSXXMAXMXSMASMMSMMMSMMMSMMMMMMAAAAAAXAMXXAAASASMSMMMASAMMXSMSAMAMMMMSMSMSMSMSSXSXMASAMAMAXAMXMSMXSSMAX
|
||||||
|
XSXSSSMASXMMMMASMMXMAXXXXMSMASXMXMMSSMASMMMAMMASMAAAAXXXAXXXSXSXAAASXSSSSSMMSAMXMMSAMMAMXSAMAXXAXAXXMAMXAXAXAMXAAXXMMMAMAMXSMMSMMSMXMMSAXSXM
|
||||||
|
MMXAAMAMXXXMXMAMMXAAASMMAXXMAMMAXXAAAMXMAMXMMMAXMSSMMSXMMMMXMASXXXMMXAMMAMXSAMSAXXXMXSAMMMAMXASMMMMMSMMSSSMSAMXXXSAAAMAMASMSXXXAXAXAAXMMMMXM
|
||||||
|
XMASMMSAMXMXSMMSMSAXMAAXSSSMSSSMMMMSSMSSSMMSXMMSAAAAAXMAMASAMXMASMSSMSMMAMSXAMSMSMAMXMAXMMAMXMAXAMAMASAAAAMAMASAAXMAMSASMMMXMMSMMMSMSMMXMMAA
|
||||||
|
ASAXXAMAMASAMXMAMMMMMSAMXAAAAMAAXXAMAMAAXMAMAMSSMSSMMSAXSASASAMAMAAXAAXSXSSMMMXMAMAMMSMMSSMSMXMXXXASMSMMXSMMSAMMAMAXMSAMAXMMSAAAMXXAXAXAAXAS
|
||||||
|
MMAXMXXAXSMMXXSASXSAAXMMMMMMMSSMMMAMAMMXMMSSSMXSAAMAMXXXMXXMMMMSMMMMSSMMXXXAAAASASXMXAAAMAAAXAXXMSASXSASAAXAMXSXMMMMAMMSMMXAMXMMMMMMMSSSSSMM
|
||||||
|
MMSMMSMXMMASAASMSAMXSXMXASXSAXXAXMASMSXAMMAAXSSMMMSMXMASMSSSSXAAAAXMAMMSSSSSMSMSXSAMSSMMSMMMSASAAMAMASAMSSMXSMSMSAASXMAAXAMSSSSSSXSAAXXMAAAX
|
||||||
|
XAXAAMMMASAMMMMAMMMMAAMSMSASXMSMMMMAAMXXSSMMMXMAMXMMAXMASAAAXMSSXMSMASXAAMAAAXAMAMAMAAMMAXXXXAXMXMAMAMAMXXXXAAXXMSXMAMSSMMAXXAAAMAXMXXAMSMMM
|
||||||
|
MMSMMSXAMMMMXXMMMXMMMSMAAMAMAAAXXMMXAMXXMMAMMMSXMASMSSSXAMMMMMMXAASMASMMSMSMMMASMSSMSXMMAMMMMSMMMSASASMMMAMSMMMSMMMSMMXAMXSXMMMMMMMMAMSAMXAA
|
||||||
|
XXAAAXMSXSMSSXSAMXSAAAXXMMAMMSMSASMSAMXAXSAMAAAASMMMXMAMMSXXXSASMMMMAMAXAMXMAMXAXAXAXMMMXMAAAMAAAXASASXAMAMAMAAAAAAAMXMAMAXASASXAASMASAAMSSM
|
||||||
|
XSSSXSAXASAAXXMASASMSMSSXSXSXAMAAAASAMSMMSXSMSSMMMSSSSMXAAXMAMMSMAMASXSSXSXSSSMSMMSAMXSAMSSSSSMMSSMMAMMXXAXASMMXSMSMSASAMASMMXSSSXSSXSAMXAMA
|
||||||
|
XMAAAXAMMMMXSASAMAXXXMXMAMAMXXSMSXAMAAMAMXMSAMXAXSXAAMXMMSSMAMXXXAXAAAXMASXAAXAAAXMXMAMAMAAAAAMMXXXAAMMMSSSMSXSAAAAMSMSXMAXAMAMMMMMMMMAXMASM
|
||||||
|
MMMMMMXMXAXAXAMSSXMSSMAMAMAMMMXMMMXSMMMAMXAMSMMSMAMMMMAASAXXAMXMXSSMMMMMAMMMMMMXSXMAMXMMMSMXMASMMSMXMAXMAMAAXAAMMMMXSAMXMSSMMAMAAXAMXXXMMAMM
|
||||||
|
AAXMASAMXXSMXMAMXAMXASMSXSXSXXAAXSMXASXSSSSMAXXMMMASMSASMXXMXSXSAMXMASAXMAMSAAXSMMSASMXXAMXXXXAXAAXMXSMMSSMMMSMSSXXAMAMMMXAXSASXXSAMXXSAMAAX
|
||||||
|
SMXXAMASXMXXSXSXSMMSMMMMMMXMAMMSASAMXMAXAAXSSXSMAXAMXMMAMMSSXSAMSSXSASXMAMXXXXXAAXSASAAMSMSMMSMMSMMSAMXAAAASXMAAXAMXXSMMSMMMMASAASMSAMSAMXSM
|
||||||
|
XAAMXSMMAXSAMXMASMXXAAAXSSSMXSAMXXMAMMMMMMMAXAXSMMAMAMSASAXMASMSAMXSAMMSMXMXSSSSXMXMMMMMMAMAAAXMMXAMASMMSSMMAMMMSMXMSMAAXAAAMXMMMMXMAMSAMAXM
|
||||||
|
AMSSMAMSXMMAAMMAXMXMSSSMAAAAAXXSAMMSXAAAAMSAMSMSXMAXAXSAMASMMMXMAMAMAMMAMMMMAAMXXMXXMMSXMAMSSMSAMXXXAMXMAXASXMAMAMASASMMSSSSSMXXMMMSSMXAMXMX
|
||||||
|
SXAAMAMMMXSMMMSAMXSMAAMMMMMMMMMXAMXMSSSSSXMASMAMMMMXMMMXMASASMMMSMXMAMXAMAAMMSMMAMAMMAAAMSMMAAXMMSSMASMMAMMMMXAXASMSASMXAMAMAAMXXMASAMSXXXXX
|
||||||
|
MMSSMXSXXAXASASASASMMXMMXSXASASXSMXXAMXAAXSXMMSMSASASXSAMMSMMXMAXASXSSSSSSXSAMASXSASMMXSMAASMMSXAAAMXMASXSAAAXSXMSXSAMXASMAMXSAMXMXSAMAMMMMS
|
||||||
|
MAMXMASMMSSMMASMMASXSMSAASMXSXMAAMMMSSMSMMAMXXAXSASASASMSMMXSAMXSAAAAMXMAMAMASAXASAMXMAXMXMMAAXMMSSMXXXAASMMSMMAXXAMXSXMXSMSXMMMMSASAMMAAAAA
|
||||||
|
MASAMASXAAAAMAMMMSMAXAMMXMAXXMMSMMAAMXXAXMASXSXMMMMAMAMMAXXXMAMAMXMMMMAMAMMSMMASMMSMAXMMAMSXMMSMMAXAMXMMMMXXMASMMMXMAAAXAXXMMMAXAAAMXMXSSSSM
|
||||||
|
SASXMASMSMSMMMSXSAMXMSMSMSXAAMMMXSMMSASMXMAXMAXSAMMSMXMSASMMSSMMSSMMMSXSASXSASAMXAMSXMXMSMSASXAASMMMAAXXXXXXMAMMASAMXMXMMSXMAMSMSMSSMXXMAMAX
|
||||||
|
MASAMXSMMXXAMXSMSASAMXAAASMMMMAMMMXSMAMMAMMXSAMXAMAMAMAMAXAAAAMXAXAAMMMXMXXXAMXSASMMSAXXMASAMSSXMAXMSXSXXMASMAMSSSXSSSMAAMXMAXXAXAMAAASXMSSM
|
||||||
|
SAMXXMSASASASAMAXSMAMMMMSMAXMSMSAMSAMXMXAMMMMASMSMMSAMMMSSMMSSMMSSSMSXAXSSSMAMAMAMAAXSMXMXMXMXMAMMMXAASMSAMXMAMMAMAXAAXMMMXXMXMAMXMMSMMAXAMX
|
||||||
|
MAXMAXSAMASXMAXAXXXAXXAMAMMMMMXSASMMSMSSMXAASAMMMAAXASXAAMMMAAMXAAAAXMMSMAXSAMASASAMMXXMMMSMMAXAMXSMSXSAXXXMXMXMAMXMXMMXASMAMSMMMAXXXXSSMSSS
|
||||||
|
SAMASMMXMAMMAMXSSMSMXSASASMSXSAMXMMAMMXAASMXMXSXSMMSMMMMXMAMXAMMMSMMMMMAMMMSXMXMXSASAXMAMAAAMMSSXXMAXAMXMSMSAAMSSMAMMAXSAXSAMXAAMMXMXMXAAAAA
|
||||||
|
MASMMAAXMASAMXAMAAAMXXAMASMSAMXXXMMASMSMMMMAAAMMMMMAMXSSXSXSASAMXAAAAASMMXXMASASMSAMXSASMSSSMXAMXSMSMMMSXAAMMMMAAMASMMMAMMSMSMSMSSSXAMSMMMSM
|
||||||
|
SAMXSMMXMASASMSSSSSMMMMMXSAMSMMMSSSMMMAAMASMMAXAAASASXAXAAASAMXSSSSMSAMXSXAASAMXAMXMAMXMXXMAMMASASAAAAAXSMSMSAMXSMXMAAXMMXXXSAAAAAMXXXAMXMAX
|
||||||
|
MMSASAXXMASAAAAAAAMAAAXMAMXMMSAASASAXXMXSASXXMAMSXSASMSMMMMMAMMMAMXXMMXMAXMXXMXMSMAMMMAMXMMMXSSMAXXAXMSMMXXAMASAAAASXMMXMAMAMSMMMXMASMMSSSMS
|
||||||
|
SMXAXMMSMASMMMMSMSSSSSSMASXMAMMXSAMXMMSAMXSMMMSAAXMXMAMSXAXAMXMMMMSXSSMSAMSASXMAXSMSSSMSMSAXASAMXMXSAMXAXAMXSAMMSMXAMXSAMAMXXAXASXMMSAXXAAAA
|
||||||
|
MMMSSMAXAMSAXMXXAAAAAAAMASMSMSMAMAMXMAMASMMXSAMMAMXAMSMSSMXXMAXAXXXAAAXMAMMASXMAXAXAXAAAAMASMSXSXMAMMXSXMSSMMXMAXMMXMASAXXSMSXXXSAAXSXMMSMMM
|
||||||
|
SXAMAMXMMXMASMMMSMMMSMMMMMAAAAMASAMMXAMSMXAAMAMXAASMSMMMSMASMMSASMMMMMMMAMMXMAMXMMMSSSMSXSAMXMASMMMSMAMMMXAMXAMXSMSXMASMMSMMXSSMSMMMMAAXMXXX
|
||||||
|
AMSSMMXMSAMXMAAAAXXAAXXSXMSMSMSASASXMSSXAMMMSAMSMMMMAAAAMXXSAAMAMAAXMXSXXSMMSSMAAXAMXAAAAMXMAMXMAMXAMASASXXMSXSMAXSMMMSAMXAAAXMASAMASXMMMMAM
|
||||||
|
MXAMXMAMAASXSSMMSSMSSSMXAXMAMMMAXXMAAMAMXMAXXMMMXAAXSSMSXMAMMMMXMSMMMASXAMXMAAXSMMSSSMMMSMMMXXSSMMSXMASAMXAXAASMSMMAAAMXMSXMASMAMAMMSMMAMAAX
|
||||||
|
XMAMAAXXAXAMXAASXMAAMAMXMMXMXSMSMXMMMMASXMASXSAMMSSMXXAAXMAMMMMMMAMXMASMSMAMSSMXAAXXMAXAAXMASMMAXASMMMMXMSMMMSMAXASXMMSAXMAMSAMXSSMAXAXAMSSS
|
||||||
|
AXSSSSMMMMMXSXMMMMMMMAMMXSXMMXAMMSSMMSAMXMASMMAXXAMXMMSMXSAXAAAAMASAMMSAAXXMAAXSMMSASAMSSXSASASXMMSAMXASMAMXMAMMMXMAAASAMXSMXXXMAMMSMXXAMAMX
|
||||||
|
SXMAAMAASASXSAXSAAAXMMXSAMASAMXMAAAAAMAMXMAMAXAMAMXSAXAAMSAMSSSSSMSASAMMMSMXMAMXAXXAMXMAAAMASXMAAASAMMMMSMSSSMSMSSMMMMMSAMXAMXMMAXAAAMXSMMSS
|
||||||
|
AXMSMMMMSASASMMMSASMXSAMASAMMSXMMSSMMSXMXMMSSMMMXSAXSXMSMMXMAAMMAMXMMAMAXAMMSMSAMXMAMXMMSMMAMXSMMMSAMXMAMXAAAAXAAXASAMXAMAMAMSXMMMMSSXAMXXXA
|
||||||
|
MXAMASAAMMMMMMXXAMMAAMMMMMXSXMASAAMAMSXSAAAAAAXXAMXSMXXMXMMMMMMSSMSMSMSMSMSAASAXXAAAMAXAMASXSASXMASMMXMSSMMMMMMMMXXXAAMMSSSXMXSAASAAMMMSAMAM
|
||||||
|
XMAXAMMXMAAAAXMMMSMMMMAAXMASAAMMMXXSMSASMSMSSMMMSSSXMAMMAMMMSAMMXAXAAAAAMAMMSMMSXSMSSSMMSAMMSASMSAMXXAXMAMASXMSAXXSMSMXXAAXMAAXXAMMMMMXAAMAX
|
||||||
|
MSAMSMMSSSSSXSAAASASAXSXSMAXMMMXXXAXAMAMAXXMAAXAAXMASXMSSMSASMSMMMMSMXMSMAXXAAXMXXAAMAAAMMSAMAMXMASXSMMSAMASAASMSMSAAMXMMMMSMSSSSMSAASMSSSXS
|
||||||
|
XMAMMAXXMAMAXXMMXSAMAMMASMSSXXMASMAMAMSMMMASMMMMXMSAMXMAXMMASXAMASAMXXSXXMMMXSMMAMMMMSMMSASXMMMMSSMMMMAXXMXSMMMAAAMSMSAMAMAAXXAAMAMSMMAMXMAM
|
||||||
|
XXAMSAMMMSMMMMSMMMAMXMMAMAXMASMASMMMMMXAXXMMMMAXMAMASXMSSXMMMMMSAMMMSMSAXSASXXMMAXMAMMXMSAXXSAAMXMSASXSSSSMSAAMXMSMXXSMSAMSASMAMMAMMSMSMSMSM
|
||||||
|
SSMMXMAXAMAAASAAAXAMXSMMMXMMASMMMAXMMAXXMMSAMSAXSASAMXAAXXSAMXXMMXAXAAMAMMASAAXSAMSASMMMMSMXSSSSMMXSXAMAAMASMMSSMXASASASXMAXSAMMSAXMAXAAAAAM
|
||||||
|
XAMAMMSMSSSMXAXSMSMSXSAXMMMSASAMSAMXMASMAXSAMMAMSAMXSXSMSASASMMASMMSMSMXMMAMMSMMAMMASAAAAMMAMXMXAMMXMMMMMMMSMXMASMXMAMMMSMSXMAMAXXMSMSMSMMMX
|
||||||
|
SAMXSMAMXAAXSMMMAAXXASXMAAAMMMAMXMMMMAMMSMMXMXMXMSMMXAAXXMSAMXMAMAASXXMASMXMAAXXSMMSMMSMSMMASXMXAMXMASAXXMAMMXSAMMSMXMXAAXMASMMSSXMAXAAAXMSS
|
||||||
|
SAMXMMAXMSMMAXASMMSMXMMSSMSSXSSMMSAMMASAAXXAMASAAAMMMMMXXXMXXAMASMMMMMMASXSMSMXAMAXAAXXMXXSASAASMMMSAMMSMMMSAAMAMXASASMXSAMMMAAMAMSAMMSMSAAX
|
||||||
|
SMXASXSSMXXAXMXXAAXMAMXMAMAMXAXAASASXMSMMASMSASMSMMXSAMXMASMSMSXXMAXMSMASXXXMASMSXMMXMMMMAMAXMMMMAXMAMXAAMXMMXMAMXMSXXAXMXMMSMMMSAMXXXMASMSM
|
||||||
|
SMMXSAMXAMXSSMXSMMMSAMMSMMASMMMMMSMMXMSASMAAMAMMXAXAMAAMSAMAAAXAMMMMAAMMMMXAMXMXAMXSAXAAAXMASMSMSSMSAMSMSXXXSMSSSSXMMSMMMSMXAMXXMMXSAAMAMXAA
|
||||||
|
XXAMMXMMXMAMAXMAXSASXSAMAMSSMAAAASMASMSAMXXMAMMXSMMMSMXXMAXSMSMSMASXSMSAAXMXMAXXXSMSASMMMSAXXAAAMMAMMXAAMMMMMAXAAMXMAAAMAAMXAMXXXXASMSMAAXXS
|
||||||
|
AXSXXAXAAMASAMMSXMASXMAMSMAMXSSXXSMASXMXMASXSSMXXAAAAXMXXXMMSMAXMASAAXSMXSASXMXSMMAMAMXAASXMMSMMSMSMMSMXMAXAAXMMMMAMSSSMMSSSSMMMSMMSAMMSSSMM
|
||||||
|
SAMXSMSSXSXSXMXAMMAMMMXXXAMXAMAMSMMMSASXMXSAMXMASMMSSSMSAMXMAMSMSXMXMMXXASMXAMMXAMSMAMXMMSAXAAASAAMAMXSAAMSXMSSXAMXMMAAMXAAMMAAXMASMMMAAAAXM
|
||||||
|
MAXAAAAXMMMMAXXMSMASMMMAMAXMAMAMAAMXXAMAXXMMMSMAXAAXAAAXMMAMMSXMASAMXAXMASXXSMASXMMMASMMMMMMXXSMMXXAMASXSXXXASAMXMMAMXMXMMSMSSMMSXMAAMMSSMMS
|
||||||
|
SSMMMSMSMAAXAMXMAXASAAXXSXMXMSSSSSMMSSMMMMSMSAMMSMAMMMMMXXAMXMXXMASXXXSAMXMSMMMXMAXMAXMASXSAMSAMXSSXMAMSAMXAMMAMAMSXMMSXXXMMXAXASXSXMSAMAAXA
|
||||||
|
MXAAAAXSMSSSMSXMAMSSMSAAMMMMXAAAAXAXAMASMXAXSAMXAXXXXASMMMXSAAXMXXMMMMAXXSXAXXMASMMMSSSMSMMAXSAMXXASAMXMMXAMASXMAXASMASXMMMXSMMMSASAXMMSSMSM
|
||||||
|
MSXMSMXMXXMAMMASXSXMAMMXMAAASMSMMMSMMSAXASXMXMMSXSMMSMSAXAASMMMMSMMAAXMMMMMMSAMXXMASAAAAXAMXMMAMXSAMXMMAMMSSMXASMSAAMASASMMASAMAMAMMXMAMMAXX
|
||||||
|
MAAMAMSMSSSMMSAMMMAMXMXAMSSXSXAAXXXAMMMSXXMASMMSAXXAAXSAMSMXAXSAXASMXSAAXMAXMXSXMASMMSMMMSMMMXMMMXAMXMAAMAAMXMMMMMXMAMSAMAMMSAMMMMAXAMAXMSMM
|
||||||
|
MMSMASXAAMAXMMMSASMMXMSXXAXXMXMXMMXMMAAXXAMXMAASASXSXXMAMXASMMMXXXAAXSMMSSMSAMMMMSXSAXMMAXAXXASASMAXSMSSSMMSSSMXAXASXMMAMXSXSAMXMSMSMSAXSAAA
|
||||||
|
XAAXXMMMMSSMXAXXMAAASMMSMMSSMSSMASASXMXSXXMXSMMMAMXAMSSMMXMAMAMAMMMXMSAMXAASXSAAMXAMXSAMASAMSMSASXMMXAAMAAXAAAXSXSASXMMAMMAASXMAXAAAXAASXMXS
|
||||||
|
MSSSSXMXAAAMSMSMMSMMMAAAXAXAAAXAXSASAMXSXSAMXAXMXMXMMXASXXSMSAMAXXAXSXMSSMMMASXSSMSMMSMAMMXMMAMAMMSMMMMSSMMMMMMXMSAMAMSMSAMXMASMSMSMSMSMXXSM
|
||||||
|
AXAAXMASMXAMAAAXMAAXSMMMMASMMMSMAMAMASXMASXXXXXMASXXSSMMMAMAXXXMXMMSXAXMASMMAMMMMAMMMMXMMMMSMAMAMAAMAAMMAMMSAXXAMMAMSMAAMXXAMXMXMAXAMXAAAMAM
|
||||||
|
SMMMMAAXMASMMSMSSSSXSMAMMMMAMXMMAMAMMSAMAMMMMSMSMSXMAMAAMAMMMSMXAAMXXAMSMMXMAXAAMAMMAMAAAAMXSMXMMSSSMSMXAMASASXSSSMMASXSSSSSSSMASMMAMSMSMMMS
|
||||||
|
XAAXSMMSSXMAAXAAAXMAMMSAAASAMMAXXMASAXXMASAAXXMAAXXSSMSMSMSAXMAMSMSAXMMASMASXSSSSMXSASXSSMSAMXMSXMAXAAXSSMMSAMAMMMSMASXMAAXXAMSASASXMXAXXXXS
|
||||||
|
XSXXAMAMXAMMMMSMMMXMAAXMSMSMSMSXSMXMMSXMXSASXMSMSMMMMAAAAAXXSMSMAAMMMXSASMXSMAMAMAXMASXAXAXMMAMAAMAMMMMMMAMSMMAMAAMMAMAMMAMMXMMXSAMXSMMMXSAS
|
||||||
|
MXMMMSMMMSMSAMMAXAMXMXSAXXMMAMXASAAAAAAMXSXMAXSXAMSAMSMMMSMMMAMAMXMMAMMAXMXXAAMAMAXMAMMMMSMMSXSMSMAXAXSXSAMXASXSMSSMMSXMXMMMAMMMXMMMSAAAMMAM
|
||||||
|
AXAAXAAAAAXSASXSMSAAXMMMMASXXXMAMSSMMXSMAMAMXMSAMXAXMXXMAMXAMMMAXAXMSSSSSMXASXMSMSAMAMAAAAAXXXXAMMSMMMAASMXSAMXXXMXAASAMXMASAMAMMXXXSSMSMMXM
|
||||||
|
MMMMMSSMXXXMMMAXAXSMMMAAMAMXMASAMXMASAMMAXSASXSXXAMMMMSAMXSMSASMSSSMAXAAAASXMSXMAMMSASXMSSSMMMMMMAXASAMXMAASXSMMMMMMMXASASASMSMSAMSMXXMAMSAM
|
||||||
|
XMXSAXMAMSMSSMMMSMAXASASXMXSAAXAMSAAMAMMAMXAMAMMMSXASAMAMMSAMASXAMAMMSMMMMMAAMMMAMXMMSXAXXXAAAAAMAMAMXSAMXMXAXMAAAMAXMXMAMASAAXXXAMMAMMSXSAS
|
||||||
|
XAAAXSAASAAAMASAMXSMXSAXASXMMMMAMAMSSSMMSMMAMXMASAAASXSAMMMSMAMMSSSMAAXAXXSMMMASAMAMXSMMMXSSSSSMSAMAMXSAMMXMAMXMMMSASAAMXMAMMMSMMMASXSAMXSSM
|
||||||
|
XMAMMMXMSMMMSAMMSXMSMMMSAMXMAMSAMASXAXMAXAMXMAMMMMMMMASASMAMMXMXAMAMSSSMSMMXXSMSASASAMAMMAMMMAAASMMSSMXXMXAASMMSAMXAMXAMXMAMSASAMXAXXMAXASMS
|
||||||
|
SSMMSXMXXXSXMXXMAMMASAAMAMAMAXMAMXSMAMMASXMSSXSASXSXXXMMAMAMSMSMMSMMAAXXAAASMMMSASAMMSAMMASAMMMMMAAMAXSMXXASXAASAMMMMXMXMXSAMASASMAMXMSMMMAM
|
||||||
|
MAAASASXMMAAXSMSAMMAXXMMAXXMSXSAMMMMMXMASAXXAASAMAMXMSMXAMAXAAXMXAXMMMMSSSMSAAXMAMXMMSAXSASASXMAMMMSAMXAMSMMMMMSAMAMAMSAMXXMMXMAMMMAAAAAXMAM
|
||||||
|
XSMMMXMAAASMMSAMAXMSMSMSMSAXAASASAAAXXMASMSMMMMMMAMASASMSXSAMXMXSSSXSAAAMXMMMMSMAMSMASAMMXSXMASXSAXMXMAXMAAXXSAMXSASAMMASASXSSMMMMXSMSSSXSSS
|
||||||
|
MXASXSSSMXAMAMXMAMSMAAAAASMMMXMASMSMSMXXSAMXAXMASXSMSAMXXAMXMASAAAAASMSXMASXMASXAAAMMXMXXAMASAMXSAMSASASXXMMXMASXMMSASXSMASAXSXXAXXXMAMXAXAM
|
||||||
|
MSAMAAAAXSMXSXXXXXAAMMMMMMSSMMMXMMMMMMMMMXMSMSSMAMAMMMMAMMMXMAMMXMMMMXMAMAXAMASXSSSSXSXSMXSAMASXMAMMXMASMMSAXSAMMSMSAMXAMMMMMMSSSSMMSMMXSMSA
|
||||||
|
MMMMMMMMMASAMXAMXSMSSXXXMMMMAASASAXAAAMAAAXAAMAMMSSMAAMXSASMMSSMXMSXMSSSMSSMMXSMMAAMAAAXXAMAMXMAMMMXSMMMAXSAMSASAAMMAMXMASAXAAAXXAMAAAXMXAXA
|
||||||
|
XAXXAXXXXAMMXSMAMXAAAMAMAAAMSMSASMSSSSSMSSSMSMXSAMXSXSAASMSAMAAXXMASMAAAAXAMAASMMMMMMMSMMSMSMSSSMAAMXAAXSMMAMXAMMMMXAMXXASXSMSXSSXMMXMMAXMXX
|
||||||
|
SMSMXMMMMMSXMASXAMMMSAXMSSSXMXMAMXMMMMAAAAAAXMXXAMAMMMMXSXSAMSSMXSASMAXMMMAXMMSAMXXAXAAAXAAMAMAASMSSSXMXMAMSMMXMMSSSMSXMASMXMAAMMMSSMMSSMMSM
|
||||||
|
AXAXAXAAAMAAAMXSMMSAXXXMAMMMXXMXMAAAAMAMMSMMMMMSMMAMXAXXMAMAMXXAAMASXMSSXSAMMXMMMMXMMSSSMMSMAMXMASAAAXSASMMMAXSAAAAAAMXSAMXMMMMMAAAAAAAAAAAA
|
||||||
|
MSMMMSXMXXAXMSAXMASMXSMMASMMXXMAMXXSSSMSXXXXAAAAXSAMSSSMMXMSAMXMMMAMAMAMXSXMMASXMMAMMXMAMXMXXMAXMMMSMMMAXMASAMSAMMSMMMAMASMMMSMSMMXSMMXMMSSS
|
||||||
|
MAXAMSMSSXSAAMASMXSAASXSASAAAXSSMSMMAAAXXXXSSMXSMSMMMXAXAMXXASXMAMASAMAXMMAMSMSAMSSSMASAMMMXMXXSAMAAAXXXMMXMXMXAMXAAAMASAAAMXAAXAXXMXSMSMAAX
|
||||||
|
SASXAXASAAMXMASMXAMMMSAMXSMMXXAAASMMSMMMMXXMAXAMMXMAXSMMMMMSXMASASMXAMMMAMAMSAMXMAMAXASXSAMXMAXMAMSSSMMXMXXMXMSSMXMMASAXMSXMMMMMSMXXAXAAAMMM
|
||||||
|
MASXMMMMMMMAMSMMXXSMAMAMMXMAXMMMMMAMASXAMXSSSMMSASXSXMMXAAXSMSAMXMASXMSASMASMAMAMXSAMXSMXASAMSMSAMAMAASAMSXMAAAXMASMASAXMMMMASAMAASMMMSMSAMS
|
||||||
|
MAMMXAXAXXSAMAAAAMXMASAMSAMXSSXAAAMMAMSASAMXAAAAXMAMXAASXSMXAMSSXMASAASAMSXMMAMXSAMXSXSASXMASAASMMAMSAMASAASMSMXSASMAMAMAAMSASASMSXAAAXSXMSX
|
||||||
|
MMSASMSMSASXSSSMMAMSXSASMXMXSAMSSSXMXXSXMXSSSMMSSMXMAMASAAMMXMMSXMSSMMMSMXXMAXSAMXXSAMXXSSSSMMXMXSSMXMSMMMXMMAMXMXSMASMSMXMMASMMXMMSMSSMMSSX
|
||||||
Binary file not shown.
@@ -0,0 +1,97 @@
|
|||||||
|
--- Day 5: Print Queue ---
|
||||||
|
|
||||||
|
Satisfied with their search on Ceres, the squadron of scholars suggests subsequently scanning the stationery stacks of sub-basement 17.
|
||||||
|
|
||||||
|
The North Pole printing department is busier than ever this close to Christmas, and while The Historians continue their search of this historically significant facility, an Elf operating a very familiar printer beckons you over.
|
||||||
|
|
||||||
|
The Elf must recognize you, because they waste no time explaining that the new sleigh launch safety manual updates won't print correctly. Failure to update the safety manuals would be dire indeed, so you offer your services.
|
||||||
|
|
||||||
|
Safety protocols clearly indicate that new pages for the safety manuals must be printed in a very specific order. The notation X|Y means that if both page number X and page number Y are to be produced as part of an update, page number X must be printed at some point before page number Y.
|
||||||
|
|
||||||
|
The Elf has for you both the page ordering rules and the pages to produce in each update (your puzzle input), but can't figure out whether each update has the pages in the right order.
|
||||||
|
|
||||||
|
For example:
|
||||||
|
|
||||||
|
47|53
|
||||||
|
97|13
|
||||||
|
97|61
|
||||||
|
97|47
|
||||||
|
75|29
|
||||||
|
61|13
|
||||||
|
75|53
|
||||||
|
29|13
|
||||||
|
97|29
|
||||||
|
53|29
|
||||||
|
61|53
|
||||||
|
97|53
|
||||||
|
61|29
|
||||||
|
47|13
|
||||||
|
75|47
|
||||||
|
97|75
|
||||||
|
47|61
|
||||||
|
75|61
|
||||||
|
47|29
|
||||||
|
75|13
|
||||||
|
53|13
|
||||||
|
|
||||||
|
75,47,61,53,29
|
||||||
|
97,61,53,29,13
|
||||||
|
75,29,13
|
||||||
|
75,97,47,61,53
|
||||||
|
61,13,29
|
||||||
|
97,13,75,29,47
|
||||||
|
|
||||||
|
The first section specifies the page ordering rules, one per line. The first rule, 47|53, means that if an update includes both page number 47 and page number 53, then page number 47 must be printed at some point before page number 53. (47 doesn't necessarily need to be immediately before 53; other pages are allowed to be between them.)
|
||||||
|
|
||||||
|
The second section specifies the page numbers of each update. Because most safety manuals are different, the pages needed in the updates are different too. The first update, 75,47,61,53,29, means that the update consists of page numbers 75, 47, 61, 53, and 29.
|
||||||
|
|
||||||
|
To get the printers going as soon as possible, start by identifying which updates are already in the right order.
|
||||||
|
|
||||||
|
In the above example, the first update (75,47,61,53,29) is in the right order:
|
||||||
|
|
||||||
|
75 is correctly first because there are rules that put each other page after it: 75|47, 75|61, 75|53, and 75|29.
|
||||||
|
47 is correctly second because 75 must be before it (75|47) and every other page must be after it according to 47|61, 47|53, and 47|29.
|
||||||
|
61 is correctly in the middle because 75 and 47 are before it (75|61 and 47|61) and 53 and 29 are after it (61|53 and 61|29).
|
||||||
|
53 is correctly fourth because it is before page number 29 (53|29).
|
||||||
|
29 is the only page left and so is correctly last.
|
||||||
|
|
||||||
|
Because the first update does not include some page numbers, the ordering rules involving those missing page numbers are ignored.
|
||||||
|
|
||||||
|
The second and third updates are also in the correct order according to the rules. Like the first update, they also do not include every page number, and so only some of the ordering rules apply - within each update, the ordering rules that involve missing page numbers are not used.
|
||||||
|
|
||||||
|
The fourth update, 75,97,47,61,53, is not in the correct order: it would print 75 before 97, which violates the rule 97|75.
|
||||||
|
|
||||||
|
The fifth update, 61,13,29, is also not in the correct order, since it breaks the rule 29|13.
|
||||||
|
|
||||||
|
The last update, 97,13,75,29,47, is not in the correct order due to breaking several rules.
|
||||||
|
|
||||||
|
For some reason, the Elves also need to know the middle page number of each update being printed. Because you are currently only printing the correctly-ordered updates, you will need to find the middle page number of each correctly-ordered update. In the above example, the correctly-ordered updates are:
|
||||||
|
|
||||||
|
75,47,61,53,29
|
||||||
|
97,61,53,29,13
|
||||||
|
75,29,13
|
||||||
|
|
||||||
|
These have middle page numbers of 61, 53, and 29 respectively. Adding these page numbers together gives 143.
|
||||||
|
|
||||||
|
Of course, you'll need to be careful: the actual list of page ordering rules is bigger and more complicated than the above example.
|
||||||
|
|
||||||
|
Determine which updates are already in the correct order. What do you get if you add up the middle page number from those correctly-ordered updates?
|
||||||
|
|
||||||
|
Your puzzle answer was 5948.
|
||||||
|
--- Part Two ---
|
||||||
|
|
||||||
|
While the Elves get to work printing the correctly-ordered updates, you have a little time to fix the rest of them.
|
||||||
|
|
||||||
|
For each of the incorrectly-ordered updates, use the page ordering rules to put the page numbers in the right order. For the above example, here are the three incorrectly-ordered updates and their correct orderings:
|
||||||
|
|
||||||
|
75,97,47,61,53 becomes 97,75,47,61,53.
|
||||||
|
61,13,29 becomes 61,29,13.
|
||||||
|
97,13,75,29,47 becomes 97,75,47,29,13.
|
||||||
|
|
||||||
|
After taking only the incorrectly-ordered updates and ordering them correctly, their middle page numbers are 47, 29, and 47. Adding these together produces 123.
|
||||||
|
|
||||||
|
Find the updates which are not in the correct order. What do you get if you add up the middle page numbers after correctly ordering just those updates?
|
||||||
|
|
||||||
|
Your puzzle answer was 3062.
|
||||||
|
|
||||||
|
Both parts of this puzzle are complete! They provide two gold stars: **
|
||||||
Executable
+37
@@ -0,0 +1,37 @@
|
|||||||
|
#!/usr/bin/env python3
|
||||||
|
|
||||||
|
import sys
|
||||||
|
from functools import cmp_to_key
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == '__main__':
|
||||||
|
lines = [line.strip('\n') for line in open(sys.argv[1])]
|
||||||
|
rules = [tuple([int(y) for y in x.split('|')]) for x in lines[:lines.index('')]]
|
||||||
|
updates = [[int(x) for x in line.split(',')] for line in lines[lines.index('')+1:]]
|
||||||
|
|
||||||
|
def compare(a,b):
|
||||||
|
for rule in rules:
|
||||||
|
if a in rule and b in rule:
|
||||||
|
return -1 if a == rule[0] else 1
|
||||||
|
return 0
|
||||||
|
|
||||||
|
res1, res2 = 0, 0
|
||||||
|
for update in updates:
|
||||||
|
correct = True
|
||||||
|
for i, u in enumerate(update):
|
||||||
|
for u2 in update[i+1:]:
|
||||||
|
if compare(u,u2) == 1:
|
||||||
|
correct = False
|
||||||
|
break
|
||||||
|
if not correct:
|
||||||
|
update.sort(key=cmp_to_key(compare))
|
||||||
|
res2 += update[int(len(update)/2)]
|
||||||
|
break
|
||||||
|
if correct: res1 += update[int(len(update)/2)]
|
||||||
|
|
||||||
|
# challenge 1
|
||||||
|
print(f"challenge 1:\n{res1}\n")
|
||||||
|
|
||||||
|
# challenge 2
|
||||||
|
print(f"challenge 2:\n{res2}")
|
||||||
|
|
||||||
@@ -0,0 +1,28 @@
|
|||||||
|
47|53
|
||||||
|
97|13
|
||||||
|
97|61
|
||||||
|
97|47
|
||||||
|
75|29
|
||||||
|
61|13
|
||||||
|
75|53
|
||||||
|
29|13
|
||||||
|
97|29
|
||||||
|
53|29
|
||||||
|
61|53
|
||||||
|
97|53
|
||||||
|
61|29
|
||||||
|
47|13
|
||||||
|
75|47
|
||||||
|
97|75
|
||||||
|
47|61
|
||||||
|
75|61
|
||||||
|
47|29
|
||||||
|
75|13
|
||||||
|
53|13
|
||||||
|
|
||||||
|
75,47,61,53,29
|
||||||
|
97,61,53,29,13
|
||||||
|
75,29,13
|
||||||
|
75,97,47,61,53
|
||||||
|
61,13,29
|
||||||
|
97,13,75,29,47
|
||||||
+1371
File diff suppressed because it is too large.
Load diff
Binary file not shown.
@@ -0,0 +1,195 @@
|
|||||||
|
--- Day 6: Guard Gallivant ---
|
||||||
|
|
||||||
|
The Historians use their fancy device again, this time to whisk you all away to the North Pole prototype suit manufacturing lab... in the year 1518! It turns out that having direct access to history is very convenient for a group of historians.
|
||||||
|
|
||||||
|
You still have to be careful of time paradoxes, and so it will be important to avoid anyone from 1518 while The Historians search for the Chief. Unfortunately, a single guard is patrolling this part of the lab.
|
||||||
|
|
||||||
|
Maybe you can work out where the guard will go ahead of time so that The Historians can search safely?
|
||||||
|
|
||||||
|
You start by making a map (your puzzle input) of the situation. For example:
|
||||||
|
|
||||||
|
....#.....
|
||||||
|
.........#
|
||||||
|
..........
|
||||||
|
..#.......
|
||||||
|
.......#..
|
||||||
|
..........
|
||||||
|
.#..^.....
|
||||||
|
........#.
|
||||||
|
#.........
|
||||||
|
......#...
|
||||||
|
|
||||||
|
The map shows the current position of the guard with ^ (to indicate the guard is currently facing up from the perspective of the map). Any obstructions - crates, desks, alchemical reactors, etc. - are shown as #.
|
||||||
|
|
||||||
|
Lab guards in 1518 follow a very strict patrol protocol which involves repeatedly following these steps:
|
||||||
|
|
||||||
|
If there is something directly in front of you, turn right 90 degrees.
|
||||||
|
Otherwise, take a step forward.
|
||||||
|
|
||||||
|
Following the above protocol, the guard moves up several times until she reaches an obstacle (in this case, a pile of failed suit prototypes):
|
||||||
|
|
||||||
|
....#.....
|
||||||
|
....^....#
|
||||||
|
..........
|
||||||
|
..#.......
|
||||||
|
.......#..
|
||||||
|
..........
|
||||||
|
.#........
|
||||||
|
........#.
|
||||||
|
#.........
|
||||||
|
......#...
|
||||||
|
|
||||||
|
Because there is now an obstacle in front of the guard, she turns right before continuing straight in her new facing direction:
|
||||||
|
|
||||||
|
....#.....
|
||||||
|
........>#
|
||||||
|
..........
|
||||||
|
..#.......
|
||||||
|
.......#..
|
||||||
|
..........
|
||||||
|
.#........
|
||||||
|
........#.
|
||||||
|
#.........
|
||||||
|
......#...
|
||||||
|
|
||||||
|
Reaching another obstacle (a spool of several very long polymers), she turns right again and continues downward:
|
||||||
|
|
||||||
|
....#.....
|
||||||
|
.........#
|
||||||
|
..........
|
||||||
|
..#.......
|
||||||
|
.......#..
|
||||||
|
..........
|
||||||
|
.#......v.
|
||||||
|
........#.
|
||||||
|
#.........
|
||||||
|
......#...
|
||||||
|
|
||||||
|
This process continues for a while, but the guard eventually leaves the mapped area (after walking past a tank of universal solvent):
|
||||||
|
|
||||||
|
....#.....
|
||||||
|
.........#
|
||||||
|
..........
|
||||||
|
..#.......
|
||||||
|
.......#..
|
||||||
|
..........
|
||||||
|
.#........
|
||||||
|
........#.
|
||||||
|
#.........
|
||||||
|
......#v..
|
||||||
|
|
||||||
|
By predicting the guard's route, you can determine which specific positions in the lab will be in the patrol path. Including the guard's starting position, the positions visited by the guard before leaving the area are marked with an X:
|
||||||
|
|
||||||
|
....#.....
|
||||||
|
....XXXXX#
|
||||||
|
....X...X.
|
||||||
|
..#.X...X.
|
||||||
|
..XXXXX#X.
|
||||||
|
..X.X.X.X.
|
||||||
|
.#XXXXXXX.
|
||||||
|
.XXXXXXX#.
|
||||||
|
#XXXXXXX..
|
||||||
|
......#X..
|
||||||
|
|
||||||
|
In this example, the guard will visit 41 distinct positions on your map.
|
||||||
|
|
||||||
|
Predict the path of the guard. How many distinct positions will the guard visit before leaving the mapped area?
|
||||||
|
|
||||||
|
Your puzzle answer was 5212.
|
||||||
|
--- Part Two ---
|
||||||
|
|
||||||
|
While The Historians begin working around the guard's patrol route, you borrow their fancy device and step outside the lab. From the safety of a supply closet, you time travel through the last few months and record the nightly status of the lab's guard post on the walls of the closet.
|
||||||
|
|
||||||
|
Returning after what seems like only a few seconds to The Historians, they explain that the guard's patrol area is simply too large for them to safely search the lab without getting caught.
|
||||||
|
|
||||||
|
Fortunately, they are pretty sure that adding a single new obstruction won't cause a time paradox. They'd like to place the new obstruction in such a way that the guard will get stuck in a loop, making the rest of the lab safe to search.
|
||||||
|
|
||||||
|
To have the lowest chance of creating a time paradox, The Historians would like to know all of the possible positions for such an obstruction. The new obstruction can't be placed at the guard's starting position - the guard is there right now and would notice.
|
||||||
|
|
||||||
|
In the above example, there are only 6 different positions where a new obstruction would cause the guard to get stuck in a loop. The diagrams of these six situations use O to mark the new obstruction, | to show a position where the guard moves up/down, - to show a position where the guard moves left/right, and + to show a position where the guard moves both up/down and left/right.
|
||||||
|
|
||||||
|
Option one, put a printing press next to the guard's starting position:
|
||||||
|
|
||||||
|
....#.....
|
||||||
|
....+---+#
|
||||||
|
....|...|.
|
||||||
|
..#.|...|.
|
||||||
|
....|..#|.
|
||||||
|
....|...|.
|
||||||
|
.#.O^---+.
|
||||||
|
........#.
|
||||||
|
#.........
|
||||||
|
......#...
|
||||||
|
|
||||||
|
Option two, put a stack of failed suit prototypes in the bottom right quadrant of the mapped area:
|
||||||
|
|
||||||
|
....#.....
|
||||||
|
....+---+#
|
||||||
|
....|...|.
|
||||||
|
..#.|...|.
|
||||||
|
..+-+-+#|.
|
||||||
|
..|.|.|.|.
|
||||||
|
.#+-^-+-+.
|
||||||
|
......O.#.
|
||||||
|
#.........
|
||||||
|
......#...
|
||||||
|
|
||||||
|
Option three, put a crate of chimney-squeeze prototype fabric next to the standing desk in the bottom right quadrant:
|
||||||
|
|
||||||
|
....#.....
|
||||||
|
....+---+#
|
||||||
|
....|...|.
|
||||||
|
..#.|...|.
|
||||||
|
..+-+-+#|.
|
||||||
|
..|.|.|.|.
|
||||||
|
.#+-^-+-+.
|
||||||
|
.+----+O#.
|
||||||
|
#+----+...
|
||||||
|
......#...
|
||||||
|
|
||||||
|
Option four, put an alchemical retroencabulator near the bottom left corner:
|
||||||
|
|
||||||
|
....#.....
|
||||||
|
....+---+#
|
||||||
|
....|...|.
|
||||||
|
..#.|...|.
|
||||||
|
..+-+-+#|.
|
||||||
|
..|.|.|.|.
|
||||||
|
.#+-^-+-+.
|
||||||
|
..|...|.#.
|
||||||
|
#O+---+...
|
||||||
|
......#...
|
||||||
|
|
||||||
|
Option five, put the alchemical retroencabulator a bit to the right instead:
|
||||||
|
|
||||||
|
....#.....
|
||||||
|
....+---+#
|
||||||
|
....|...|.
|
||||||
|
..#.|...|.
|
||||||
|
..+-+-+#|.
|
||||||
|
..|.|.|.|.
|
||||||
|
.#+-^-+-+.
|
||||||
|
....|.|.#.
|
||||||
|
#..O+-+...
|
||||||
|
......#...
|
||||||
|
|
||||||
|
Option six, put a tank of sovereign glue right next to the tank of universal solvent:
|
||||||
|
|
||||||
|
....#.....
|
||||||
|
....+---+#
|
||||||
|
....|...|.
|
||||||
|
..#.|...|.
|
||||||
|
..+-+-+#|.
|
||||||
|
..|.|.|.|.
|
||||||
|
.#+-^-+-+.
|
||||||
|
.+----++#.
|
||||||
|
#+----++..
|
||||||
|
......#O..
|
||||||
|
|
||||||
|
It doesn't really matter what you choose to use as an obstacle so long as you and The Historians can put it into position without the guard noticing. The important thing is having enough options that you can find one that minimizes time paradoxes, and in this example, there are 6 different positions you could choose.
|
||||||
|
|
||||||
|
You need to get the guard stuck in a loop by adding a single new obstruction. How many different positions could you choose for this obstruction?
|
||||||
|
|
||||||
|
Your puzzle answer was 1767.
|
||||||
|
|
||||||
|
Both parts of this puzzle are complete! They provide two gold stars: **
|
||||||
Executable
+81
@@ -0,0 +1,81 @@
|
|||||||
|
#!/usr/bin/env python3
|
||||||
|
|
||||||
|
import sys
|
||||||
|
from copy import deepcopy
|
||||||
|
import numpy as np
|
||||||
|
|
||||||
|
|
||||||
|
def show(maps):
|
||||||
|
st = ''
|
||||||
|
for line in maps:
|
||||||
|
print(''.join(line))
|
||||||
|
|
||||||
|
|
||||||
|
def find_guard(current):
|
||||||
|
move = (0,0)
|
||||||
|
for y in range(0, len(current)):
|
||||||
|
for x, field in enumerate(current[y]):
|
||||||
|
if field == '.' or field == '#' or field == 'X': continue
|
||||||
|
elif field == '^': move = np.array((0, -1))
|
||||||
|
elif field == '>': move = np.array((1, 0))
|
||||||
|
elif field == 'v': move = np.array((0, 1))
|
||||||
|
elif field == '<': move = np.array((-1, 0))
|
||||||
|
guard = np.array((x, y))
|
||||||
|
return(guard, move, field)
|
||||||
|
|
||||||
|
|
||||||
|
def guard(m, guard, move):
|
||||||
|
next = {(0,-1): '>', (1,0): 'v', (0,1): '<', (-1,0): '^'}
|
||||||
|
nextm = {(0,-1): (1,0), (1,0): (0,1), (0,1): (-1, 0), (-1,0): (0,-1)}
|
||||||
|
current = m
|
||||||
|
|
||||||
|
while (0 <= guard[0] + move[0] < len(m[0]) and 0 <= guard[1] + move[1] < len(m)):
|
||||||
|
gx, gy = guard
|
||||||
|
guard = guard + move
|
||||||
|
x, y = guard
|
||||||
|
if m[y][x] == '#':
|
||||||
|
current[gy][gx] = next[tuple(move)]
|
||||||
|
return current, True, np.array((gx, gy)), np.array(nextm[tuple(move)])
|
||||||
|
else:
|
||||||
|
current[gy][gx] = 'X'
|
||||||
|
current[guard[1]][guard[0]] = 'X'
|
||||||
|
return current, False, np.array((guard[0], guard[1])), np.array(nextm[tuple(move)])
|
||||||
|
|
||||||
|
|
||||||
|
def test_loop(m, x, y, g, move, o):
|
||||||
|
current = deepcopy(m)
|
||||||
|
current[y][x] = '#'
|
||||||
|
positions = set([])
|
||||||
|
positions.add((g[0], g[1], o))
|
||||||
|
running = True
|
||||||
|
while running:
|
||||||
|
current, running, g, move = guard(current, g, move)
|
||||||
|
o = current[g[1]][g[0]]
|
||||||
|
if (g[0], g[1], o) in positions:
|
||||||
|
return True
|
||||||
|
positions.add((g[0], g[1], o))
|
||||||
|
return False
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == '__main__':
|
||||||
|
maps = [list(line.strip('\n')) for line in open(sys.argv[1])]
|
||||||
|
sguard, smove, start = find_guard(maps)
|
||||||
|
|
||||||
|
# challenge 1
|
||||||
|
running = True
|
||||||
|
current = deepcopy(maps)
|
||||||
|
g, m = sguard, smove
|
||||||
|
while running:
|
||||||
|
current, running, g, m = guard(current, g, m)
|
||||||
|
|
||||||
|
res1 = sum([m.count('X') for m in current])
|
||||||
|
print(f"challenge 1:\n{res1}\n")
|
||||||
|
|
||||||
|
# challenge 2
|
||||||
|
res2 = 0
|
||||||
|
for y in range(0, len(current)):
|
||||||
|
for x, field in enumerate(current[y]):
|
||||||
|
if field == '#' or field == '.': continue
|
||||||
|
res2 += test_loop(maps, x, y, sguard, smove, start)
|
||||||
|
print(f"challenge 2:\n{res2}")
|
||||||
|
|
||||||
@@ -0,0 +1,10 @@
|
|||||||
|
....#.....
|
||||||
|
.........#
|
||||||
|
..........
|
||||||
|
..#.......
|
||||||
|
.......#..
|
||||||
|
..........
|
||||||
|
.#..^.....
|
||||||
|
........#.
|
||||||
|
#.........
|
||||||
|
......#...
|
||||||
@@ -0,0 +1,130 @@
|
|||||||
|
................#.................#.#...........................#.#..................#............................................
|
||||||
|
..........#................#...........#...................#.#....................................................................
|
||||||
|
....#......#......#............#.#........#..........#.......#.......#...#........#..........#.........................#..........
|
||||||
|
..................#............#.....##...............#..#.....................#...........#......................................
|
||||||
|
#.........#.............................................................#........#............#........#.....#...#...........#....
|
||||||
|
.....#...#......#..................................................#........#..................#......#.......................#...
|
||||||
|
#.................................................#......................#......#...................................#.............
|
||||||
|
...#.#...#.....................................#.......................#.........#..................................#....#........
|
||||||
|
..............................................#..............#...#...........##..........................#.......#............#...
|
||||||
|
........#.#.......#.................##.......................#..........#...........................#...#.........................
|
||||||
|
.................#..............................#.................#............#....#.....#.......................................
|
||||||
|
.................................................................#......#............#.#.#..................#.....................
|
||||||
|
.#..........#......#...#.......#..........................#....................#.#.............................#..................
|
||||||
|
...............#.....##.......#..#...###......#......................#.................................#.#......#..#..............
|
||||||
|
#.....................#......................................#..........#...............#........#...............#...#.#..........
|
||||||
|
.......................................#..................#.........................#.............................................
|
||||||
|
.......................#...............................................................#........................#...........#.....
|
||||||
|
......#....#..........................................................................................#..........#................
|
||||||
|
........#.......................................#..........................#.............##.........#............#.#.........#....
|
||||||
|
......#........#........................................................#..........................#..............................
|
||||||
|
....................#.................................................#.....................#......#..#...#....................#..
|
||||||
|
...........#....................##.....#...#............#...#......................................#.....#.......#.........#....#.
|
||||||
|
#..............#.................#......#..................#...................#......#...........#...............................
|
||||||
|
.......#.......#.........................................#.....#..#.................................................#..........#..
|
||||||
|
..#..................#.......................#..#..#...#..........................#.........#...##......#..........#.#..#.........
|
||||||
|
..#.........#....................#...........................#....................#..........................#................#..#
|
||||||
|
......#.....................................................#..#.......#.............#...................#......................#.
|
||||||
|
.....#..................................................................#...#.....................#......................#.#......
|
||||||
|
......#..............#...................................#.......................#...................................#...##.......
|
||||||
|
...........#..........#....................................................................#........................#.............
|
||||||
|
#.......................................#..........................#........#......#......................##......................
|
||||||
|
.............#...#..........#......#..........#.#......................................................................#..........
|
||||||
|
........................................................#....#...#......##..........................#..........#..................
|
||||||
|
.#...#.....#..........#....#...........................................#........#....................................#............
|
||||||
|
....#....................................##.......#...........................................#.......#...........................
|
||||||
|
...........#.............#........................................................#...#................#........#.................
|
||||||
|
.....#.#........................................#....................#.........#..................................................
|
||||||
|
.........#............#..............................#...#..............#...........................#...............#.....#.......
|
||||||
|
......................#........................................#.#..........#...#..#......................#.......................
|
||||||
|
##...........#..............#......#....................#..........................#.......................#.......#.......#......
|
||||||
|
....#..#.........................................................#.....#..#.........................................#.....#.......
|
||||||
|
....#......##................#......................................#.......................................#..................#..
|
||||||
|
..............................#............................#..................#.......#.......#..................#...#............
|
||||||
|
......................................................#............................#..............................................
|
||||||
|
.......#.............................#......#.................................#...................................................
|
||||||
|
..................................................................................................................#...............
|
||||||
|
.......................#.....#...........##........................................#..............................#...............
|
||||||
|
..........................#................................................................#..................#...................
|
||||||
|
..........................#..................#........#..............#.#..#...................##..................................
|
||||||
|
..................#............................................................................................#..................
|
||||||
|
.......................#..........#...##................#.........................................................................
|
||||||
|
...............#.....................................#............................................#...............................
|
||||||
|
....#..................................................................................#........#.................................
|
||||||
|
..#................#.....................................................................#...#....................................
|
||||||
|
..........#.............#.........#......#................#......#.........#........#.......................#.....................
|
||||||
|
..........................................................................#.................................#.....#....#.#........
|
||||||
|
....#..........#......................................#......................................................#.......#....#.....#.
|
||||||
|
.....#...............................#............................#........................................................#......
|
||||||
|
.............................................................................#.......................#....................#..#....
|
||||||
|
................#.............................................................#...................................................
|
||||||
|
.....#................#.......#....................#............#.......#.....#.................................#.................
|
||||||
|
...........................................................................................................#.#....................
|
||||||
|
.....#...............................................#...................................................................#..#.....
|
||||||
|
................#..............................#.............#.#..............................................................#...
|
||||||
|
..#............#...................#..................................................................#...............#...#....#..
|
||||||
|
..........#...............#...............#............................................#......#...##........#..#..................
|
||||||
|
......#..###..........................................................................................#................#..........
|
||||||
|
..........#........#.....#.......................#.........................................#.#........#.#.........................
|
||||||
|
.....#............................................................#.....#..........................#..............................
|
||||||
|
...............................................................#..............#........................................#..........
|
||||||
|
.................................................#....#...#....................................#..#........................#......
|
||||||
|
.................#..........#......#......................#.......#...................#.#.........................................
|
||||||
|
.#............................................................................#..............#..............................#..#..
|
||||||
|
..#........#...#..........#.................#...#...................................................#...#............#............
|
||||||
|
...........#.......#..#...............................................................................#...........................
|
||||||
|
.#.#..#...........##...................#...................................#...........#...............................#..........
|
||||||
|
......................................................................#............#.....................................#...#....
|
||||||
|
....#............#.#.#................#............#....#...#......#....................................................#.........
|
||||||
|
.......................................................................................#.....................................#....
|
||||||
|
.......................................#..................#........#................................................#.............
|
||||||
|
.........................................#.....#..........#.......##..................................#................#..........
|
||||||
|
..............#.............#............#..........................................................#.............................
|
||||||
|
.#...................#...#..........................................................#........#........#..........................#
|
||||||
|
..#..............................#.....................................#.................#.............#...........#..............
|
||||||
|
.................................#........................#.#....#......#....................#....................................
|
||||||
|
.#..................................................#.....#............................#..........#..................#.......#....
|
||||||
|
.....................#.......................^............#...#...#..............#................#...............................
|
||||||
|
.........#....................................#....................#...........#...........#..............#...................#...
|
||||||
|
............................#...........#....................#.............#.......#.......................#...#....#.............
|
||||||
|
............#.................#...........#..................................................................#............#.......
|
||||||
|
...........#....................#.................................................#......#.#....................#.................
|
||||||
|
..............................................................#..........#........#....#.........#................................
|
||||||
|
...............#.........#......#..........#.#.............................................................................#....#.
|
||||||
|
...............##...##..........................................................................................#.................
|
||||||
|
..........................#.#...........................#......................#...............#..................................
|
||||||
|
.....#...#..................#...........#....#.........#............................#.............................................
|
||||||
|
.........................................................................................#...................#...#................
|
||||||
|
............#.....................#...........#..................................................................#................
|
||||||
|
.#.............................#............................#..........#......##...................................#.#............
|
||||||
|
............#.........................................#...............................................#.#....#....................
|
||||||
|
.........................................................#..#.#...............#......#....#........#..........................#...
|
||||||
|
............................#..#.................#................................................................#...............
|
||||||
|
............................#.........................................................................#....#..#............#..#...
|
||||||
|
....#........#....#....#..#..............................#...#......................#.......................#............#........
|
||||||
|
..#...............#............................................................................................................#..
|
||||||
|
#.......................#...#............#..................................................#.........................#...........
|
||||||
|
.....#.................#..#.............................................#...................................................##....
|
||||||
|
...............#....................................#................#.........................#.#...........................#.#..
|
||||||
|
.................#....#....#..............#....#.#....#...............#......................#...............#..................#.
|
||||||
|
...........#...............................................................................#....#.................#...............
|
||||||
|
...............#............................................###.#.#.#........#...................................#....#...........
|
||||||
|
................#.................#........#............#..............#.....................#.............#......................
|
||||||
|
....................................#.....................................................#....#..................................
|
||||||
|
..#..#.............#......#.#..................#........................................#..........#...#..........................
|
||||||
|
...............#........................#...............................#.............#...................#..#....#...............
|
||||||
|
......#...........................#..............................................#..............................#...............#.
|
||||||
|
...........#..............#................#....#..........#................#.......#..............#.........#.................#..
|
||||||
|
......#....................................................................................................#......................
|
||||||
|
...........#.............#...............#..........#....#.#...##..................#....................#.........................
|
||||||
|
.......................................................#.#.....................................#..................#.......#.......
|
||||||
|
...............#...............#...........................................................................#..................#...
|
||||||
|
...............#......#.........#..................#.............................#..............................#.................
|
||||||
|
...............#..........#..#.......#.............#............................#.#............................#..................
|
||||||
|
..........#................................#..#...................................................................................
|
||||||
|
..#................#............#........#...................................#...............##.................##....#.......#...
|
||||||
|
..#.....................................................................#.............................................#.#.........
|
||||||
|
#...#...#.......................##............#..............#.........#......................#........#.#........................
|
||||||
|
..............................#......#.......#.........#...#..#.......................................................#.#.........
|
||||||
|
.#..................#.#................................#..........#.......#..........................#............................
|
||||||
|
...............#.....................#...#..........................................#..........#......#...........................
|
||||||
Binary file not shown.
@@ -0,0 +1,54 @@
|
|||||||
|
--- Day 7: Bridge Repair ---
|
||||||
|
|
||||||
|
The Historians take you to a familiar rope bridge over a river in the middle of a jungle. The Chief isn't on this side of the bridge, though; maybe he's on the other side?
|
||||||
|
|
||||||
|
When you go to cross the bridge, you notice a group of engineers trying to repair it. (Apparently, it breaks pretty frequently.) You won't be able to cross until it's fixed.
|
||||||
|
|
||||||
|
You ask how long it'll take; the engineers tell you that it only needs final calibrations, but some young elephants were playing nearby and stole all the operators from their calibration equations! They could finish the calibrations if only someone could determine which test values could possibly be produced by placing any combination of operators into their calibration equations (your puzzle input).
|
||||||
|
|
||||||
|
For example:
|
||||||
|
|
||||||
|
190: 10 19
|
||||||
|
3267: 81 40 27
|
||||||
|
83: 17 5
|
||||||
|
156: 15 6
|
||||||
|
7290: 6 8 6 15
|
||||||
|
161011: 16 10 13
|
||||||
|
192: 17 8 14
|
||||||
|
21037: 9 7 18 13
|
||||||
|
292: 11 6 16 20
|
||||||
|
|
||||||
|
Each line represents a single equation. The test value appears before the colon on each line; it is your job to determine whether the remaining numbers can be combined with operators to produce the test value.
|
||||||
|
|
||||||
|
Operators are always evaluated left-to-right, not according to precedence rules. Furthermore, numbers in the equations cannot be rearranged. Glancing into the jungle, you can see elephants holding two different types of operators: add (+) and multiply (*).
|
||||||
|
|
||||||
|
Only three of the above equations can be made true by inserting operators:
|
||||||
|
|
||||||
|
190: 10 19 has only one position that accepts an operator: between 10 and 19. Choosing + would give 29, but choosing * would give the test value (10 * 19 = 190).
|
||||||
|
3267: 81 40 27 has two positions for operators. Of the four possible configurations of the operators, two cause the right side to match the test value: 81 + 40 * 27 and 81 * 40 + 27 both equal 3267 (when evaluated left-to-right)!
|
||||||
|
292: 11 6 16 20 can be solved in exactly one way: 11 + 6 * 16 + 20.
|
||||||
|
|
||||||
|
The engineers just need the total calibration result, which is the sum of the test values from just the equations that could possibly be true. In the above example, the sum of the test values for the three equations listed above is 3749.
|
||||||
|
|
||||||
|
Determine which equations could possibly be true. What is their total calibration result?
|
||||||
|
|
||||||
|
Your puzzle answer was 4998764814652.
|
||||||
|
--- Part Two ---
|
||||||
|
|
||||||
|
The engineers seem concerned; the total calibration result you gave them is nowhere close to being within safety tolerances. Just then, you spot your mistake: some well-hidden elephants are holding a third type of operator.
|
||||||
|
|
||||||
|
The concatenation operator (||) combines the digits from its left and right inputs into a single number. For example, 12 || 345 would become 12345. All operators are still evaluated left-to-right.
|
||||||
|
|
||||||
|
Now, apart from the three equations that could be made true using only addition and multiplication, the above example has three more equations that can be made true by inserting operators:
|
||||||
|
|
||||||
|
156: 15 6 can be made true through a single concatenation: 15 || 6 = 156.
|
||||||
|
7290: 6 8 6 15 can be made true using 6 * 8 || 6 * 15.
|
||||||
|
192: 17 8 14 can be made true using 17 || 8 + 14.
|
||||||
|
|
||||||
|
Adding up all six test values (the three that could be made before using only + and * plus the new three that can now be made by also using ||) produces the new total calibration result of 11387.
|
||||||
|
|
||||||
|
Using your new knowledge of elephant hiding spots, determine which equations could possibly be true. What is their total calibration result?
|
||||||
|
|
||||||
|
Your puzzle answer was 37598910447546.
|
||||||
|
|
||||||
|
Both parts of this puzzle are complete! They provide two gold stars: **
|
||||||
Executable
+31
@@ -0,0 +1,31 @@
|
|||||||
|
#!/usr/bin/env python3
|
||||||
|
|
||||||
|
import sys
|
||||||
|
|
||||||
|
|
||||||
|
def maths(nums, sec=False):
|
||||||
|
if len(nums) == 2:
|
||||||
|
yield nums[0] * nums[1]
|
||||||
|
yield nums[0] + nums[1]
|
||||||
|
if sec: yield int(str(nums[0]) + str(nums[1]))
|
||||||
|
else:
|
||||||
|
yield from maths([nums[0] * nums[1]] + nums[2:], sec)
|
||||||
|
yield from maths([nums[0] + nums[1]] + nums[2:], sec)
|
||||||
|
if sec: yield from maths([int(str(nums[0]) + str(nums[1]))] + nums[2:], sec)
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == '__main__':
|
||||||
|
lines = [line.strip('\n') for line in open(sys.argv[1])]
|
||||||
|
res1, res2 = 0, 0
|
||||||
|
for line in lines:
|
||||||
|
test, nums = line.split(': ')
|
||||||
|
nums = [int(n) for n in nums.split(' ')]
|
||||||
|
if int(test) in maths(nums): res1 += int(test)
|
||||||
|
if int(test) in maths(nums, True): res2 += int(test)
|
||||||
|
|
||||||
|
# challenge 1
|
||||||
|
print(f"challenge 1:\n{res1}\n")
|
||||||
|
|
||||||
|
# challenge 2
|
||||||
|
print(f"challenge 2:\n{res2}")
|
||||||
|
|
||||||
@@ -0,0 +1,9 @@
|
|||||||
|
190: 10 19
|
||||||
|
3267: 81 40 27
|
||||||
|
83: 17 5
|
||||||
|
156: 15 6
|
||||||
|
7290: 6 8 6 15
|
||||||
|
161011: 16 10 13
|
||||||
|
192: 17 8 14
|
||||||
|
21037: 9 7 18 13
|
||||||
|
292: 11 6 16 20
|
||||||
@@ -0,0 +1,850 @@
|
|||||||
|
426048: 425 608 69 88 1 282
|
||||||
|
1234: 8 53 21 2 611 1 538
|
||||||
|
3493064: 42 823 101 932 966
|
||||||
|
7851123: 81 52 937 7 9
|
||||||
|
109137611815: 9 4 9 1 9 5 13 97 18 1 4
|
||||||
|
143516213: 2 906 6 5 12 22 578 3 3
|
||||||
|
629453: 7 492 3 28 6 6 9 104
|
||||||
|
5423661: 5 2 8 8 91 4 6 7 3 40 8 6
|
||||||
|
18682395: 93 37 3 1 431 765 2
|
||||||
|
556488358421: 794 98 33 6 917 7
|
||||||
|
14604120: 89 13 65 703 17
|
||||||
|
51347: 24 9 908 8 9 3 6 36 41 6
|
||||||
|
1200264: 1 324 69 614 9 34 52
|
||||||
|
84467: 99 1 694 50 64
|
||||||
|
832680: 3 58 68 45 3
|
||||||
|
13238: 4 3 58 9 652
|
||||||
|
1505251: 3 24 97 1 29 669 5
|
||||||
|
28869324: 99 749 1 46 74
|
||||||
|
125890: 6 894 7 6 87 9 2
|
||||||
|
265251: 8 9 8 87 251
|
||||||
|
928664914: 4 7 6 8 664 8 2 9 1
|
||||||
|
103228624: 7 2 73 7 94 91 95 26
|
||||||
|
5765376: 442 85 4 41 8 742 8 4 8
|
||||||
|
101551004: 2 78 991 38 75 8 4
|
||||||
|
11531: 4 42 589 122 1
|
||||||
|
230639: 88 6 3 722 3 9 1
|
||||||
|
533796498: 66 80 3 2 101 4 5 2 501
|
||||||
|
8494148: 32 35 79 2 8 3 30 2 8
|
||||||
|
222246692: 23 41 13 94 970 689
|
||||||
|
9841934: 2 998 419 815 5 809
|
||||||
|
2186556: 51 9 9 660 4 2 9 8 69 7 3
|
||||||
|
11207789126: 1 9 425 1 68 5 9 2 293 9
|
||||||
|
33355203: 7 199 5 84 119 57
|
||||||
|
60424: 989 61 79 8 8
|
||||||
|
651253: 3 4 904 8 2 8 72 87 493
|
||||||
|
2099106644: 277 842 9 624 22
|
||||||
|
29145931: 3 6 15 3 7 9 70 6 1 1 6 5
|
||||||
|
63140: 8 79 61 77 82
|
||||||
|
720845730: 9 3 43 1 53 45 650 81
|
||||||
|
3030: 45 57 85 280 5 94
|
||||||
|
64316066: 7 6 7 422 14 953 37 4 2
|
||||||
|
31898201: 77 74 3 622 3 797
|
||||||
|
99024982725: 48 77 1 3 47 8 1 30 846
|
||||||
|
3086415: 5 139 1 6 1 8 2 24 2 3 6 9
|
||||||
|
1604915280: 2 7 652 74 321 7 18 4
|
||||||
|
1040: 316 22 7 3 4
|
||||||
|
792201: 748 7 22 488 99 493 4
|
||||||
|
1449102: 23 525 6 4 4 5 82
|
||||||
|
6672: 8 1 563 7 9 593 863 1 4
|
||||||
|
641235: 18 5 76 3 87 8 8 93 15
|
||||||
|
836: 399 2 31 7
|
||||||
|
2589888404878: 4 8 94 21 41 40 4 8 77
|
||||||
|
79158297957: 221 570 58 29 795 6
|
||||||
|
94656: 64 547 254 223 87
|
||||||
|
158670130: 2 9 3 4 32 2 645 2 6 5
|
||||||
|
1172900: 5 624 9 5 3 69 38
|
||||||
|
18570144924: 6 3 570 144 926
|
||||||
|
11809188: 63 26 801 77 7 9 90
|
||||||
|
17569711116: 9 9 2 2 156 793 3 109 4
|
||||||
|
72864: 8 2 3 1 5 3 99 8 4 72
|
||||||
|
30090677155977: 38 89 11 5 217 41 9 79
|
||||||
|
54186: 5 418 6
|
||||||
|
536456640: 1 53 273 27 3 1 35 52
|
||||||
|
1324: 568 47 2 45 5 2 40
|
||||||
|
255466537: 98 49 133 4 82 56
|
||||||
|
108593: 440 931 5 635 54
|
||||||
|
274562: 18 4 88 12 3
|
||||||
|
2310: 168 125 6 551 1
|
||||||
|
158226796: 4 2 1 71 56 18 67
|
||||||
|
227860: 632 36 2 68 5
|
||||||
|
254276307: 211 927 13 62 57 90
|
||||||
|
969151: 96 75 1 79 6 608 1 856
|
||||||
|
1381920960: 329 7 7 6 4 3 5 51 5 4 3 8
|
||||||
|
57750433: 466 22 1 43 6 1 131
|
||||||
|
2039463: 8 532 4 2 2 4 3 59 245 1
|
||||||
|
924: 4 2 42 57 2 23
|
||||||
|
984: 9 5 1 3 4
|
||||||
|
3490: 32 9 8 5 7 7 18
|
||||||
|
764789: 47 91 3 83 341 2 942 4
|
||||||
|
8761312983: 1 5 1 645 2 56 981
|
||||||
|
49375245: 46 16 94 4 67
|
||||||
|
1371731088: 258 80 58 98 119 1 6
|
||||||
|
1691074: 3 653 36 8 2 4 61 153
|
||||||
|
237984: 3 60 942 4 84 514
|
||||||
|
8487: 3 836 6 3 7
|
||||||
|
1302665: 8 327 850 4 8 848 637
|
||||||
|
338504789434: 9 7 96 4 27 58 1 7 7 431
|
||||||
|
4375: 5 320 13 87 62
|
||||||
|
39114592: 24 74 32 3 53 53 8 58 9
|
||||||
|
55211: 1 2 5 261 3 6 6 3 873 6 5
|
||||||
|
3930310: 6 727 89 883 77
|
||||||
|
105416741: 8 6 2 7 830 2 7 81 29 72
|
||||||
|
1864306: 752 37 67 22 76
|
||||||
|
10308245: 460 6 22 56 243
|
||||||
|
8724688: 61 143 1 688
|
||||||
|
802716549428: 81 991 6 5 494 30
|
||||||
|
4542460: 5 11 52 818 924
|
||||||
|
3187936924: 8 9 54 879 356
|
||||||
|
63545: 1 459 7 429 71
|
||||||
|
117919: 9 76 202 28 91 1
|
||||||
|
3743973: 74 82 5 41 5 269
|
||||||
|
861952: 57 558 68 7 2
|
||||||
|
3334911: 668 16 39 8 255
|
||||||
|
66798536: 27 9 931 6 92 65 3 3
|
||||||
|
8653262: 4 82 5 326 2
|
||||||
|
658062508: 5 97 94 2 5 6 9 3 55 6 7
|
||||||
|
22128516: 111 222 898
|
||||||
|
1200278: 40 5 6 269 1 8
|
||||||
|
8492254: 465 206 452 28 74 6
|
||||||
|
3976640: 97 49 2 8 340
|
||||||
|
6598260668: 7 20 3 459 9 9 9 66 8
|
||||||
|
349711968: 699 417 1 4 1 9 50 4 4 8
|
||||||
|
4360998090: 46 474 98 40 5 9 586 2
|
||||||
|
38968452095: 4 8 59 12 7 172 6 592
|
||||||
|
7435934408: 521 8 34 8 32 2 2 2 7 79
|
||||||
|
3601746: 772 4 711 1 61 7
|
||||||
|
1037835487: 2 33 58 143 836 7
|
||||||
|
5238563720270: 5 238 5 5 4 9 720 27 2 5
|
||||||
|
73195290: 1 5 3 442 4 46 2 7 74 9
|
||||||
|
39219: 7 612 3 676 2 9 5 58 3 3
|
||||||
|
171333389699: 63 45 681 1 9 868 3 96
|
||||||
|
5938: 5 554 315 59 8
|
||||||
|
26921: 93 28 3 36 843
|
||||||
|
462492: 370 38 563 73 443
|
||||||
|
372492502: 9 1 521 5 407
|
||||||
|
252499564: 6 1 676 72 5 91 736 44
|
||||||
|
9089304: 8 405 786 1 28
|
||||||
|
22290929687: 18 8 255 512 849
|
||||||
|
496884960: 62 9 691 5 3 52 2 418 1
|
||||||
|
52469758: 7 21 96 244 80
|
||||||
|
1915494: 72 667 81 32 1 5
|
||||||
|
9240: 10 4 9 8 48 21
|
||||||
|
1229174: 39 965 1 6 16 2 676 73
|
||||||
|
63520233: 629 6 20 20 2 31
|
||||||
|
40053664: 520 36 298 72 207
|
||||||
|
31513519: 5 63 13 52 1
|
||||||
|
73259497328: 105 380 5 4 81 92 2 82
|
||||||
|
380149: 5 2 9 59 84 52
|
||||||
|
3532752: 75 6 40 8 7 9 1 4 7 7 48
|
||||||
|
735865836: 2 63 65 3 220 42 58
|
||||||
|
1036899: 1 972 63 89 6
|
||||||
|
119723575: 885 89 2 8 95 775
|
||||||
|
3394585738: 1 14 571 49 3 218 264
|
||||||
|
43184: 9 47 91 47 18 728
|
||||||
|
49179361: 3 2 358 1 27 7 8 5 1 35 1
|
||||||
|
60589: 51 9 55 8 31
|
||||||
|
3853: 376 9 454 6 9
|
||||||
|
97218628: 727 238 7 1 5 3 562 67
|
||||||
|
573: 3 18 8 47 306
|
||||||
|
2673281: 37 17 850 5 31
|
||||||
|
2519097323: 4 4 5 97 433 8 9 95 142
|
||||||
|
6282472: 46 1 691 942 3 472
|
||||||
|
1997842: 25 474 46 4 4
|
||||||
|
21463827009: 6 23 2 74 68 7 1 540 5 6
|
||||||
|
52876: 55 96 7 3 3
|
||||||
|
5458: 97 56 11 8 8
|
||||||
|
306: 4 93 5 1 3
|
||||||
|
2246440404358: 35 2 97 944 68 53 358
|
||||||
|
2156122429948: 627 6 8 625 3 796 3 1 9
|
||||||
|
705471450: 257 448 47 1 450
|
||||||
|
12086441200083: 60 4 322 5 3 8 5 5 20 86
|
||||||
|
95185977895: 98 5 36 209 966
|
||||||
|
66643: 1 3 7 1 6 43
|
||||||
|
243331: 233 9 57 6 756
|
||||||
|
12661228256: 590 33 4 6 7 5 4 774 8 4
|
||||||
|
1100: 141 1 952 1 5
|
||||||
|
10510801045: 69 2 2 9 86 5 9 1 76 28 3
|
||||||
|
9888464534: 77 6 246 98 7 74 967 5
|
||||||
|
361718875114: 2 97 4 725 12 1 5 186 6
|
||||||
|
106512316: 40 7 2 8 449 818 536
|
||||||
|
7588010: 64 694 772 1 291
|
||||||
|
991: 23 4 7 1
|
||||||
|
417: 6 45 7 75 65
|
||||||
|
15920852: 55 93 8 8 3 3 5 8 5 7 8 9
|
||||||
|
699: 4 8 55 43 589
|
||||||
|
35097279829: 4 6 2 2 7 9 58 9 5 7 982 9
|
||||||
|
108684: 5 6 2 62 283 1 6 4 9 2 1 6
|
||||||
|
35276: 28 575 4 57 677
|
||||||
|
8895075: 5 175 18 8 8 171
|
||||||
|
40618: 7 219 38 7 558 54 46
|
||||||
|
55909321: 4 4 4 6 3 2 41 705 8 3
|
||||||
|
176390408: 496 6 61 6 8 3 64 5 2 5
|
||||||
|
407788355: 40 778 7 603 3 747
|
||||||
|
102608197: 81 5 348 5 7 26 1 4 237
|
||||||
|
8020532: 9 9 9 1 969 8 4 5 8 884
|
||||||
|
2581035: 66 5 388 83 7
|
||||||
|
802185122: 561 993 4 360
|
||||||
|
3277848705: 9 6 53 9 95 6 7 11 7 6
|
||||||
|
134464957445: 1 493 1 9 495 74 44
|
||||||
|
229748861160: 67 46 3 205 234 518
|
||||||
|
2940111322: 37 12 917 589 22
|
||||||
|
18670960793: 9 6 5 3 9 8 261 3 1 46 4
|
||||||
|
1142150721: 5 16 55 5 212 5 5 2 18 3
|
||||||
|
22196443505: 815 786 45 77 4 1
|
||||||
|
573211: 2 377 7 24 18 9
|
||||||
|
4843: 3 6 9 44 4 82 8
|
||||||
|
302249666485: 3 194 57 134 54 717
|
||||||
|
662063: 5 3 2 1 624
|
||||||
|
132572: 6 8 36 82 57 2
|
||||||
|
3864582: 2 3 24 7 582
|
||||||
|
1690: 102 691 4 128 765
|
||||||
|
1209: 19 8 7 7 96
|
||||||
|
126089845: 7 5 8 5 98 736 3 7 9 1 7 6
|
||||||
|
46487320: 7 1 664 7 249 71
|
||||||
|
39486: 46 405 1 87 160
|
||||||
|
2736552: 3 28 8 83 7 28 537
|
||||||
|
2172301065: 63 91 618 3 55
|
||||||
|
523522: 93 1 67 362 522
|
||||||
|
986428764: 985 978 446 4 722 43
|
||||||
|
12315880: 9 29 96 8 470
|
||||||
|
3984391: 39 843 92
|
||||||
|
5689708: 5 4 5 7 7 576 6 157 6 19
|
||||||
|
64505661: 64 1 505 397 262
|
||||||
|
227515138: 227 5 1 513 5
|
||||||
|
215361445: 3 83 63 820 93 86 2 46
|
||||||
|
34003007060: 651 993 2 526 60
|
||||||
|
16267: 920 7 1 2 834 6 58 69
|
||||||
|
267374268991: 6 89 73 9 8 826 8 71 59
|
||||||
|
112166154: 10 2 93 5 66 155
|
||||||
|
135: 9 1 5 42 43
|
||||||
|
11248: 70 1 423 8
|
||||||
|
2911500: 7 1 379 10 647
|
||||||
|
65618: 984 65 686 971 1
|
||||||
|
1423917: 23 24 26 9 18 1 3 99
|
||||||
|
1436633024645: 2 84 134 9 2 9 9 8 79 8 2
|
||||||
|
280912: 935 3 3 62 52
|
||||||
|
102593598: 442 2 326 89 3 4 1 7 75
|
||||||
|
38611: 3 9 503 9 6 7
|
||||||
|
36060: 5 8 1 16 4 601
|
||||||
|
28487: 73 691 6 37
|
||||||
|
721930973: 72 18 830 479 70
|
||||||
|
36324778803: 800 100 3 2 26 454
|
||||||
|
70492231245: 571 990 211 5 591
|
||||||
|
801607886: 2 79 33 888 80 7 886
|
||||||
|
15442400: 28 69 999 3 72 157 8
|
||||||
|
354682: 8 40 1 3 5 5 4 8 3 18 9 1
|
||||||
|
11718044: 9 180 31 20 43
|
||||||
|
2292878: 7 56 82 229 425
|
||||||
|
8686510: 37 390 2 64 1 9 291 4 3
|
||||||
|
47239: 2 77 52 4 9 9
|
||||||
|
23755253: 2 3 1 14 707 19 10 22 1
|
||||||
|
20814560: 68 8 44 536 1 3 2 4 2 2
|
||||||
|
431195040: 3 579 696 74 1
|
||||||
|
29632103424: 32 66 6 7 6 62 898
|
||||||
|
3417: 8 81 2 28 869
|
||||||
|
10513496180: 211 3 56 7 2 6 7 135 47
|
||||||
|
4575903869: 45 6 2 3 9 1 903 8 6 9
|
||||||
|
481562: 2 15 946 50 5 9 3
|
||||||
|
23919714428: 27 8 335 3 2 6 39 4 2 6
|
||||||
|
7227024325: 393 870 603 211 22
|
||||||
|
113705615: 16 7 76 94 561 4
|
||||||
|
36627744: 31 879 122 467 76
|
||||||
|
9682305217682: 3 1 3 8 5 9 739 1 1 835 1
|
||||||
|
1883: 19 215 8 1 14
|
||||||
|
310865765704: 4 5 93 47 8 3 6 8 5 703 4
|
||||||
|
65640: 2 3 9 5 671 1 89 9 3 9 3
|
||||||
|
34615688: 8 581 1 9 1 6 5 699 4 90
|
||||||
|
2874960: 136 2 372 936 55
|
||||||
|
125692: 11 4 89 28 2
|
||||||
|
21607840833966: 9 9 950 1 75 96 871 39
|
||||||
|
23335608: 45 75 54 7 51
|
||||||
|
6234: 20 18 819 73 6 654
|
||||||
|
250181: 92 8 4 338 50 7 4
|
||||||
|
38566354: 9 7 120 611 37
|
||||||
|
62704469: 2 8 9 71 5 66 44 5 6 10
|
||||||
|
385850: 5 8 8 7 2 8 63 6 3 678 3 2
|
||||||
|
115032285: 8 150 96 7 913 15 21
|
||||||
|
24871: 8 3 270 600 1
|
||||||
|
77113465: 7 555 723 1 6 7 465
|
||||||
|
6231: 5 8 5 956 5
|
||||||
|
388: 4 291 1 18 4 72
|
||||||
|
63870451184: 1 1 3 2 911 508 8 293
|
||||||
|
961: 5 9 1 8 4 9 87 5 10 5 26 1
|
||||||
|
651002: 2 861 685 2 84 5 2
|
||||||
|
2999: 9 328 41 3 3
|
||||||
|
697540864632: 38 79 4 2 726 8 4 316 2
|
||||||
|
13399549: 3 1 11 73 8 59
|
||||||
|
3562090: 866 1 6 83 674
|
||||||
|
7828907: 74 2 706 87 2 10
|
||||||
|
2386854: 1 2 6 68 78 5 2 4 3 5 5 4
|
||||||
|
81760686: 706 5 7 1 6 6 2 7 2 19 87
|
||||||
|
214797: 8 9 3 421 8 1 3 4 1 9 42 9
|
||||||
|
54427336: 30 712 8 173 53 79 73
|
||||||
|
1053341344949: 65 569 3 712 238 4
|
||||||
|
1448736525566: 160 97 9 6 4 6 8 57 563
|
||||||
|
2123419597390: 606 83 8 9 9 6 6 9 7 393
|
||||||
|
123978240: 336 8 4 9 4 6 8 7 7 2 8 60
|
||||||
|
35148535: 2 7 4 48 565 8 4 2 8 9 5 2
|
||||||
|
204124802990: 9 630 13 340 36 7 583
|
||||||
|
539960: 44 66 196 25 960
|
||||||
|
37179596269: 5 9 63 806 153 6 267
|
||||||
|
46944: 256 517 694 4 8
|
||||||
|
164447918604: 3 3 5 68 2 239 59 3 20 1
|
||||||
|
606512067: 202 5 85 25 2 1 7 4 6
|
||||||
|
582: 6 82 4 78 1 8
|
||||||
|
358489335615: 4 8 36 290 49 3 356 12
|
||||||
|
37968920318: 619 787 27 6 9 203 1 8
|
||||||
|
45917891663: 6 97 6 743 4 91 665
|
||||||
|
56974260612: 681 192 73 598 894
|
||||||
|
1433362936: 23 81 301 2 938
|
||||||
|
13387282062: 71 5 209 7 382 7
|
||||||
|
1440477: 3 9 37 3 66 4 2 667 58 9
|
||||||
|
54297: 87 359 12 77 5 2 7
|
||||||
|
45930136: 75 180 3 3 8 378 104 8
|
||||||
|
15415060: 60 9 86 5 795 94 115
|
||||||
|
152568: 9 1 61 5 68
|
||||||
|
27460988: 2 74 60 488 501
|
||||||
|
1057969: 284 4 4 93
|
||||||
|
2426020: 856 7 13 202 2
|
||||||
|
49096: 6 5 24 2 68
|
||||||
|
9219: 345 9 3 85 8 23 15 5
|
||||||
|
502450092967: 1 142 17 6 6 1 85 589
|
||||||
|
252469069: 478 8 7 1 57 8 66 59
|
||||||
|
24272: 1 8 8 7 4 752 9 6 1
|
||||||
|
156972819: 21 9 858 968 3
|
||||||
|
4435814457: 77 9 8 8 6 1 14 460
|
||||||
|
7029: 57 3 5 6 971
|
||||||
|
7053569543: 70 52 914 2 653 531 9
|
||||||
|
19649102: 9 7 9 5 22 545 4 839 94
|
||||||
|
267089242: 3 5 3 83 8 2 342 7 29 5 7
|
||||||
|
93765: 40 945 53 957 47
|
||||||
|
815253659: 48 97 581 700 8 52 7
|
||||||
|
14381: 70 1 91 2 1
|
||||||
|
6727770: 8 5 1 2 7 47 96 2 4 2 9 38
|
||||||
|
488959: 12 7 770 5 7
|
||||||
|
444850: 57 3 7 68 6 350
|
||||||
|
359101435530: 819 36 14 3 143 553 2
|
||||||
|
255298640: 5 7 2 336 9 6 25 6 226 8
|
||||||
|
627971804: 91 69 71 723 81
|
||||||
|
376876294: 603 625 5 15 779
|
||||||
|
4870224: 8 32 3 2 68 8 93
|
||||||
|
2921378615: 7 3 1 1 7 7 272 2 3 953 5
|
||||||
|
25762: 22 3 475 1 288
|
||||||
|
9334: 8 9 6 1 5 125 42 364
|
||||||
|
61711944: 453 61 26 6 4 8 3
|
||||||
|
31159097: 62 1 5 953 605 32 97
|
||||||
|
1486721291: 178 87 68 96 9
|
||||||
|
164195070864: 93 879 40 795 8 4 22
|
||||||
|
209: 2 83 46
|
||||||
|
448419: 16 657 642 341 4
|
||||||
|
2213729487: 7 9 9 7 1 33 6 6 7 457 3 4
|
||||||
|
826: 83 91 642 8 2
|
||||||
|
69845916113: 4 6 87 39 6 1 6 62 78 77
|
||||||
|
420247390: 7 8 70 5 9 6 6 33 1 9 6 53
|
||||||
|
468391418: 1 5 4 363 885 7 3 9 6 3 8
|
||||||
|
730151: 729 320 7 816 9
|
||||||
|
6121517413: 707 9 6 6 4 4 6 43 6 9 3 4
|
||||||
|
1331520: 8 304 44 288 95
|
||||||
|
2651662: 24 755 9 34 1
|
||||||
|
55557168: 45 8 7 13 6 49 716 8
|
||||||
|
925030462: 453 992 2 8 8 64 4 2 3
|
||||||
|
22929993: 6 1 9 403 8 6 7 9 677 9 8
|
||||||
|
136079: 10 7 80 8 1
|
||||||
|
4018560: 24 2 115 4 182
|
||||||
|
155443251648: 1 89 7 9 6 2 2 819 48
|
||||||
|
47311914088: 1 739 4 9 498 7 71 7 4
|
||||||
|
12959675904: 7 558 529 98 1 84 64
|
||||||
|
117075505: 4 651 2 693 2 63 6 89 7
|
||||||
|
8663990338: 3 5 36 5 2 989 3 23 337
|
||||||
|
38598654357: 8 78 6 7 3 2 5 1 9 1 343
|
||||||
|
1066: 3 68 3 447 7
|
||||||
|
9763884: 4 8 11 4 806
|
||||||
|
2649: 710 3 76 94 1 3
|
||||||
|
97022: 6 5 4 84 77 2
|
||||||
|
4436743: 2 4 20 36 7 37 6
|
||||||
|
10887: 8 1 931 930 26
|
||||||
|
41289: 5 160 2 2 4
|
||||||
|
64001920: 561 4 3 61 38
|
||||||
|
4877046: 961 40 84 3 58
|
||||||
|
94551: 942 3 5 3 1
|
||||||
|
2348968: 234 86 3 6 8
|
||||||
|
4829697944: 5 51 4 9 7 8 687 122 8
|
||||||
|
1275687: 531 4 6 262 9 9
|
||||||
|
866: 5 3 7 3 8
|
||||||
|
62826: 1 6 1 1 6 2 634 84 491 7
|
||||||
|
234421278: 586 4 2 12 81
|
||||||
|
987: 5 81 3 31 864
|
||||||
|
1512712546: 9 8 7 63 7 125 47
|
||||||
|
81507: 1 4 800 69 38
|
||||||
|
6885843415: 743 5 546 570 926
|
||||||
|
28383880: 20 47 9 76 1 89 469
|
||||||
|
8399: 73 86 242 8 877 994
|
||||||
|
6734289681: 841 681 9 889
|
||||||
|
2487534047373: 259 5 3 948 9 974 101
|
||||||
|
11402873: 17 96 609 414 17 553
|
||||||
|
18904325600: 55 21 735 4 325 600
|
||||||
|
1335462451: 16 5 9 9 14 8 3 3 70 955
|
||||||
|
70253: 2 115 30 9 2 38
|
||||||
|
17112: 9 5 4 7 9 66 1 6 5 1 9 2
|
||||||
|
240212907: 4 9 83 31 381 71 8 21 4
|
||||||
|
1137902: 24 89 78 71 31
|
||||||
|
17115001: 8 9 5 100 978 2
|
||||||
|
8596391: 85 8 7 3 87 9 24 3 5 5 22
|
||||||
|
536020: 80 67 17
|
||||||
|
1999835: 8 241 881 8 790
|
||||||
|
91503776: 1 6 419 4 5 7 7 2 6 8 91 7
|
||||||
|
141043433: 470 5 59 6 4 796 1 2 3
|
||||||
|
662831: 69 96 6 5 31 9
|
||||||
|
2527482: 5 670 26 6 8 4 3 6 6 258
|
||||||
|
663617436: 3 8 420 90 66 91 7
|
||||||
|
5117396: 9 43 45 5 32 34 74
|
||||||
|
286833458: 299 976 59 956
|
||||||
|
1810904: 402 12 2 15 73 351 3
|
||||||
|
14755500281: 339 44 1 161 3 3 2 1 3 2
|
||||||
|
891738: 8 2 2 43 1 6 4 93 2 963
|
||||||
|
1431924: 1 32 3 124 9 92 4
|
||||||
|
18526: 572 3 33 7 71 27 4
|
||||||
|
204101449: 650 314 9 5 50
|
||||||
|
19637: 54 6 5 57 55
|
||||||
|
46435032: 4 5 706 87 84
|
||||||
|
3901884025: 21 5 80 167 377 335
|
||||||
|
1357110633: 798 3 2 85 633
|
||||||
|
368814453: 93 509 63 8 612
|
||||||
|
16783688: 4 9 9 417 4 972 5 31 9
|
||||||
|
12778007: 75 949 14 552 167
|
||||||
|
3103890: 775 4 3 89 3
|
||||||
|
746384: 52 14 91 74 5 8 305 9 8
|
||||||
|
1324077: 1 132 24 2 1 6 674 967
|
||||||
|
6907431: 203 9 3 7 2 6 3 6 30 4 3 3
|
||||||
|
291241150: 142 5 2 5 909 5 500 86
|
||||||
|
10416: 35 4 9 217
|
||||||
|
222786114772: 428 3 36 98 836 1 52
|
||||||
|
30956235: 5 263 130 3 193 37
|
||||||
|
1807890624: 973 24 27 1 688
|
||||||
|
70133160056: 822 711 9 1 4 2 6 5 5 5 7
|
||||||
|
882460946: 1 8 8 6 3 1 3 2 5 943 2 3
|
||||||
|
2371851: 8 27 50 5 890
|
||||||
|
40024680321: 1 8 5 7 65 5 4 38 941 3 7
|
||||||
|
487213: 29 9 661 697 9
|
||||||
|
740743860807: 77 75 6 2 46 134 812
|
||||||
|
17850: 20 9 9 26 83 5
|
||||||
|
83290948: 5 91 8 75 2 927
|
||||||
|
586005: 584 894 66 816 228
|
||||||
|
483120417: 3 3 72 4 50 99 4 17
|
||||||
|
21612195: 117 9 6 9 6 1 3 379 5 6 9
|
||||||
|
1146285425: 70 5 863 1 945 427
|
||||||
|
311680: 8 8 5 4 81 3 621 3 4 1 6 5
|
||||||
|
81: 2 5 2 4 1
|
||||||
|
1692432: 6 80 5 764 8 146
|
||||||
|
982802: 73 73 2 8 4 3 8 5 3 5 7 2
|
||||||
|
25409164560: 1 6 9 1 188 7 2 5 7 9 12 5
|
||||||
|
366260: 318 47 47 1 78 7
|
||||||
|
168240337: 5 944 11 6 9 9 4 3 5 2 67
|
||||||
|
156807: 47 4 8 456 80 7
|
||||||
|
14995745: 6 714 25 35 870
|
||||||
|
24780095: 8 15 5 5 4 7 67 4 3 7 11
|
||||||
|
104125: 557 482 2 22 2
|
||||||
|
1844501: 41 2 9 357 7 202 32 5
|
||||||
|
6275963892: 1 482 98 9 9 699 1 12 1
|
||||||
|
3890574408: 176 78 786 6 28
|
||||||
|
47467: 293 9 3 6 1
|
||||||
|
926285: 9 2 532 96 5
|
||||||
|
2209: 7 1 8 94 20 9
|
||||||
|
219763712: 294 7 62 184 8 8
|
||||||
|
1754288721: 344 99 440 155 814 9
|
||||||
|
531930: 49 85 694 65 6 900 85
|
||||||
|
1005239880: 1 733 9 94 6 997 2 4 60
|
||||||
|
462: 33 9 26 131 8
|
||||||
|
6132669: 9 52 546 4 6
|
||||||
|
14541: 30 6 1 8 8
|
||||||
|
49132039: 57 7 6 4 6 8 98 5 2 5 2 42
|
||||||
|
10597759252: 40 7 3 622 8 10 9 7 7 6 9
|
||||||
|
750879481848: 55 65 6 1 6 5 8 7 3 31 9 5
|
||||||
|
301540320: 46 510 83 819 8 795
|
||||||
|
25711201: 3 7 337 9 296 2 2 60 5 7
|
||||||
|
3131219615335: 6 1 51 20 21 9 615 3 35
|
||||||
|
190931: 6 6 9 7 836 2 1 7 6 1 552
|
||||||
|
39873482: 1 61 950 90 687
|
||||||
|
136495497599: 4 878 7 7 4 48 5 3 7 99 2
|
||||||
|
62: 5 9 3
|
||||||
|
4072901: 4 52 40 14 1 2 9 1 4 1 8 8
|
||||||
|
3639889: 665 7 2 540 6 46 7 1
|
||||||
|
44833: 8 910 6 472 1 8 3 672
|
||||||
|
226176: 2 65 275 30 608
|
||||||
|
100819083: 3 9 6 7 16 325 116 9 18
|
||||||
|
2124636580913: 5 382 61 9 6 580 91 1
|
||||||
|
18389: 71 5 6 4 6 2
|
||||||
|
74957687: 7 2 7 8 5 9 5 59 9 636 6
|
||||||
|
1935561104: 70 129 276 8 5 58 561
|
||||||
|
285412: 39 26 7 961 98 2
|
||||||
|
910425: 7 9 111 4 4 5 427
|
||||||
|
1868263488: 7 973 1 56 654 52
|
||||||
|
356: 9 9 7 64 4
|
||||||
|
121563: 2 3 84 6 25 566
|
||||||
|
11793880: 9 1 1 61 292 577
|
||||||
|
6433920: 50 265 4 8 4
|
||||||
|
757114712: 677 795 6 739 29 86 4
|
||||||
|
92196314: 91 427 769 314
|
||||||
|
3622: 9 5 32 3 9 8 9 20 65
|
||||||
|
748249: 41 5 3 5 3 9 1 101 4 810
|
||||||
|
57521100: 67 570 940 490 3
|
||||||
|
694140: 42 712 4 1 92
|
||||||
|
2584: 1 9 2 2 6 8 7 8 12 7 460 4
|
||||||
|
1299844: 72 4 567 8 8 47
|
||||||
|
4438062035: 7 710 541 133 8 1 996
|
||||||
|
17848382: 733 639 949 13 44
|
||||||
|
1285415254454: 377 73 415 786 82 3 2
|
||||||
|
42573460: 1 8 2 3 317 730 79 381
|
||||||
|
6487474065: 4 6 6 6 4 42 4 48 4 5 7 89
|
||||||
|
11248830: 1 570 7 7 4 3 5 7 11 6 9 6
|
||||||
|
1236900001: 24 10 720 625 57
|
||||||
|
774935037: 293 473 63 40 66
|
||||||
|
121832: 7 5 3 2 6 88 1 1 552 7 3 3
|
||||||
|
1016743: 76 37 6 658 58
|
||||||
|
2533368513: 61 4 55 636 596 21
|
||||||
|
6990058: 4 1 835 30 204
|
||||||
|
1847406607: 20 526 740 9 8
|
||||||
|
779328000: 6 373 4 2 3 8 80 9 12 5 8
|
||||||
|
96371: 3 5 88 208 156 7
|
||||||
|
5419039: 3 8 517 90 41
|
||||||
|
249830: 99 374 8 177 3 7 9 8 90
|
||||||
|
100166088: 8 9 99 5 45 733 9 264
|
||||||
|
3376144: 7 157 927 442 7 584 6
|
||||||
|
43593660: 11 9 537 99 41
|
||||||
|
411324689: 7 21 208 389 4 41 29 6
|
||||||
|
234004: 61 323 7 87 89 62
|
||||||
|
23183285: 23 18 26 6 88
|
||||||
|
97916165533: 269 91 4 165 535
|
||||||
|
1112448: 9 61 841 2 5 4 3 8 9 6 89
|
||||||
|
8963: 896 5 1
|
||||||
|
73558189852: 5 6 9 4 6 97 6 658 2 98 7
|
||||||
|
13680414: 49 47 66 90 594
|
||||||
|
24172014797: 48 336 8 5 1 479 7
|
||||||
|
9967992824: 9 41 946 706 93 28 2 4
|
||||||
|
76153297584: 47 81 66 2 975 84
|
||||||
|
541346194846: 45 1 6 73 5 2 97 4 2 2 5 2
|
||||||
|
2476666710: 2 630 15 208 17 630
|
||||||
|
60279278: 6 982 17 61 6 3 845
|
||||||
|
55027351: 4 528 9 2 88 135
|
||||||
|
929699919: 3 89 480 9 8 2 99 5 4 21
|
||||||
|
257203: 304 846 14 3 2
|
||||||
|
19954464: 4 2 199 29 8 7 2 8 6 8 12
|
||||||
|
349703121: 87 425 69 5 1 43 8 8 9
|
||||||
|
9607739480: 120 8 1 4 3 7 3 6 3 4 74 3
|
||||||
|
70229: 6 57 4 3 227
|
||||||
|
19346675608: 4 3 7 4 3 7 466 3 5 5 609
|
||||||
|
59456: 9 39 3 3 875 64
|
||||||
|
4049373107: 490 831 2 825 85 1 7
|
||||||
|
38708598: 9 8 89 40 412 1 7 18 2 5
|
||||||
|
217787072132: 186 39 5 2 3 6 9 5 355 6
|
||||||
|
1252444294: 382 309 78 42 9
|
||||||
|
7796721302: 7 796 71 6 5 300
|
||||||
|
232741316: 8 29 741 314 1
|
||||||
|
26910444: 298 907 9 879 9 15
|
||||||
|
40916974: 2 8 5 2 9 8 6 1 5 16 971
|
||||||
|
34830687: 15 387 6 668 19
|
||||||
|
49022893747: 778 140 1 17 7 4 9
|
||||||
|
240774: 4 815 4 1 5
|
||||||
|
2030: 4 95 11 46 895
|
||||||
|
141432: 8 9 395 3 5 8 7 8 3 49 7 1
|
||||||
|
466823: 1 32 544 26 71
|
||||||
|
5847912: 202 47 694 82 7
|
||||||
|
242621: 232 7 801 56 67
|
||||||
|
330876: 8 4 2 2 2 2 7 150 5 18 7
|
||||||
|
93687: 25 197 3 19 55
|
||||||
|
71444393: 1 6 5 9 7 8 5 789 8 423 9
|
||||||
|
6751035: 1 21 553 845 258 5 1
|
||||||
|
191462315465: 957 31 2 3 15 464
|
||||||
|
15511497: 55 8 2 94 73 289
|
||||||
|
494852056149: 918 7 65 77 610 4 9
|
||||||
|
116901382: 42 97 79 9 847 3 608 6
|
||||||
|
287727946: 1 643 7 8 1 2 799 5 1 7
|
||||||
|
26218340: 244 68 525 56 8 8 5 5 4
|
||||||
|
76566: 9 77 13 60 6
|
||||||
|
1830: 292 29 891 531 87
|
||||||
|
403126: 356 9 148 58 706
|
||||||
|
26406: 799 7 32 525 2 79 8
|
||||||
|
61533769122: 1 551 8 75 6 983 189
|
||||||
|
5083523328: 909 3 8 7 1 3 976 4 1 68
|
||||||
|
35952796: 7 5 952 35 39 5 51
|
||||||
|
167412767: 5 1 4 1 9 8 94 38 6 7 7 70
|
||||||
|
2195302: 85 6 308 41 46
|
||||||
|
1474198: 69 9 5 70 54
|
||||||
|
364088987: 88 8 41 8 987
|
||||||
|
78139858: 1 4 5 2 19 3 628 2 7 6 5 6
|
||||||
|
4404409: 63 832 69
|
||||||
|
78435: 7 47 2 61 5 16 7 21 5
|
||||||
|
757520426: 77 2 98 98 26
|
||||||
|
203318778: 4 281 991 7 5 62 31 8
|
||||||
|
287102009: 8 88 930 764 73 6 8 7
|
||||||
|
90227: 48 705 88 61 26
|
||||||
|
8181666: 73 8 8 166 9
|
||||||
|
4345042264: 16 1 3 8 23 5 183 8 62
|
||||||
|
1748: 74 8 5 4 2
|
||||||
|
253: 1 3 5 5 160 54
|
||||||
|
7800887: 9 4 5 7 5 99 79 15 94 7
|
||||||
|
5590: 14 42 8 5 81
|
||||||
|
37762: 87 9 48 2 9 167
|
||||||
|
333279: 2 2 58 80 363 524 1 57
|
||||||
|
171214269218: 844 322 681 3 63
|
||||||
|
118944: 5 8 7 873 93
|
||||||
|
124807260: 419 9 9 3 40 8 270 300
|
||||||
|
57067: 5 2 65 9 88 41 1
|
||||||
|
67645321537: 92 3 2 715 36 71 4 4 9 6
|
||||||
|
897: 1 7 827 62
|
||||||
|
1191701596: 94 6 393 18 83 83 3 15
|
||||||
|
1273: 3 4 7 1
|
||||||
|
144149: 5 9 32 78 68
|
||||||
|
1256472: 63 7 3 2 1 539 71 277 6
|
||||||
|
30990621: 309 83 94 668 4
|
||||||
|
38536499222: 2 510 18 1 9 95 88 780
|
||||||
|
856374: 5 802 1 492 5 7 17
|
||||||
|
130842660: 3 6 58 8 1 3 793 9 4 9
|
||||||
|
69578132: 7 21 1 5 2 47 6 99 7 1 3 3
|
||||||
|
5276748016: 8 7 53 1 208 226 93
|
||||||
|
48947804: 5 910 9 3 8 1 330 773 2
|
||||||
|
194740286300: 5 8 3 275 5 5 2 67 5 89 9
|
||||||
|
22422998: 337 7 85 37 95 905
|
||||||
|
6918244: 6 8 497 29 1
|
||||||
|
45185615913: 97 710 90 9 1 9 1 810 3
|
||||||
|
316116: 27 527 2 312 54
|
||||||
|
11292: 929 9 4 5 201 64 9 384
|
||||||
|
143302570: 4 16 808 8 117 82 888
|
||||||
|
6574936: 810 8 94 844 91
|
||||||
|
19500766: 927 48 20 7 67
|
||||||
|
5496862: 4 4 2 5 86 8 399 28 3 3 7
|
||||||
|
4081: 4 74 6 281 7
|
||||||
|
107041551: 2 57 2 900 35 9 52
|
||||||
|
365716: 8 34 43 277 3 719
|
||||||
|
233199: 34 225 11 9
|
||||||
|
75781172: 315 75 3 8 2 9 1 6 4
|
||||||
|
6441: 3 601 327 1 3 6 45
|
||||||
|
72: 7 5 6
|
||||||
|
1847: 2 645 49 191 869 90 1
|
||||||
|
689524: 27 4 504 47 44
|
||||||
|
421965206413: 87 9 6 8 4 5 206 391 25
|
||||||
|
965613600002: 4 846 6 280 7 140 690
|
||||||
|
50559280: 8 1 6 4 2 4 567 26 534 4
|
||||||
|
365496049: 9 4 32 4 8 7 6 686 7 4 2 5
|
||||||
|
64994090: 2 9 4 1 21 74 3 73 79 7
|
||||||
|
1241: 1 3 4 2 7 1 927 298
|
||||||
|
7392027906: 8 350 66 4 2 7 909
|
||||||
|
72665135998: 6 6 743 1 3 4 3 68 727 8
|
||||||
|
42527813: 6 563 5 4 3 74 13
|
||||||
|
2085967: 414 4 499 14 7
|
||||||
|
10090710861: 386 49 70 80 95 41 21
|
||||||
|
188483597: 7 582 4 8 218 54 1 877
|
||||||
|
367380998: 2 2 2 6 96 3 900 5 998
|
||||||
|
68095186: 23 615 83 8 58 665 27
|
||||||
|
6509884572: 69 3 7 3 5 447 3 29 45
|
||||||
|
24930077: 28 690 986 2 4 3 8 70
|
||||||
|
886840: 24 5 86 770 45 5 883
|
||||||
|
42180751: 55 6 7 350 535 356 90
|
||||||
|
73846429: 761 303 97 4 36
|
||||||
|
118157648: 762 70 33 91 1 9 221
|
||||||
|
31303: 316 129 114 56
|
||||||
|
2340: 1 2 1 90 13
|
||||||
|
38925682: 993 392 77 2 5
|
||||||
|
132208396: 881 37 1 90 5 8 7 3
|
||||||
|
17362906539: 165 30 832 90 653 6
|
||||||
|
513060: 806 636 6 352 86
|
||||||
|
13556739: 451 47 42 13 3
|
||||||
|
87166290: 5 85 372 295 72 4
|
||||||
|
2085930558: 856 47 3 770 559
|
||||||
|
1271377657: 9 33 460 8 7 7 8 914 6 3
|
||||||
|
92480: 40 514 24 4 40
|
||||||
|
203612568029: 9 8 9 3 4 593 8 4 4 80 3 1
|
||||||
|
997367027585: 79 95 567 99 21 6 2
|
||||||
|
14986059: 5 53 1 4 2 4 3 8 9 2 2 338
|
||||||
|
16943: 7 4 20 353
|
||||||
|
192411245217: 1 4 16 3 411 243 2 214
|
||||||
|
3267945: 932 5 35 316 8 35 993
|
||||||
|
7584118814: 7 671 470 45 7 3 34
|
||||||
|
92005506: 773 3 57 87 6 1 761 8
|
||||||
|
83148275295: 3 339 4 451 3 44 80 9 7
|
||||||
|
2758387: 393 7 7 3 88
|
||||||
|
158229124: 29 55 19 2 19 6 28 3
|
||||||
|
19731329: 2 9 1 83 7 94 6 1 2 980 9
|
||||||
|
372969: 6 731 54 84 9
|
||||||
|
44398676936: 995 485 95 8 446
|
||||||
|
29: 4 8 2 5
|
||||||
|
28812: 917 31 113 6 27
|
||||||
|
3221058: 4 4 121 4 4 5 83 41 620
|
||||||
|
5012875154: 898 6 867 8 88 75 157
|
||||||
|
619: 81 324 57 159
|
||||||
|
2000875149: 877 559 36 5 57 387 8
|
||||||
|
538511: 4 7 544 52 863
|
||||||
|
37415205: 7 45 7 9 84 9 78 4 9 991
|
||||||
|
87187684: 567 6 8 2 951 2
|
||||||
|
723726: 7 146 73 188 2 12 9 62
|
||||||
|
5611: 15 2 2 547 8
|
||||||
|
161732: 8 19 1 4 8 39 32
|
||||||
|
77322232001: 8 26 104 9 591 9 93 4 1
|
||||||
|
7664: 9 8 5 45 7 2
|
||||||
|
43978994: 462 45 951
|
||||||
|
184200: 63 29 10 5 4
|
||||||
|
24754844735: 574 385 653 66 2
|
||||||
|
38841958460: 447 488 62 14 60
|
||||||
|
512307698: 78 476 8 7 92 35 2 978
|
||||||
|
978764208: 1 83 5 78 7 56 484 4 8 4
|
||||||
|
51510: 9 1 77 9 7 32 38 7 583
|
||||||
|
519848234: 89 192 64 9 659 7 8 4 3
|
||||||
|
279759946564: 694 6 76 839 58 1 6 8 2
|
||||||
|
27642337368: 30 7 9 658 999 7 368
|
||||||
|
1714046887054: 9 4 3 88 3 699 1 7 3 976
|
||||||
|
2096866: 762 7 4 2 9 7 4 7 1 2 27 2
|
||||||
|
829347: 57 9 11 283 50 19
|
||||||
|
5188: 9 98 18 397 4
|
||||||
|
8546580: 3 931 494 63 95
|
||||||
|
2569449: 4 318 202 3 8
|
||||||
|
1008685401: 3 24 22 9 26 3 511 2 8
|
||||||
|
38907: 341 1 41 3 61 4 64
|
||||||
|
47134149: 59 5 6 423 9 55 2 6 37
|
||||||
|
156: 4 5 48 80 8
|
||||||
|
13690: 373 8 21 967 3
|
||||||
|
152680: 5 4 62 3 9 75 1 7 6 2 5 4
|
||||||
|
22638959: 203 8 12 282 4 90
|
||||||
|
667766987: 6 184 969 39 93 7 5 3 2
|
||||||
|
491050285: 9 3 9 9 9 7 6 28 270 6 8 3
|
||||||
|
123681: 9 1 5 8 4 88 91 3 4 5 14 3
|
||||||
|
2442314: 2 5 7 9 947
|
||||||
|
66996296: 6 1 9 7 48 8 1 1 8 4 4 372
|
||||||
|
527: 6 5 6 4 2
|
||||||
|
18881838: 929 53 32 45 52 21 6
|
||||||
|
41565: 44 3 73 665 8 52 2
|
||||||
|
38558: 1 5 21 68 21
|
||||||
|
6715471: 839 434 8
|
||||||
|
6389: 91 7 6 9 5 7 178 974 5 4
|
||||||
|
2117591196: 3 5 748 679 614 9 3 94
|
||||||
|
28162196: 8 7 1 32 2 196
|
||||||
|
35808181: 2 2 8 746 180
|
||||||
|
9867444479: 73 352 40 6 9 1 2 48 1 4
|
||||||
|
78674: 7 501 25 659 66
|
||||||
|
45024: 4 4 3 3 18 18 57 276 7
|
||||||
|
19756: 4 99 3 942 7
|
||||||
|
799: 34 57 708
|
||||||
|
157466: 8 2 6 8 7 678 40 9 6 69
|
||||||
|
12013722: 53 771 14 3 7
|
||||||
|
305851750: 8 736 8 8 5 6 3 34 8 7 5 1
|
||||||
|
31627: 85 8 4 85 7
|
||||||
|
120636732: 750 274 14 587 7 7
|
||||||
|
239363098: 57 7 6 69 1 1 1 8 59 5 4 6
|
||||||
|
23142: 7 7 4 3 8 579 6 6 8 8 50
|
||||||
|
330: 3 42 4 9 8 5
|
||||||
|
610059: 3 3 2 541 80 888
|
||||||
|
15743730746: 31 237 561 6 84
|
||||||
|
1289162: 5 6 57 370 11 28 8 5 2
|
||||||
|
4912012: 49 120 12
|
||||||
|
21034792439: 47 1 58 1 7 2 7 915 9 39
|
||||||
|
10550: 2 3 9 970 45 8 514 1 5
|
||||||
|
27651: 2 9 1 8 1 5 8 7 8 4 4 35
|
||||||
|
53322: 8 87 4 8 2 66 63 96 759
|
||||||
|
138446470: 26 6 47 682 4 71
|
||||||
|
1648416: 9 278 7 657 3
|
||||||
|
6538688411: 30 351 741 838 668
|
||||||
|
1344480: 7 466 85 43 7 56 424
|
||||||
|
244514648942: 468 4 7 2 5 2 1 2 37 945
|
||||||
|
241060: 8 3 5 67 8 69 6 48 4
|
||||||
|
40133289211: 659 7 87 9 7 2 9 17 4 1
|
||||||
|
435126: 783 57 518 8
|
||||||
|
17711006228220: 76 834 259 998 890
|
||||||
|
5734080: 36 1 1 288 55
|
||||||
|
8979895786: 9 2 93 110 38 8 5 21
|
||||||
|
3330: 532 23 6
|
||||||
|
10241840: 102 34 7 8 38
|
||||||
|
13305407: 2 1 4 5 8 7 259 5 2 12 5 2
|
||||||
|
1433165: 3 9 1 891 73 367 65
|
||||||
|
177433659084: 44 3 58 41 477 10 4 2
|
||||||
|
222432: 311 919 67 3 4 6 71 56
|
||||||
|
85538: 1 4 7 2 910
|
||||||
|
32399920: 9 4 9 9 9 343 93 8 3 8 70
|
||||||
|
3157308169: 1 373 938 9 169
|
||||||
|
48314570: 8 329 1 58 9 3 470 5
|
||||||
|
2157760504767: 751 9 9 76 9 2 9 7 9 2 8 3
|
||||||
|
113124347: 1 9 87 43 2 9 95 347 1
|
||||||
|
234373743: 2 9 28 89 3 4 285
|
||||||
|
65134472: 65 133 910 5 559
|
||||||
|
5111: 5 42 2 513 9 53
|
||||||
|
280608943: 45 909 7 7 7 5 5 9 4 587
|
||||||
|
4944: 40 1 9 45
|
||||||
|
177101: 80 4 186 35 2
|
||||||
|
8123256299: 643 1 251 7 58 4 9 296
|
||||||
|
2610013: 28 55 24 2 655 487 6
|
||||||
|
3473695: 10 681 6 7 17 5
|
||||||
|
102288: 44 8 693 6 8 980 4 2
|
||||||
|
792006: 80 9 71 8 1 44 73 6 82
|
||||||
|
8393424: 656 4 6 4 3 8 4 9 8 87 3 4
|
||||||
|
3357448904: 9 2 514 71 901
|
||||||
|
11955840: 5 778 1 3 2 8 3 2 4 4 16
|
||||||
|
33523655: 1 1 3 1 1 294 8 68 4 5 8 3
|
||||||
|
40658: 1 477 43 78 20
|
||||||
|
419: 5 99 4
|
||||||
|
10692: 9 8 4 4 27
|
||||||
|
2316100872: 772 5 1 6 812 6
|
||||||
|
8456347: 98 587 147 25
|
||||||
|
45388: 6 755 4 4 18 59
|
||||||
|
98449258: 90 859 57 260 7
|
||||||
|
290537744: 880 4 3 514 8 11
|
||||||
|
1920630535: 5 7 1 57 4 6 4 84 1 771
|
||||||
|
41738341141: 8 3 103 9 3 4 6 5 962
|
||||||
|
267888: 53 5 71 5 36
|
||||||
|
457162268328: 14 3 754 7 71 9 6 318
|
||||||
|
9818370: 378 26 9 30 10 3 90
|
||||||
|
136158886: 8 1 7 95 325 2 1 5 3 8 7
|
||||||
|
407: 6 42 69 8 78
|
||||||
|
1012705468: 822 4 44 7 657 811
|
||||||
|
4180406340096: 466 981 98 12 6 36 9 4
|
||||||
|
10705064: 4 424 136 5 931 181
|
||||||
|
2217819683: 7 51 62 9 9 423 96 3 5 4
|
||||||
|
7508279323: 3 250 555 272 3 6 32 2
|
||||||
|
2658216: 558 18 25 4 66
|
||||||
|
59297: 60 97 2 747 351
|
||||||
|
7495229447: 8 328 9 266 28 50
|
||||||
|
2644059830523: 57 55 2 97 574 815 8
|
||||||
|
54008124608: 94 751 10 958 57
|
||||||
|
2207268: 50 592 72 49 50 7 9
|
||||||
|
9395936945: 83 33 540 34 9 806 4
|
||||||
|
65754981: 340 41 89 53
|
||||||
|
5424: 267 8 2 69
|
||||||
|
194627: 564 43 8 613 1
|
||||||
|
75167376: 75 166 1 972 404
|
||||||
|
237336645000: 628 915 45 700 590
|
||||||
|
522553: 7 58 4 91 7 2 7 9 148 49
|
||||||
|
4897: 29 13 6 95
|
||||||
|
13670996090: 500 614 6 73 31 610
|
||||||
|
16290039939: 74 7 6 1 7 882 87 2 438
|
||||||
|
2804002896239: 85 2 41 17 5 52 774 5
|
||||||
|
86506: 910 1 29 157 73 74
|
||||||
|
21660911180: 722 2 15 911 180
|
||||||
|
6815: 6 743 72
|
||||||
|
114802992537: 6 17 215 5 39 1 5 186 2
|
||||||
|
720907: 203 61 587 39 81 8
|
||||||
|
15904808: 28 3 80 96 5 5
|
||||||
|
200829237621: 999 710 37 3 744 27
|
||||||
|
95188135587: 835 3 68 49 755 579 8
|
||||||
|
61525: 81 49 4 75 3 4 5 8 28
|
||||||
|
13221210319: 3 486 9 6 6 4 20 5 5 6 2 8
|
||||||
|
3728996709124: 945 71 9 708 62 96 6 1
|
||||||
|
39283710: 7 46 6 3 64 51 9 717
|
||||||
|
24046652: 1 8 92 61 34 2 646 46 7
|
||||||
|
178492223: 4 1 18 61 81 5 7 2 8 194
|
||||||
|
1677144138: 6 123 83 227 39
|
||||||
|
105579656: 2 3 4 7 2 96 8 6 63 6 366
|
||||||
|
78276190303: 7 94 9 131 13 41 3 7 9
|
||||||
|
110367683: 778 9 8 5 5 3 4 9 394 9
|
||||||
|
7626312605: 4 502 5 552 1 72 598 5
|
||||||
|
56319236258: 9 5 39 82 6 8 9 548 258
|
||||||
|
5406139: 642 842 45 4 6
|
||||||
|
45342: 7 29 96 267 8 1 2 50
|
||||||
|
7525096: 1 820 330 35 97
|
||||||
|
80899207: 11 236 80 9 7
|
||||||
|
1022048029: 328 76 82 5 24 7
|
||||||
|
853304431680: 313 630 752 6 603
|
||||||
|
4608388638: 31 9 958 177 93
|
||||||
|
68959734: 7 8 33 5 44 732 6 2 6 4
|
||||||
|
4653: 845 319 4
|
||||||
|
2523796352: 2 51 789 2 4 8 98
|
||||||
|
185856: 885 21 6
|
||||||
|
19948509: 72 83 24 3 910 396
|
||||||
|
1680716: 236 37 35 71 3
|
||||||
Binary file not shown.
@@ -0,0 +1,125 @@
|
|||||||
|
--- Day 8: Resonant Collinearity ---
|
||||||
|
|
||||||
|
You find yourselves on the roof of a top-secret Easter Bunny installation.
|
||||||
|
|
||||||
|
While The Historians do their thing, you take a look at the familiar huge antenna. Much to your surprise, it seems to have been reconfigured to emit a signal that makes people 0.1% more likely to buy Easter Bunny brand Imitation Mediocre Chocolate as a Christmas gift! Unthinkable!
|
||||||
|
|
||||||
|
Scanning across the city, you find that there are actually many such antennas. Each antenna is tuned to a specific frequency indicated by a single lowercase letter, uppercase letter, or digit. You create a map (your puzzle input) of these antennas. For example:
|
||||||
|
|
||||||
|
............
|
||||||
|
........0...
|
||||||
|
.....0......
|
||||||
|
.......0....
|
||||||
|
....0.......
|
||||||
|
......A.....
|
||||||
|
............
|
||||||
|
............
|
||||||
|
........A...
|
||||||
|
.........A..
|
||||||
|
............
|
||||||
|
............
|
||||||
|
|
||||||
|
The signal only applies its nefarious effect at specific antinodes based on the resonant frequencies of the antennas. In particular, an antinode occurs at any point that is perfectly in line with two antennas of the same frequency - but only when one of the antennas is twice as far away as the other. This means that for any pair of antennas with the same frequency, there are two antinodes, one on either side of them.
|
||||||
|
|
||||||
|
So, for these two antennas with frequency a, they create the two antinodes marked with #:
|
||||||
|
|
||||||
|
..........
|
||||||
|
...#......
|
||||||
|
..........
|
||||||
|
....a.....
|
||||||
|
..........
|
||||||
|
.....a....
|
||||||
|
..........
|
||||||
|
......#...
|
||||||
|
..........
|
||||||
|
..........
|
||||||
|
|
||||||
|
Adding a third antenna with the same frequency creates several more antinodes. It would ideally add four antinodes, but two are off the right side of the map, so instead it adds only two:
|
||||||
|
|
||||||
|
..........
|
||||||
|
...#......
|
||||||
|
#.........
|
||||||
|
....a.....
|
||||||
|
........a.
|
||||||
|
.....a....
|
||||||
|
..#.......
|
||||||
|
......#...
|
||||||
|
..........
|
||||||
|
..........
|
||||||
|
|
||||||
|
Antennas with different frequencies don't create antinodes; A and a count as different frequencies. However, antinodes can occur at locations that contain antennas. In this diagram, the lone antenna with frequency capital A creates no antinodes but has a lowercase-a-frequency antinode at its location:
|
||||||
|
|
||||||
|
..........
|
||||||
|
...#......
|
||||||
|
#.........
|
||||||
|
....a.....
|
||||||
|
........a.
|
||||||
|
.....a....
|
||||||
|
..#.......
|
||||||
|
......A...
|
||||||
|
..........
|
||||||
|
..........
|
||||||
|
|
||||||
|
The first example has antennas with two different frequencies, so the antinodes they create look like this, plus an antinode overlapping the topmost A-frequency antenna:
|
||||||
|
|
||||||
|
......#....#
|
||||||
|
...#....0...
|
||||||
|
....#0....#.
|
||||||
|
..#....0....
|
||||||
|
....0....#..
|
||||||
|
.#....A.....
|
||||||
|
...#........
|
||||||
|
#......#....
|
||||||
|
........A...
|
||||||
|
.........A..
|
||||||
|
..........#.
|
||||||
|
..........#.
|
||||||
|
|
||||||
|
Because the topmost A-frequency antenna overlaps with a 0-frequency antinode, there are 14 total unique locations that contain an antinode within the bounds of the map.
|
||||||
|
|
||||||
|
Calculate the impact of the signal. How many unique locations within the bounds of the map contain an antinode?
|
||||||
|
|
||||||
|
Your puzzle answer was 269.
|
||||||
|
--- Part Two ---
|
||||||
|
|
||||||
|
Watching over your shoulder as you work, one of The Historians asks if you took the effects of resonant harmonics into your calculations.
|
||||||
|
|
||||||
|
Whoops!
|
||||||
|
|
||||||
|
After updating your model, it turns out that an antinode occurs at any grid position exactly in line with at least two antennas of the same frequency, regardless of distance. This means that some of the new antinodes will occur at the position of each antenna (unless that antenna is the only one of its frequency).
|
||||||
|
|
||||||
|
So, these three T-frequency antennas now create many antinodes:
|
||||||
|
|
||||||
|
T....#....
|
||||||
|
...T......
|
||||||
|
.T....#...
|
||||||
|
.........#
|
||||||
|
..#.......
|
||||||
|
..........
|
||||||
|
...#......
|
||||||
|
..........
|
||||||
|
....#.....
|
||||||
|
..........
|
||||||
|
|
||||||
|
In fact, the three T-frequency antennas are all exactly in line with two antennas, so they are all also antinodes! This brings the total number of antinodes in the above example to 9.
|
||||||
|
|
||||||
|
The original example now has 34 antinodes, including the antinodes that appear on every antenna:
|
||||||
|
|
||||||
|
##....#....#
|
||||||
|
.#.#....0...
|
||||||
|
..#.#0....#.
|
||||||
|
..##...0....
|
||||||
|
....0....#..
|
||||||
|
.#...#A....#
|
||||||
|
...#..#.....
|
||||||
|
#....#.#....
|
||||||
|
..#.....A...
|
||||||
|
....#....A..
|
||||||
|
.#........#.
|
||||||
|
...#......##
|
||||||
|
|
||||||
|
Calculate the impact of the signal using this updated model. How many unique locations within the bounds of the map contain an antinode?
|
||||||
|
|
||||||
|
Your puzzle answer was 949.
|
||||||
|
|
||||||
|
Both parts of this puzzle are complete! They provide two gold stars: **
|
||||||
Executable
+44
@@ -0,0 +1,44 @@
|
|||||||
|
#!/usr/bin/env python3
|
||||||
|
|
||||||
|
import sys
|
||||||
|
from itertools import combinations
|
||||||
|
from copy import deepcopy
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == '__main__':
|
||||||
|
mp = [list(line.strip('\n')) for line in open(sys.argv[1])]
|
||||||
|
antinodes = deepcopy(mp)
|
||||||
|
ah = deepcopy(mp)
|
||||||
|
|
||||||
|
antennas = {}
|
||||||
|
for j, y in enumerate(mp):
|
||||||
|
for i, x in enumerate(y):
|
||||||
|
if x != '.':
|
||||||
|
if x in antennas: antennas[x].append((i,j))
|
||||||
|
else: antennas[x] = [(i,j)]
|
||||||
|
ah[j][i] = '#'
|
||||||
|
|
||||||
|
for freq, ants in antennas.items():
|
||||||
|
for a1, a2 in combinations(ants, 2):
|
||||||
|
dx, dy = a2[0] - a1[0], a2[1] - a1[1]
|
||||||
|
x1, y1 = a1[0] - dx, a1[1] - dy
|
||||||
|
x2, y2 = a2[0] + dx, a2[1] + dy
|
||||||
|
if (0 <= x1 < len(mp[0])) and (0 <= y1 < len(mp)):
|
||||||
|
antinodes[y1][x1] = '#'
|
||||||
|
if (0 <= x2 < len(mp[0])) and (0 <= y2 < len(mp)):
|
||||||
|
antinodes[y2][x2] = '#'
|
||||||
|
while (0 <= x1 < len(mp[0])) and (0 <= y1 < len(mp)):
|
||||||
|
ah[y1][x1] = '#'
|
||||||
|
x1, y1 = x1-dx, y1-dy
|
||||||
|
while (0 <= x2 < len(mp[0])) and (0 <= y2 < len(mp)):
|
||||||
|
ah[y2][x2] = '#'
|
||||||
|
x2, y2 = x2+dx, y2+dy
|
||||||
|
|
||||||
|
# challenge 1
|
||||||
|
res1 = sum([a.count('#') for a in antinodes])
|
||||||
|
print(f"challenge 1:\n{res1}\n")
|
||||||
|
|
||||||
|
# challenge 2
|
||||||
|
res2 = sum([a.count('#') for a in ah])
|
||||||
|
print(f"challenge 2:\n{res2}")
|
||||||
|
|
||||||
@@ -0,0 +1,12 @@
|
|||||||
|
............
|
||||||
|
........0...
|
||||||
|
.....0......
|
||||||
|
.......0....
|
||||||
|
....0.......
|
||||||
|
......A.....
|
||||||
|
............
|
||||||
|
............
|
||||||
|
........A...
|
||||||
|
.........A..
|
||||||
|
............
|
||||||
|
............
|
||||||
@@ -0,0 +1,50 @@
|
|||||||
|
...............................6.B..........P.....
|
||||||
|
n..............M..................................
|
||||||
|
....n.....sM7.............................6.....p.
|
||||||
|
......................Mr......................P...
|
||||||
|
.......n.......................................p.E
|
||||||
|
.......................6...................p......
|
||||||
|
r..............................C........B....P....
|
||||||
|
.....................d........6......B4....P......
|
||||||
|
.........................7....................4...
|
||||||
|
.n......................R..............4..........
|
||||||
|
.....N........S.................K.C..........4....
|
||||||
|
...........N..r.....................B....K........
|
||||||
|
..................................................
|
||||||
|
......N.......x.............7.......K.....2....E..
|
||||||
|
...................r..H........R..................
|
||||||
|
.....................s....p........C...........2..
|
||||||
|
....3.......................M.....................
|
||||||
|
........k....................H....5...............
|
||||||
|
.....x....N................d.5..y................J
|
||||||
|
m.....................d7...................J......
|
||||||
|
.......exk........................................
|
||||||
|
.......x.............5.......R....................
|
||||||
|
..........eY......................................
|
||||||
|
...S.3..............................O.E...J.......
|
||||||
|
.......8...H....k...............J.................
|
||||||
|
......S.e.........C.H.....................X.....y.
|
||||||
|
................j..........y.........2............
|
||||||
|
...........e.........k............................
|
||||||
|
......YS...3..............5..........K...XR.......
|
||||||
|
...m..............j.s..........c..................
|
||||||
|
.........................j........................
|
||||||
|
...............j..................................
|
||||||
|
.....m................................2...........
|
||||||
|
.........Y......................................b.
|
||||||
|
..................................................
|
||||||
|
.......................h...........b..............
|
||||||
|
............m......D..............d...............
|
||||||
|
........o......D..................................
|
||||||
|
...................................O..............
|
||||||
|
..................................................
|
||||||
|
......8...........................................
|
||||||
|
........D.Y..o...................1................
|
||||||
|
.....................................b..9.........
|
||||||
|
........................h..0......................
|
||||||
|
.....o......................h..0........b1........
|
||||||
|
.........8.............X..........................
|
||||||
|
..........o..........c..........1...........O.....
|
||||||
|
....8....................y0...c...................
|
||||||
|
..............D.......c..................9..0.....
|
||||||
|
............................1..........O..9.......
|
||||||
Binary file not shown.
@@ -0,0 +1,77 @@
|
|||||||
|
--- Day 9: Disk Fragmenter ---
|
||||||
|
|
||||||
|
Another push of the button leaves you in the familiar hallways of some friendly amphipods! Good thing you each somehow got your own personal mini submarine. The Historians jet away in search of the Chief, mostly by driving directly into walls.
|
||||||
|
|
||||||
|
While The Historians quickly figure out how to pilot these things, you notice an amphipod in the corner struggling with his computer. He's trying to make more contiguous free space by compacting all of the files, but his program isn't working; you offer to help.
|
||||||
|
|
||||||
|
He shows you the disk map (your puzzle input) he's already generated. For example:
|
||||||
|
|
||||||
|
2333133121414131402
|
||||||
|
|
||||||
|
The disk map uses a dense format to represent the layout of files and free space on the disk. The digits alternate between indicating the length of a file and the length of free space.
|
||||||
|
|
||||||
|
So, a disk map like 12345 would represent a one-block file, two blocks of free space, a three-block file, four blocks of free space, and then a five-block file. A disk map like 90909 would represent three nine-block files in a row (with no free space between them).
|
||||||
|
|
||||||
|
Each file on disk also has an ID number based on the order of the files as they appear before they are rearranged, starting with ID 0. So, the disk map 12345 has three files: a one-block file with ID 0, a three-block file with ID 1, and a five-block file with ID 2. Using one character for each block where digits are the file ID and . is free space, the disk map 12345 represents these individual blocks:
|
||||||
|
|
||||||
|
0..111....22222
|
||||||
|
|
||||||
|
The first example above, 2333133121414131402, represents these individual blocks:
|
||||||
|
|
||||||
|
00...111...2...333.44.5555.6666.777.888899
|
||||||
|
|
||||||
|
The amphipod would like to move file blocks one at a time from the end of the disk to the leftmost free space block (until there are no gaps remaining between file blocks). For the disk map 12345, the process looks like this:
|
||||||
|
|
||||||
|
0..111....22222
|
||||||
|
02.111....2222.
|
||||||
|
022111....222..
|
||||||
|
0221112...22...
|
||||||
|
02211122..2....
|
||||||
|
022111222......
|
||||||
|
|
||||||
|
The first example requires a few more steps:
|
||||||
|
|
||||||
|
00...111...2...333.44.5555.6666.777.888899
|
||||||
|
009..111...2...333.44.5555.6666.777.88889.
|
||||||
|
0099.111...2...333.44.5555.6666.777.8888..
|
||||||
|
00998111...2...333.44.5555.6666.777.888...
|
||||||
|
009981118..2...333.44.5555.6666.777.88....
|
||||||
|
0099811188.2...333.44.5555.6666.777.8.....
|
||||||
|
009981118882...333.44.5555.6666.777.......
|
||||||
|
0099811188827..333.44.5555.6666.77........
|
||||||
|
00998111888277.333.44.5555.6666.7.........
|
||||||
|
009981118882777333.44.5555.6666...........
|
||||||
|
009981118882777333644.5555.666............
|
||||||
|
00998111888277733364465555.66.............
|
||||||
|
0099811188827773336446555566..............
|
||||||
|
|
||||||
|
The final step of this file-compacting process is to update the filesystem checksum. To calculate the checksum, add up the result of multiplying each of these blocks' position with the file ID number it contains. The leftmost block is in position 0. If a block contains free space, skip it instead.
|
||||||
|
|
||||||
|
Continuing the first example, the first few blocks' position multiplied by its file ID number are 0 * 0 = 0, 1 * 0 = 0, 2 * 9 = 18, 3 * 9 = 27, 4 * 8 = 32, and so on. In this example, the checksum is the sum of these, 1928.
|
||||||
|
|
||||||
|
Compact the amphipod's hard drive using the process he requested. What is the resulting filesystem checksum? (Be careful copy/pasting the input for this puzzle; it is a single, very long line.)
|
||||||
|
|
||||||
|
Your puzzle answer was 6288599492129.
|
||||||
|
--- Part Two ---
|
||||||
|
|
||||||
|
Upon completion, two things immediately become clear. First, the disk definitely has a lot more contiguous free space, just like the amphipod hoped. Second, the computer is running much more slowly! Maybe introducing all of that file system fragmentation was a bad idea?
|
||||||
|
|
||||||
|
The eager amphipod already has a new plan: rather than move individual blocks, he'd like to try compacting the files on his disk by moving whole files instead.
|
||||||
|
|
||||||
|
This time, attempt to move whole files to the leftmost span of free space blocks that could fit the file. Attempt to move each file exactly once in order of decreasing file ID number starting with the file with the highest file ID number. If there is no span of free space to the left of a file that is large enough to fit the file, the file does not move.
|
||||||
|
|
||||||
|
The first example from above now proceeds differently:
|
||||||
|
|
||||||
|
00...111...2...333.44.5555.6666.777.888899
|
||||||
|
0099.111...2...333.44.5555.6666.777.8888..
|
||||||
|
0099.1117772...333.44.5555.6666.....8888..
|
||||||
|
0099.111777244.333....5555.6666.....8888..
|
||||||
|
00992111777.44.333....5555.6666.....8888..
|
||||||
|
|
||||||
|
The process of updating the filesystem checksum is the same; now, this example's checksum would be 2858.
|
||||||
|
|
||||||
|
Start over, now compacting the amphipod's hard drive using this new method instead. What is the resulting filesystem checksum?
|
||||||
|
|
||||||
|
Your puzzle answer was 6321896265143.
|
||||||
|
|
||||||
|
Both parts of this puzzle are complete! They provide two gold stars: **
|
||||||
Executable
+69
@@ -0,0 +1,69 @@
|
|||||||
|
#!/usr/bin/env python3
|
||||||
|
|
||||||
|
import sys
|
||||||
|
from copy import deepcopy
|
||||||
|
|
||||||
|
|
||||||
|
def compress(mem):
|
||||||
|
blocks = deepcopy(mem)
|
||||||
|
r = len(blocks) - 1
|
||||||
|
for p, b in enumerate(blocks):
|
||||||
|
if b == None:
|
||||||
|
while blocks[r] == None: r -= 1
|
||||||
|
# if you check this before moving it obviously does not work
|
||||||
|
if p >= r: break
|
||||||
|
blocks[p] = blocks[r]
|
||||||
|
blocks[r] = None
|
||||||
|
return blocks
|
||||||
|
|
||||||
|
|
||||||
|
def block_compress(free, full, size):
|
||||||
|
memory = [None] * size
|
||||||
|
for id, pos in reversed(full.items()):
|
||||||
|
p, b = pos
|
||||||
|
for i in sorted(free.keys()):
|
||||||
|
if i >= p: break
|
||||||
|
if free[i] < b: continue
|
||||||
|
else: p = i
|
||||||
|
if p != pos[0]:
|
||||||
|
free[p+b] = free[p] - b
|
||||||
|
free.pop(p)
|
||||||
|
if (pos[0]+b) in free:
|
||||||
|
free[pos[0]] = b + free[pos[0]+b]
|
||||||
|
free.pop(pos[0]+b)
|
||||||
|
else: free[pos[0]] = b
|
||||||
|
for j in range (p, p+b): memory[j] = id
|
||||||
|
return memory
|
||||||
|
|
||||||
|
|
||||||
|
def checksum(blocks):
|
||||||
|
cs = 0
|
||||||
|
for p, b in enumerate(blocks):
|
||||||
|
if b == None: continue
|
||||||
|
cs += p * b
|
||||||
|
return cs
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == '__main__':
|
||||||
|
blocks = [int(n) for n in list(open(sys.argv[1]).read().strip('\n'))]
|
||||||
|
|
||||||
|
memory = [None] * sum(blocks)
|
||||||
|
p, id = 0, 0
|
||||||
|
free, full = {}, {}
|
||||||
|
|
||||||
|
for i, b in enumerate(blocks):
|
||||||
|
if i % 2 == 0 and b > 0:
|
||||||
|
for j in range (p, p+b): memory[j] = id
|
||||||
|
full[id] = (p, b)
|
||||||
|
id += 1
|
||||||
|
else: free[p] = b
|
||||||
|
p += b
|
||||||
|
|
||||||
|
# challenge 1
|
||||||
|
res1 = checksum(compress(memory))
|
||||||
|
print(f"challenge 1:\n{res1}\n")
|
||||||
|
|
||||||
|
# challenge 2
|
||||||
|
res2 = checksum(block_compress(free, full, sum(blocks)))
|
||||||
|
print(f"challenge 2:\n{res2}")
|
||||||
|
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
2333133121414131402
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
6337613674436833695582382518294574934721895775456926659050519789764499137091974516817593123529825470413735998773313821249746165140476827548333979879759812148140743921984858367387865689863575979767978384602135617653231357745451442716162787988827217792125086367824652239497919721686553336289590824034825884491882728622562067753798821229222238807634124749916752577072651378955553992845307918307276391238273773149858396433832536796653365434709657851887396187578778147166906832666361736921666530215593938020386798211757213535118020656880772626853567534823537521847840542462424239748076442664335159933397986757683414553370933017533841909225785682535581657913534751914590354573479543352482677664279490115563578845916997385280799060446627827972734570759842272566609483169585119611369745574079877574611920292074449221344989775049422092807055209772581092501625426515216037533372713253769756161167528724961425674338433856921993913658367042577497436930301681312780243028924226184437743980832960764956152123711024813868188023445957797073319557834842443457408060431584672765711965523592339064155945688420399677786021375036865224718236192794168244218132331879653238514185879711274422704721314129454939677194798258512282384257688549556871296166858544234847196990249480549228468620477732643536689838393877978653367792853453997762592631241338636138577555428914232648823466514071894652137678142034849239193626153640623580414314608933385485612012888459733812386760439427452815938894615323396842132211755866147610694370823973397748963732281746466628818129365432979699941761269528742324281144556379381879602911724569887421245076318843809377436853841020844590787517655729552955292366331147517060174571596182569363324916905792827650803161491453136021278077732064374448109498165846527088615498892332771430958179814356621939482129587840825717107138658080991769344985444860919820564023672497821693314755599976209047988027535412418173944146379780263754526214261017834795745288115763115420595437959121698079541886909440959071743761324933549055785895219883434371956470166162332913626974228698704867909040649016617460867032767038334727116689244913263370265020373034542849904912599647836283459162238825918961705866907222166252213569835943736588468231414457382040649035476988352594163315317533816572151422835818584798813953851735242330898787799654338389819473342688805893283467278648262129884651697935311570182570622882847035353690402079255041929980106820933987229229797544269317587273137530758375497634699083283818553718955173431710764611483099989260285267944525422740201440336499923419596970234642786695265316332262177054801980634357789526362333385795223688334671859856597460299593595342948524369087665258874015146296241079817536554214141611547952197222448591679959466790128097793753463968675487268040477815563380229164213672752215208397193598924987982747832046393487916058272183247276523097304784635757381389468220157974675179325452839698486360399879695439645913991513175369124373993030541020107278592224606843141533658010212677209043325490342134728924457069965191109858378318612965799852635497747794734595236056575848591924766220818282475324396727508923606980769458725299525452612238764560262657775582924569776483862349887068324449156297506644312010698479354773245797667563279586421294657685887842714452735721406358806171998745643329816772286796704744766044588635885245655459774311291948625491629489845688426449351717832871305285577753164547112747414863694575184763986239102380914887326641428026877699225992392096482370418830381415159027914953351339474421536726145911393866697198669419803537365630324763404171851150754014952414412764421984874654951033761733339938562539501446678133468715754993394758543046223523398728955356737781406931429746223633763241354625939226463718409470443784758784373146313839928768614814211356253038934558927790904988453344509018747586929116183883508082777047599959667039225085656443324675746726742070671570757088224324721174549372663665357073604929544480355015119614695352475587896476298629578751175152953418694340237315682094281425544939961496671928705760203087589687943595183450878840612944545990131498239234836114902680973922971833131647941447156647709468389679862137111593607085798425435736388659127388489737118418537272479942534595188821602597196231331570739573219060339186363023917360728735156330123729551057656522303564363389388580584548939620728350317592847949877699604391352991731027339689607733987355581433793686246693841298838454573798145112168184911056903380103939467378844737779330194582116721272190126779182733559651836358413812266428668253391218604697749045971951622863863588909757411613156843452329293637464367447412392465939681589644859070551682234527516285233194458768183747577595703213148321859615511124931012101096951580915748936348216536567577647345618573868040994546908948496431144262585963718473204983249712109511962363539684909657287652765145553168177329822059904713775018257475153084721036958345931122317816828966716917929036331813946978532772968156626894887060457595911112698Line truncated
|
||||||
@@ -0,0 +1,130 @@
|
|||||||
|
--- Day 10: Hoof It ---
|
||||||
|
|
||||||
|
You all arrive at a Lava Production Facility on a floating island in the sky. As the others begin to search the massive industrial complex, you feel a small nose boop your leg and look down to discover a reindeer wearing a hard hat.
|
||||||
|
|
||||||
|
The reindeer is holding a book titled "Lava Island Hiking Guide". However, when you open the book, you discover that most of it seems to have been scorched by lava! As you're about to ask how you can help, the reindeer brings you a blank topographic map of the surrounding area (your puzzle input) and looks up at you excitedly.
|
||||||
|
|
||||||
|
Perhaps you can help fill in the missing hiking trails?
|
||||||
|
|
||||||
|
The topographic map indicates the height at each position using a scale from 0 (lowest) to 9 (highest). For example:
|
||||||
|
|
||||||
|
0123
|
||||||
|
1234
|
||||||
|
8765
|
||||||
|
9876
|
||||||
|
|
||||||
|
Based on un-scorched scraps of the book, you determine that a good hiking trail is as long as possible and has an even, gradual, uphill slope. For all practical purposes, this means that a hiking trail is any path that starts at height 0, ends at height 9, and always increases by a height of exactly 1 at each step. Hiking trails never include diagonal steps - only up, down, left, or right (from the perspective of the map).
|
||||||
|
|
||||||
|
You look up from the map and notice that the reindeer has helpfully begun to construct a small pile of pencils, markers, rulers, compasses, stickers, and other equipment you might need to update the map with hiking trails.
|
||||||
|
|
||||||
|
A trailhead is any position that starts one or more hiking trails - here, these positions will always have height 0. Assembling more fragments of pages, you establish that a trailhead's score is the number of 9-height positions reachable from that trailhead via a hiking trail. In the above example, the single trailhead in the top left corner has a score of 1 because it can reach a single 9 (the one in the bottom left).
|
||||||
|
|
||||||
|
This trailhead has a score of 2:
|
||||||
|
|
||||||
|
...0...
|
||||||
|
...1...
|
||||||
|
...2...
|
||||||
|
6543456
|
||||||
|
7.....7
|
||||||
|
8.....8
|
||||||
|
9.....9
|
||||||
|
|
||||||
|
(The positions marked . are impassable tiles to simplify these examples; they do not appear on your actual topographic map.)
|
||||||
|
|
||||||
|
This trailhead has a score of 4 because every 9 is reachable via a hiking trail except the one immediately to the left of the trailhead:
|
||||||
|
|
||||||
|
..90..9
|
||||||
|
...1.98
|
||||||
|
...2..7
|
||||||
|
6543456
|
||||||
|
765.987
|
||||||
|
876....
|
||||||
|
987....
|
||||||
|
|
||||||
|
This topographic map contains two trailheads; the trailhead at the top has a score of 1, while the trailhead at the bottom has a score of 2:
|
||||||
|
|
||||||
|
10..9..
|
||||||
|
2...8..
|
||||||
|
3...7..
|
||||||
|
4567654
|
||||||
|
...8..3
|
||||||
|
...9..2
|
||||||
|
.....01
|
||||||
|
|
||||||
|
Here's a larger example:
|
||||||
|
|
||||||
|
89010123
|
||||||
|
78121874
|
||||||
|
87430965
|
||||||
|
96549874
|
||||||
|
45678903
|
||||||
|
32019012
|
||||||
|
01329801
|
||||||
|
10456732
|
||||||
|
|
||||||
|
This larger example has 9 trailheads. Considering the trailheads in reading order, they have scores of 5, 6, 5, 3, 1, 3, 5, 3, and 5. Adding these scores together, the sum of the scores of all trailheads is 36.
|
||||||
|
|
||||||
|
The reindeer gleefully carries over a protractor and adds it to the pile. What is the sum of the scores of all trailheads on your topographic map?
|
||||||
|
|
||||||
|
Your puzzle answer was 629.
|
||||||
|
--- Part Two ---
|
||||||
|
|
||||||
|
The reindeer spends a few minutes reviewing your hiking trail map before realizing something, disappearing for a few minutes, and finally returning with yet another slightly-charred piece of paper.
|
||||||
|
|
||||||
|
The paper describes a second way to measure a trailhead called its rating. A trailhead's rating is the number of distinct hiking trails which begin at that trailhead. For example:
|
||||||
|
|
||||||
|
.....0.
|
||||||
|
..4321.
|
||||||
|
..5..2.
|
||||||
|
..6543.
|
||||||
|
..7..4.
|
||||||
|
..8765.
|
||||||
|
..9....
|
||||||
|
|
||||||
|
The above map has a single trailhead; its rating is 3 because there are exactly three distinct hiking trails which begin at that position:
|
||||||
|
|
||||||
|
.....0. .....0. .....0.
|
||||||
|
..4321. .....1. .....1.
|
||||||
|
..5.... .....2. .....2.
|
||||||
|
..6.... ..6543. .....3.
|
||||||
|
..7.... ..7.... .....4.
|
||||||
|
..8.... ..8.... ..8765.
|
||||||
|
..9.... ..9.... ..9....
|
||||||
|
|
||||||
|
Here is a map containing a single trailhead with rating 13:
|
||||||
|
|
||||||
|
..90..9
|
||||||
|
...1.98
|
||||||
|
...2..7
|
||||||
|
6543456
|
||||||
|
765.987
|
||||||
|
876....
|
||||||
|
987....
|
||||||
|
|
||||||
|
This map contains a single trailhead with rating 227 (because there are 121 distinct hiking trails that lead to the 9 on the right edge and 106 that lead to the 9 on the bottom edge):
|
||||||
|
|
||||||
|
012345
|
||||||
|
123456
|
||||||
|
234567
|
||||||
|
345678
|
||||||
|
4.6789
|
||||||
|
56789.
|
||||||
|
|
||||||
|
Here's the larger example from before:
|
||||||
|
|
||||||
|
89010123
|
||||||
|
78121874
|
||||||
|
87430965
|
||||||
|
96549874
|
||||||
|
45678903
|
||||||
|
32019012
|
||||||
|
01329801
|
||||||
|
10456732
|
||||||
|
|
||||||
|
Considering its trailheads in reading order, they have ratings of 20, 24, 10, 4, 1, 4, 5, 8, and 5. The sum of all trailhead ratings in this larger example topographic map is 81.
|
||||||
|
|
||||||
|
You're not sure how, but the reindeer seems to have crafted some tiny flags out of toothpicks and bits of paper and is using them to mark trailheads on your topographic map. What is the sum of the ratings of all trailheads?
|
||||||
|
|
||||||
|
Your puzzle answer was 1242.
|
||||||
|
|
||||||
|
Both parts of this puzzle are complete! They provide two gold stars: **
|
||||||
Executable
+50
@@ -0,0 +1,50 @@
|
|||||||
|
#!/usr/bin/env python3
|
||||||
|
|
||||||
|
import sys
|
||||||
|
|
||||||
|
|
||||||
|
def trailhead_score(tm, x, y):
|
||||||
|
height = tm[y][x]
|
||||||
|
end_positions = set([])
|
||||||
|
if height == 9: return set([(x,y)])
|
||||||
|
directions = [(0,1), (1,0), (0,-1), (-1,0)]
|
||||||
|
for d in directions:
|
||||||
|
nx, ny = x+d[0], y+d[1]
|
||||||
|
if nx < 0 or ny < 0: continue
|
||||||
|
try:
|
||||||
|
if tm[ny][nx] - height == 1:
|
||||||
|
end_positions = end_positions.union(trailhead_score(tm, nx, ny))
|
||||||
|
except IndexError: continue
|
||||||
|
return end_positions
|
||||||
|
|
||||||
|
|
||||||
|
def trailhead_ranking(tm, x, y):
|
||||||
|
height = tm[y][x]
|
||||||
|
score = 0
|
||||||
|
if height == 9: return 1
|
||||||
|
directions = [(0,1), (1,0), (0,-1), (-1,0)]
|
||||||
|
for d in directions:
|
||||||
|
nx, ny = x+d[0], y+d[1]
|
||||||
|
if nx < 0 or ny < 0: continue
|
||||||
|
try:
|
||||||
|
if tm[ny][nx] - height == 1:
|
||||||
|
score += trailhead_ranking(tm, nx, ny)
|
||||||
|
except IndexError: continue
|
||||||
|
return score
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == '__main__':
|
||||||
|
tm = [[int(l) for l in line.strip('\n')] for line in open(sys.argv[1])]
|
||||||
|
res1, res2 = 0, 0
|
||||||
|
for j, y in enumerate(tm):
|
||||||
|
for i, x in enumerate(y):
|
||||||
|
if x == 0:
|
||||||
|
res1 += len(trailhead_score(tm, i, j))
|
||||||
|
res2 += trailhead_ranking(tm, i, j)
|
||||||
|
|
||||||
|
# challenge 1
|
||||||
|
print(f"challenge 1:\n{res1}\n")
|
||||||
|
|
||||||
|
# challenge 2
|
||||||
|
print(f"challenge 2:\n{res2}")
|
||||||
|
|
||||||
@@ -0,0 +1,8 @@
|
|||||||
|
89010123
|
||||||
|
78121874
|
||||||
|
87430965
|
||||||
|
96549874
|
||||||
|
45678903
|
||||||
|
32019012
|
||||||
|
01329801
|
||||||
|
10456732
|
||||||
@@ -0,0 +1,50 @@
|
|||||||
|
56760198543405456770107687012987873265430701234123
|
||||||
|
47891087612514320889298596543236982176321878985054
|
||||||
|
30932912503423411978321436760145453089490965076567
|
||||||
|
21043803498598502565450345897896334569584324105498
|
||||||
|
43256754387687643445601231056787276578675013212389
|
||||||
|
50105620896014553238782322348996189432106522301210
|
||||||
|
60234211205423469109695210567345023456987101232569
|
||||||
|
71454301312345678100556501051269010787832198543478
|
||||||
|
82365985407856743291447892340178732696949037643323
|
||||||
|
99878876556989856782332309650065341054658743252110
|
||||||
|
12389565445845698943221218761234456565789650167087
|
||||||
|
03458890330532787892100321052442787074656782108996
|
||||||
|
12766721221621056521098478934321692183245891210105
|
||||||
|
00875437876521245430167569035630013290194300121234
|
||||||
|
21980356985430130101456122128754324389980215432101
|
||||||
|
32341245234561221212340033439961015671271326990123
|
||||||
|
41239832101676678703121542345872343760362347887654
|
||||||
|
50146701098787569254035671096112654854454558943210
|
||||||
|
69655410889693452164549389987003569943003967656787
|
||||||
|
78789324989582543076678432176124578752112876545490
|
||||||
|
49670123476451001289986581065437669801198743454321
|
||||||
|
34565404560302654345677893034458954321034652345210
|
||||||
|
21670313401212701238766732123361056700125601216787
|
||||||
|
10781223304343870349676678901272341811098700305891
|
||||||
|
87690433210154901234587565078980110925643212456730
|
||||||
|
98521049873269100448996652169765223434756965569821
|
||||||
|
83430656794378234567385543258894304589807874321034
|
||||||
|
12345690185123247855434789043210113676212981012125
|
||||||
|
04396783276030110982329872178901923494345891234596
|
||||||
|
65287654896543225671012763561032876587436780989687
|
||||||
|
70132108987652334430101654432945214306525891078765
|
||||||
|
89945345456701498521012346547876305211014342569854
|
||||||
|
67876276789876567677890107236521456523210213410743
|
||||||
|
56940189678930438988743298101430567894765104323212
|
||||||
|
45434328509821321089654340122334567765894101298701
|
||||||
|
50125613410030012127763019831021998568903210345692
|
||||||
|
23498701322147897898892123742340867478912653210789
|
||||||
|
10567654213456786721089054654356789302801743105678
|
||||||
|
01678123402110995437658766789210676211010892234109
|
||||||
|
67569016567021874378941043212101245432346781103201
|
||||||
|
58454323898134565632332456701234306011015490321232
|
||||||
|
49323454234012906701454327890965412102367305410147
|
||||||
|
31012365125643812898765410378876543233458216568758
|
||||||
|
21009876034756763019034101269989100146569325679669
|
||||||
|
21898745129829654323129654352123299656478012784578
|
||||||
|
30743231065018760563238765543034788798329983693056
|
||||||
|
45656189654323011056769894672145632347012674212147
|
||||||
|
01218088745896522349850123283034701456981065100238
|
||||||
|
14309893236787631438943210190129892123672578921109
|
||||||
|
25456782101896540127654301012010181034543465433212
|
||||||
Binary file not shown.
@@ -0,0 +1,67 @@
|
|||||||
|
--- Day 11: Plutonian Pebbles ---
|
||||||
|
|
||||||
|
The ancient civilization on Pluto was known for its ability to manipulate spacetime, and while The Historians explore their infinite corridors, you've noticed a strange set of physics-defying stones.
|
||||||
|
|
||||||
|
At first glance, they seem like normal stones: they're arranged in a perfectly straight line, and each stone has a number engraved on it.
|
||||||
|
|
||||||
|
The strange part is that every time you blink, the stones change.
|
||||||
|
|
||||||
|
Sometimes, the number engraved on a stone changes. Other times, a stone might split in two, causing all the other stones to shift over a bit to make room in their perfectly straight line.
|
||||||
|
|
||||||
|
As you observe them for a while, you find that the stones have a consistent behavior. Every time you blink, the stones each simultaneously change according to the first applicable rule in this list:
|
||||||
|
|
||||||
|
If the stone is engraved with the number 0, it is replaced by a stone engraved with the number 1.
|
||||||
|
If the stone is engraved with a number that has an even number of digits, it is replaced by two stones. The left half of the digits are engraved on the new left stone, and the right half of the digits are engraved on the new right stone. (The new numbers don't keep extra leading zeroes: 1000 would become stones 10 and 0.)
|
||||||
|
If none of the other rules apply, the stone is replaced by a new stone; the old stone's number multiplied by 2024 is engraved on the new stone.
|
||||||
|
|
||||||
|
No matter how the stones change, their order is preserved, and they stay on their perfectly straight line.
|
||||||
|
|
||||||
|
How will the stones evolve if you keep blinking at them? You take a note of the number engraved on each stone in the line (your puzzle input).
|
||||||
|
|
||||||
|
If you have an arrangement of five stones engraved with the numbers 0 1 10 99 999 and you blink once, the stones transform as follows:
|
||||||
|
|
||||||
|
The first stone, 0, becomes a stone marked 1.
|
||||||
|
The second stone, 1, is multiplied by 2024 to become 2024.
|
||||||
|
The third stone, 10, is split into a stone marked 1 followed by a stone marked 0.
|
||||||
|
The fourth stone, 99, is split into two stones marked 9.
|
||||||
|
The fifth stone, 999, is replaced by a stone marked 2021976.
|
||||||
|
|
||||||
|
So, after blinking once, your five stones would become an arrangement of seven stones engraved with the numbers 1 2024 1 0 9 9 2021976.
|
||||||
|
|
||||||
|
Here is a longer example:
|
||||||
|
|
||||||
|
Initial arrangement:
|
||||||
|
125 17
|
||||||
|
|
||||||
|
After 1 blink:
|
||||||
|
253000 1 7
|
||||||
|
|
||||||
|
After 2 blinks:
|
||||||
|
253 0 2024 14168
|
||||||
|
|
||||||
|
After 3 blinks:
|
||||||
|
512072 1 20 24 28676032
|
||||||
|
|
||||||
|
After 4 blinks:
|
||||||
|
512 72 2024 2 0 2 4 2867 6032
|
||||||
|
|
||||||
|
After 5 blinks:
|
||||||
|
1036288 7 2 20 24 4048 1 4048 8096 28 67 60 32
|
||||||
|
|
||||||
|
After 6 blinks:
|
||||||
|
2097446912 14168 4048 2 0 2 4 40 48 2024 40 48 80 96 2 8 6 7 6 0 3 2
|
||||||
|
|
||||||
|
In this example, after blinking six times, you would have 22 stones. After blinking 25 times, you would have 55312 stones!
|
||||||
|
|
||||||
|
Consider the arrangement of stones in front of you. How many stones will you have after blinking 25 times?
|
||||||
|
|
||||||
|
Your puzzle answer was 224529.
|
||||||
|
--- Part Two ---
|
||||||
|
|
||||||
|
The Historians sure are taking a long time. To be fair, the infinite corridors are very large.
|
||||||
|
|
||||||
|
How many stones would you have after blinking a total of 75 times?
|
||||||
|
|
||||||
|
Your puzzle answer was 266820198587914.
|
||||||
|
|
||||||
|
Both parts of this puzzle are complete! They provide two gold stars: **
|
||||||
Executable
+40
@@ -0,0 +1,40 @@
|
|||||||
|
#!/usr/bin/env python3
|
||||||
|
|
||||||
|
import sys
|
||||||
|
from copy import deepcopy
|
||||||
|
import numpy as np
|
||||||
|
|
||||||
|
def memo(f):
|
||||||
|
memo = {}
|
||||||
|
|
||||||
|
def f2(x,y):
|
||||||
|
if (x,y) not in memo: memo[(x,y)] = f(x,y)
|
||||||
|
return memo[(x,y)]
|
||||||
|
return f2
|
||||||
|
|
||||||
|
|
||||||
|
@memo
|
||||||
|
def blink(stone, i):
|
||||||
|
if i == 0: return 1
|
||||||
|
else: i -= 1
|
||||||
|
if stone == 0: return blink(1,i)
|
||||||
|
elif len(str(stone)) % 2 == 0:
|
||||||
|
ds = int(len(str(int(stone)))/2)
|
||||||
|
return(blink(int(str(int(stone))[:ds]),i) + blink(int(str(int(stone))[ds:]),i))
|
||||||
|
else: return blink(stone*2024, i)
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == '__main__':
|
||||||
|
stones = [int(n) for n in open(sys.argv[1]).read().strip('\n').split(' ')]
|
||||||
|
|
||||||
|
res1, res2 = 0, 0
|
||||||
|
for s in stones:
|
||||||
|
res1 += blink(s, 25)
|
||||||
|
res2 += blink(s, 75)
|
||||||
|
|
||||||
|
# challenge 1
|
||||||
|
print(f"challenge 1:\n{res1}\n")
|
||||||
|
|
||||||
|
# challenge 2
|
||||||
|
print(f"challenge 2:\n{res2}")
|
||||||
|
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
0 1 10 99 999
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
125 17
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
1117 0 8 21078 2389032 142881 93 385
|
||||||
@@ -0,0 +1,148 @@
|
|||||||
|
--- Day 12: Garden Groups ---
|
||||||
|
|
||||||
|
Why not search for the Chief Historian near the gardener and his massive farm? There's plenty of food, so The Historians grab something to eat while they search.
|
||||||
|
|
||||||
|
You're about to settle near a complex arrangement of garden plots when some Elves ask if you can lend a hand. They'd like to set up fences around each region of garden plots, but they can't figure out how much fence they need to order or how much it will cost. They hand you a map (your puzzle input) of the garden plots.
|
||||||
|
|
||||||
|
Each garden plot grows only a single type of plant and is indicated by a single letter on your map. When multiple garden plots are growing the same type of plant and are touching (horizontally or vertically), they form a region. For example:
|
||||||
|
|
||||||
|
AAAA
|
||||||
|
BBCD
|
||||||
|
BBCC
|
||||||
|
EEEC
|
||||||
|
|
||||||
|
This 4x4 arrangement includes garden plots growing five different types of plants (labeled A, B, C, D, and E), each grouped into their own region.
|
||||||
|
|
||||||
|
In order to accurately calculate the cost of the fence around a single region, you need to know that region's area and perimeter.
|
||||||
|
|
||||||
|
The area of a region is simply the number of garden plots the region contains. The above map's type A, B, and C plants are each in a region of area 4. The type E plants are in a region of area 3; the type D plants are in a region of area 1.
|
||||||
|
|
||||||
|
Each garden plot is a square and so has four sides. The perimeter of a region is the number of sides of garden plots in the region that do not touch another garden plot in the same region. The type A and C plants are each in a region with perimeter 10. The type B and E plants are each in a region with perimeter 8. The lone D plot forms its own region with perimeter 4.
|
||||||
|
|
||||||
|
Visually indicating the sides of plots in each region that contribute to the perimeter using - and |, the above map's regions' perimeters are measured as follows:
|
||||||
|
|
||||||
|
+-+-+-+-+
|
||||||
|
|A A A A|
|
||||||
|
+-+-+-+-+ +-+
|
||||||
|
|D|
|
||||||
|
+-+-+ +-+ +-+
|
||||||
|
|B B| |C|
|
||||||
|
+ + + +-+
|
||||||
|
|B B| |C C|
|
||||||
|
+-+-+ +-+ +
|
||||||
|
|C|
|
||||||
|
+-+-+-+ +-+
|
||||||
|
|E E E|
|
||||||
|
+-+-+-+
|
||||||
|
|
||||||
|
Plants of the same type can appear in multiple separate regions, and regions can even appear within other regions. For example:
|
||||||
|
|
||||||
|
OOOOO
|
||||||
|
OXOXO
|
||||||
|
OOOOO
|
||||||
|
OXOXO
|
||||||
|
OOOOO
|
||||||
|
|
||||||
|
The above map contains five regions, one containing all of the O garden plots, and the other four each containing a single X plot.
|
||||||
|
|
||||||
|
The four X regions each have area 1 and perimeter 4. The region containing 21 type O plants is more complicated; in addition to its outer edge contributing a perimeter of 20, its boundary with each X region contributes an additional 4 to its perimeter, for a total perimeter of 36.
|
||||||
|
|
||||||
|
Due to "modern" business practices, the price of fence required for a region is found by multiplying that region's area by its perimeter. The total price of fencing all regions on a map is found by adding together the price of fence for every region on the map.
|
||||||
|
|
||||||
|
In the first example, region A has price 4 * 10 = 40, region B has price 4 * 8 = 32, region C has price 4 * 10 = 40, region D has price 1 * 4 = 4, and region E has price 3 * 8 = 24. So, the total price for the first example is 140.
|
||||||
|
|
||||||
|
In the second example, the region with all of the O plants has price 21 * 36 = 756, and each of the four smaller X regions has price 1 * 4 = 4, for a total price of 772 (756 + 4 + 4 + 4 + 4).
|
||||||
|
|
||||||
|
Here's a larger example:
|
||||||
|
|
||||||
|
RRRRIICCFF
|
||||||
|
RRRRIICCCF
|
||||||
|
VVRRRCCFFF
|
||||||
|
VVRCCCJFFF
|
||||||
|
VVVVCJJCFE
|
||||||
|
VVIVCCJJEE
|
||||||
|
VVIIICJJEE
|
||||||
|
MIIIIIJJEE
|
||||||
|
MIIISIJEEE
|
||||||
|
MMMISSJEEE
|
||||||
|
|
||||||
|
It contains:
|
||||||
|
|
||||||
|
A region of R plants with price 12 * 18 = 216.
|
||||||
|
A region of I plants with price 4 * 8 = 32.
|
||||||
|
A region of C plants with price 14 * 28 = 392.
|
||||||
|
A region of F plants with price 10 * 18 = 180.
|
||||||
|
A region of V plants with price 13 * 20 = 260.
|
||||||
|
A region of J plants with price 11 * 20 = 220.
|
||||||
|
A region of C plants with price 1 * 4 = 4.
|
||||||
|
A region of E plants with price 13 * 18 = 234.
|
||||||
|
A region of I plants with price 14 * 22 = 308.
|
||||||
|
A region of M plants with price 5 * 12 = 60.
|
||||||
|
A region of S plants with price 3 * 8 = 24.
|
||||||
|
|
||||||
|
So, it has a total price of 1930.
|
||||||
|
|
||||||
|
What is the total price of fencing all regions on your map?
|
||||||
|
|
||||||
|
Your puzzle answer was 1415378.
|
||||||
|
--- Part Two ---
|
||||||
|
|
||||||
|
Fortunately, the Elves are trying to order so much fence that they qualify for a bulk discount!
|
||||||
|
|
||||||
|
Under the bulk discount, instead of using the perimeter to calculate the price, you need to use the number of sides each region has. Each straight section of fence counts as a side, regardless of how long it is.
|
||||||
|
|
||||||
|
Consider this example again:
|
||||||
|
|
||||||
|
AAAA
|
||||||
|
BBCD
|
||||||
|
BBCC
|
||||||
|
EEEC
|
||||||
|
|
||||||
|
The region containing type A plants has 4 sides, as does each of the regions containing plants of type B, D, and E. However, the more complex region containing the plants of type C has 8 sides!
|
||||||
|
|
||||||
|
Using the new method of calculating the per-region price by multiplying the region's area by its number of sides, regions A through E have prices 16, 16, 32, 4, and 12, respectively, for a total price of 80.
|
||||||
|
|
||||||
|
The second example above (full of type X and O plants) would have a total price of 436.
|
||||||
|
|
||||||
|
Here's a map that includes an E-shaped region full of type E plants:
|
||||||
|
|
||||||
|
EEEEE
|
||||||
|
EXXXX
|
||||||
|
EEEEE
|
||||||
|
EXXXX
|
||||||
|
EEEEE
|
||||||
|
|
||||||
|
The E-shaped region has an area of 17 and 12 sides for a price of 204. Including the two regions full of type X plants, this map has a total price of 236.
|
||||||
|
|
||||||
|
This map has a total price of 368:
|
||||||
|
|
||||||
|
AAAAAA
|
||||||
|
AAABBA
|
||||||
|
AAABBA
|
||||||
|
ABBAAA
|
||||||
|
ABBAAA
|
||||||
|
AAAAAA
|
||||||
|
|
||||||
|
It includes two regions full of type B plants (each with 4 sides) and a single region full of type A plants (with 4 sides on the outside and 8 more sides on the inside, a total of 12 sides). Be especially careful when counting the fence around regions like the one full of type A plants; in particular, each section of fence has an in-side and an out-side, so the fence does not connect across the middle of the region (where the two B regions touch diagonally). (The Elves would have used the Möbius Fencing Company instead, but their contract terms were too one-sided.)
|
||||||
|
|
||||||
|
The larger example from before now has the following updated prices:
|
||||||
|
|
||||||
|
A region of R plants with price 12 * 10 = 120.
|
||||||
|
A region of I plants with price 4 * 4 = 16.
|
||||||
|
A region of C plants with price 14 * 22 = 308.
|
||||||
|
A region of F plants with price 10 * 12 = 120.
|
||||||
|
A region of V plants with price 13 * 10 = 130.
|
||||||
|
A region of J plants with price 11 * 12 = 132.
|
||||||
|
A region of C plants with price 1 * 4 = 4.
|
||||||
|
A region of E plants with price 13 * 8 = 104.
|
||||||
|
A region of I plants with price 14 * 16 = 224.
|
||||||
|
A region of M plants with price 5 * 6 = 30.
|
||||||
|
A region of S plants with price 3 * 6 = 18.
|
||||||
|
|
||||||
|
Adding these together produces its new total price of 1206.
|
||||||
|
|
||||||
|
What is the new total price of fencing all regions on your map?
|
||||||
|
|
||||||
|
Your puzzle answer was 862714.
|
||||||
|
|
||||||
|
Both parts of this puzzle are complete! They provide two gold stars: **
|
||||||
Executable
+120
@@ -0,0 +1,120 @@
|
|||||||
|
#!/usr/bin/env python3
|
||||||
|
|
||||||
|
import sys
|
||||||
|
|
||||||
|
|
||||||
|
def adjacent(x,y,pos):
|
||||||
|
dirs = [(0,1), (1,0), (0,-1), (-1,0)]
|
||||||
|
for p in pos:
|
||||||
|
for d in dirs:
|
||||||
|
if p[0] == d[0] + x and p[1] == d[1] + y:
|
||||||
|
return True
|
||||||
|
return False
|
||||||
|
|
||||||
|
|
||||||
|
def join(rs):
|
||||||
|
if len(rs) == 1: return rs
|
||||||
|
removable = []
|
||||||
|
for i in range(len(rs)):
|
||||||
|
if i in removable:
|
||||||
|
continue
|
||||||
|
r1 = rs[i]
|
||||||
|
for j, r2 in enumerate(rs[i+1:]):
|
||||||
|
if j+i+1 in removable: continue
|
||||||
|
for r in r1:
|
||||||
|
if adjacent(*r,r2):
|
||||||
|
r1 += r2
|
||||||
|
r2 = []
|
||||||
|
removable.append(i+1+j)
|
||||||
|
break
|
||||||
|
for i in sorted(removable, reverse=True):
|
||||||
|
rs.remove(rs[i])
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == '__main__':
|
||||||
|
plots = [list(line.strip('\n')) for line in open(sys.argv[1])]
|
||||||
|
|
||||||
|
def fence(p):
|
||||||
|
x,y = p
|
||||||
|
dirs = [(0,1), (1,0), (0,-1), (-1,0)]
|
||||||
|
fences = 0
|
||||||
|
for d in dirs:
|
||||||
|
nx = d[0] + x
|
||||||
|
ny = d[1] + y
|
||||||
|
if 0 <= nx < len(plots[0]) and 0 <= ny < len(plots):
|
||||||
|
if plots[y][x] != plots[ny][nx]: fences += 1
|
||||||
|
else: fences += 1
|
||||||
|
return fences
|
||||||
|
|
||||||
|
def disc_fence(region):
|
||||||
|
fences = 0
|
||||||
|
horizontal = {}
|
||||||
|
vertical = {}
|
||||||
|
for (x,y) in region:
|
||||||
|
v = [(1,0), (-1,0)]
|
||||||
|
h = [(0,1), (0,-1)]
|
||||||
|
for d in v:
|
||||||
|
nx = d[0] + x
|
||||||
|
if 0 <= nx < len(plots[0]):
|
||||||
|
if plots[y][x] != plots[y][nx]:
|
||||||
|
if (x, nx) in vertical: vertical[(x,nx)].append(y)
|
||||||
|
else: vertical[(x, nx)] = [y]
|
||||||
|
else:
|
||||||
|
if (x, nx) in vertical: vertical[(x,nx)].append(y)
|
||||||
|
else: vertical[(x, nx)] = [y]
|
||||||
|
|
||||||
|
for d in h:
|
||||||
|
ny = d[1] + y
|
||||||
|
if 0 <= ny < len(plots):
|
||||||
|
if plots[y][x] != plots[ny][x]:
|
||||||
|
if (y,ny) in horizontal: horizontal[(y, ny)].append(x)
|
||||||
|
else: horizontal[(y, ny)] = [x]
|
||||||
|
else:
|
||||||
|
if (y,ny) in horizontal: horizontal[(y, ny)].append(x)
|
||||||
|
else: horizontal[(y, ny)] = [x]
|
||||||
|
|
||||||
|
for ys in vertical.values():
|
||||||
|
prev = -2
|
||||||
|
for y in sorted(ys):
|
||||||
|
if y - prev > 1: fences += 1
|
||||||
|
prev = y
|
||||||
|
for xs in horizontal.values():
|
||||||
|
prev = -2
|
||||||
|
for x in sorted(xs):
|
||||||
|
if x - prev > 1: fences += 1
|
||||||
|
prev = x
|
||||||
|
return fences
|
||||||
|
|
||||||
|
|
||||||
|
# 'A': [[(x,y), (x,y),..],...]
|
||||||
|
regions = {}
|
||||||
|
for y, pls in enumerate(plots):
|
||||||
|
for x, p in enumerate(pls):
|
||||||
|
if p not in regions:
|
||||||
|
regions[p] = [[]]
|
||||||
|
regions[p][0].append((x,y))
|
||||||
|
else:
|
||||||
|
t = False
|
||||||
|
for l in regions[p]:
|
||||||
|
if adjacent(x,y,l):
|
||||||
|
l.append((x,y))
|
||||||
|
t = True
|
||||||
|
break
|
||||||
|
if not t: regions[p].append([(x,y)])
|
||||||
|
|
||||||
|
res1, res2 = 0, 0
|
||||||
|
|
||||||
|
for p, rs in regions.items():
|
||||||
|
join(rs)
|
||||||
|
join(rs)
|
||||||
|
for r in rs:
|
||||||
|
res1 += sum(map(fence,r)) * len(r)
|
||||||
|
res2 += disc_fence(r) * len(r)
|
||||||
|
|
||||||
|
# challenge 1
|
||||||
|
# 1400060 is too low! -> double join.. not very nice xD
|
||||||
|
print(f"challenge 1:\n{res1}\n")
|
||||||
|
|
||||||
|
# challenge 2
|
||||||
|
print(f"challenge 2:\n{res2}")
|
||||||
|
|
||||||
@@ -0,0 +1,10 @@
|
|||||||
|
RRRRIICCFF
|
||||||
|
RRRRIICCCF
|
||||||
|
VVRRRCCFFF
|
||||||
|
VVRCCCJFFF
|
||||||
|
VVVVCJJCFE
|
||||||
|
VVIVCCJJEE
|
||||||
|
VVIIICJJEE
|
||||||
|
MIIIIIJJEE
|
||||||
|
MIIISIJEEE
|
||||||
|
MMMISSJEEE
|
||||||
@@ -0,0 +1,4 @@
|
|||||||
|
AAAA
|
||||||
|
BBCD
|
||||||
|
BBCC
|
||||||
|
EEEC
|
||||||
@@ -0,0 +1,5 @@
|
|||||||
|
OOOOO
|
||||||
|
OXOXO
|
||||||
|
OOOOO
|
||||||
|
OXOXO
|
||||||
|
OOOOO
|
||||||
@@ -0,0 +1,5 @@
|
|||||||
|
EEEEE
|
||||||
|
EXXXX
|
||||||
|
EEEEE
|
||||||
|
EXXXX
|
||||||
|
EEEEE
|
||||||
@@ -0,0 +1,140 @@
|
|||||||
|
IIIIIIIXXXXXXXXXXXXXCCCCCCCCCCCCCCCCCCXXXXXXXQQYYYYYYYYYFFFFFFFFFFFSSSSSUUUOOUUUUUUUUMJJJJMMMGGGGGGGGGGQQQQYYYYYYYYYYYYYYYNQQQQNNNNNNNNNNNNN
|
||||||
|
IIIKIIXXXXXXXXXXXXXXCCCCCCCCCCCCCCCCCXXXXXXXXXXYYYYYYYYYYYFFFFFFFFFSSSUUUUUOOUUUUUUUUMJJJJJMMGGGGGGGGGGGGQQQQYYYYYYYYYXYYYNNNNNNNNNNNNZNZZNN
|
||||||
|
IIKKIIXXXXXXXXXXXXXXKKCCCCCCCCCCCCCXXXXXXXXXXXXYYYYYYYYYYYKKFFFKFFFSSUUUUUUUOUUUUUUUUUJJJJJJMGGGGGGGGGGGGQQQQQYYYYYYYYYYYYNNNNNNNNNNZZZZZZZZ
|
||||||
|
IIKKIIIIXXXXXXXXXXXKKKCCCCCCCCCCCCCCXXXXXXXXXXXXYYYYYYYYYYKKKKKKKKFFSUUUUUUUOUCUUUUUUUJJJJJJGGGGGGGGGGGQGGQQQYYYYYYYYYYYYNNNNNNNNNZZZZZZZZZZ
|
||||||
|
KKKKKKIIXXXXXIXXKXXKKKCCCCCCCCCCCCCXXXXXXXXXXXXXXYYYYYYKKKKKKKKKFKFFFFUUUUUUUUCUUUUUUUJJJJJJBBGGGGGGGGGQQQQQYYYYYYYYYYYYYYNNNNNNVNZZZZZZZZZZ
|
||||||
|
KKKKKKKKKXXXXXXXXXKKKKCCCBCCCCCCXXXXXXXXXXXXXXXXYYYYYYYKKKKKKKKKFFFFFUUUUUUUUUCUUUUUUUJJJJJJBHGGGGGGGGGGQQQQYYYYYYYYYYYYYNNNNNNZZZZZZZZZZZZZ
|
||||||
|
KKKKKKKKKKKXXXXXXKKKKKCCCBBBCCCCCCXXXXXXXXXXXXXYYYYYYYYYYOKKKKKKFFFFUUUUUUUUUCCCCCCNNUJJOJHTHHHGGGGGGGGQQQQQYQYYYYYYYYYWYYYYNNNNZZZZZZZZZZZZ
|
||||||
|
KKKKKKKKKKKQQXXXKKKKKKCCBBBBCCCCCCXXXCXXXXXXXXXYYYYYYYYYYKKKKKKKFKKFFUUUUUCCCCCCCCCNNNJOOHHHHHHHGGGGGGGAAQQQQQQQYYYYAYYWWYNNNNNNNDDZZZZZZZZZ
|
||||||
|
KKKKKKKKKKKQXXXXKKKKKBBBBBBBBBBCCCCXXCXXXXXXXXXYYYYYYYYYYKKKKKKKKKKFFFUUUUCCCCCCCCCNNNHHHHHHHHHGGGGGGGGGAQQQAAQQYHHLYYHWWYDNNNNDDDDZZZZZZZZZ
|
||||||
|
KKKKKKKKKQQQQQXXKKKKKBBBBBBBBBBCCCCXCCCXXXXXCXXCYYYYYYYYYKKKKKKKKKKFKKQQUCCCCCCCCCCNNNHHHHHHHHHHGGGGGGGAAAAAAAAAYHHHHHHHWWDDNNNNDDZZZZZZZZZZ
|
||||||
|
KKKKKKKKKKSQQQKKKKKKBBBBBBBBBBBCCCCCCXXXXXXCCCCCCCYYYYYYYKKKKKKKKKKKKKQQQCCCCCCCCCCWWNNHHHHHHHYHGGJJGGGAAAAAAAAMMMHHHHHHWDDDDDDDDDDZZZZZZZZZ
|
||||||
|
KKKKKKJKKKSSKKKKKKKKBBBBBBBBBBBCCCCCXXXXXXXCCCCCCYYYCYYKKKKKKKKKKKKKKKQCCCCCCCCCCCWWWWHHHHHHHHHHHJJJAGAAAAAAAAAMMMMHHHHHHDDDDDDDDDDDZZZZZZZZ
|
||||||
|
KKKKKKJKKSSSEEKKKKKKKBBBBBBBBBCCCCCCCXXXCCXCCCCCCCCYCCYBKKKKKKKKKKKKKKKLLCLLEECCCWWWWWWHHHHHHHHHHHHHAAAAAAAAAAAAAHHHHHHHHHDPDDDDDDDZZZZZZZZZ
|
||||||
|
KKKKKKJJKSSEEKKKKKKBBBBBBBBBBBCCCCCCCCCXCCCCCCCCCCCCCCCCKUUKKKKKKKKKKKKLLLLLEECCEWWWWWWHHHHHHHHHHHHAAAAAAAAAAAAAAAHHHHHHHHHPPDDDDDDZZZZZZZBB
|
||||||
|
KKKKKJJJJSSSJJNKKBBBBBBIBBBUUUUUCCCCCCCCCCCCCCCCCCCCCCCUUUKKNNNKKKKRFKKLLLLEEEECEWWWWWWHHHHHHHHHHAAAAAAAAAAAAAAAAHHHHHHHHHHHDDDPDDDDZZZBBBBB
|
||||||
|
KKKKJJJJJSSSJJNNKKKBBBIIIIXXXUUYUUCCCCCCCCCCCACCCCCPCCCUUUUNNNNNKKKRRRLLEEEEEEEEEEWWWWWWHHHHHHHHAAAAMAAAAAAAAAAAAAAHHHHHHHHSDDPPDDDDZZZBBBBB
|
||||||
|
KKKJJJJJJSSSJJJNNKMBBBBBJXXXXUUYUUCCCCCCCCCCCCCCMCCCYYYYUUNNNNNNRRRRLLLLLEEEEEEEEWWWWWWWWWHHHHHAAAAMMMMMAAAMAAAAAAAHHHHHPPHSPPPPDDDDZZBBBBBB
|
||||||
|
KKBBBBJJJSSSJJJJJKBBBBBKJUUUUUUUUUUUCCUCCCCCCHHHHZZZYYYYYUNNNNNNNRRRLLLLEEEEEEEEEEWWWWWWWWHHHHRRAAAMMMMMMMMMMMAAAAAHHHHHPPPSSPPPDPDDZZBBBBBB
|
||||||
|
BBBBBBJJJJSSJJJJJQBQBCJKJUUUUUUUUUUUUUUUCCCCCHCHHHHYYYYYYUNYYNLRRRRLLLEEEEEEEEEEEEWWWWWWWWWWWHHRRAAMMMMMMMMMMMQQQQAHHHHPPPPPPPPPPPDBVVBBBBBB
|
||||||
|
BBBBBBJJJJSSJJJJJQQQJJJJJJUUUUUUUUUUUUUUCCCHHHHHHHHHHYYYYYNYYLLLRRLLLKKKKEEEEEEEEWWWWWWWWWWWWWWRRAMMMMMMMMMMMMQQQQQQHHPPPPPPPPPPPUBBBBBBBBBB
|
||||||
|
BBBBBJJJJJJJJJJJJQJJJJJJJJJJUUUUUUUUUCCCCCCCHHHHHHHHYYYYYYYYLLLLLLLLLKKKKKKKEEEEEEEEEEWWWWWWWWWRRRMMMMMMMMMMMMQQQQQQKRPPPPPPPPPUUUBBBBBBBBBB
|
||||||
|
BBBBJJJJJJJJJJJJJJAJJJJJJJJJUUUUUUUUUUCCCCHCCHHHHHYYYYYYYYYYLLLLLLLLKKKKKKKKEEEEEEEEEEWWWWWWWTMRRMMMMMMMMMMMMGOOQQQKKKPPPPPPPPPUUUBBBBBBBBBB
|
||||||
|
YYBBBJJJJJJJJJJJJAAJJJJJJJUUUUUUUUUUUCCCCHHHHHHHHHYYYYYYYYYYYLLLLLLLKKKKKKKKKKKEEEEEEEWWWWWWWTMMMMMMMMMMMMMMMOOOQQKKKPPPPPPPPPPUUUBBBBBBBBBB
|
||||||
|
YYYYJJJJJJJJJJJJFLAAJJJJJJUUUUUUUUUUUUCCHHLHHHHHYYYYYYYYYYYYLLLLLLLLKOJJJKKKKKEEEEEEEEWWWWWWWTMMMMMEMMMMMMMMMOOOQKKKKKPPPPPPPPPPPBBBUBBBBBBB
|
||||||
|
YYYJJJJJJJJJJJJJJLLAJJJJJJJUUUUUUUUUUUUUHHLHHHHHCYYYYYVVVGGGGLLLLLLLKJJJJKKKKKEEEEEEYWWWWWWWWMMMMEEEMMMMMMMOOOOOOWKKKKPOPKKPPPPPPUUUUBBBBBBB
|
||||||
|
YYYYYJJJJJJJJJLLLLLLPPJJJJUUUWWWWWUUUUHHHHHHHHHHCYYYYXVVVGGGGLLLLLLLLJJJKKKKKSEEEEEEEWLLLWWWWMMMEEEEMMMMMMMOOOOOOWKKKKKPPKKKPPPPPUUUBBBBBBBB
|
||||||
|
YYYYYYJJJJJJJLLLLLLLLPJJUUUUUUWVWWUUUEEHHHHHHHHHHYHYXXXVVVVVLLLLLLLLLLJJKKKKKKEEEEEELLLLWWWAMMMEEEMEMMMMMMMOOOOOOWKKKKKKKKKKPPJJJUUUBBBBBBBA
|
||||||
|
YYYYYYLLAJJJJJLLLLLLLLJJJUJJJJWWWWWBUHHHHHHHHHHHHHHHXVVVVVVVVLQQLQQQLJJJKKKKKKEEEEEELLLLLXXAXMMMEKMMMMMMMMMMMOOOKKKKKKKKKKKKKPJJJJJJBBBBBBBB
|
||||||
|
YYYYYLLLLJLLLLLLLLLLLLJJJJJJJWWWWWWBBHHHHHHHHHHHHHHHHPVVVVVVVQQQQQQQQQEEEEKKEEEEEOLLLLLLLLXXXXXMKKCCMMMMMMMOOOOOKKKKKKKKKKKKKKKKJJJBBBBBBBBB
|
||||||
|
YYYYYLLLLJLLLLLLLLLLLLJJJJJJJWWWWWWWBBHHHHHHHHHHHHHHDDGVVVVVVVQQQQQQQQEEEEEEEEEEEOOLLLLLLLXXXXXMMKKCCMMMMOOOOOOKKKKKKKKKKKKKKKLKBJBBBBBBBBBB
|
||||||
|
YYYLLLLLLJLLLLLLLLLLLLLJJJJWWWWWWWWWWBBHHHHHHHHHHHDHDGGVVVVVVVQQQQQQEEEEEEEEEEOOOOOLLLLLLLXMMMMMKKKCCCCMMOOOOOOOOFKKKKKKKKKKKKKKBBBBBBBBBBBF
|
||||||
|
YYYLLLLLLLLLLLLLLLLLLJJJJJJJWWWWWWWBBBBBHHHHHHHUUHDDDGGGVVVVVQQQQQQQQEEEEEEEEOOOOOOLLLLLLLXXXXZKKKKCCCEEMOOOOOOFFFQKFKKKKKKKKKKKJBBBBBBBBBBF
|
||||||
|
YYYYLLLLLLLLLLLOLOOOLJJOJJJJJXWWWWWBBBBBHHHHHHHHUHDDDGVVVVVVVVQQQQQQQEEEEEEOOOOOOOOOLOLLLKKKKKKKKKCCCEEEOOOOOOOFFFQFFFKKKKKKKKKJJBBBBBBBBBBF
|
||||||
|
YYYYYLLLLLLLLLLOOOOOLOOOOJJJXXWWWWBBBBQQHGHHHHHHUHDDDGVVVVVVVVQQQQQQEEEEEEEEXXOOOOOOOOLLGKKKKKKKKKKEEEEEEOEOOFOFFQQFFFFKKKKKKKOZZBBBZBBBBBFF
|
||||||
|
YYYYYLLLLGLLLGGGGGOOOOOOOOJXXXWOWWBBBQQQQHHHHHHHHHDVVVVVVVVVVVDQQQQQLEEEEEEOOOOOOOOOOLLKKKKKKKKKKKPPPEEEEEEOOFFFFFFFFFFFFFKKKKOOZUZZZZBBBBBB
|
||||||
|
YYYLLLLGGGGLGGGGGOOOOOOOPXJXXXXXBBBBBBQQQQQHHHHHHHDDVDDDVVDDDDDQQLLQLLLYEEEYOOOOOOOOOUKKKKKKKKKKKKKPPPEEEEOOOFFFFFFFFFFFFMMKMKKOZZZGZBBJJJJJ
|
||||||
|
YYYLGGLGGGGGGGGGOOOOOOOOOXXXXXXXBBBBBQQQQQQQHHQQDDDDDDDDDDDDDDDLLLLLLLLYYVYYQOOOOOOOOKKKKKKKKKKKLKPPPEEEEEOOOOFTFFFFFFFFFMMMMFKOZZZZZJJJJJJJ
|
||||||
|
YYYGGGGGGGGGGGGOOOOOOOOXXXXXXXXXXBIIIIIQQQQQHHQQQQQQQDDDDDDDDDDLLLLLLLLYYYYQQOOOOOOOOOOKKKKKKKKKKPPPEEEEEOOOOOOTFFFFFFFFFFMFFFZZZZZZZZJJJJJN
|
||||||
|
YYYQGGGGGGGGGGOOOOOOOOOXXXXXXXXBBBIIIIQQIIIQQQQQQYQQKKKDDDDDDDDLLLLLLLLYYYYQQOOOOOOOOOOKKKKKKKKKKPPPEEEEEEOOOOFFFFFFFFFFFFFFFZZZZZZZZZJJNJJN
|
||||||
|
YYYYTTTGGGGGGGOOOOOOOOOOXXXXXXXBBBBIIIIIIIIQQQQQQQQQKKKKKDDDDDDLLLLLLLLYYYYYOOOOOOOOOOOPPPPPPKKKKPPPPEEEEEEEOFFFFFFFFFFFFFFFFFZZZZZZZJJJNNNN
|
||||||
|
TTYTTTTTGGGGGGOOOOOOOXXXXXXXXXXXXBIIIIIIIIIQQQQQQQQQKKKDDDDDDDDDLLLLLYYYYYYYOOOOOOOOOOOPPPPPPPPPPPPEEEEEEEEEFFFFFFFFFFFFFFFFFFFFFZZOZZJNNNNN
|
||||||
|
TTTTTTTGGDDGGOOOOOOOOXXXXXXXXXXIIIIIIIIIIIIQQQIQQQQQKKKDDDDDDDDLLLLYYYYYYYYYOOOOOOOOOOPPPPPPNNPPPPPPEEEEEEEEEQFFFFFFFFFFFFFFFFFFFZZDDZDDNNNN
|
||||||
|
TTTTTTTTGGOOOOOOOOOOOXXXXXXXXXXRIIIIIIIIIIIIIIIQQQKKDDDDDDDDDDDLLLLLYYYYYYYYOOOOOOOOOOOPPPPPNNPPPPPPPEEEEEEEEQEFSRFFFFFFFFFFFFFFFZDDDDDDNNNN
|
||||||
|
TTTTTTTTTTOOOOOOOOOOOOOXXXXXXXXXXIIIIIIIIIIIIIQQQQQMMMMMMMDDDDDMMMMMMMHHYYYYOOOOOOOOOOOPPPNNNNPPNPPOPEEEEEEEEEERRRFFFFFFFFGZFZFDDDDDDDDNNNNN
|
||||||
|
TTTTTTTTTTTOOOOOOOONONNNNXXXXXXXXIIIIIIIIIIIIIIQQQQMMMMMMMMMMMMMMMMMMMHYYYOOOOOOOOOOOOOPPPNNNNNNNPOOPOOEEEEEEFFRRRZZFFFFFZZZZZZDDDDDDDDTNNRN
|
||||||
|
TTTTTTTTTTTQOOOOOOONNNNNXXXXXXXXIIIGIIIIIIIIIIIPPQMMMMMMMMMMMMMMMMMMMMHYYYOOOOOOOOOOOOOPPNNNNNNNNPOOOOOOEEORRRRRRRRZZZZLZZZZZZDDDDDDDDDDDDRR
|
||||||
|
TTTTTTQQQTTQOOOOOOODNNNNXNXXXXXXXXXGIIIIIIWIINIMMMMMMMMMMMMMMMMMMMMMMMHYYYYYOOOOOOOOOOONNNNNNNNNNPOOOOOOOOOORRRRRRRZZZZZZZZZZDDDDDDDDDDDDDDD
|
||||||
|
TTTTTTQZQQQQQOOOFOOONNNNNNXXXGGXXXXGIIIWWWWWWWIMMMAMMMMMMMMMMMMMMMMMMMHYYYYOOOOOOOOOOOOONNNNNNNNNPOOOOOOOOOORRRRRRRZZZZZZZZZZDDDDDDDDDDDDQQD
|
||||||
|
TTTTTQQQQQQQQOEOOONFNNNNNNXGXGGXXXGGGWWWWWWWNWNNMMMMMMMMMMMMMMMMMMMMMMHYYYYOOOOOOOOOOMOMMNNNNNNMMOOOOOOOOOORRRRRRRRRZZZZZZZZZDAADDDDDDDDDQQQ
|
||||||
|
TTTTTQQQQQQQQOQQQONNNNNNNNGGXGIGGGGGGWWWWWWWWWNNFAAMMMMMMMMMMMMMMMMMMMYYYTTHHOOOOOOOMMMMMNNNNNNMOOOOOOOOOOOORRRRRRRZZZZZZZZZZZAPDPPPPDDDDQQQ
|
||||||
|
TATTTQQQQQQQQQQQQQQQQNNNNNGGGIIIIGGGGGWWWWWWWWWNFAAMMMMMMMMMMMMMMMMMMMYTTTTHHHOOOOOOMMMMMNMMNNMMOOOOOOOOOOOORRRRRRZZZZZZZZZZPPAPPPPPPDDDQQQQ
|
||||||
|
AAATTQQQQQQQQQQQQQQQGNNGGGGGIIIIIGIGZZZWWWWWWWWFFAAAAAAAPMMMMMMMMMMMMMTTTTTHHHOOOOOOMMMMMNMMMNMMOOOOOOOOOOOOVRZZRRZZZZZZZZZZPPPPPPPPPPDPQQQQ
|
||||||
|
AAAATQQQQQQQQQQQQQQQGGGGGGGIIIIIIIIGZZZWWWWWWWFFFFAFFAAAPMMMMMMMMMMTTTTTTTTHHHOUUUUOMMBBMMMMMMRRRRRRRROOOOOOOOZRRZZZZZZZZZZZPPPPPPPPPPPPQQQQ
|
||||||
|
AAAAAQGQQQQQQQQQQQQGGAAAAIIIIIIIIIIIZZZWWWWWFFFFFFFGFAAAPPPPPPPPPPDTTTTTTTTTTTOUUUUUBBLBMMMMMMRRRRRRRROOOOOOOOZZZZZZZZZZZZZZPPPPPPPPPPPPQQQQ
|
||||||
|
AAAAAAQQQQQQQQQQQQQAGGAAAIIIIIIIIIIWZZZWWWFFFFFFFFFFFAFAFPPPPPPPTTTTTTTTTTTTTTUUUUUUBBBBBBBBMMRRRRRRRROOOOOOODZDDDZZZZZTTZZPPPPPPPPPPPPPPQQQ
|
||||||
|
AAAAAAAAQQQAAAQQQQQAAAAAAAIIIIIIIIIWZZZWWFFFFFFFFFFFFFFFFPPPPPPPPTTTTTTTTTTTTTTTUUUUUBBBBBBMMMRRRRRRRROOOOOODDDFFDDZZZTTTTZPPPPPPPPPPPPPPPQQ
|
||||||
|
KAAAAAAAAQAAAAAWWWAAOAAAAAIIIIIIIIIIZZZWWWFFFFFFFFFFFFFFFFPPPPPPPTTTTTTTTTTTRRRRZUZZUBBBBBBMMMRRRRRRRROOOOOOVDDFDDDZZTTTTTTTPPPPPPPPPPPPPQQQ
|
||||||
|
KAAAAAAAAAAAAAAAAANNAAAABBIIIIIIIIIIZZZWWWWFFFFFFFFFFFFFFFPPPPPPPTTTTTTTTTTTRRRRZUZZUUBBBBBBMMRRRRRRRROOOOORRRRRRRRDZTTTTTTTPPPPPPPPPPPPPQQQ
|
||||||
|
AAAAAAAAAAAAAAAAANNNNBBBBBBIBIBIIIIIZZZWFFWFFFFFFFFFFFFFFPPPPPPPPOOTTTTTTTTTTTTZZZZRRRRRRRRRRRRRRRRRRROOOVVRRRRRRRRDDTTTTTTTPPPPPPPPPPPPPPQQ
|
||||||
|
AAAAASAAAAAAAAWWWBBBBBBBBBBBBMBBRIIWZZZWFFFFFFFFFFFFFKFFBPPPPPPOOOOXXTTTTTTTTTTZZZZRRRRRRRRRRRRRRRRRRRVVVVVRRRRRRRRDDTTTTTTTPPPPPPPQPPPQQQQQ
|
||||||
|
AAAAASAAAAAAAAWWWBBBBBBBBBBBBBBBWWZZZZZWFTFFFFFFFFKKKKFKPPPPPPPOOOOOXXTTTTTZZZZZZZZRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRDDTTTTTTTTPPPPPPRUPPQQQQQ
|
||||||
|
AAASSSAAAAAAAWWWWWBBBBBBBBBBBBBBWWZZZWWWFTTFFFFBKKKKKKKKPPPPPJOOOOOOOOTTTTTZZZZZZZZRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRSTTTTTTTTPPRRRRRRQQQQQQQQ
|
||||||
|
SAASSSSSAAAWWWWWBBBBBBBBBBBBBBBVVAZZZWWWMTTFFFFFKKKKKKKKPPPPPJJOOOOOOOTTTTOZZZZZZZZRRRRRRRRRRRRVVVVRRRRRRRRRRRRRRDDSSTTTTTTTTTEERRRRRRQQQQQQ
|
||||||
|
SSSSSSSWWWWWWWWWWWBBBBBBBBBBBBBBAAZZZXWMMMTMFFMMMKKKKKKKKPPPPPJOOOOOOOOOTTOZZZZZZZZRRRRRRRRRRRRVVVVRRRRRRRRRRRRRRDSSSTTTTTTTTTERRRRRRRRQQQQQ
|
||||||
|
SSSSSSSWWWWWWWWWWWWBBBBBBBBBBBBXXAZZZXMHMMMMMMMMMMKKKKKKKKKKPPPPOOOOOIOOOOODZZZZZZZZZZZRRRRRRRRVVKVRRRRRRRRRRRRRRSSSTTTTTTTTEEERRRRRRRQQQQQQ
|
||||||
|
SSSSSSSSWWWWWWWWWWBBBBBBBBBBTBBXXXZZZMMMMMMMMMMMMMKKKKKKKKKKPHOOOOOOOIOOOOODZDDZZZZZZZZRRRRRRRRVVKVRRRRRRRRRRRRRRSSSSSSSTEETEEEERRRRQQQQQQQQ
|
||||||
|
SSSSSSSSWWWWOOWWWWWBBBBBBBBBTTBXXXZZZMXMMMMMMMMMMMMKKKKKKKKKOOOOOOOIIIOOODDDDDDZZDZZZZZRRRRRRRRVVVVRRRRRRRRRRRRRRSSSSSSSTEEEEEEELLBRQQQQQQQQ
|
||||||
|
SSSSSSSSWWWOOWWWWWBBWVNBBBNBBBBXXXXMMMMMMMMMMMMMMMMMKKKKKKHKHOOOIIIIIIIOODDDDDDDZDZZZZZRRRRRRRRVVIVRRRRRRRRRRRRRRSSSSSSSTEEEEEEELLLRQLQQQQQT
|
||||||
|
SSSSSSSWWOOOOWWWWWWWWVBBBBNBBBBXBBBGGGMMMMMMMMMMMMKKKKKKKKHHHHOOIIIIIIIDDDDDDDDDDDZZZZZQQQQQQQQQIIVRRRRRRRRRRRRRRSSSSSSSEEEEEEEEELLLLLTTTTTT
|
||||||
|
SSSSSSWWOOOOOWWWVVVVVVVEBBDDBSBBBBBBBBBMMMMMMMMMMMKKKKKKKKHHHHIIIIIIIIIDDDDDDDDDDDDZZQQQQQQQQQQIIIIIUUURRRRRRRRRRSSSSSSREEEEEEEEELLLLLLLTTTT
|
||||||
|
SSSSSSWOOOOOOOWWWVVVVVVVDDDDBSBBBBBBBBBBMMMMMMMMMKKKKKKKHHHHHHIIIIIIIIIEDDDDDDDDDDXDQQQQQQQQQQQIIIIIUUUUUUUIISSSSSSSSSSRRERRRREEEELLLLLLTTTT
|
||||||
|
SSSSSSWWOOOOOOOOOVVVVVVVDDDDBBBBBBBBBBBBMMMMMMMMMKKKKKKKHHHHHHHIIIHIIIFDDDDDDDDDDDDDQQQQQQQQQQIIIIIIIUUUUUUIISISSSSSSSSRRERRRREEEELLLLLLTTTT
|
||||||
|
SSSSSSWWOOOOOOOOOOOVVVVVDDDDBBBBBBBBBBEEEMMMMMMMMKKKKKKPKHHHHHHIHHHHHHDDDDDDDDDDDDDDDDQQQQQQIIIIIIIIIUUUUUUIIIIISSSRRSXRRRRRRRRRBEELLLLLTTTT
|
||||||
|
SSSSSWWWOOOOOOOOOOOVVVVVDDDDBBBBBBBBCBBEEMMMMOOOKKKKKKKKKKKKKHHHHHHHDDDDDDDDDDDDDDDDDDQQQQQQMIIIIIIIUUUUUUIIIIIIIRRRRSSRRRRRRRRBBBBBLLLTTTTT
|
||||||
|
SSSSSSOOOOOOOOOOOOOVVVVVDDDDDBBBBBBBBEEEEMEMMOOKKKKKKKKKKKKKKHHHHHHHDDDDDDDDDDDDDDDMODQQQQQMMIIIOOOIIUUUOUIIIIIIIIRROOOOOOOOOORBVBBBLLLLLTTG
|
||||||
|
SSSSSSSOOOOOOOOOOBOVVVVVDDDDDEEBBBBBBEEEEEEOOOOOKKKKKKFKKKKKKHHHHHHHHDDDDDDDDDDDMDDMMMQQQQMMMMMIOIIIIIUUUUUIIIIIIIRROOOOOOOOOORYBBBBLBBLLLLG
|
||||||
|
KSSSSSOOOOOOOOOOOBOFVVDDDDDDDDEBEEBEEEEEEEEEOEOOKLKKKKKKKKKKKHHHHHHDDDDDDDDDDDDDMMMMMMMMQZMMMMMMOOOIIIIUUUIIIIIIIIRROOOOOOOOOOYYBBBBBBBLLLGG
|
||||||
|
KSSKKKXXXOOOOOOOOOFFVVDDDDDDDEEEEEEEEEEEEEEEEEEOOKKKKKKKKKKKKKHHHHHDFDDDDDDDDDDDMMMMMMMMZZMMMDDMOOOIIIIUUIIIIIIIIIIROOOOOOOOOOYYBBBBBBQIIIIG
|
||||||
|
KSKKKKXXXOOOOOOOHMFFVVDDDDDDDDEEEEEEEEEEEEEEEEEOOKKKKKKKKKKKKKHHHHHDFDDDDDDDDDDEEMMMMMMZZZMMMMMOOOOOOIIUIIIIIIIIIIIROOOOOOOOOOYYBBILBQQIIIII
|
||||||
|
KKKKKKKKKQOOOOOOOMFFVVVDDDDDEEEEEEEEEEEEEEEEEEEEOSSSSKKKKKKKKKHHHHHMMUDDDDDDDDTEEEMMMMMMZMMMMMOOOOOOOIIIIIIIIIIIIIRNOOOOOOOOOOYBBBIBBBBIIIII
|
||||||
|
KKKKKKKBBGGUOOOOOMMFMGDDDDDDEEEEEEEEEEEEEEEUEEEEOSSSSKKKKKKKQKKHHHHMMUUDDDDDDDTTTTTMMMMZZZZMMMMOOOOOOOOIIIIIIIIIIIRRRRRROOOOPYYIBIIIBIIIIIII
|
||||||
|
KKKKKKKBYYGGCCCODMMMMDDDDDDDEEEEEEEEEEEEEEEEEEEEOSSSSKSSSKSKKHHHHMMMMMUUTDDDTQTTTTMMMMMMZZZMMMOOOOOOOBOIIIIIIIIIIIIIRRRROOOOYYYIIIIIIIIIIIII
|
||||||
|
KKKKKKKYYYGGCCCTTTTTTPPDDDDDEEEEEEEEEEEEEEEEEEEEOSSSSSSSSSSSSHHHHHMMMMMMTTTTTTTTTXMYMGMMMMZZOOOOOOOOOOIIIIIXIIXXIIIIIIIIMPPPPYIIIIIIIIIIIIII
|
||||||
|
KKKKKKEEYYGGCCCTTTTTTTTDDDDDOCCEECCEEEEEEEEEEEEOOSSSSSSSSSSSSHHHHHMQYMMMTTTTTTTTTTTTLGGGOOOOOOOOOOIOOAIIIIIXXXXXXIIIIIMMMMPPPPIIIIIIIIIIIIII
|
||||||
|
KKKKKKEEYYYGCCCTTTTTTTTDDDUDCCCVVCCEYYEEEEEEEEEEOOSSSSSSSSSSSYYYYYYYYYPPPPTTTTTTTTSSGGGGGGGOOOOOOIIIOIIIIIIXXXXXXXIIIMMHMMMPMPMIIIIIIIIIIIII
|
||||||
|
KKKKKFYYYYYYCCCTTTTTTTTQDDDDCCCCCCCCYYYYEEEEEEEWOWSSSSSSSSSSYYYYYYYYYYYPPPPTTTTTTTKKBBGGGGGGGOOOOIIIIIIIIAAXXXXXXXIMMMMMMMMMMMMMIYIIIIIIIIII
|
||||||
|
KKKDFFYYCUCCCCCCTTTTTTTTWWWCCCCCCCCCCCYYYEEEEESWOWWWSSSSSSSSYYYYYYYYYYYYPPPTTTTPPPKKKBBGGGGGGOOOOIIIIIIIIAIXXXXXMIIIIMMMMMMMFFFFFIIIIIIIIIJJ
|
||||||
|
DDDDFFFFUUUUCCCCTTTTTTTTWWWCCCCCCCYYYYYYYEEEEEEWWWWWWWWSSSSVVYYYYYYTYYPPPPPPPPPPKPKKKBBKGQGGGOOIIIIIIIIDDDDDDDDDDMMMMMMMMMMHHFFFFIIFIIIIIJJJ
|
||||||
|
DDDDDFFUYUUUUTTTTTTTTTTTWWWCCCCCCCYYYYYYYYEEEEKWWWWWWWWWSSSVVYYYYYYYYPPPPPPPPPPPKKKKKKKKQQIGGOIIIIIIIIIDDDDDDDDDDMMMMMMMMMMHHHFFFFFFIIIIIIIJ
|
||||||
|
DDDDDFFUUUUUWTTTTTTTTTTTTTWWCCCCCCCYYYYVVEEVEEKWWWWWWWWWWWSVVYYYYYYYPPPPPPOPOPOOKKKKKKKKKQIIIIIIIIIIIIIDDDDDDDDDDMMMMMMMMMMMHFFFFFFFFFFIIFIP
|
||||||
|
DDDDDDDCCUUTTTTTTTTTTTTTTTWWCKCCCYYYYVVVDEVVEEKVWQQQQQQWWWSVVVYYYYPPPPPPPPOPOOOKKKKKKKKKKQIIIIIIIIIIIIIDDDDDDDDDDMMMMMMMMMMHHHFFFFFFFFFFFFPP
|
||||||
|
DDDDDDDCUUUTTTTTTTTTTTTTTTTWWMMYYYYYYVVVVVVVVVVVVQQQQQQWWWNNNNYYYYYPPPPPOOOOOOKKKKKKKKKRRIIIIIIIIIIIIIHDDDDDDDDDDMMMMMMMMMMMMFFFFFFFFFFFFFFP
|
||||||
|
DDDDDDDDUUUTTJTTTTBTTTTTTTTMMQMMMYYYYVVVVVQQQQQQQQQQQQQNBNNNNNNNNNPPPPPPOOOOOOOOKKKKKKKRRRIIIIIIIIIIIAHDDDDDDDDDDMMMMMMMMMMQRFFFFFFFFFFFFPPP
|
||||||
|
DDDDDDDDJUUJJJTTBBBBTTTTTTSMMMMMMYYYYVVVVVQQQQQQQQQQQQQNNNNNNNNNNNNPPPPPPOOOOOOOOOOJKKKGGIIIIIIIIIIIAAADDDDDDDDDDFMZMMMMMMMRRRRFFFFFFFFFPPPP
|
||||||
|
DDDDDDJJJJUJJBQBBBBBTTTTTTSMMMMMMYYYQQQQQQQQQQQQQQQQQQQGGNNNNNNNNNNNPPPPOOOOOOOOOOOOGGGGGIIIIIIIIIIAAAADDDDDDDDDDFFZMMMMWMMMRRRFFFFFFFFFPPPP
|
||||||
|
NDDKDDKJJJJJBBBBBBBTTTTHBTTMMMMMMYYYQQQQQQQQQQQQQQQQQQQGNNNNNNNNNNNNPPPOOOOOOOOOOOYOGGGGGIIIIIIIIIAAAAADDDDDDDDDDFFFFMMMMMMMRRFFFFFFFFFFPPPP
|
||||||
|
KDDKKDKWWWJJJBBBBBBBBBBBBMTMMMMMMYYVQQQQQQQQQQQQQQQUGGGGGNNNNNNNNNMNNPOOOOOOOOOOOOYGGGGGGYIGIIIIIAAAAAAAAAAAFFFFFFFFFFFSRRRRRRRPRFFFFFFFPPPP
|
||||||
|
KKKKKKKWWWJJJBBBBBBBBBBBBBBMMMMMMYMOVVVVVQQQQQQQQQUUGGNGNNNNNNNZZPZNZZNNOOOOOOOOOOOGGGGGGGGGGIIIAAAAAAAAAAAAAFFFFFFFFFFRRRRRRPPPPFFFPPPPPPPP
|
||||||
|
KKKKKKKWWWWJJBBBBBBBBBBBBBBBMMOOMMMOOVVVVQQQQQQUTUUUUUNNNNNNNNZZZZZZZNNNNOCOOOOOOOGGGGGGGGGGGJIAAAAAAAAAAAAAAFFFFFFFFFFFFRRPPPPPPPFPPPPTPTTT
|
||||||
|
KKKKKKKWWWWJJBBBBBBBBBBBBBBBBBBOOMOOOOIVGQQQQQQJZUUMMMNNNNNFNNZZZZZFZZNNNOCOOOOOOOGGGGGGGGGGGJJAAAAAAAAAAAAAAAAFFFFFFFFVVRPPPPPPPPPPPPTTTTTT
|
||||||
|
KKCKKKKWWWMMJBBBBBBBBBBBBBBBBBBOOOOOOGGGGQQQQQQZZZZZZMMNNNNFNNZZZZZZZZZNNNCOOWOVOGGGLLGGGGGJGJJAAPAAAAAAAAAAAZSSFFFFFFVVVVPPPPPPPPPPPPTTTTTT
|
||||||
|
KKCKMKKWWWMMMMBBLBBBBBBBBBBBBBBOOOOOOGGGGQQQQQQZZZZCCNNNFNNFFFFFZZZZZZZNNNCOOOLLLGGGLLLLLLJJJJFFFFAAAAAAAAAAASSSSFFFFVVVVVVPPPPPPPPPPTTTTTTT
|
||||||
|
CCCMMPMMMZMMMMBBVBBVVVBBBBBBBBBOOOOOOGGGGQQQQQQHZZZZZNNNFNFFFFFEZZZZZZZZNNCOCCCLLLLLLLLLLLLLJFFFFFDAABAKAKKKBKSSSSFFVVVVVOOPPPPPPPPPPTTTTTTT
|
||||||
|
CCCMMMMMMMMMMVVVVVVVVVVBBVBBBBOOOOOOOGGGGQQQQQQGZZZZANNGFFFFFFFFZZZZZZZZCCCCCCCLLLLLLLLLLLLLJJFFFFFKQKKKKKKKKKSSSSSSVVVOOOZPPPPPPPPPPTTTTTTT
|
||||||
|
CCCMMMMMMMMMMAAVVVVVVVVVVVOOOOOOOOOGGGGGGQQQQQQRZZZFAAAFFFFFFFFFFZZZZZZZCCCCCCCCLLLLLLLLLLLLLFFFFFFKKKKKKKKKKKKKSSSSSVVOOOZPPPPPPPPITTTTTTTT
|
||||||
|
KCMMMMMMMMAAMAAVVTVVVTVVOOOOOOOOOOOGXGGGGQQQQQQZZRZFFFFFFFFFFFFFFFZZZZZZCCCCCCCCLLLLLLLLLLLLLLFFFFFXKKKKKKKKKKKKKKSVVVVVOSPPPPPPPPIIITTTTTTT
|
||||||
|
KCKMMMMMMAAAAAAATTTVTTTOOOOOOOGOOGGGGGGGGGGGGGRRRRRFFFFFFFFFFFFFFIFZZZZZCSSCCCCCLLLLLLLLLLLYLFFFFFFFQKKKKKKKKKKKKKKKVVVVOOVVUPPPPIIIITTTTTTT
|
||||||
|
KKKKMMKMMAAAAAAAATTTTTTTTTTOOOGOGGGGGGEEGGGGGGGRRFFFFFFFFFFFFFFFFFFZZZZZCSCCCCCCLLLLLLLLLLLLLOOFFFFFQKKKKKKKKKKKKKKKKVVOOVVVPPPPPIIITTTTTTTT
|
||||||
|
KKKKKKKKMAAAAAATTTTTTTTTTTTTOOGGGGGGGGGGGGGGGGGRFFFFFFFFFFFFFFFFFFFZZZZVCCCCCCCCCLLLJJJJJJJJJOQFQQQQQQKKKKKKKKKKKKKQVVVOOVVVVPVVIIIIFTTTTTTT
|
||||||
|
KKKKKKKKKKKAAAATYRTTTTTTTTTTYYYGGGGGGGGGGGGGGGRRRRFFFFFFFFFFFFFFFFFZZZZVCCCCCCCCCCLLJJJJJJJJJQQQQQQQQKKKKKKKKKKKKKKKKKVVVVVVVPPVIIIIFFTTNTTD
|
||||||
|
KKKKKKKKKKKAAAARRRTTTTTTTTYYYYYUGGGGGGGGGGGGGGRVRVZAFFFAAAFFFNFTFFFKKSSCCCCCCCCCCCCCJJJJJJJJJOQQQQQQQKKKKXXXXKKKKKKKKKVVVVVVVVVVIFFFFFFFNFFF
|
||||||
|
KKKKKKKKKKKAAAARRRRTTTTRRRRLYYGGGGGGGGGGGGGGGRRVVVAAFFAAAAAFFNNSSSFFSSSSCCCCCCCCCCHHJJJJJJJJJOQQQQQNQKKKKKXXXKKKKKKKKKKVVVSVVVVFFFFFFFFFFFFF
|
||||||
|
KKKKKKKKKKKAAAARRRRRTRRRRRRRYYYGGGGGGGGGGGGGGRRVVVAAAAAAAAAFFNSSSSSSSSSSSCCCCCCCCCHZJJJJJJJJJJJJJNNNNKKKKKXXXXKKKWWDDKVVVVSVVVVSSSSFFFFFFFFF
|
||||||
|
HKKKKKKKKAAAAARRRRRRRRRRRYYAYYYYGGGGGGGGGGGGRRVUVVPAAAAAAAAWSSSSSSSSSSSSSCCCCCCCHHHHJJJJJJJJJJJJJJJNNNNKKXXXFFFKWWDDDKVVVVSSVVVSSFSSFFFFFFFF
|
||||||
|
HKKPKKKKAAAAAARHRRRRRRRRRRYYYYYYYGGGGGGGGGVVVVVVVVPAAAAAAAAAAAASSSSSSSSLLCCCCCCCHHHHJJJJJJJJJJJJJJJNNNNNNNNXNFFDWWDDDDVMVVSSSUVSSFFFFFFFFFFF
|
||||||
|
HCCCKKKAAAAGAARRRRRRRRRRRLYAYYYYYYGGGGGGGGVVVVVVVVVAAAAAAAAAASSSSSSSSSSLCCCCCCCCCCHIIIJJJJJJJJJJJJJNNNNNNNNNNAADDDDDDUMMMXXSSUUFFFFFFFFFFFFF
|
||||||
|
HCCCCKAAAAGGGGRRRRRRRRRRRLYYYYYYYYYRGGGGGZVVVVVVVVVAAAAAAAAAAASCCCCCCCCCWCCCCCCCYCHYYYJJJJJJJJJJJJJNNNNNNNNNNAWDDDDDDDDMMMMSSUMMFFFFFFFFFFFF
|
||||||
|
HCCHHKGGGGGGGGGRRRRRRRRRRRPYYYYYYYRRRRRVVVVVVVVVVVVAAAAAAAAAAASCCCCCCCCCHCHCCCZCYCYYYYJJJJJJJJJJJJJNNNNNNNNNNAWDDDDDDDDDMMMMMMMMFFFFFFFFFFFF
|
||||||
|
HHHHHHHGGGGGGGGRRRRRRRRRRRPPYYYYYRRRRRRRRRVVVVVVAAVAAAAAAAAAAAACCCCCCCCCHHHHHHZYYYYYYYJJJJJJJJJJJJJNNNNNNNNNNAAOOOODDDDMMMMMMMMMMMFFFFFFFFFF
|
||||||
|
HHHHHHHGGGGGJGGRRRRRRRRRPPPPYYKYYRRRRRRRRRVVVVVVAAAAAAAAAAAEASSCCCCCCCCCHHHHHYYYYYYYYYYYYYYYYPPPJJJNNNNNNNNAAAAOOOODDDMMMMMMMMMMMFFFFFFFFFFF
|
||||||
|
HHHHHHHGGGGGGGGRRRRRRRRRRPPFYYKFYFFFRRRRRVVVVVVVAAAAAAAAAAAESSSCCCCCCCCCHHHWHHHYYYYYYYYYYYYPPPPPJJJPPPPNNNAAAAAAAAODHMMMMMMMMMVBFFFFFFFFFFFF
|
||||||
|
HHHHHHGGGGGGTTTRYRRRRRTTFTPFFFKFFFFFRRRRRRXVVVVAAAAAAAAAAADSSSSCCCCCCCCCHHHHHHHYYYYYYYYYYYYYYPPPJJJPPPPPPPAAAAAAAAADHHMMMMMMMMMBFFFFFFFKKKKK
|
||||||
|
HHHHTGGGGGGGTTTTRRRRRRTTTTTFFFFFFFFFRRRRRXXVXXVVVAAAAAAAAADDDDHHHHHCCCCHHHHHHHHHYYYYYYYYYYYYYPPPPPPPPPPPPFAAAAAAAAAAHHHHHMMMMDBBFFBBBKKKKKKK
|
||||||
|
HHHHTTTGTTTTTTTTRRPRRRPPOTTFFFFFFFFFRRRRXXXXXXVVVVVAAAAAAADVDDDHHHHCCCCHHHHHHHHHYYYYYYYYYYHYPPPPPPPPPPPPPAAAAAAAUADAHHHHHHMHHDBBBFBBBBUUKKKY
|
||||||
|
HHHHTTTTTTTTTTTTPRPRGGPOOOFFFFFFFFFFFRRRXXXXVVVVVVVAAAVAAAVVDDVHHHHCCCCCCCCCCEYYYYYYYYYYYYYYPPPPPPPPPPPPPAAAAAAAAAAHHHHHHHHHDDDDBBBBBBUUKKKK
|
||||||
|
HHHTTTTTTTTTTTTTPPPPPPPOOFFFFFFFFFFFFFFXXXXXVVVVVVVAAVVVVVVVVVVHHHHCCCCCCCCCCTYEYYYYYYYYYYYPPPPPPPPPPRPYPAAAAAAAAAAAHHHHHHHDDDDBBBBBBUUUKKKK
|
||||||
|
HHHHYYTTTTTTTTTPPPPPPPPPOOFFFFFFFFFFFFFMMXXXXXVVVVVVVVVVVVGVVWWWHHHCCCCCCCCCCTEEEEEYYYYYYXYPPPPPPPPPBPPPPPAAAAAAAAAHHHHHBBBDYDBBBBBBUUKKKKKK
|
||||||
|
HHHHYYYTTTTTTTTPPPPPPPPOOOFFFFFFFFFFFFFMMXXXXXXVVVVVVVVVVVVVVWWWHHHHCCCCCCCCCTEEEEEYYYYQQQQDPPPPPVVPPPPPPPAAAAAAWAHHHHHHBBBYYYBBBBBBBUKKKKKK
|
||||||
|
HYYYYYYYYYTTPPPPPPPPPPPPPPFFFFFFFFFFFFMMMXXXXXVVVVVCCCCVVVRRRHHHHHHHCCCCCCCCCTTTTTTYQQYYQQQDDDDPPPVMPMMPPPDAAAAAAAHHHHHBBBBBYYBBBBBBUUUUKKKK
|
||||||
|
HHYYYYYYYYYPPPPPPPPPPPRPPPFFRFFVVFFFFVMMXXXXCVVVCCVCXVVVVVRRRHRRHHHSCCCCCCCCCTTTTTTYQQQQQQQDDDDDPVVMMMMMPMAAAAAAAAHHBBBBBBBYYBBBBBUUUUUUKKKK
|
||||||
|
HYYYYYYYYYYPPPPPPNNNAPRRRRRRRVVVVVFAVVVMMMXCCCVVCCCCCVVVVVRERRRRRHSSCCCCCCCCCTTTTTTTQQQQQQQQDDDDPVVMMMMMMMMAWAAOOSSSSBBBBBYYBBBBBBUUUUUUUKTK
|
||||||
|
YYYYYYYYYYYEEPPPPPNAAPPRRRRRVVVVVVFVVVVVCCXCCCCDCCMMMMMMVVVERRRRRSSSCCCCCCCCCTTTTTQQQQQQQQQQQDDDPZVVMMMMMMMMMMASSSSSVVBBBBBBBBBBBUUUUUUEETTE
|
||||||
|
MYYYYYYYYYYYEPPPPPPAAAAARRRRVVVVVVVVVVVVVCCCCCCDCCCCCMMMVDDEEEERRSSSCCCSNTTTTTTTTQQQQQQQQQQQQDDDDZZMMMMMMMMMMMSSSSSSSVBXBBBBBBBBBEEUUUUETTEE
|
||||||
|
MYYYYYYYYYYEEPDDAPAAAAAEAAAAVVVVVVVVVVVVVCCCCCCCCCCCCMCCVDDEEEERRSSSCCCSSTTTTTTTYQQQQQQQQQQQQQDDDZZMMMMMMMMMMMMSSSSSSSXXBBBBBBBBBYEEUEEEEEEE
|
||||||
|
MYYYYYYYYYYYEAAAAAAAAAAAAAAAVVVVVVVVVVVVVCCCCCCCCCCCCCCCCDEEEEERESSSCCCTTTTTTTTTTQQQQFQQQQQQQQDZZZZZZMZMMMMMMSSSSSSSXXXXXBBBBBBBLEEEEEEEEEEE
|
||||||
|
MYYYYYYYYYYYAAAAAAAAAAAAAAAAVVVVVVVVVVVVCCCCCCCCCCCCCCDDDDDDEEEEEESSCCCSTTTTTTTTTQQQQFFQQQQQQQZZZZZZZZZZMMMMMMMYSSSSXXXXXXGBBBBEEEEEEEEEEEEE
|
||||||
|
MYYYYYYYYYYMMAAAAAAAAAAAAAAAVVVVVVVVVVVCCCCCCCCCCCCCDDDDDDEEEEEEEESSSSSTTTTTTTTTTTFFFFFQQQQQQQZZZZZZZZZMMMMMMMWSSWWXXXXXXXGGMBBEEEEEEEEEEEEE
|
||||||
|
MYYYYYYYYMMMMMAAAAAAAAAAAAAAVVVVVVVVVVCCCCCCCCCCCCCCCDDDDDEEEEEEEESSSSSTTTTTTTTTTFFFFFFFFQQQQQQQZZZZZZJMMMMMMMWSSWXXXXXXXXGMMMMEUEEEEEEEEEEE
|
||||||
|
MYYYYYYMMMMMMMAAAAAAAAAUAAVVVVVVVVVVVVCCCCCCCCCCCCCCDDDDDDDEEEEEEEESRSEEETTTTYTFFFFFFFFFFQQQQQQQZZZZZZJMMMMMWWWWWWWXXGXGGGGGMMMEEEEEEEEEEEEE
|
||||||
|
YYYXXYYMMMMMMMAAAAAAAAAAAIVVVVVVVVVVVVVCCCCCCCCCCCCCDDDDDDDEEEEEEEEEEEEEETTTTYTFFFFFFFFFFQQQZZZZZZZZZJJJMMMMMMWWWWWXGGGGGGGMMMMEEEEEEEEEEEEE
|
||||||
@@ -0,0 +1,80 @@
|
|||||||
|
--- Day 13: Claw Contraption ---
|
||||||
|
|
||||||
|
Next up: the lobby of a resort on a tropical island. The Historians take a moment to admire the hexagonal floor tiles before spreading out.
|
||||||
|
|
||||||
|
Fortunately, it looks like the resort has a new arcade! Maybe you can win some prizes from the claw machines?
|
||||||
|
|
||||||
|
The claw machines here are a little unusual. Instead of a joystick or directional buttons to control the claw, these machines have two buttons labeled A and B. Worse, you can't just put in a token and play; it costs 3 tokens to push the A button and 1 token to push the B button.
|
||||||
|
|
||||||
|
With a little experimentation, you figure out that each machine's buttons are configured to move the claw a specific amount to the right (along the X axis) and a specific amount forward (along the Y axis) each time that button is pressed.
|
||||||
|
|
||||||
|
Each machine contains one prize; to win the prize, the claw must be positioned exactly above the prize on both the X and Y axes.
|
||||||
|
|
||||||
|
You wonder: what is the smallest number of tokens you would have to spend to win as many prizes as possible? You assemble a list of every machine's button behavior and prize location (your puzzle input). For example:
|
||||||
|
|
||||||
|
Button A: X+94, Y+34
|
||||||
|
Button B: X+22, Y+67
|
||||||
|
Prize: X=8400, Y=5400
|
||||||
|
|
||||||
|
Button A: X+26, Y+66
|
||||||
|
Button B: X+67, Y+21
|
||||||
|
Prize: X=12748, Y=12176
|
||||||
|
|
||||||
|
Button A: X+17, Y+86
|
||||||
|
Button B: X+84, Y+37
|
||||||
|
Prize: X=7870, Y=6450
|
||||||
|
|
||||||
|
Button A: X+69, Y+23
|
||||||
|
Button B: X+27, Y+71
|
||||||
|
Prize: X=18641, Y=10279
|
||||||
|
|
||||||
|
This list describes the button configuration and prize location of four different claw machines.
|
||||||
|
|
||||||
|
For now, consider just the first claw machine in the list:
|
||||||
|
|
||||||
|
Pushing the machine's A button would move the claw 94 units along the X axis and 34 units along the Y axis.
|
||||||
|
Pushing the B button would move the claw 22 units along the X axis and 67 units along the Y axis.
|
||||||
|
The prize is located at X=8400, Y=5400; this means that from the claw's initial position, it would need to move exactly 8400 units along the X axis and exactly 5400 units along the Y axis to be perfectly aligned with the prize in this machine.
|
||||||
|
|
||||||
|
The cheapest way to win the prize is by pushing the A button 80 times and the B button 40 times. This would line up the claw along the X axis (because 80*94 + 40*22 = 8400) and along the Y axis (because 80*34 + 40*67 = 5400). Doing this would cost 80*3 tokens for the A presses and 40*1 for the B presses, a total of 280 tokens.
|
||||||
|
|
||||||
|
For the second and fourth claw machines, there is no combination of A and B presses that will ever win a prize.
|
||||||
|
|
||||||
|
For the third claw machine, the cheapest way to win the prize is by pushing the A button 38 times and the B button 86 times. Doing this would cost a total of 200 tokens.
|
||||||
|
|
||||||
|
So, the most prizes you could possibly win is two; the minimum tokens you would have to spend to win all (two) prizes is 480.
|
||||||
|
|
||||||
|
You estimate that each button would need to be pressed no more than 100 times to win a prize. How else would someone be expected to play?
|
||||||
|
|
||||||
|
Figure out how to win as many prizes as possible. What is the fewest tokens you would have to spend to win all possible prizes?
|
||||||
|
|
||||||
|
Your puzzle answer was 37128.
|
||||||
|
--- Part Two ---
|
||||||
|
|
||||||
|
As you go to win the first prize, you discover that the claw is nowhere near where you expected it would be. Due to a unit conversion error in your measurements, the position of every prize is actually 10000000000000 higher on both the X and Y axis!
|
||||||
|
|
||||||
|
Add 10000000000000 to the X and Y position of every prize. After making this change, the example above would now look like this:
|
||||||
|
|
||||||
|
Button A: X+94, Y+34
|
||||||
|
Button B: X+22, Y+67
|
||||||
|
Prize: X=10000000008400, Y=10000000005400
|
||||||
|
|
||||||
|
Button A: X+26, Y+66
|
||||||
|
Button B: X+67, Y+21
|
||||||
|
Prize: X=10000000012748, Y=10000000012176
|
||||||
|
|
||||||
|
Button A: X+17, Y+86
|
||||||
|
Button B: X+84, Y+37
|
||||||
|
Prize: X=10000000007870, Y=10000000006450
|
||||||
|
|
||||||
|
Button A: X+69, Y+23
|
||||||
|
Button B: X+27, Y+71
|
||||||
|
Prize: X=10000000018641, Y=10000000010279
|
||||||
|
|
||||||
|
Now, it is only possible to win a prize on the second and fourth claw machines. Unfortunately, it will take many more than 100 presses to do so.
|
||||||
|
|
||||||
|
Using the corrected prize coordinates, figure out how to win as many prizes as possible. What is the fewest tokens you would have to spend to win all possible prizes?
|
||||||
|
|
||||||
|
Your puzzle answer was 74914228471331.
|
||||||
|
|
||||||
|
Both parts of this puzzle are complete! They provide two gold stars: **
|
||||||
Executable
+32
@@ -0,0 +1,32 @@
|
|||||||
|
#!/usr/bin/env python3
|
||||||
|
|
||||||
|
import sys, re
|
||||||
|
from sympy import solve
|
||||||
|
from sympy.abc import x, y
|
||||||
|
|
||||||
|
|
||||||
|
def prizes(a, b, prize):
|
||||||
|
sols = solve([a[0] * x + b[0] * y - prize[0], a[1] * x + b[1] * y - prize[1]], x, y, dict=True)
|
||||||
|
if len(sols) > 1: print('help!', sols)
|
||||||
|
if int(sols[0][x]) != sols[0][x] or int(sols[0][y]) != sols[0][y]: return 0
|
||||||
|
else: return 3*sols[0][x]+sols[0][y]
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == '__main__':
|
||||||
|
cms = open(sys.argv[1]).read().split('\n\n')
|
||||||
|
res1, res2 = 0, 0
|
||||||
|
for cm in cms:
|
||||||
|
g = re.search(r'Button A: X\+(?P<xa>\d+), Y\+(?P<ya>\d+)\nButton B: X\+(?P<xb>\d+), Y\+(?P<yb>\d+)\nPrize: X=(?P<px>\d+), Y=(?P<py>\d+)', cm)
|
||||||
|
button_a = (int(g['xa']), int(g['ya']))
|
||||||
|
button_b = (int(g['xb']), int(g['yb']))
|
||||||
|
prize = (int(g['px']), int(g['py']))
|
||||||
|
res1 += prizes(button_a, button_b, prize)
|
||||||
|
prize = (prize[0]+10000000000000, prize[1]+10000000000000)
|
||||||
|
res2 += prizes(button_a, button_b, prize)
|
||||||
|
|
||||||
|
# challenge 1
|
||||||
|
print(f"challenge 1:\n{res1}\n")
|
||||||
|
|
||||||
|
# challenge 2
|
||||||
|
print(f"challenge 2:\n{res2}")
|
||||||
|
|
||||||
@@ -0,0 +1,15 @@
|
|||||||
|
Button A: X+94, Y+34
|
||||||
|
Button B: X+22, Y+67
|
||||||
|
Prize: X=8400, Y=5400
|
||||||
|
|
||||||
|
Button A: X+26, Y+66
|
||||||
|
Button B: X+67, Y+21
|
||||||
|
Prize: X=12748, Y=12176
|
||||||
|
|
||||||
|
Button A: X+17, Y+86
|
||||||
|
Button B: X+84, Y+37
|
||||||
|
Prize: X=7870, Y=6450
|
||||||
|
|
||||||
|
Button A: X+69, Y+23
|
||||||
|
Button B: X+27, Y+71
|
||||||
|
Prize: X=18641, Y=10279
|
||||||
+1279
File diff suppressed because it is too large.
Load diff
@@ -0,0 +1,131 @@
|
|||||||
|
--- Day 14: Restroom Redoubt ---
|
||||||
|
|
||||||
|
One of The Historians needs to use the bathroom; fortunately, you know there's a bathroom near an unvisited location on their list, and so you're all quickly teleported directly to the lobby of Easter Bunny Headquarters.
|
||||||
|
|
||||||
|
Unfortunately, EBHQ seems to have "improved" bathroom security again after your last visit. The area outside the bathroom is swarming with robots!
|
||||||
|
|
||||||
|
To get The Historian safely to the bathroom, you'll need a way to predict where the robots will be in the future. Fortunately, they all seem to be moving on the tile floor in predictable straight lines.
|
||||||
|
|
||||||
|
You make a list (your puzzle input) of all of the robots' current positions (p) and velocities (v), one robot per line. For example:
|
||||||
|
|
||||||
|
p=0,4 v=3,-3
|
||||||
|
p=6,3 v=-1,-3
|
||||||
|
p=10,3 v=-1,2
|
||||||
|
p=2,0 v=2,-1
|
||||||
|
p=0,0 v=1,3
|
||||||
|
p=3,0 v=-2,-2
|
||||||
|
p=7,6 v=-1,-3
|
||||||
|
p=3,0 v=-1,-2
|
||||||
|
p=9,3 v=2,3
|
||||||
|
p=7,3 v=-1,2
|
||||||
|
p=2,4 v=2,-3
|
||||||
|
p=9,5 v=-3,-3
|
||||||
|
|
||||||
|
Each robot's position is given as p=x,y where x represents the number of tiles the robot is from the left wall and y represents the number of tiles from the top wall (when viewed from above). So, a position of p=0,0 means the robot is all the way in the top-left corner.
|
||||||
|
|
||||||
|
Each robot's velocity is given as v=x,y where x and y are given in tiles per second. Positive x means the robot is moving to the right, and positive y means the robot is moving down. So, a velocity of v=1,-2 means that each second, the robot moves 1 tile to the right and 2 tiles up.
|
||||||
|
|
||||||
|
The robots outside the actual bathroom are in a space which is 101 tiles wide and 103 tiles tall (when viewed from above). However, in this example, the robots are in a space which is only 11 tiles wide and 7 tiles tall.
|
||||||
|
|
||||||
|
The robots are good at navigating over/under each other (due to a combination of springs, extendable legs, and quadcopters), so they can share the same tile and don't interact with each other. Visually, the number of robots on each tile in this example looks like this:
|
||||||
|
|
||||||
|
1.12.......
|
||||||
|
...........
|
||||||
|
...........
|
||||||
|
......11.11
|
||||||
|
1.1........
|
||||||
|
.........1.
|
||||||
|
.......1...
|
||||||
|
|
||||||
|
These robots have a unique feature for maximum bathroom security: they can teleport. When a robot would run into an edge of the space they're in, they instead teleport to the other side, effectively wrapping around the edges. Here is what robot p=2,4 v=2,-3 does for the first few seconds:
|
||||||
|
|
||||||
|
Initial state:
|
||||||
|
...........
|
||||||
|
...........
|
||||||
|
...........
|
||||||
|
...........
|
||||||
|
..1........
|
||||||
|
...........
|
||||||
|
...........
|
||||||
|
|
||||||
|
After 1 second:
|
||||||
|
...........
|
||||||
|
....1......
|
||||||
|
...........
|
||||||
|
...........
|
||||||
|
...........
|
||||||
|
...........
|
||||||
|
...........
|
||||||
|
|
||||||
|
After 2 seconds:
|
||||||
|
...........
|
||||||
|
...........
|
||||||
|
...........
|
||||||
|
...........
|
||||||
|
...........
|
||||||
|
......1....
|
||||||
|
...........
|
||||||
|
|
||||||
|
After 3 seconds:
|
||||||
|
...........
|
||||||
|
...........
|
||||||
|
........1..
|
||||||
|
...........
|
||||||
|
...........
|
||||||
|
...........
|
||||||
|
...........
|
||||||
|
|
||||||
|
After 4 seconds:
|
||||||
|
...........
|
||||||
|
...........
|
||||||
|
...........
|
||||||
|
...........
|
||||||
|
...........
|
||||||
|
...........
|
||||||
|
..........1
|
||||||
|
|
||||||
|
After 5 seconds:
|
||||||
|
...........
|
||||||
|
...........
|
||||||
|
...........
|
||||||
|
.1.........
|
||||||
|
...........
|
||||||
|
...........
|
||||||
|
...........
|
||||||
|
|
||||||
|
The Historian can't wait much longer, so you don't have to simulate the robots for very long. Where will the robots be after 100 seconds?
|
||||||
|
|
||||||
|
In the above example, the number of robots on each tile after 100 seconds has elapsed looks like this:
|
||||||
|
|
||||||
|
......2..1.
|
||||||
|
...........
|
||||||
|
1..........
|
||||||
|
.11........
|
||||||
|
.....1.....
|
||||||
|
...12......
|
||||||
|
.1....1....
|
||||||
|
|
||||||
|
To determine the safest area, count the number of robots in each quadrant after 100 seconds. Robots that are exactly in the middle (horizontally or vertically) don't count as being in any quadrant, so the only relevant robots are:
|
||||||
|
|
||||||
|
..... 2..1.
|
||||||
|
..... .....
|
||||||
|
1.... .....
|
||||||
|
|
||||||
|
..... .....
|
||||||
|
...12 .....
|
||||||
|
.1... 1....
|
||||||
|
|
||||||
|
In this example, the quadrants contain 1, 3, 4, and 1 robot. Multiplying these together gives a total safety factor of 12.
|
||||||
|
|
||||||
|
Predict the motion of the robots in your list within a space which is 101 tiles wide and 103 tiles tall. What will the safety factor be after exactly 100 seconds have elapsed?
|
||||||
|
|
||||||
|
Your puzzle answer was 209409792.
|
||||||
|
--- Part Two ---
|
||||||
|
|
||||||
|
During the bathroom break, someone notices that these robots seem awfully similar to ones built and used at the North Pole. If they're the same type of robots, they should have a hard-coded Easter egg: very rarely, most of the robots should arrange themselves into a picture of a Christmas tree.
|
||||||
|
|
||||||
|
What is the fewest number of seconds that must elapse for the robots to display the Easter egg?
|
||||||
|
|
||||||
|
Your puzzle answer was 8006.
|
||||||
|
|
||||||
|
Both parts of this puzzle are complete! They provide two gold stars: **
|
||||||
Executable
+50
@@ -0,0 +1,50 @@
|
|||||||
|
#!/usr/bin/env python3
|
||||||
|
|
||||||
|
import sys, re
|
||||||
|
|
||||||
|
|
||||||
|
def show(mp):
|
||||||
|
for line in mp:
|
||||||
|
print(''.join(line))
|
||||||
|
|
||||||
|
|
||||||
|
def easter_egg(robots, w, h):
|
||||||
|
for steps in range(7000, 10000):
|
||||||
|
print('Steps: ', steps)
|
||||||
|
m = [['.'] * w for _ in range(h)]
|
||||||
|
for r in robots:
|
||||||
|
px, py, vx, vy = map(int, r)
|
||||||
|
nx = (px + steps*vx)%w
|
||||||
|
ny = (py + steps*vy)%h
|
||||||
|
m[ny][nx] = 'X'
|
||||||
|
show(m)
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == '__main__':
|
||||||
|
robot = re.compile(r'p=(?P<px>-?\d+),(?P<py>-?\d+) v=(?P<vx>-?\d+),(?P<vy>-?\d+)')
|
||||||
|
robots = [robot.search(line.strip('\n')).groups() for line in open(sys.argv[1])]
|
||||||
|
|
||||||
|
# space: 11 x 7 for example and 101 x 103 for real input
|
||||||
|
w, h = 101, 103
|
||||||
|
steps = 100
|
||||||
|
q1, q2, q3, q4 = 0,0,0,0
|
||||||
|
for r in robots:
|
||||||
|
px, py, vx, vy = map(int,r)
|
||||||
|
nx = (px + 100*vx)%w
|
||||||
|
ny = (py+100*vy)%h
|
||||||
|
if nx in range(0, w//2):
|
||||||
|
if ny in range(0,h//2): q1 += 1
|
||||||
|
if ny in range(h//2+1,h): q2 += 1
|
||||||
|
if nx in range(w//2+1,w):
|
||||||
|
if ny in range(0,h//2): q3 += 1
|
||||||
|
if ny in range(h//2+1,h): q4 += 1
|
||||||
|
|
||||||
|
# challenge 1
|
||||||
|
res1 = q1 * q2 * q3 * q4
|
||||||
|
print(f"challenge 1:\n{res1}\n")
|
||||||
|
|
||||||
|
# challenge 2
|
||||||
|
easter_egg( robots, w, h)
|
||||||
|
res2 = "8006" # empirical solution
|
||||||
|
print(f"challenge 2:\n{res2}")
|
||||||
|
|
||||||
@@ -0,0 +1,12 @@
|
|||||||
|
p=0,4 v=3,-3
|
||||||
|
p=6,3 v=-1,-3
|
||||||
|
p=10,3 v=-1,2
|
||||||
|
p=2,0 v=2,-1
|
||||||
|
p=0,0 v=1,3
|
||||||
|
p=3,0 v=-2,-2
|
||||||
|
p=7,6 v=-1,-3
|
||||||
|
p=3,0 v=-1,-2
|
||||||
|
p=9,3 v=2,3
|
||||||
|
p=7,3 v=-1,2
|
||||||
|
p=2,4 v=2,-3
|
||||||
|
p=9,5 v=-3,-3
|
||||||
@@ -0,0 +1,500 @@
|
|||||||
|
p=24,25 v=-48,-26
|
||||||
|
p=7,8 v=-96,-2
|
||||||
|
p=7,80 v=-66,22
|
||||||
|
p=5,18 v=25,-98
|
||||||
|
p=45,67 v=26,90
|
||||||
|
p=54,71 v=3,67
|
||||||
|
p=62,66 v=-5,81
|
||||||
|
p=5,82 v=-7,-45
|
||||||
|
p=66,89 v=93,-43
|
||||||
|
p=70,51 v=33,-7
|
||||||
|
p=75,59 v=-20,-77
|
||||||
|
p=66,40 v=93,55
|
||||||
|
p=32,79 v=79,45
|
||||||
|
p=99,13 v=-18,50
|
||||||
|
p=13,68 v=-43,-53
|
||||||
|
p=84,85 v=-69,-65
|
||||||
|
p=37,84 v=11,-57
|
||||||
|
p=28,10 v=19,-93
|
||||||
|
p=78,82 v=-56,36
|
||||||
|
p=20,69 v=-3,-62
|
||||||
|
p=39,78 v=27,-1
|
||||||
|
p=51,87 v=-32,-17
|
||||||
|
p=90,26 v=20,66
|
||||||
|
p=35,89 v=-11,20
|
||||||
|
p=71,2 v=-80,92
|
||||||
|
p=41,40 v=-64,-30
|
||||||
|
p=38,8 v=-71,54
|
||||||
|
p=72,58 v=36,-80
|
||||||
|
p=62,97 v=52,83
|
||||||
|
p=96,74 v=90,-23
|
||||||
|
p=76,75 v=-43,-9
|
||||||
|
p=35,95 v=74,13
|
||||||
|
p=90,17 v=99,6
|
||||||
|
p=61,26 v=17,81
|
||||||
|
p=43,71 v=-43,-51
|
||||||
|
p=6,18 v=-62,-9
|
||||||
|
p=37,62 v=-23,-11
|
||||||
|
p=60,97 v=36,-64
|
||||||
|
p=54,63 v=-23,-95
|
||||||
|
p=76,85 v=24,-4
|
||||||
|
p=38,54 v=-38,-95
|
||||||
|
p=48,18 v=52,-49
|
||||||
|
p=45,36 v=-75,-4
|
||||||
|
p=31,87 v=64,50
|
||||||
|
p=4,87 v=68,9
|
||||||
|
p=25,40 v=99,53
|
||||||
|
p=74,18 v=-73,-71
|
||||||
|
p=5,22 v=76,65
|
||||||
|
p=66,12 v=96,-64
|
||||||
|
p=20,71 v=68,-3
|
||||||
|
p=3,20 v=4,-77
|
||||||
|
p=27,43 v=49,55
|
||||||
|
p=25,70 v=-52,-84
|
||||||
|
p=90,64 v=39,52
|
||||||
|
p=32,69 v=82,88
|
||||||
|
p=2,97 v=-78,76
|
||||||
|
p=56,6 v=-71,-27
|
||||||
|
p=91,31 v=84,-41
|
||||||
|
p=25,12 v=-91,-51
|
||||||
|
p=7,43 v=-11,59
|
||||||
|
p=3,55 v=-6,-44
|
||||||
|
p=83,102 v=9,-76
|
||||||
|
p=54,40 v=-94,5
|
||||||
|
p=3,77 v=80,45
|
||||||
|
p=32,6 v=3,-35
|
||||||
|
p=14,34 v=-74,-41
|
||||||
|
p=16,30 v=-21,-86
|
||||||
|
p=34,71 v=-75,-62
|
||||||
|
p=79,11 v=67,-10
|
||||||
|
p=80,11 v=61,9
|
||||||
|
p=14,84 v=-59,-83
|
||||||
|
p=73,66 v=-56,3
|
||||||
|
p=26,61 v=41,-70
|
||||||
|
p=45,35 v=-97,40
|
||||||
|
p=84,39 v=-99,55
|
||||||
|
p=95,50 v=-66,-56
|
||||||
|
p=17,35 v=-33,-74
|
||||||
|
p=33,51 v=4,-22
|
||||||
|
p=6,77 v=-49,-45
|
||||||
|
p=9,61 v=28,85
|
||||||
|
p=14,91 v=-70,-12
|
||||||
|
p=88,73 v=49,-14
|
||||||
|
p=73,39 v=-16,73
|
||||||
|
p=68,83 v=25,60
|
||||||
|
p=3,31 v=83,62
|
||||||
|
p=31,102 v=30,-49
|
||||||
|
p=29,29 v=45,-23
|
||||||
|
p=47,37 v=97,26
|
||||||
|
p=35,46 v=87,39
|
||||||
|
p=13,36 v=-74,-37
|
||||||
|
p=81,33 v=81,-17
|
||||||
|
p=6,20 v=-14,43
|
||||||
|
p=94,41 v=89,-72
|
||||||
|
p=55,44 v=-91,95
|
||||||
|
p=92,87 v=-17,64
|
||||||
|
p=54,79 v=-57,-58
|
||||||
|
p=53,49 v=-19,-84
|
||||||
|
p=25,21 v=56,-82
|
||||||
|
p=82,53 v=51,-85
|
||||||
|
p=75,27 v=69,-4
|
||||||
|
p=21,87 v=61,-6
|
||||||
|
p=6,63 v=-74,-77
|
||||||
|
p=20,4 v=89,-33
|
||||||
|
p=21,25 v=-78,62
|
||||||
|
p=24,0 v=-74,43
|
||||||
|
p=34,86 v=-43,74
|
||||||
|
p=72,83 v=-35,85
|
||||||
|
p=47,17 v=41,87
|
||||||
|
p=3,73 v=-77,-36
|
||||||
|
p=98,96 v=-73,75
|
||||||
|
p=66,93 v=-26,20
|
||||||
|
p=48,79 v=56,-69
|
||||||
|
p=91,89 v=-47,9
|
||||||
|
p=49,11 v=96,-47
|
||||||
|
p=33,4 v=-86,-16
|
||||||
|
p=76,45 v=-46,3
|
||||||
|
p=12,28 v=-40,36
|
||||||
|
p=64,99 v=-79,-83
|
||||||
|
p=19,83 v=-10,-3
|
||||||
|
p=87,57 v=84,-33
|
||||||
|
p=47,69 v=-64,-58
|
||||||
|
p=56,9 v=33,-60
|
||||||
|
p=98,94 v=-14,-25
|
||||||
|
p=60,59 v=-1,-41
|
||||||
|
p=18,91 v=-93,-85
|
||||||
|
p=24,21 v=98,-85
|
||||||
|
p=51,83 v=-23,45
|
||||||
|
p=12,41 v=-41,-34
|
||||||
|
p=8,86 v=-55,-50
|
||||||
|
p=23,48 v=-11,73
|
||||||
|
p=46,24 v=-4,-75
|
||||||
|
p=12,82 v=-6,-47
|
||||||
|
p=78,37 v=-16,-55
|
||||||
|
p=13,59 v=68,-66
|
||||||
|
p=63,100 v=44,83
|
||||||
|
p=99,66 v=31,-65
|
||||||
|
p=21,97 v=17,-7
|
||||||
|
p=1,101 v=91,-90
|
||||||
|
p=16,74 v=90,8
|
||||||
|
p=15,102 v=98,-9
|
||||||
|
p=31,34 v=12,91
|
||||||
|
p=49,65 v=-8,96
|
||||||
|
p=48,62 v=-41,-58
|
||||||
|
p=57,13 v=-72,61
|
||||||
|
p=82,30 v=-69,47
|
||||||
|
p=31,21 v=41,-44
|
||||||
|
p=25,93 v=-30,-69
|
||||||
|
p=33,45 v=4,-96
|
||||||
|
p=57,15 v=59,10
|
||||||
|
p=6,74 v=61,-43
|
||||||
|
p=9,43 v=-64,51
|
||||||
|
p=69,67 v=10,-51
|
||||||
|
p=44,93 v=60,93
|
||||||
|
p=39,77 v=94,-39
|
||||||
|
p=38,86 v=86,12
|
||||||
|
p=43,98 v=26,75
|
||||||
|
p=64,49 v=-87,-84
|
||||||
|
p=13,64 v=42,30
|
||||||
|
p=69,91 v=-39,-91
|
||||||
|
p=83,100 v=-12,61
|
||||||
|
p=28,66 v=-62,-27
|
||||||
|
p=15,90 v=-3,-46
|
||||||
|
p=0,42 v=27,18
|
||||||
|
p=56,99 v=-24,-67
|
||||||
|
p=70,68 v=-61,74
|
||||||
|
p=7,8 v=-70,35
|
||||||
|
p=5,100 v=16,-13
|
||||||
|
p=83,49 v=-22,73
|
||||||
|
p=63,18 v=64,-56
|
||||||
|
p=78,84 v=28,-57
|
||||||
|
p=89,39 v=36,26
|
||||||
|
p=72,31 v=-80,51
|
||||||
|
p=72,88 v=8,70
|
||||||
|
p=29,8 v=34,65
|
||||||
|
p=36,11 v=-86,39
|
||||||
|
p=16,27 v=12,-52
|
||||||
|
p=63,63 v=59,63
|
||||||
|
p=1,4 v=-21,-79
|
||||||
|
p=95,86 v=-81,-79
|
||||||
|
p=30,27 v=90,21
|
||||||
|
p=17,40 v=81,-5
|
||||||
|
p=47,24 v=47,93
|
||||||
|
p=4,23 v=31,-49
|
||||||
|
p=61,34 v=-42,-78
|
||||||
|
p=34,61 v=-62,44
|
||||||
|
p=48,18 v=-12,-97
|
||||||
|
p=32,81 v=-74,-75
|
||||||
|
p=61,15 v=96,-98
|
||||||
|
p=8,86 v=87,-54
|
||||||
|
p=26,95 v=-63,71
|
||||||
|
p=94,61 v=13,48
|
||||||
|
p=26,101 v=94,-57
|
||||||
|
p=24,102 v=4,2
|
||||||
|
p=83,56 v=-56,44
|
||||||
|
p=96,37 v=91,-8
|
||||||
|
p=60,43 v=-18,5
|
||||||
|
p=93,68 v=92,1
|
||||||
|
p=79,57 v=-9,77
|
||||||
|
p=65,68 v=-16,-51
|
||||||
|
p=26,28 v=-44,-80
|
||||||
|
p=39,22 v=-75,-23
|
||||||
|
p=90,0 v=-73,83
|
||||||
|
p=66,88 v=10,75
|
||||||
|
p=61,55 v=-87,52
|
||||||
|
p=43,2 v=45,68
|
||||||
|
p=85,25 v=-91,-12
|
||||||
|
p=14,79 v=-50,-20
|
||||||
|
p=32,98 v=22,21
|
||||||
|
p=85,59 v=74,-5
|
||||||
|
p=4,50 v=-14,8
|
||||||
|
p=99,85 v=35,-28
|
||||||
|
p=76,80 v=-2,64
|
||||||
|
p=49,36 v=-8,14
|
||||||
|
p=60,65 v=-12,67
|
||||||
|
p=4,84 v=-98,-82
|
||||||
|
p=0,92 v=-74,-50
|
||||||
|
p=88,94 v=26,36
|
||||||
|
p=20,37 v=-7,-8
|
||||||
|
p=81,28 v=21,-59
|
||||||
|
p=95,33 v=-39,36
|
||||||
|
p=26,45 v=-86,23
|
||||||
|
p=82,19 v=2,-12
|
||||||
|
p=85,60 v=32,-44
|
||||||
|
p=5,60 v=79,10
|
||||||
|
p=53,33 v=-12,62
|
||||||
|
p=40,79 v=-71,-47
|
||||||
|
p=75,31 v=-95,95
|
||||||
|
p=43,2 v=41,-86
|
||||||
|
p=17,86 v=-81,82
|
||||||
|
p=10,15 v=-31,46
|
||||||
|
p=7,74 v=-25,89
|
||||||
|
p=69,8 v=-61,32
|
||||||
|
p=82,65 v=-39,74
|
||||||
|
p=73,101 v=-12,-79
|
||||||
|
p=51,9 v=93,-16
|
||||||
|
p=95,56 v=13,15
|
||||||
|
p=96,67 v=34,29
|
||||||
|
p=19,91 v=-31,89
|
||||||
|
p=2,43 v=-96,-55
|
||||||
|
p=68,60 v=17,-91
|
||||||
|
p=17,86 v=8,-43
|
||||||
|
p=5,95 v=16,71
|
||||||
|
p=49,20 v=37,21
|
||||||
|
p=6,67 v=-40,96
|
||||||
|
p=47,95 v=-32,-76
|
||||||
|
p=45,71 v=-81,2
|
||||||
|
p=46,31 v=-34,-89
|
||||||
|
p=49,17 v=-79,-97
|
||||||
|
p=66,82 v=18,-95
|
||||||
|
p=69,86 v=81,-21
|
||||||
|
p=5,87 v=-10,-21
|
||||||
|
p=84,81 v=47,97
|
||||||
|
p=89,9 v=13,-60
|
||||||
|
p=34,15 v=-67,-38
|
||||||
|
p=51,46 v=-28,-91
|
||||||
|
p=94,99 v=-21,-35
|
||||||
|
p=15,20 v=3,48
|
||||||
|
p=26,72 v=-32,13
|
||||||
|
p=80,5 v=-43,-20
|
||||||
|
p=64,82 v=-49,-75
|
||||||
|
p=56,58 v=-94,81
|
||||||
|
p=29,86 v=79,16
|
||||||
|
p=98,60 v=-36,4
|
||||||
|
p=23,47 v=-37,77
|
||||||
|
p=48,66 v=63,78
|
||||||
|
p=48,92 v=-97,74
|
||||||
|
p=58,86 v=85,27
|
||||||
|
p=99,85 v=57,97
|
||||||
|
p=98,53 v=-28,-25
|
||||||
|
p=72,44 v=-48,31
|
||||||
|
p=35,67 v=75,30
|
||||||
|
p=22,11 v=38,13
|
||||||
|
p=95,41 v=-85,36
|
||||||
|
p=3,55 v=-85,-66
|
||||||
|
p=50,57 v=-94,11
|
||||||
|
p=58,2 v=-42,-64
|
||||||
|
p=45,3 v=-97,10
|
||||||
|
p=1,30 v=97,-31
|
||||||
|
p=75,68 v=13,-58
|
||||||
|
p=79,101 v=62,-98
|
||||||
|
p=20,26 v=83,25
|
||||||
|
p=49,4 v=25,-16
|
||||||
|
p=46,54 v=89,7
|
||||||
|
p=86,42 v=-43,-81
|
||||||
|
p=6,3 v=-99,-5
|
||||||
|
p=74,50 v=-61,22
|
||||||
|
p=40,13 v=-38,-57
|
||||||
|
p=5,54 v=-5,-65
|
||||||
|
p=55,66 v=10,-25
|
||||||
|
p=52,82 v=-55,-28
|
||||||
|
p=70,18 v=-68,-49
|
||||||
|
p=54,10 v=-38,-16
|
||||||
|
p=79,35 v=54,-45
|
||||||
|
p=95,64 v=80,6
|
||||||
|
p=88,62 v=-56,78
|
||||||
|
p=65,28 v=-39,43
|
||||||
|
p=69,29 v=-35,-78
|
||||||
|
p=68,99 v=-5,79
|
||||||
|
p=37,22 v=30,-49
|
||||||
|
p=98,55 v=-92,-84
|
||||||
|
p=3,1 v=-10,-64
|
||||||
|
p=56,60 v=49,26
|
||||||
|
p=38,25 v=-56,91
|
||||||
|
p=93,22 v=46,87
|
||||||
|
p=97,11 v=13,-86
|
||||||
|
p=16,15 v=23,76
|
||||||
|
p=34,58 v=45,15
|
||||||
|
p=20,59 v=-12,72
|
||||||
|
p=30,78 v=-25,50
|
||||||
|
p=61,59 v=-53,37
|
||||||
|
p=33,2 v=75,-24
|
||||||
|
p=36,5 v=81,43
|
||||||
|
p=90,93 v=-10,50
|
||||||
|
p=60,74 v=14,96
|
||||||
|
p=56,40 v=-56,96
|
||||||
|
p=79,6 v=77,-71
|
||||||
|
p=87,64 v=-2,-62
|
||||||
|
p=25,66 v=64,-47
|
||||||
|
p=4,13 v=-66,54
|
||||||
|
p=47,57 v=67,59
|
||||||
|
p=39,64 v=90,-88
|
||||||
|
p=81,68 v=-73,52
|
||||||
|
p=59,36 v=-42,-89
|
||||||
|
p=0,4 v=14,83
|
||||||
|
p=20,5 v=-67,-9
|
||||||
|
p=100,45 v=20,-44
|
||||||
|
p=85,27 v=54,-48
|
||||||
|
p=58,54 v=-16,-11
|
||||||
|
p=71,4 v=-54,42
|
||||||
|
p=22,98 v=83,-46
|
||||||
|
p=32,7 v=-26,32
|
||||||
|
p=33,52 v=37,-62
|
||||||
|
p=82,33 v=-28,14
|
||||||
|
p=90,11 v=-88,-97
|
||||||
|
p=39,79 v=52,45
|
||||||
|
p=60,15 v=70,-79
|
||||||
|
p=3,38 v=-70,-29
|
||||||
|
p=10,80 v=27,-10
|
||||||
|
p=22,22 v=-89,7
|
||||||
|
p=23,29 v=-74,49
|
||||||
|
p=45,34 v=26,51
|
||||||
|
p=59,63 v=-3,41
|
||||||
|
p=9,28 v=-82,89
|
||||||
|
p=18,42 v=-10,-67
|
||||||
|
p=2,80 v=-3,-80
|
||||||
|
p=94,73 v=13,89
|
||||||
|
p=89,73 v=-50,-40
|
||||||
|
p=22,85 v=71,-38
|
||||||
|
p=20,99 v=52,-10
|
||||||
|
p=40,89 v=52,27
|
||||||
|
p=47,99 v=-18,59
|
||||||
|
p=71,55 v=25,-47
|
||||||
|
p=69,102 v=-31,-64
|
||||||
|
p=67,43 v=-91,44
|
||||||
|
p=79,27 v=69,-72
|
||||||
|
p=43,53 v=89,22
|
||||||
|
p=59,30 v=26,-46
|
||||||
|
p=53,54 v=37,-33
|
||||||
|
p=72,11 v=-80,-27
|
||||||
|
p=56,63 v=33,-14
|
||||||
|
p=53,61 v=24,86
|
||||||
|
p=40,77 v=-17,-66
|
||||||
|
p=88,88 v=53,33
|
||||||
|
p=40,82 v=56,-76
|
||||||
|
p=16,2 v=60,-94
|
||||||
|
p=17,83 v=-78,-3
|
||||||
|
p=16,99 v=-44,13
|
||||||
|
p=88,19 v=-73,40
|
||||||
|
p=61,16 v=36,-30
|
||||||
|
p=1,90 v=-21,-80
|
||||||
|
p=65,92 v=-95,-30
|
||||||
|
p=100,98 v=24,31
|
||||||
|
p=45,54 v=-42,30
|
||||||
|
p=87,60 v=56,-57
|
||||||
|
p=97,43 v=75,-96
|
||||||
|
p=54,64 v=3,69
|
||||||
|
p=73,29 v=-5,84
|
||||||
|
p=69,5 v=-99,-27
|
||||||
|
p=18,8 v=98,94
|
||||||
|
p=9,4 v=92,61
|
||||||
|
p=69,50 v=38,34
|
||||||
|
p=9,52 v=-85,74
|
||||||
|
p=33,16 v=34,-86
|
||||||
|
p=38,68 v=15,45
|
||||||
|
p=93,82 v=25,17
|
||||||
|
p=22,34 v=6,-51
|
||||||
|
p=40,81 v=79,-6
|
||||||
|
p=62,20 v=23,86
|
||||||
|
p=2,21 v=43,-60
|
||||||
|
p=19,79 v=-74,38
|
||||||
|
p=70,3 v=-20,-81
|
||||||
|
p=57,66 v=-4,-22
|
||||||
|
p=54,36 v=65,-30
|
||||||
|
p=48,83 v=-60,-43
|
||||||
|
p=71,41 v=92,-56
|
||||||
|
p=90,66 v=-77,-62
|
||||||
|
p=65,15 v=-24,-79
|
||||||
|
p=49,48 v=-53,81
|
||||||
|
p=41,15 v=71,-49
|
||||||
|
p=59,58 v=83,18
|
||||||
|
p=27,84 v=-38,64
|
||||||
|
p=94,34 v=2,36
|
||||||
|
p=12,34 v=-55,-30
|
||||||
|
p=64,40 v=-27,29
|
||||||
|
p=74,28 v=-91,-63
|
||||||
|
p=81,86 v=-77,-10
|
||||||
|
p=83,26 v=32,47
|
||||||
|
p=20,44 v=-63,-96
|
||||||
|
p=1,48 v=-51,-11
|
||||||
|
p=69,18 v=-5,-82
|
||||||
|
p=63,18 v=16,-28
|
||||||
|
p=88,1 v=-2,46
|
||||||
|
p=80,44 v=2,33
|
||||||
|
p=10,35 v=72,10
|
||||||
|
p=79,35 v=45,-72
|
||||||
|
p=6,13 v=-18,3
|
||||||
|
p=40,43 v=41,-4
|
||||||
|
p=100,18 v=-51,-93
|
||||||
|
p=71,54 v=94,37
|
||||||
|
p=4,93 v=50,97
|
||||||
|
p=9,56 v=76,-77
|
||||||
|
p=89,38 v=-50,92
|
||||||
|
p=96,31 v=35,58
|
||||||
|
p=73,11 v=96,-86
|
||||||
|
p=36,67 v=-60,27
|
||||||
|
p=44,77 v=-82,71
|
||||||
|
p=67,53 v=96,61
|
||||||
|
p=14,82 v=72,42
|
||||||
|
p=96,14 v=65,98
|
||||||
|
p=91,8 v=78,-72
|
||||||
|
p=44,80 v=-22,-67
|
||||||
|
p=47,59 v=-75,48
|
||||||
|
p=90,52 v=-65,-3
|
||||||
|
p=10,41 v=-29,-70
|
||||||
|
p=57,90 v=-75,13
|
||||||
|
p=42,43 v=67,-85
|
||||||
|
p=51,72 v=33,79
|
||||||
|
p=33,87 v=60,56
|
||||||
|
p=93,55 v=-77,-44
|
||||||
|
p=31,29 v=64,-19
|
||||||
|
p=91,81 v=21,86
|
||||||
|
p=100,99 v=-66,-24
|
||||||
|
p=68,90 v=29,23
|
||||||
|
p=43,25 v=-6,-49
|
||||||
|
p=62,37 v=-98,-74
|
||||||
|
p=57,11 v=97,-83
|
||||||
|
p=89,85 v=74,14
|
||||||
|
p=29,18 v=48,-13
|
||||||
|
p=84,92 v=-43,-93
|
||||||
|
p=33,5 v=19,94
|
||||||
|
p=2,85 v=-58,12
|
||||||
|
p=18,95 v=-41,42
|
||||||
|
p=75,59 v=34,91
|
||||||
|
p=0,56 v=-51,-58
|
||||||
|
p=85,10 v=-91,-37
|
||||||
|
p=64,20 v=-42,-23
|
||||||
|
p=28,30 v=-27,7
|
||||||
|
p=18,46 v=-96,73
|
||||||
|
p=33,93 v=-93,-53
|
||||||
|
p=29,64 v=30,-29
|
||||||
|
p=65,53 v=-42,15
|
||||||
|
p=26,92 v=11,62
|
||||||
|
p=69,34 v=-99,-4
|
||||||
|
p=44,15 v=-94,-64
|
||||||
|
p=24,42 v=-22,88
|
||||||
|
p=37,8 v=41,87
|
||||||
|
p=22,77 v=-54,-54
|
||||||
|
p=9,13 v=-18,85
|
||||||
|
p=90,97 v=46,36
|
||||||
|
p=37,61 v=64,93
|
||||||
|
p=96,78 v=80,-47
|
||||||
|
p=92,62 v=6,74
|
||||||
|
p=19,20 v=-44,-23
|
||||||
|
p=63,43 v=-16,-4
|
||||||
|
p=85,0 v=-73,-64
|
||||||
|
p=37,53 v=-11,-81
|
||||||
|
p=28,55 v=11,-40
|
||||||
|
p=77,22 v=-72,-67
|
||||||
|
p=88,86 v=47,60
|
||||||
|
p=43,50 v=-19,-95
|
||||||
|
p=46,28 v=11,3
|
||||||
|
p=16,5 v=28,66
|
||||||
|
p=85,85 v=-36,-98
|
||||||
|
p=95,15 v=9,17
|
||||||
|
p=46,70 v=-64,82
|
||||||
|
p=24,49 v=38,-84
|
||||||
|
p=94,5 v=-24,-83
|
||||||
|
p=59,73 v=-98,49
|
||||||
|
p=13,75 v=72,12
|
||||||
|
p=68,27 v=-57,-5
|
||||||
|
p=13,71 v=-55,-84
|
||||||
|
p=57,12 v=-68,28
|
||||||
|
p=21,90 v=-45,16
|
||||||
|
p=38,4 v=-93,21
|
||||||
|
p=66,96 v=-72,-13
|
||||||
|
p=34,95 v=-41,-90
|
||||||
|
p=85,39 v=-18,-30
|
||||||
|
p=3,94 v=9,97
|
||||||
|
p=89,12 v=5,-67
|
||||||
|
p=44,58 v=-4,-62
|
||||||
+1040020
File diff suppressed because it is too large.
Load diff
@@ -0,0 +1,419 @@
|
|||||||
|
--- Day 15: Warehouse Woes ---
|
||||||
|
|
||||||
|
You appear back inside your own mini submarine! Each Historian drives their mini submarine in a different direction; maybe the Chief has his own submarine down here somewhere as well?
|
||||||
|
|
||||||
|
You look up to see a vast school of lanternfish swimming past you. On closer inspection, they seem quite anxious, so you drive your mini submarine over to see if you can help.
|
||||||
|
|
||||||
|
Because lanternfish populations grow rapidly, they need a lot of food, and that food needs to be stored somewhere. That's why these lanternfish have built elaborate warehouse complexes operated by robots!
|
||||||
|
|
||||||
|
These lanternfish seem so anxious because they have lost control of the robot that operates one of their most important warehouses! It is currently running amok, pushing around boxes in the warehouse with no regard for lanternfish logistics or lanternfish inventory management strategies.
|
||||||
|
|
||||||
|
Right now, none of the lanternfish are brave enough to swim up to an unpredictable robot so they could shut it off. However, if you could anticipate the robot's movements, maybe they could find a safe option.
|
||||||
|
|
||||||
|
The lanternfish already have a map of the warehouse and a list of movements the robot will attempt to make (your puzzle input). The problem is that the movements will sometimes fail as boxes are shifted around, making the actual movements of the robot difficult to predict.
|
||||||
|
|
||||||
|
For example:
|
||||||
|
|
||||||
|
##########
|
||||||
|
#..O..O.O#
|
||||||
|
#......O.#
|
||||||
|
#.OO..O.O#
|
||||||
|
#..O@..O.#
|
||||||
|
#O#..O...#
|
||||||
|
#O..O..O.#
|
||||||
|
#.OO.O.OO#
|
||||||
|
#....O...#
|
||||||
|
##########
|
||||||
|
|
||||||
|
<vv>^<v^>v>^vv^v>v<>v^v<v<^vv<<<^><<><>>v<vvv<>^v^>^<<<><<v<<<v^vv^v>^
|
||||||
|
vvv<<^>^v^^><<>>><>^<<><^vv^^<>vvv<>><^^v>^>vv<>v<<<<v<^v>^<^^>>>^<v<v
|
||||||
|
><>vv>v^v^<>><>>>><^^>vv>v<^^^>>v^v^<^^>v^^>v^<^v>v<>>v^v^<v>v^^<^^vv<
|
||||||
|
<<v<^>>^^^^>>>v^<>vvv^><v<<<>^^^vv^<vvv>^>v<^^^^v<>^>vvvv><>>v^<<^^^^^
|
||||||
|
^><^><>>><>^^<<^^v>>><^<v>^<vv>>v>>>^v><>^v><<<<v>>v<v<v>vvv>^<><<>^><
|
||||||
|
^>><>^v<><^vvv<^^<><v<<<<<><^v<<<><<<^^<v<^^^><^>>^<v^><<<^>>^v<v^v<v^
|
||||||
|
>^>>^v>vv>^<<^v<>><<><<v<<v><>v<^vv<<<>^^v^>^^>>><<^v>>v^v><^^>>^<>vv^
|
||||||
|
<><^^>^^^<><vvvvv^v<v<<>^v<v>v<<^><<><<><<<^^<<<^<<>><<><^^^>^^<>^>v<>
|
||||||
|
^^>vv<^v^v<vv>^<><v<^v>^^^>>>^^vvv^>vvv<>>>^<^>>>>>^<<^v>^vvv<>^<><<v>
|
||||||
|
v^^>>><<^^<>>^v^<v^vv<>v^<<>^<^v^v><^<<<><<^<v><v<>vv>>v><v^<vv<>v^<<^
|
||||||
|
|
||||||
|
As the robot (@) attempts to move, if there are any boxes (O) in the way, the robot will also attempt to push those boxes. However, if this action would cause the robot or a box to move into a wall (#), nothing moves instead, including the robot. The initial positions of these are shown on the map at the top of the document the lanternfish gave you.
|
||||||
|
|
||||||
|
The rest of the document describes the moves (^ for up, v for down, < for left, > for right) that the robot will attempt to make, in order. (The moves form a single giant sequence; they are broken into multiple lines just to make copy-pasting easier. Newlines within the move sequence should be ignored.)
|
||||||
|
|
||||||
|
Here is a smaller example to get started:
|
||||||
|
|
||||||
|
########
|
||||||
|
#..O.O.#
|
||||||
|
##@.O..#
|
||||||
|
#...O..#
|
||||||
|
#.#.O..#
|
||||||
|
#...O..#
|
||||||
|
#......#
|
||||||
|
########
|
||||||
|
|
||||||
|
<^^>>>vv<v>>v<<
|
||||||
|
|
||||||
|
Were the robot to attempt the given sequence of moves, it would push around the boxes as follows:
|
||||||
|
|
||||||
|
Initial state:
|
||||||
|
########
|
||||||
|
#..O.O.#
|
||||||
|
##@.O..#
|
||||||
|
#...O..#
|
||||||
|
#.#.O..#
|
||||||
|
#...O..#
|
||||||
|
#......#
|
||||||
|
########
|
||||||
|
|
||||||
|
Move <:
|
||||||
|
########
|
||||||
|
#..O.O.#
|
||||||
|
##@.O..#
|
||||||
|
#...O..#
|
||||||
|
#.#.O..#
|
||||||
|
#...O..#
|
||||||
|
#......#
|
||||||
|
########
|
||||||
|
|
||||||
|
Move ^:
|
||||||
|
########
|
||||||
|
#.@O.O.#
|
||||||
|
##..O..#
|
||||||
|
#...O..#
|
||||||
|
#.#.O..#
|
||||||
|
#...O..#
|
||||||
|
#......#
|
||||||
|
########
|
||||||
|
|
||||||
|
Move ^:
|
||||||
|
########
|
||||||
|
#.@O.O.#
|
||||||
|
##..O..#
|
||||||
|
#...O..#
|
||||||
|
#.#.O..#
|
||||||
|
#...O..#
|
||||||
|
#......#
|
||||||
|
########
|
||||||
|
|
||||||
|
Move >:
|
||||||
|
########
|
||||||
|
#..@OO.#
|
||||||
|
##..O..#
|
||||||
|
#...O..#
|
||||||
|
#.#.O..#
|
||||||
|
#...O..#
|
||||||
|
#......#
|
||||||
|
########
|
||||||
|
|
||||||
|
Move >:
|
||||||
|
########
|
||||||
|
#...@OO#
|
||||||
|
##..O..#
|
||||||
|
#...O..#
|
||||||
|
#.#.O..#
|
||||||
|
#...O..#
|
||||||
|
#......#
|
||||||
|
########
|
||||||
|
|
||||||
|
Move >:
|
||||||
|
########
|
||||||
|
#...@OO#
|
||||||
|
##..O..#
|
||||||
|
#...O..#
|
||||||
|
#.#.O..#
|
||||||
|
#...O..#
|
||||||
|
#......#
|
||||||
|
########
|
||||||
|
|
||||||
|
Move v:
|
||||||
|
########
|
||||||
|
#....OO#
|
||||||
|
##..@..#
|
||||||
|
#...O..#
|
||||||
|
#.#.O..#
|
||||||
|
#...O..#
|
||||||
|
#...O..#
|
||||||
|
########
|
||||||
|
|
||||||
|
Move v:
|
||||||
|
########
|
||||||
|
#....OO#
|
||||||
|
##..@..#
|
||||||
|
#...O..#
|
||||||
|
#.#.O..#
|
||||||
|
#...O..#
|
||||||
|
#...O..#
|
||||||
|
########
|
||||||
|
|
||||||
|
Move <:
|
||||||
|
########
|
||||||
|
#....OO#
|
||||||
|
##.@...#
|
||||||
|
#...O..#
|
||||||
|
#.#.O..#
|
||||||
|
#...O..#
|
||||||
|
#...O..#
|
||||||
|
########
|
||||||
|
|
||||||
|
Move v:
|
||||||
|
########
|
||||||
|
#....OO#
|
||||||
|
##.....#
|
||||||
|
#..@O..#
|
||||||
|
#.#.O..#
|
||||||
|
#...O..#
|
||||||
|
#...O..#
|
||||||
|
########
|
||||||
|
|
||||||
|
Move >:
|
||||||
|
########
|
||||||
|
#....OO#
|
||||||
|
##.....#
|
||||||
|
#...@O.#
|
||||||
|
#.#.O..#
|
||||||
|
#...O..#
|
||||||
|
#...O..#
|
||||||
|
########
|
||||||
|
|
||||||
|
Move >:
|
||||||
|
########
|
||||||
|
#....OO#
|
||||||
|
##.....#
|
||||||
|
#....@O#
|
||||||
|
#.#.O..#
|
||||||
|
#...O..#
|
||||||
|
#...O..#
|
||||||
|
########
|
||||||
|
|
||||||
|
Move v:
|
||||||
|
########
|
||||||
|
#....OO#
|
||||||
|
##.....#
|
||||||
|
#.....O#
|
||||||
|
#.#.O@.#
|
||||||
|
#...O..#
|
||||||
|
#...O..#
|
||||||
|
########
|
||||||
|
|
||||||
|
Move <:
|
||||||
|
########
|
||||||
|
#....OO#
|
||||||
|
##.....#
|
||||||
|
#.....O#
|
||||||
|
#.#O@..#
|
||||||
|
#...O..#
|
||||||
|
#...O..#
|
||||||
|
########
|
||||||
|
|
||||||
|
Move <:
|
||||||
|
########
|
||||||
|
#....OO#
|
||||||
|
##.....#
|
||||||
|
#.....O#
|
||||||
|
#.#O@..#
|
||||||
|
#...O..#
|
||||||
|
#...O..#
|
||||||
|
########
|
||||||
|
|
||||||
|
The larger example has many more moves; after the robot has finished those moves, the warehouse would look like this:
|
||||||
|
|
||||||
|
##########
|
||||||
|
#.O.O.OOO#
|
||||||
|
#........#
|
||||||
|
#OO......#
|
||||||
|
#OO@.....#
|
||||||
|
#O#.....O#
|
||||||
|
#O.....OO#
|
||||||
|
#O.....OO#
|
||||||
|
#OO....OO#
|
||||||
|
##########
|
||||||
|
|
||||||
|
The lanternfish use their own custom Goods Positioning System (GPS for short) to track the locations of the boxes. The GPS coordinate of a box is equal to 100 times its distance from the top edge of the map plus its distance from the left edge of the map. (This process does not stop at wall tiles; measure all the way to the edges of the map.)
|
||||||
|
|
||||||
|
So, the box shown below has a distance of 1 from the top edge of the map and 4 from the left edge of the map, resulting in a GPS coordinate of 100 * 1 + 4 = 104.
|
||||||
|
|
||||||
|
#######
|
||||||
|
#...O..
|
||||||
|
#......
|
||||||
|
|
||||||
|
The lanternfish would like to know the sum of all boxes' GPS coordinates after the robot finishes moving. In the larger example, the sum of all boxes' GPS coordinates is 10092. In the smaller example, the sum is 2028.
|
||||||
|
|
||||||
|
Predict the motion of the robot and boxes in the warehouse. After the robot is finished moving, what is the sum of all boxes' GPS coordinates?
|
||||||
|
|
||||||
|
Your puzzle answer was 1563092.
|
||||||
|
--- Part Two ---
|
||||||
|
|
||||||
|
The lanternfish use your information to find a safe moment to swim in and turn off the malfunctioning robot! Just as they start preparing a festival in your honor, reports start coming in that a second warehouse's robot is also malfunctioning.
|
||||||
|
|
||||||
|
This warehouse's layout is surprisingly similar to the one you just helped. There is one key difference: everything except the robot is twice as wide! The robot's list of movements doesn't change.
|
||||||
|
|
||||||
|
To get the wider warehouse's map, start with your original map and, for each tile, make the following changes:
|
||||||
|
|
||||||
|
If the tile is #, the new map contains ## instead.
|
||||||
|
If the tile is O, the new map contains [] instead.
|
||||||
|
If the tile is ., the new map contains .. instead.
|
||||||
|
If the tile is @, the new map contains @. instead.
|
||||||
|
|
||||||
|
This will produce a new warehouse map which is twice as wide and with wide boxes that are represented by []. (The robot does not change size.)
|
||||||
|
|
||||||
|
The larger example from before would now look like this:
|
||||||
|
|
||||||
|
####################
|
||||||
|
##....[]....[]..[]##
|
||||||
|
##............[]..##
|
||||||
|
##..[][]....[]..[]##
|
||||||
|
##....[]@.....[]..##
|
||||||
|
##[]##....[]......##
|
||||||
|
##[]....[]....[]..##
|
||||||
|
##..[][]..[]..[][]##
|
||||||
|
##........[]......##
|
||||||
|
####################
|
||||||
|
|
||||||
|
Because boxes are now twice as wide but the robot is still the same size and speed, boxes can be aligned such that they directly push two other boxes at once. For example, consider this situation:
|
||||||
|
|
||||||
|
#######
|
||||||
|
#...#.#
|
||||||
|
#.....#
|
||||||
|
#..OO@#
|
||||||
|
#..O..#
|
||||||
|
#.....#
|
||||||
|
#######
|
||||||
|
|
||||||
|
<vv<<^^<<^^
|
||||||
|
|
||||||
|
After appropriately resizing this map, the robot would push around these boxes as follows:
|
||||||
|
|
||||||
|
Initial state:
|
||||||
|
##############
|
||||||
|
##......##..##
|
||||||
|
##..........##
|
||||||
|
##....[][]@.##
|
||||||
|
##....[]....##
|
||||||
|
##..........##
|
||||||
|
##############
|
||||||
|
|
||||||
|
Move <:
|
||||||
|
##############
|
||||||
|
##......##..##
|
||||||
|
##..........##
|
||||||
|
##...[][]@..##
|
||||||
|
##....[]....##
|
||||||
|
##..........##
|
||||||
|
##############
|
||||||
|
|
||||||
|
Move v:
|
||||||
|
##############
|
||||||
|
##......##..##
|
||||||
|
##..........##
|
||||||
|
##...[][]...##
|
||||||
|
##....[].@..##
|
||||||
|
##..........##
|
||||||
|
##############
|
||||||
|
|
||||||
|
Move v:
|
||||||
|
##############
|
||||||
|
##......##..##
|
||||||
|
##..........##
|
||||||
|
##...[][]...##
|
||||||
|
##....[]....##
|
||||||
|
##.......@..##
|
||||||
|
##############
|
||||||
|
|
||||||
|
Move <:
|
||||||
|
##############
|
||||||
|
##......##..##
|
||||||
|
##..........##
|
||||||
|
##...[][]...##
|
||||||
|
##....[]....##
|
||||||
|
##......@...##
|
||||||
|
##############
|
||||||
|
|
||||||
|
Move <:
|
||||||
|
##############
|
||||||
|
##......##..##
|
||||||
|
##..........##
|
||||||
|
##...[][]...##
|
||||||
|
##....[]....##
|
||||||
|
##.....@....##
|
||||||
|
##############
|
||||||
|
|
||||||
|
Move ^:
|
||||||
|
##############
|
||||||
|
##......##..##
|
||||||
|
##...[][]...##
|
||||||
|
##....[]....##
|
||||||
|
##.....@....##
|
||||||
|
##..........##
|
||||||
|
##############
|
||||||
|
|
||||||
|
Move ^:
|
||||||
|
##############
|
||||||
|
##......##..##
|
||||||
|
##...[][]...##
|
||||||
|
##....[]....##
|
||||||
|
##.....@....##
|
||||||
|
##..........##
|
||||||
|
##############
|
||||||
|
|
||||||
|
Move <:
|
||||||
|
##############
|
||||||
|
##......##..##
|
||||||
|
##...[][]...##
|
||||||
|
##....[]....##
|
||||||
|
##....@.....##
|
||||||
|
##..........##
|
||||||
|
##############
|
||||||
|
|
||||||
|
Move <:
|
||||||
|
##############
|
||||||
|
##......##..##
|
||||||
|
##...[][]...##
|
||||||
|
##....[]....##
|
||||||
|
##...@......##
|
||||||
|
##..........##
|
||||||
|
##############
|
||||||
|
|
||||||
|
Move ^:
|
||||||
|
##############
|
||||||
|
##......##..##
|
||||||
|
##...[][]...##
|
||||||
|
##...@[]....##
|
||||||
|
##..........##
|
||||||
|
##..........##
|
||||||
|
##############
|
||||||
|
|
||||||
|
Move ^:
|
||||||
|
##############
|
||||||
|
##...[].##..##
|
||||||
|
##...@.[]...##
|
||||||
|
##....[]....##
|
||||||
|
##..........##
|
||||||
|
##..........##
|
||||||
|
##############
|
||||||
|
|
||||||
|
This warehouse also uses GPS to locate the boxes. For these larger boxes, distances are measured from the edge of the map to the closest edge of the box in question. So, the box shown below has a distance of 1 from the top edge of the map and 5 from the left edge of the map, resulting in a GPS coordinate of 100 * 1 + 5 = 105.
|
||||||
|
|
||||||
|
##########
|
||||||
|
##...[]...
|
||||||
|
##........
|
||||||
|
|
||||||
|
In the scaled-up version of the larger example from above, after the robot has finished all of its moves, the warehouse would look like this:
|
||||||
|
|
||||||
|
####################
|
||||||
|
##[].......[].[][]##
|
||||||
|
##[]...........[].##
|
||||||
|
##[]........[][][]##
|
||||||
|
##[]......[]....[]##
|
||||||
|
##..##......[]....##
|
||||||
|
##..[]............##
|
||||||
|
##..@......[].[][]##
|
||||||
|
##......[][]..[]..##
|
||||||
|
####################
|
||||||
|
|
||||||
|
The sum of these boxes' GPS coordinates is 9021.
|
||||||
|
|
||||||
|
Predict the motion of the robot and boxes in this new, scaled-up warehouse. What is the sum of all boxes' final GPS coordinates?
|
||||||
|
|
||||||
|
Your puzzle answer was 1582688.
|
||||||
|
|
||||||
|
Both parts of this puzzle are complete! They provide two gold stars: **
|
||||||
Executable
+112
@@ -0,0 +1,112 @@
|
|||||||
|
#!/usr/bin/env python3
|
||||||
|
|
||||||
|
import sys, os, time
|
||||||
|
from copy import deepcopy
|
||||||
|
|
||||||
|
|
||||||
|
def show(m):
|
||||||
|
for line in m:
|
||||||
|
sys.stdout.write("\r"+''.join(line)+'\n')
|
||||||
|
sys.stdout.flush()
|
||||||
|
time.sleep(0.2)
|
||||||
|
|
||||||
|
|
||||||
|
def gps(x, y):
|
||||||
|
return 100*y + x
|
||||||
|
|
||||||
|
|
||||||
|
def move_stone(m, x, y, move):
|
||||||
|
dir = {'^': (0,-1), '>': (1,0), 'v': (0,1), '<': (-1,0)}
|
||||||
|
nx, ny = x+dir[move][0], y+dir[move][1]
|
||||||
|
if m[ny][nx] == '#': return
|
||||||
|
if m[ny][nx] == 'O': move_stone(m, nx, ny, move)
|
||||||
|
if m[ny][nx] == '.':
|
||||||
|
m[ny][nx] = 'O'
|
||||||
|
m[y][x] = '.'
|
||||||
|
return
|
||||||
|
|
||||||
|
|
||||||
|
def move_box_h(m, x, y, move):
|
||||||
|
dir = {'^': (0,-1), '>': (1,0), 'v': (0,1), '<': (-1,0)}
|
||||||
|
nx, ny = x+dir[move][0], y
|
||||||
|
sym = m[y][x]
|
||||||
|
if m[ny][nx] == '#': return
|
||||||
|
if m[ny][nx] in ['[', ']']: move_box_h(m, nx, ny, move)
|
||||||
|
if m[ny][nx] == '.':
|
||||||
|
m[ny][nx] = sym
|
||||||
|
m[y][x] = '.'
|
||||||
|
return
|
||||||
|
|
||||||
|
|
||||||
|
def move_box_v(m, x, y, move):
|
||||||
|
dir = {'^': (0,-1), '>': (1,0), 'v': (0,1), '<': (-1,0)}
|
||||||
|
if m[y][x] == '[': x1, x2 = x, x+1
|
||||||
|
else: x1, x2 = x-1, x
|
||||||
|
nx1, nx2, ny = x1+dir[move][0], x2+dir[move][0], y+dir[move][1]
|
||||||
|
if m[ny][nx1] == '#' or m[ny][nx2] == '#': return m
|
||||||
|
if m[ny][nx1] == ']' and m[ny][nx2] == '[':
|
||||||
|
mp = deepcopy(m)
|
||||||
|
mp = move_box_v(mp, nx1, ny, move)
|
||||||
|
mp = move_box_v(mp, nx2, ny, move)
|
||||||
|
if mp[ny][nx1] == '.' and mp[ny][nx2] == '.': m = deepcopy(mp)
|
||||||
|
elif m[ny][nx1] in ['[', ']']: m = move_box_v(m, nx1, ny, move)
|
||||||
|
elif m[ny][nx2] in ['[', ']']: m = move_box_v(m, nx2, ny, move)
|
||||||
|
if m[ny][nx1] == '.' and m[ny][nx2] == '.':
|
||||||
|
m[ny][nx1] = '['
|
||||||
|
m[ny][nx2] = ']'
|
||||||
|
m[y][x1] = '.'
|
||||||
|
m[y][x2] = '.'
|
||||||
|
return m
|
||||||
|
return m
|
||||||
|
|
||||||
|
|
||||||
|
def move(m, x, y, move):
|
||||||
|
dir = {'^': (0,-1), '>': (1,0), 'v': (0,1), '<': (-1,0)}
|
||||||
|
nx, ny = x+dir[move][0], y+dir[move][1]
|
||||||
|
if m[ny][nx] == '#': return m, x, y
|
||||||
|
if m[ny][nx] == 'O': move_stone(m, nx, ny, move)
|
||||||
|
if m[ny][nx] in ['[',']'] and move in ['v', '^']:
|
||||||
|
m = move_box_v(m, nx, ny, move)
|
||||||
|
elif m[ny][nx] in ['[',']'] and move in ['<', '>']:
|
||||||
|
move_box_h(m, nx, ny, move)
|
||||||
|
if m[ny][nx] == '.':
|
||||||
|
m[ny][nx] = '@'
|
||||||
|
m[y][x] = '.'
|
||||||
|
return m, nx, ny
|
||||||
|
else: return m, x, y
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == '__main__':
|
||||||
|
mp, moves = open(sys.argv[1]).read().split('\n\n')
|
||||||
|
mp = [list(y.strip('\n')) for y in mp.split('\n')]
|
||||||
|
moves = list(''.join([m.strip('\n') for m in moves]))
|
||||||
|
wm = []
|
||||||
|
for y, l in enumerate(mp):
|
||||||
|
line = []
|
||||||
|
for x, r in enumerate(l):
|
||||||
|
if r == '#': line += ['#', '#']
|
||||||
|
elif r == '.': line += ['.', '.']
|
||||||
|
elif r == 'O': line += ['[', ']']
|
||||||
|
elif r == '@':
|
||||||
|
wrx, wry = len(line), y
|
||||||
|
line += ['@', '.']
|
||||||
|
rx, ry = x, y
|
||||||
|
wm.append(line)
|
||||||
|
for mov in moves:
|
||||||
|
mp, rx, ry = move(mp, rx, ry, mov)
|
||||||
|
wm, wrx, wry = move(wm, wrx, wry, mov)
|
||||||
|
|
||||||
|
# challenge 1
|
||||||
|
res1 = 0
|
||||||
|
for y, m in enumerate(mp):
|
||||||
|
for x, t in enumerate(m):
|
||||||
|
if t == 'O': res1 += gps(x, y)
|
||||||
|
print(f"challenge 1:\n{res1}\n")
|
||||||
|
|
||||||
|
# challenge 2
|
||||||
|
res2 = 0
|
||||||
|
for y, m in enumerate(wm):
|
||||||
|
for x, t in enumerate(m):
|
||||||
|
if t == '[': res2 += gps(x, y)
|
||||||
|
print(f"challenge 2:\n{res2}")
|
||||||
|
|
||||||
@@ -0,0 +1,21 @@
|
|||||||
|
##########
|
||||||
|
#..O..O.O#
|
||||||
|
#......O.#
|
||||||
|
#.OO..O.O#
|
||||||
|
#..O@..O.#
|
||||||
|
#O#..O...#
|
||||||
|
#O..O..O.#
|
||||||
|
#.OO.O.OO#
|
||||||
|
#....O...#
|
||||||
|
##########
|
||||||
|
|
||||||
|
<vv>^<v^>v>^vv^v>v<>v^v<v<^vv<<<^><<><>>v<vvv<>^v^>^<<<><<v<<<v^vv^v>^
|
||||||
|
vvv<<^>^v^^><<>>><>^<<><^vv^^<>vvv<>><^^v>^>vv<>v<<<<v<^v>^<^^>>>^<v<v
|
||||||
|
><>vv>v^v^<>><>>>><^^>vv>v<^^^>>v^v^<^^>v^^>v^<^v>v<>>v^v^<v>v^^<^^vv<
|
||||||
|
<<v<^>>^^^^>>>v^<>vvv^><v<<<>^^^vv^<vvv>^>v<^^^^v<>^>vvvv><>>v^<<^^^^^
|
||||||
|
^><^><>>><>^^<<^^v>>><^<v>^<vv>>v>>>^v><>^v><<<<v>>v<v<v>vvv>^<><<>^><
|
||||||
|
^>><>^v<><^vvv<^^<><v<<<<<><^v<<<><<<^^<v<^^^><^>>^<v^><<<^>>^v<v^v<v^
|
||||||
|
>^>>^v>vv>^<<^v<>><<><<v<<v><>v<^vv<<<>^^v^>^^>>><<^v>>v^v><^^>>^<>vv^
|
||||||
|
<><^^>^^^<><vvvvv^v<v<<>^v<v>v<<^><<><<><<<^^<<<^<<>><<><^^^>^^<>^>v<>
|
||||||
|
^^>vv<^v^v<vv>^<><v<^v>^^^>>>^^vvv^>vvv<>>>^<^>>>>>^<<^v>^vvv<>^<><<v>
|
||||||
|
v^^>>><<^^<>>^v^<v^vv<>v^<<>^<^v^v><^<<<><<^<v><v<>vv>>v><v^<vv<>v^<<
|
||||||
@@ -0,0 +1,10 @@
|
|||||||
|
########
|
||||||
|
#..O.O.#
|
||||||
|
##@.O..#
|
||||||
|
#...O..#
|
||||||
|
#.#.O..#
|
||||||
|
#...O..#
|
||||||
|
#......#
|
||||||
|
########
|
||||||
|
|
||||||
|
<^^>>>vv<v>>v<<
|
||||||
@@ -0,0 +1,9 @@
|
|||||||
|
#######
|
||||||
|
#...#.#
|
||||||
|
#.....#
|
||||||
|
#..OO@#
|
||||||
|
#..O..#
|
||||||
|
#.....#
|
||||||
|
#######
|
||||||
|
|
||||||
|
<vv<<^^<<^^
|
||||||
@@ -0,0 +1,71 @@
|
|||||||
|
##################################################
|
||||||
|
#..OO..O.O....O...O..O...O.......O...OO##....O.OO#
|
||||||
|
#O.#..#OOO#..O..OO...O.O.....OO..O#O#.OOO.....#..#
|
||||||
|
#.....O.......OO.#OO....#O.OO.O..OO.O.O.O..##....#
|
||||||
|
#.O....O...O#...#...OO..#..O........#O..#..O..O..#
|
||||||
|
#O....O...O.O..OO..OO..#OO.#OO.O......##..O..O...#
|
||||||
|
#..O.##..#O...O...#.#.O.O..O.#......O..#.#...O...#
|
||||||
|
#O.O.........O..O........OO....OO......O.....O#..#
|
||||||
|
#...O....#..O..O........O......O.#.....O..O#..O..#
|
||||||
|
#.....#OOOOOOO.O.....O.OOO.#.#.........O#O....O..#
|
||||||
|
#.........OO#...O.O.#.O..O.....O..#.O..OO.O.#..O.#
|
||||||
|
#OOO...............#O.OOO..O#....O.....O...#....O#
|
||||||
|
#....O...O.O.#....O.O.O.OO..#......OO..O.OO.O...O#
|
||||||
|
#O.O..OO..#...........#O...O.O#...O...O..O..O.O..#
|
||||||
|
#OOO...O...#O.O.O...OO..#OO.OO#..O...O..OO...O...#
|
||||||
|
#..#........#...O..O...#.O..OO..#O.OO.#O......O..#
|
||||||
|
#O.........O.#O.......O.#.O.O....O#...OO...O...OO#
|
||||||
|
#.#...O.O....O.O....#...#.O...............O..#.OO#
|
||||||
|
#...O.....O..OOO...O..#O..#.......#OO..O..#...O..#
|
||||||
|
#OO.O#..O.#..O.#.........OO...O.OO..O....OO.O....#
|
||||||
|
#.O..O...O.......OOO....OO....O.OOO........O..O..#
|
||||||
|
#O..O..#..O.O.O..O.O.O..#O.......O..OO..O..O.....#
|
||||||
|
##O#.....#.O.....O#......O.........OOO.O...#.OOO.#
|
||||||
|
#O.#OO...O..#.O#.O..O.##OO......#..#OO.......O.#O#
|
||||||
|
#..O...#..O....OOO..#...@....OO.#.O#..OO......O..#
|
||||||
|
#.O#.....O...O..O#..O.OOO.OO.#O.O.O..O....O..OO.##
|
||||||
|
#..#.#.O#....#..O.O.OOO.......OO......O.OOO......#
|
||||||
|
#.....O....O...#.OO.OOO..#...O..O...O..#..O#OO.O.#
|
||||||
|
#OO.O.......O#...O.O......OO....#.O...OO.O..O.O..#
|
||||||
|
##O..O..O##..O..OOOO...O..#O..O.OO.O....O....#.#.#
|
||||||
|
##..OO#O.##...#O.OOO.......O.....O..O..OO.O...OOO#
|
||||||
|
#...#..OO.......O.O..OO..........O...OO....OO.O#.#
|
||||||
|
#..O.O..#OO.....O.........O#O.#..#..O...O.OO..O..#
|
||||||
|
#..O.#O...O............#O.O.O...O..O.O...#...OOO##
|
||||||
|
#...#OO.O#.OO.......#.......O..O.##....OO....OOOO#
|
||||||
|
#.O.....O..O...O.....#..O.....O...OO.O.O.......OO#
|
||||||
|
#...#O...O.O.#O..O..#..OOO#....O##....#OO.#.#OOOO#
|
||||||
|
#.O.#OOO......O...O..O.#O.OO..O.......O...O..O..##
|
||||||
|
#O.....O.#....O.OOO..O...#O#O....OOOO........#...#
|
||||||
|
#O...#.O...O.OO..O.O.O.............OO.O.#...#.O###
|
||||||
|
#O....OO.O.OOO#...#..#.....O#O..O..O.O..O#.O...O.#
|
||||||
|
#.........O#.##.OO..O..O..##..O........O..OOO....#
|
||||||
|
#.#....O.....O.O......O.O.O...OO.O....O..#O..O...#
|
||||||
|
#....O##O.O..#....O.OO.O...O..O..OOO..O...#..O...#
|
||||||
|
#O#....#.......O..O..#..OO.......O.OO.....OO.O...#
|
||||||
|
#O...O#OOO.O......O......OO..O.#.O.....O.O....OOO#
|
||||||
|
##....O##...#O.....O.#........OOOOO#..O....#.O.O.#
|
||||||
|
#O...O.....OO.....#O...O......O..OO.O..OOO.O#.O.O#
|
||||||
|
#O.O..#.O.O.O.O#.O#....OO.O....O.OO......O#OO...##
|
||||||
|
##################################################
|
||||||
|
|
||||||
|
>><^v><>^v<<vv<>vv><v><<^^>>>>^^><>^<^^vvv>>><><>v^^^^<<^<^><>>>v><><vv^v^<>>>^>><>v>v>^v>>v>>>v^<<^>v^<v<v<v^^>>v<^v>vv^><vvv<<^<><>^<>vv>^>^^^v<^^>v^>v>v<<^>>>^^vvv<>v>><^^<><<>v>>>^<v>vvv^^v>^^v<>^^<^^v^><>>><<<v^>v^>v^><v<^<<>^v^><v<^><^<>>>>v^<><^^>>>^^v^^<v^^>^v^v>>v<><<<vv^<<>^>^v>>v^v^<^<<><^>>^vv>>vvv^<v>v^<vv><^<<<vv>vv>^<^^>v>>^^^<^^^^<<^<<<<<<v>^v>^^v>>>^<>vvvv>>><<><>^v>>vvvvv^<<^<>^>v>>^>>>v<v><>^v^v><<^v<vv<v^<v^v>><^v<^>>^>>v<^v>>v>>v^v^v<<>v>><<><^<v<^<<v<<v>>^vv^vv<>v<v^<^^>^^^vv^<<>^>^^vv>^^<>>v^<v>>>><v<vv<v<^><^v<^vvvv><v>><<><>v<^<^vv<<<>><^<>^<^<>^<vv^>>><v<^^>vv<>v^>^<<^<^>^<^vvv>>v^>>>^<^>vv^<<^^<<>>>v><>v>^>^v>><><^<<>v^>>^<<>^v^<^<><^^^v<>^<v^v^v^<<^^<<<^>v>v<>^^^^^>>v>^v^v>><>^<<>^<v>>v^><v><<<>v^<<^^><>v<<v><vv^^<>v<<v<>>>v>v<<^v<vv><v<v>>^<<>vvv<<^>vv<<vvv>v>^>>^^^^^^^vv^v>>>vvvvv>^>^v<>v>><^v^^v^^v><>vv>><v<^<^>^v>^^^<<^><v>v^<^v<>><<^v^<^><v^v^^><<^v><><^^v<v><v>^><<^<<<^v<^>><>^^vv<^<<^^^^^v<vv^<v<^<<>>>^><^^>^v^v>v^<v^v^v^^>^v>^^><>v^v>vv>^>v^><v<>v<v<
|
||||||
|
>>v<v^<vv<v<><<>><^<^<^>><^<>>^>^^<^v^^^<v<^^vv^^^>>^>v>>v<<v^<>vv^<<>^v><v^v>v<>v<<^^^^<^v^<><vv^^v>v<<>>^>>^<^>><<v^^^>vvv>><>>^<^>v><v<<^<<v<<>v<^vv^v<>^>^v^><<<><^v>><v><<^v<<^<^<>>>>v><v>>v<>>><v>v>v<vv<>^>v<^>^^>v^^vvv>v>v<vv>>v<<vv^^v>><>><<<v^vv<<v^^v<<><v>^^>^^vv>v><>v<>>>>vvvvv<>v><<<<>vv>vv><^v^<^<v^<><<^^vv><^<vv^v>>^<>v>><>vv^>v<vv^<^><^v>^>v>^v<v<>^v^<>v><v<>>vv>>vv<^>^<>v><<vv^<><^<>vv><<<<v<<^v>>>^<>>^v^><>v^>^<<^>v^^^vv>>^vv^<<v><>vv^^v><vv><v<vv^<^>>v<><^<^v><^<<<^^<>>vv>>^^<^<<v>><>^^^<vv^<v<vvv><^^>^<<<^>v>^^v<<<vvv<^v<<vv>vvv<^<<v>v^><^^><>^<vv<>^<v<>v><<<v>>v^v<>>^><v><<^v>><v<^<vv^<^>>>>v>^>^<><v^v^v<v^<vvv<<<^<vv^>>v^^<^><^v><^^>v>v^>^>v>>^>>>>^<<v><v<<vv<<<^^<><v<^^<>v>>^^>v><><><<><v><v<>v>>^>^<v<^>^^<^><^^^v>v>>^^<<>>>vvv^v>v^v^<>^^<^><^vv^>^^^>>^><^><>>^<^^<<>>>v<<><v><>vv>^>v>^<^>^^>v<>>vv>^<^^^><vvvv^^vvv<v<<^<v^<<v<^>v><^<>v<<^>v><>>>><>>><^><^><^<<v^^^>^<v><v<>v>v<<^<>^vvv<>v>>>>^v>v^>v<^>^vv<<^<v<>v>vv^^<<vv<^^>v^<><<<v>v>vv^^>v<^^v><<>v>^>>^^v>>^>vvv>^
|
||||||
|
^^<v><<>^vvv<^v^>><^<^<>^<<v^v<vv>>vv^<^^<vv>><vv^v<<>^<^><^v>^>v^<v>>>>vv>vv<^>^<>^>>^><^>^<>^<>^^v>^vv<^^v>^>v>v>v<><<<>>^vv^<>vv^^^^^<<v>^^^^<<v<<v<v>v<<<^v^><<^>vvv>><v^^<<^>vv>^<<>>vv><<>^v>v^<vv>^vv<<^<v>>>>>>>>><>><^><^^^^><><<>^^^<<<v^^<<>^>v<^>^^<<><>^<<<>v^<>^v^<>v<^<<v^vv>v><^<^v<><<<>>>v><<<^<^>>^<^^><v<v^>vv^^><v>vvv^><^>^^>v><<v^>^v>^><vvv^<^<^^<^^>>>v^>^>v<v^<<^><<^<v<<>>^>^v<v>v^^vv><vv^>v<<v>^>v^v>>v>vv<<<<<^><^^<^<^^>><vv>^<<<vv^^v^vv^^^>v>vv^v^^>><v>^v<^v^>>>^>>^>>vv^v^<>^<>^><^>>^>^><<><^v^v<vv<<vv^<v^v^><<>v<^><>v>^v^<^>v><^><v<>>^v^vv>>^v<vvvv>><><>^v^vvv^<v^v<v<>^<v^<<v>v<<<>^<<>>v>v>><<^>><^<<<<<<<<^^>^>^^>><<>>^<v>v^^>v>>>><^^v^<>vv>^^vv<^<>v^v<<^^vv>>v^>>v><v^^^^<^v<<vv>vv<>^>v<v>v<><<<v<^v<^v^^^<<^vvv^>>vvv^>>^><v^^><>v<vv><>v>v^<<v><v<^><<v<^<v>vv<<><<v><<^^v>^><<<v<<v>^v>vv^><<<^>>v><><<<vv^>>^^<<^>^v^<>^v>v^>v><>v>>^v>^<^^>>>vv>>v^<>vv^^v>>v<^<>>^<^^>^>vvvv<>vv>>v<><v>>v<>v><^^^<<v<>v>v>>^v<<^<>><>^^<^<v<^^>><^^v<<<^>^>v^<>^><><<^^>>>>^<v<v^>>>>>><<<>^v<v>
|
||||||
|
>^>v^^<^<^<<^<vvv^>v^<v^^v>^<v><><^<^>><^v<^^^vv<v>v><^>^><<^^<^^v^>>><<v>vv>><><<<^^>>^^>>^^v<^>v^>><>v^v^>^^<^v><v^>^^<>>>v<<v^v<^>v^<vv^><>><^>v>v<^>>^>>>v^>v<^>^<v>>^<<^<v<vv>^<v<<v>^<v^<^<^v<><v>^vvvv<>>^^^<<<vv<>>v>v><vvv>vv^<^^^^^>v<^^<^>>v^^<>>v^vv^^v^><v^^^^>^^vvv^<^^<>vv^v<>><^^>v^>^v>>>^^>>>^<^v<v>^>vvv^^<><>><^vv>>^><<<<<^>>>^<vv><<v>>>v><><>>><vv>v^<^>>><^v>vv<<^<>v<><>vv><^^<^v^<<^v>^>v^vv<>^v^>v<v<>^<vv^v<^>^<<^<>><^^^<><^vv^v^^v^<vv>>^^>^<<^>>>><>^^<^^<v<<<<v>>>^<>^^>v^^^<v^>>^^v>><v>v^vv<v>^<^<<><v^<^<^^vv^v>><v<<^v<<^^^<<^v<v^>vv^^v>^>^v><^>><<^<v^<vv>v^^v><<^v><^v><>^^>^v><>vv^v><<v^<>^^>v^><><><^v>v^v>vv>^v><><<v<><>^<>vv<^<>^<<v^>vv>^v^^^v<vv^v<<<^<><<<<<v>>^v<v<<<v^v<vv<>^v>^<^<vvv>^>v><v<>v><>vvvv>^^v^^<>>>v>>>^^>vv^v<<^>v^<v><vv<^<>v<<^<<<vv^^>^vv>^<><<>^>>v^v>^<^v^<v<^<<>^<>^^<>^<^><vv<>^<<v<<><^>v><^<><vv<<v^<^>^<>>vvvv>^vv^vvv^^v><<^v<><<<^vv>><<^>^<^>v>v<>>^<^>^^v<^v<<^v>>>><>vv<^<v<^^v<>^<<>v^v><<v<v<>>^>^^<<v>^^<vv>vv<>>^>v>v>>^^v>^^>><v><^><v>>v<><^v<^v<^
|
||||||
|
<>v<v<^<>v^>><^<^<v<>>v^>v<vvvv<>^^><^>^>>^^>^v<^<v^<v><>v^<vv<^<v<^><v<v^>v^<<>>^^>^v<>^v<vv^<<v<>><vv^<^^vvv<><^vvv^><^<<v^^<<v^^><v><^v>^<^v^>v<>>^vv><<^v<<v<<vv<vv^>>>vv>vv^><v<<<^vv><>^v>^><<^v<<>>><^>><>vv^<vv<><><^<>^<v>v>^>>>>vv>vvv>v<>vvv^v^v<^<^v>><<>><><>vvvv<>vv<vv>>v^>><>^v<vv^v^>><^vvv^^<v^><v<^vvv<><><^^^v^<<v<>v^>^v<<>^>>^v^>^>^v>^<^^<>^<^^><>>v>^^><v^<v>^>v<v<<<<<<^v><vv<<^vvv>^>><>^><><v^v^^<vvv<^^<v^^>v<v<>v>^>><<^vv><<>><<v<><v<>^v^^<>v^v<v>v^>vv^<<>^>vvv^v<v^^><>v<<>><<v^<><^^vv<<<^><<><^>vv>v<<<^><vv^>>v<<><>>v^v^v<><<>^v>>v<v<vvvv<^^>><^><<>v^^><<v^v<>v<<v<^<^^<>v^>>^v^<<<>>^v^>^<^<v<v><^<>^v^<<><>v>^^^<<^<v^v^>vvv<v><^v^^>v^>>v^<<><<^^^<^><v<v^v^>><^^>>^<vv^>>>>^>><^v^v<^<v^v<><vv>v^v><>^<v^><v^v><>>^^>v<<<<>v<>v>v^v<><<>^>><><<^><<><^vvv<><<^^<v<v>^v^^>>v<vv<^<<^><<<<>><^v^>v>^v^<^<<v><vv>^^v<<><^^><<^v<>v<<<v^vv^^^>>v<><><>><>vvvvv<>>>vvv<<<^v>^^^>v>>v>vv<vv^vvv^<>>^<<v<>>>>^<<<^v<<^^^<vv<<v>>^v^<>^<><>v>v<^<<<v>^><v<^>^v^v^<vv><>v^>^<^^<vvv><<^>v<^^<^vv^^<v^v
|
||||||
|
^<>v>><<v^>^v^<>^^^>^>>vvv<>v<v>^<^vv<v^><vv^><>^v<<vv<>v><^^v^^v^^^^<^^v<<^^vv<<<<>vv<v^^v<^v<^>>v<^^>><vvvv^<v^<v<<^<>^^^<<>>v><^><^<v>v>^^>v><>^^vvv>^<^^v<v^v<<<^<>^<v<<<<v><^>^^<>vv<><^><>v<>v><^vvv>>>^>>v^<vv><v<>>>><v<^<^^<>^v><>^^^>^>v><^<v^<^v<>v>>v>v^<>^v<><>>><v>^<<<<vv>>><v>>v>^^v>><><^<<>><<<^<<^v^v^>^^><^<<<<>^><<<^v<<>v<<v>>^vv<^v><<<v><^^^><v^^<^vv>>vv<v^<<>^<^>vv<><>^v><>v^>v><^^<^v^v<^>vv>v><^>^>vv<v>^<^><^^^<>^>>vv<<vv^<v>>vv>vv<v<v<^<<<<<^<^^<<><^^<vvvv^<v^>><<<v>v<>><>><^vv<v<<v>^^<^^><^^<><^>><^>>^vv<^^v^<^v^v^<v>v>^><><<^>v^<>^>><^vvvv^><<<v<v<>>^vvv^vvv<><><>v><>v<vv>v>>>^<><^v>>^>v<><<v<>><>>>v^v>v><vv>^<v<^^^><v<<v<v>>><^<^^v^^><v><>><>><^<>>^<v^<<<v^>v^^v>>>^v>v^vvvvv>^<^^>><v^v^>><vvvv^^>vvv<^v^<^>v<^v^<>><>v^>>v<^<v<v>^>v><v>>><^v>^><v<v<vv^^<<>><<<v>^v^^v>v<><>v><<v>vv<^^v>>^>>^v^<^><^><v>^vv^v<^^v>v>v><^^^<><vv<<^v^<v<v>v>vv^>v^>>^vv^vv^^>v>>><<>^<vv>^>^>>^>^<>vvv^>^^<^^><>^vv><>v>><vv<^vv<^<<v>v^>^<>^^<^^>>v^<>>>>v^>v^^><>><v><^v^>>vv>>v>^^v^>^<^>>v<>v^>v
|
||||||
|
>^<<<^>><v<<^^><<v^v>^<>^^<>>^v<<<^vv<>><<^<><>^<^v<v^^<>v^<v<<vv^<><<v>^<<>>><vvv^>^>v><^v>^<v<v^<<<>>><^><v<<<>^^<<v>^<<v<vv><v^vv>>^<<v><>>v<vv^^<^^<><v^>^v^<<<v>v^^vv<v^>>^^^v><<^><v^^>vv^^>v<^>v>v><><vv<<><>^<<>>v^^<>vvv>v<<<^^<>^^<vv>^^>><>v>v>^vv>v><>^^><<^v^^vvv<v^^^v<^^<<<v^<v>vv^<^^v<><^>vv>>vv>^<>>^v^>v<^v<<v^>^vvv<v^>>>v^^>>^^v<v^^<>v<v<>^<<^>>v<<<>>v^<<<<v><<v^^<v^>>^^<^>^<<><^^>v<vv>v>v<^<v>><>v<^<v>>>v<vv<<<>^<>^^v^><^<>vv^^>>>^>v^<<>v><<v<<^>^>^<>vvv<vv>><<><>^vv<v><^<<vv>>v>>^<<v^>^^<v>>^>^>v^>><>>v<v<^<<<<><v<>^v^^<^v^^v>v>^v<><>>>^^><<<>v^^^<^v<v><^^v<>v<v><v>^^<<>^^v<>>^vvv>><<<<^vv^v>^v<>^>vv^^vvv>vv^><^<<>>v>^vv^v^>><<v^^>^<>>>vvv>^vv^^<>^vv^>^<><^<v^<<><v<>>>>v><>v>^vv>>vv<^^<^^>^>v><^><v^^<>vv>>><>>^^>>^v^v<^<>^vv^>v<><<^^v<><<v^^<<v><>v^v<>^<>v^^<<^^^^^><>v^v><^^v^<^><vvv<^>^<<^^v><^^>v><v>>^<vvvv><^<v>><<<>v>>>>^<>^<^v><>^<v<v<<>^<<^<^v^>v<<>^>^<v<^v^<>^v<>vv>v^<vv<^v>vv>v<<<>^v<>^><v><<<>^^<^^<v^><><<><^^>vv^^<^<^v>v>vv^>^>><^<v<><^><<>>>>^vv>^<v<><<<v<v>>v^^
|
||||||
|
vv<v>>>^<<vvv^>>v^^v<v^<><^^v<v>^v^<>><>>vv^>>v<<>v^^<<<>vv>^v^>v<>>^>v<^v><<>>^<>^^<<v>^^>>^v><>^^<>vv>><v>vv<><^^v^^<v^>>>^v^^<v><<<>^^vv><>v<><>>^^<v^v^<vv<><vvv><<vv^>^<><><<v^^><^v>v<^^^>>^v^>^><vv<<<>v>^v><v>^>v<v>^vvv<>v>><vv^v><<vv<^^>>v<>^<>v^v^^>^^<vv^><^<^v>v<vvv^><v^<^<v<><>v^^v>v>vvvv^vv^^^>v>vv<>>^<v>^vv^>v^<<v^v><>>v^>vv>vv^>^v^>>^<><^><v>v^^<v<>^><<>v<^>^^<v><>>><vv><^><v<^><<>^<vv^vv>^>^<^^<<^>v^v>^<^<v<v<^<vv^>>vv^^<<^^vv>>><^>vv^><^<><v^<^^v<><^<v<^v^^^v>>vvv>>^^^^><^>>>vv<>>v>>^^>^^>^v^vv^>>^>>v^v^^^v>>><>^<>>><^<v<<<><<>>^^vv<vvvvv^vv><^v^<^<<v^^<>><<>^<^<<<^^>v>v<<<<^v^v<>v^<<>>v<vvv>^vv><>^^^<>v<vv><v<<><vv<^v<>>^v<<<>v^^^^^>v^^<><<<vv^<>v<^v>v<vvv^<^^>^<<<vv<>^>^<v^<><^><^<^<^v><v^^v>^v^><^^<<^><^^>^>>^v>^<>v>>vv>v<<<^^v<^v<v>^>><v><<^^<<^v><<v<^^^^v>>^v>>>v>^^^^v>^<<<><<v<>v^>v^^>^v>v<vvv>^<>v^^v>^>^v><v<^<><^<^^v>>^<<vv<vv>>v^<vv<v><<^>>><<^>^>v<<^><^v^v^>^>^vv^vv>>vv<<<<v><^v><^>>^>>>v>>^>^>><<>><>v^><^^v<<^^v<>^><^v<<<vv><^^^<>^^v^<>>v^<>^^^^<v>>v><<<><>^v>v
|
||||||
|
v<v>v<>^>v^<^^<>^^>vvv<>><>>v><><<<>><^^>^<<<v^<vvvvvv<^v>v^>^>^>vv>>^v^v^<><><^><vv<>><<v>^v^vv><<>><vv><>v^<^<>v^<<v>^vv><<v>>vv><^>^>vv^vv<<^v<<v<><vvv<^>vvv><>>v^<^^^v^^<^>^^^>vv>^^<<v<^^>vv^v^<>^<<vvv>v<<>v^vv<v>>v<v<vvv<>>^>>v>vv>^v^^<<v>^vv<>v^>>><^<<>^^v^vv^v><vvv<<>>^^v<^<^<>vv><^>>^<<>v<^v<>^<>v^^vv<>><><^^<^v^<v>>^^<<^^v><^^v^^vvv>v<><^>><^<^<>v>>vv^>>^vv<>>vvv^><v<><>^v<><<>><>^^<<>>v<<^<><<^^v<<^^>><<^<vv<<<v^^<^<>>vv^^>><>>v><^<v^^v<>^>>^v<v^><v><^><<^<v<<vvv<<^>^^><>^<<><<><<^>>vv>>^vv<>^^>>v<>><vvv<<^^v^^<>>vv<><<vv><^^v^><v>^<>^^><^v^>v^v><v<^v^<>^<<>>vv<v<^^vv<v^v^vv<><vvv><vvv^^<vv><<<^v><^vvv<>>^v<>^^<^^<vvv^<v^<<^^>v^<^>v<>>^vv<<>^><>>v^^v>v^<v^^^<>^v^v>>><>^>v<>^^<><^><<<<v<<<vv^>>>v^vv^><>>>v<<<>v<<<v^^>v<^>^v^v<^vv<<<^>v>v^>^^><^>v>v><v><^^v>^vv>>vv^>^<^v>><>vv<vv^<^<v>^v^v>^<>>v^<^^^><v^v^><<<^^>>>^^>><v>^>^^><^^v>v<>vvv><^vv^^^^v^^<^><>>^>>^>^<v^><>^^<v>><vv><vv^>>>^<<v^v<<>>vv^>^>v>v^><v^^^^^^<^>vv<>>^>^>>^>><v>v><><vvvvv<^v^>v^>>v<v<v<^<vv^>>>>^<>^<<v<><^^><
|
||||||
|
><<>^>>^<^^v^^><<v>v>v^>v>>^^<><^^<^vvv<><<^^<^^><vv<^^v<>^^v^^>^vv><v^^^<>^<<<v><>^<<>vvv^v<v>^^<><>>><<>><^<>>^>^<^v>v>>v^>^^v^^^>^vv><v<<v>vv^v<>v^^^v<v<v>><^<>><>>vv<^>v^>^v<>^^^vv<<>v<<v>^^v><>^<<^>^>>^<<>^^^<<^vv^<<<^^^^<v^^^>>^>v<^<<^^>>^vv^><vv<^^^^<v><v<^v<<vv>v>v>^>>^^^v<<vv><^vv^^>>>^>^^^^<>>>>><^>>^^<><v>^<<v^>v^^vv<v^>^><>>><>>^v<^><>v^>^>>^>^^^>vv>v>^^^^vv<>>>v<<^^>>>v^v<^<^v<v><<>>^^^<>^v>>^<><v<>^><^>>^>>v><><vv^^vvv^<<^^v<vv^<<>>>v>><^<<<><v^>v>><>^>>>v^vv<>vvvv>v>>vvv>>vv^><>^^>v^>v<v<v>>^>v^vvv^^>>v^>><vv><v^<v<>>^>v<v<v>>^<><v<<v<<^<v<><<<>^^>v^v>>vv>^^<vv^v^<>>^<>>^v<^<<><<^><v><>^^vv>^<^^v>>^><^<^^><^v<v>>>^vv>><v>^v>^<v^>><v>^><^vv><v>^^>>v^>^^<^v^<<<v<^<<^v>^<<v>vv<v<<>vv^vv>^>><>v^><<vv>><><v^<^vv^<<>v<<>vv^^^<^vv>v^v><>^>>^v>><^<^^v>v^>vv^^>>^<><><^v<><<^><<><><vvv<<v<<vv^<<<<^<^v<v<v<<v<^>>^v>v<<<v^vvvvv<<^><vvv^<<>><v<><<^<>><^<^<>>^<v>v>><<^><>v>^>^v><>>^>>><<v>v<vvv>>>>>><<<v><>v>>v^^vv<^^<<<>vv^>vv<^^>^<><vv<^^<><v<^>v<v<^>^^<><^^>v^^>^>>v>vvv<<<v^>>>^<^v
|
||||||
|
v<>^^^>^<^>^<<<<v^>^vv^>><>v<<>>^<v<^v>v^^^>><>>v^^<<><^^^^>>^<^^<v<>v^v>v<<v>^>>v>^>^v<>^>v<<>>^<>^^<^<>>>^v>^<vv>>^><^^>><<^^><>^><<>^>^<v<><^^<vv>>v^v>v>v><^>>>>v<>^<vvv^^>^v<^^v>><<v<<>>>v<<v^>>^<>v<v>v<^>>^>><>>v>^v<>^^<^><>><>v<v><vv<>>^>vv^>^^<v>>v>>v>>^v<v<^^><<<<<^vv><<v>vv^>>v><>><vv^<^v^v^v>><v<^^>vv<>>^^<^<v<^vv^^<<<^<v<^>v^v<vv>v<<><>^v<^<<<vv^<>vv^v<>v>v<>^^^>^^>>v>vvvv><vv^v^v^v><<>v>v>>^<vv<<<v><^>><^v<^v><v>^>v<<<<vv^<^v><<>v^<<<^^^^<>vv>vvv^>^v>v>v><><<<^^vv^^^><v><v>><v^v^^<>v^^>vv>v<>>v><^v>><<><>v<^<>^^vv^^><>v^^^<vv>^>^^^<<>^<v><<<>^<^<<v^vv<<<vv^>>v<>>vvvvv<v>v><^vv>>v>><<><><^^>^>^>^<v><<<vvvvv>^<v<v^v>^^v><<<^v<>>^>>^v>^^v^^^^v>^>>v>vvvv<vv<^v<vv><^>v>^>^<>vv^^>><^^>>v^v<^>vv^<vv^>v^>v>>>>v>v^v^>>v><>v^v^<^>v<^^^^^v<<^>v>>^<v<v<>v>v^v>v^>vvv>vvv^vv^^v>^>v^v<v>^^>v<^vvv><>^v>^vvv>v<><vv<^><^^>v^^>><^<v^>^<^>vv>><<^^<>^<>>^><^^v^<<>>^^v<v^>>v^>v>^v^>v>>>>^>>>^>^><>^v^v^>vv^^<^^^>>^vv^^^>v^>>^<<v^^^v^vv><<^^<<v<v>^>^v^^^>><<v^<>><v>><>^<><<v<v<<>><<^>vv>vv<v<v<<<^
|
||||||
|
v>vv<<v<^v<v<^v>^v<>>>^>>><^^^><v^<><<<>^v>>^><<v>>^v>>^<>>v^>^^vv<<^^><<>v<vv^v^^^>^<>>^<<<<^^^><^<><^vv><>>v<^^>v>^v^^v><v>^v^>>^<^>vvv>^v<>v<>v>^^^><>^vv^<^<^>v<v<v<v<>^v^<vv<<v<^vv<v<v^^<vvv<<^^v<><>>><^v<v^v<^<<vv>^<>^^^<^><<v>>>v^v<^>v<^>^<vvv<^^^vv<^v<<<<v><<^<vv<v<>>^^^^<<<><v<<><><^>v>><v<>><^<v<^^>^>v^><v^<^<^<<>v^vvv<<^^^><^><^>>><<<<^<^^v<^<^v^<^><<^>>v<^>v<>><^v><v<<v><<<>>vv^<>^^^><^<vv^<^<^<v<<^><>^^><v^vv><^<^>v>>>^<><v<v>><>v<>vv<^^<^<^^<><v^<>v<><<vvv^vv>v^vvvvv<>v>>v><^^<<v>><<>v^>^v^><^<>>vv<>^^<<^<<v<<<v<^^^^><<>v^^<^>^v><><^>>v<>^vv^v>^v>>vv<^<^>vv<^<^<^^^<>v^vv><^^>v><<<<>>v^vv<^<v><>v><v<<<vvv<^<<v^><<<><><^vv<>v<vv<<<<^^v^v<<v><^v^<><<>^<^^vvvv<<>^^vv<>>><v<^<v^^vv^v^<v<><v>><>^v^^^>v>>^>v^>^<<>v>>^v^^<<^^v><>^v^>vv>>v<v<^vv>>^<^v<>>vvvv>>>^^<v<><vvv^<><>^><>>v>><<^<>^>^>v>>>^^<^><^v>><^><><<v<^v<v>>^v^^>v^v>>^v^v<<<^^^<^<^<<^v>^<><vv^vv><>>>v>^<<><>v<v>v>>>^>v<><>vvv^v>^v^vvvv>^<v^^^^>v><v<v>>^<^>v>^>>><<v>>vv<>^^<<>^v^v<<>vv<>^v>v<>^^<<>><<^vv^>><v<v><vv<<>v^
|
||||||
|
^^><v^^^<v>vv><v>^<<v<^>>vvv<^<vv<>^v>v>v>v<v^vvv<>>v>^v><vv>>^^><>v>v><<v<<vv><v^^><vv>><^>><^v>v^vv^^<<><^>v<vv<^><v>v^>>^><<v^<^v<<>v>^><<<^<<>^vv<>>v<<<<><>v>^^<v>><^><<vv>>>v^>v<^vv>v>^^<^>>v>^^<v<<<<>><v<^<v>>v^vvv^v>v^<^v<v<^^^<^v>>><<>>>v<<<><>^<>^>^>vvv^^^>>v<^<v<v^^<^<^><^^^<^>v^>^<^v><><^vv^^><><^>^<<^>>v^>^v^<<^>v^>^<^>v>vvv<<v^<><<>v>>>>^>>v^><^vv><v^v><<vvv^^>>><<>vvv<^<<><vv>>>^<^v^^>^>v^<^><><<vv^vv<vv^>v^vvv^^^<>^v>^>><^<<>>>>>>v<^>vvv>v^^^<<^>v<^><>>v>vvv<^^><^<^vv>^v<><v<v><>><vv>^<vv>>>^>^<^><^>vv<v>><v^v><><^><<<<v^<vv>>>^>^v><>>v^v>^v<^^^><vv^<><><^^>^^>v>^^^<^v><<<>>v<>>^>^^v>^^><>v<^^<<v><>>v<v<><v><v^^><^^>>><<^>>^^vv><<>><>^<<vvv^>vv<<v<v^<^<vv^<><>>v^<vv<^^<v^^v>^v^v^^<><<<>v<>>^>>^<^<<<<vvv>v<vv^v^>^>>^<^<<>vvv<><v><>vvv>>>>^^>^v<v>v>><v^<^^v<v>^^v>>v<>^^^><^^^><>>^<v^<v^>^^<<>>>v<^v^>^^<vvv<^^^<v^<>^vvv><^<><>>>^v<><><v>^>>vv>^^vv^^<^<>vv<^<^<vv><<>^>><<>><vv^>>^v><^v^^v^<^>v<<><v<^<>>^v^^<^^>^>><>>^><>^><v<>v^>>^^^^^^<^>^^><vv^>vv>>>>>^>v>^><v>^>>^v>>^><<>
|
||||||
|
>v><>^v^^>><<<<^^><>^><v^vv^v>v<<<>vv^^^v^^<<<>v<<^^<>v<><^v<<^^v<>^v>^v<^v^<vvv^><<v><<>>^<vvvvv<^>v^<><<<>>v><>v><vv>^v<v<<>^<v<v^<^>^vv^^><><v>v>v^>v>><v^^^<<vv><v^<^<^^^<><^>^<><>vvv>v^^<>vvv^^v>v><^>^>^<<<v>^v<^><^<v>vvv<vv<^><^>^>v>>^>^^vvv<>v<<<^>vv^>v>v^v<v>>v><<>vvvv>^>^v<^v<>>v<vvv>v><>v^>>^<^^>v<^^>>>><vvv<^><><v><^v>>^>^^>^^^>^>><^<vv<>^<><vv>^^>v^<<^<^<v<v^v<v<<v^v^^v<<v^^<<v^><vv>^<>vvv><>>v^^>^<^v<^^<vv^<^^<>^^v>>>^>^^v<<<<>>vv>vvv<^>vvvv<^<vv^vv^v^^<>^^>^>v<>>>^<><^>><^>v<<<^><>>^<v<v>>v><<<<^>v^^<v>>^^vv<^<<v^vv<^<><v<>>>v<v<>>^>>^<^<<^v>^>>><^^vv<<vvv<><v<<v<v>>^>v^><^>^vv^<>><<^>^>><v>^>^>v><<>^<<v>v>>^>v^>^^v<>v>^v>v<>>^^>>>>>^><>>^>><<v^<^^>vv<>v>^>>^<v<v<<<<^<^>^<vvv<><<vv^vv<v>>>>^>v<v<v^^>>^>>>>vv><<^v<^<<>^<^>vv>^v<v^^vv>>^^^>>><<<>v^^^<^<^><v><^<^>v<><>><><^v^^>>^<<v><^^><v>>>^<><^><<^v^<>>^v>^^<>^^^^^^v<^<^v<<<<<>>>>vv><v^^v^<^<<<>>^<^v<^>>^>><v^<<>^v<^^v>v^v><v^vv^^<<<^v><^<^v><<<>v>v<>^>^>v>v>^vv<<>^v<<vv><^<vv<>>>^<<<v^^v<^v^><<<<^v^v<v<><><>^^v^<><^v^^<><
|
||||||
|
^>v^<^><<<vv<vv>v<>>v<<vv>v>v<<<<<<^vv^<<<v^^v<v>>v^vv<vv^<<v<^v>v<^vv^<>^>^v><^>>^vv<<<^^^v>^<^><>vv<<v^>v<v^<<^><^<^>>^<^v<>^^<^v<^><v>><^v>^^<vv<v>v<>>><v>v^<>>v<<<^>^>v<<>>>^<v<>>><><^v<>vvvv^<v^<>v><v^>^^>^^^>^v^v<>^v>^^v<^>vvv<>><^^^<^^<>v>^>>v^<>^^vv<^vv<>v<><^<>^^><<<^^>v>v^^>>v>vv^>vvv>v<<^<v>><<<<>v<vv<><>^<v^>^>v^><>^>vv<><<^^><v^v>vv<v<^<v<<^>^<<<><^>^<>>^<^vv<>v>^<v<<<>vv<^>v<><^v><<<vv><<<v><^v<v<<vv<^v^<v^^<>v><^<vv^>><><^<v<v^<<>>^v>v>^v^<v<<v><v<>><><>>>^>^>>>v><>>^^<<<<<v^vvv<^v^<>^vv<>>v^>^<<vv^>>^^^<>v^v^vv><^vv>><^<>^>v>^<vv><v^^^v^<^^^<<^>^<>>>>^<^v<v<><>>^^<v<>^^v^v<>^>v<^^><^<<v><^>v>^vv<^vv<>>>>><v<^^vv<v<^>vv<^v^v^^v<v<<vv>^><<<<^>vv^><v<<v^>>^>v<v><^<^>^^>v><<^<>v<<v>v<><v^<<^>v>^<><v^<<v<v^v>^>vv^^<<^^v><>>vvv<>>^vv>><<^^<vv<>>>^<^^^><>^vv<v<^^v^^^^^<<v^<<v<>v>^^^v<^<^>v><v^v^v>><<>v><vv>>^vvvv<^^<<<v><<<vvv^>><v>v<^^^><vvv^^<<^vv>v^v^>v^^<>^v<v^>v^v><<<^v>^v>^<v^<v<v<^>^<^v>>v^><v^^^<>^>v>v>^^vvv>v^^>>^v<>>^v^<v>^^>^^<^><><v<><>^v<v<><^<v>>^>>><v><^v<>vvv^>
|
||||||
|
<>><>>v>vv^<^^<^vvv^v><^><<>vvvv^><<<>v<<<>^><^v><vv><^<v<v><v<^v<vv^^<<^v>>v^>^>vv><vv^vv^<v^vv^^>^<<>v>>>>^^vv<v^^v<>>v>^vv^>^v>v><vv<^v<v<<^v>>v>><v<<v>^^^><>v>>^v>>v^><^vv^^vv<v<<^^v<>^<>v<>><^^v^>v^v>v>vv<<<v^^^^<^^v>vvvvvv^v^^^><<>vv>^v^><>^^v>>><^>v>>><vv<><v^>>v^vv>^<vvvv^vv>v<v>^><<>^v<>vv>vvv^v^vv^v^^<<vv<<^v>>^<>v^v<>>^<v>><^>^<>^^v^v^v>>vv><vv<>v>v>v^>>>>>^><<>^v<>^<^^^v><>v>^^^<>v^>^vv>>>>>><>v>><>>>v>><<^>v^^>v<vv<^^^>v><><<>v^>vv^^^v<<^>v^<>v<>>v>^^^v<v<v^<^>>v<^vvv<v^<>^v<<><v<v<<^v<vv^^vvvv^>v><<vv^<<^<<>v>^^^<^^^><>>^vv>^<<<vv^<v<v<<><^^><v^<<^v^^>^<^v<^^vv><^^>^<^><>^<v<<^^>v>><<^>vv<^>^><<v<<v^<<^v<^^^vv>>^>^>v><>^>>^<vv>>v>^^>vv<<<>>><>^>^><<>v^<<<<>^^v^<>>>^><^>>>^><v>v<>>^v<^>>><^^<v^vv^>^><<<>><><^v>^<>v<v>^<<^<^>^<>>>^v>><<^vv<^vv^v<>>v>v>><vv>v^^vv^<^^vv><^v<>^v>>vvv>v<<^<>^v^<vv^v<<>v^>vv<>^vv<^<^>><<>vvv^<>v<^<v>v>^^v^<v<<v^v^^^>vvvv><v<<v^vv<>vv^v^<^<<^v>v<^<<><<vv<>>v<^<^<<^>v<<^<<<>v><><^^>v<v<>v^>v>v><><<<^^<^>vv<v>><<>vv<<<>^v>>vvv^^v<^<v<v^v^^>><v<>^<^
|
||||||
|
<v<<v><vv<>^^v^v>^>vv^><^<>v><^vv^<^>>v<v>vvv<>>^vvv<>>v<>^v>><>vv>^v<v>vv^v^^<^v><<<vv<vv<v^<><v^><^>>v>vv^<^v^<^vvv><>><^^v<^<^<>>^>^<v>^<<v><<>v^vv>^v>><v^v^v<vv^^v^^vv<v<<v^v>^>^^v<<^^^>v<><><^>^>>v>>v<>^>>v><><v^<<v<>vv>v>>>^>^<>v^>vvv<^<vv><<>vv<<><v<<<><>^vvv<><<v>^^^v^^v>><<v<v>v>>v^v<vv<<<>>>^v<v>v>v>^v^<<<^>>^>^^^<<^>>^><v<^v^>v<><>^^<v>^^<>^vvvv^^v^<<<^><^><<^>v><^v^>v<<^><<vv<v><vv<<><<^^v<v>^^^><<v<>v>>^><v^<v>^vv<<<<^vv<v>v>>>^><><<<<v>v<^^v><>^v<^<>^<<v<^v^>vvv<<v>^^><><v<><^v<>>><<^>v><><v<>>><><^v<^<<><v^^v>vv>v>^^><^<^>v^>v>vv<>^<<^><v<<v><^^><v^>v<^v>^vvvv><^vv>^^^><^v><><vvv<<v^^^^vv>>v^>>v^v<>v>>><>v><>^<^<<<>>>>vv>>v<^>>><^<^>^^>><>^^<<<>v><v^^>v^<^v<<>vv>v^<v<^v><vv^<<>>^^<^><^<vvv>>vv^>>^<v>v><<><<>^v<><^^vv<^vv<<v>>><>>v>^<<^v<^v<^^>^><^>^^>><<<>^>>>>v>v>>>^v>^^v<^v>^<>^>>^<><^>vvv>>vv<<>^v^>^^>^<^^><^v<>>^v<><<>v>v^>^vv<vv<<v<^^><<v<v>^<<v>v<<v>><^v><v>^<^<<^<^v<^v>>v^^^v>v<v>>>^<^<v<^>v^v^v>><<^>^v>>v^<>v>^>^^<^v>>^v<^<^^><><<<<^vv<<^^>^><>>^>>>v>^^>^<v^^<>><
|
||||||
|
v<vv^>^<^^<><^^>>v>>v^^^<>v>v^<^<<v^^>>^>^>>^<v><^^^^>^<v>^v><vvv<^vv>v>>^><<^>>^vv<^^^^>^^v^<<v<><<vv<^<vv><v^v^v>v<^><<v^<<>^>><v<^v<<vvv><>>^vv^^<<^v<<>v><>^<<v>>v^v>^<<v><<v<^^>v>><vv<<^>><v<^>vv^vv<^<<v^vv<<^^>^^v><<^v>>>vv<^<^<v^^>^^v^>v><<>v^<>v><<v>v<v^vv^<^^>v<v^v>><^<<>>>v><^<v<><>^^<^<><^<<v>vvv<v^^vv^<^^><<v<vv^<<><<>>>^^^^>>v<^>>^v<v<^>v>vv<^>vvv><<v^>^^v<>^<>vvv^><v^<<<v<<><vv^<>>v<v^vv<><>v<<>v<^v^^<<v>^vvv>v<<v<v><<><v<^>>v^<^>v^vv^v>v^v<v<>><<>>>v<^<<^>vvv^>v>>>^vv><><<<v<>vvvv>^<>><^^v><><^v^v^^v<v<^vv^<>><^^>>>><^>^>^>v>>vvv<<>^><>^^v^^^v^^>v<<v>vv^><>><<v^<vv<><>v<v<^^vv<<><<vv^v<>v^><^v^^^^^<><<^<^^^>^^^vvv^<<^v>vv<<<v>v^<>v<<v^<<>^>v^vv^>^^>v<>vv^v><><>^<><>>><><^v^<>><<v<^v<<><v>vvvv<<^><v^><v>^v<><>v^<<^^vvv<<<>^>^>^^^>^v><^^<>^>^v<v^^v>^>>^v^v<<>vvvvv^<vv>^v<>v^<><^<^v<>^v>^^><^v>v<>v>vv>^>^v<^<<^>v^<v^<><v<vv>v>^^><vvvv>^<^>^vvv<<<^><^<v>^<^>>^^>^<<<>^>^vvv^v^<vv<^^v<v^^^>><v>^>><v>v<>><>><v<<<><^v^v^>>^^>>>v<<^^^>^v^^^><v><<<<<<^v><><vv<><^v>vvv>^v<v<v>v><>v<
|
||||||
|
<<>>v<^><^vv^^^^v^v^v^^<v<^v<<>^<^v<^^<<<>v^>>^^^v<>v^v>>>v<<><<<>^^>>^<<v>>v^<v>v^^^>^>^><>>><>>^v>><<^^vv>^<^^^<>^>>^<v>v<v^<>>>vvv^>v<v<><>^^v^<vv<>^^v>v<><<<>v^v>v<^v>^<^v^vv^><^>v^>v^>v^^^<>v>v<<v>v>v^^>><>^><v<<><<vv^>^vvv^v>^^<<<>^>v<<v<v<v>^<v>v<<>v>v<><>^^<v>>^vv<<v<^>><>vv>v<>v^>^^><v<<><^><><v<<>>><v^>v<^<v^v>><<<v<<v^><vv^^<<^<<>^<>v^><v<^v^v^<>>>^^^vv^<v^>><>vv<<vv>^<^v<v^^^><^>^>^<^v>><^v^v^>>^^v^v>v>>v>>vv^^^^>><>vv><vvv^v><<vv^<>>^^v><<<><vv>v^>^>^<^>^v>^<v>vv><><^<<<<^<^<v>^vv<<>>^v^^v^>>><vv>><^><v>>^<v>v>>v<v<v>><v<><v^<<^v^<v^v<<v^^<<><<^^v>v>>^<^^v>>vv<<^vv^^v<^>^^v<^^<<vv>>vv><^<v^^^<<^vv<<<v<^><<^><^^vv>^^>^^^<<v<v^><<<^v>>vv<vv^^><<<><^vv^><v>^<^<>>vvv^v>><^<vv>^^^>^v<>>vv^^<v<>^<>>^^v>>>^^vvvvv^<^<<>>v<vv^^<^<v><<>^<<>^<v^^^^>>>>v<v<><^^>v^><<><vvv^v<<vv<^v^v><><>^v^^v>>^<<v<v^^v^>>v<^<^^^v<<^>^^<<<<<^<>^><^<^v>^^^<>v^<>>^^>v^<^>^>^>^<<^><>v^v>>^<><^^>^>v<<v<><vv>>>v>>>^>>v<><<^<^v^<v^<v^<v^v>>>>v^<>^v<vv^^<>vv<<vv><<>>>^>^v^v><>>><vvv^<>^vv<<^^<>^v>><<v><<^<<^
|
||||||
|
vv<v>vv><><>>^^^>v><<>>><>^<^^^><v<vv^<<<><>><v^v^><>^<v^v^^v<<<v<v^<>>v><<<>>^<<^<v^<<<^>v<v^><<v^v<<^<<v><<^^^><v^>>>>^>>>>^><>v>><v<^^^>v>v>>v>><vv^vvvv>^^<>v><v^>v^^^^<<>vv<v><^>>>>^v>vv^>vvv^v<v>>>v<^^^>v>vvvv<<<vvv>^>^>><>v^<^^vv>^<v<^v><<><v^><<>v><<<><^v^^>><>>^^<v><><>^<<>>>^<>^<v>>^>><>^<<><vv^>^<v^v<><vv<^<<^v>^>><<>><^><<<>>v<>v^^>vvv<<^<>vv^>v<vv<>^><>^>^^v>^><><<v^<>v^v>v>^><><><^<v<^v>^^^>^v<^>^vv^^v<^><>>><^<<v<vv<v><^>>v><^v>>^>v>>v>>>vv><>v<^^v<<<^^<>^v><^<<v<<v<^^v><^^^^^>>vv^<<><>v<^<>vv<<>^^<>^>v<vv^^<^^^<v^>vv>^<<vv>v<v>>^^<>>>^vv^^^^^^><vvv>^><^^>v>^vv<<vv><><<>vv>v<v>^><><^>>v^>^>>v<v>vv<vv<^><v><<v<vv<v><><><v>^<>^<vv<^>^^v>^^^^^^v^>^<v<><^^^^<>><v>>>>>><<>>>>^<vv><<^>>>>>^>vv>^<<<<>v^><v>>>v^<vv^>vv^>>v>>v^^<><^<>v<^<v<<^<^><^><><><^^<^<><>^>v^<^>><>>>^^<vv<<vv>^^v<<vv^^vvvv^v^^<^v^v^^^^><v^<>^^v>vv<<^<>v<^>v><>^^^<<<^><<v>>v<<v<v><v^<v^vv^<vv<>^<^<>^>v>v<<^^^>>^^<>^<<^^<^^v^v^^v^^<^<<v>^<v>^^>^>^>v><^v^^^v>v^v>>v^>^>>v<>^<^v^^^^^<v>v<v^<^><^>>v^<^<<>^v^v^><<v
|
||||||
@@ -0,0 +1,71 @@
|
|||||||
|
##################################################
|
||||||
|
#..OO..O.O....O...O..O...O.......O...OO##....O.OO#
|
||||||
|
#O.#..#OOO#..O..OO...O.O.....OO..O#O#.OOO.....#..#
|
||||||
|
#.....O.......OO.#OO....#O.OO.O..OO.O.O.O..##....#
|
||||||
|
#.O....O...O#...#...OO..#..O........#O..#..O..O..#
|
||||||
|
#O....O...O.O..OO..OO..#OO.#OO.O......##..O..O...#
|
||||||
|
#..O.##..#O...O...#.#.O.O..O.#......O..#.#...O...#
|
||||||
|
#O.O.........O..O........OO....OO......O.....O#..#
|
||||||
|
#...O....#..O..O........O......O.#.....O..O#..O..#
|
||||||
|
#.....#OOOOOOO.O.....O.OOO.#.#.........O#O....O..#
|
||||||
|
#.........OO#...O.O.#.O..O.....O..#.O..OO.O.#..O.#
|
||||||
|
#OOO...............#O.OOO..O#....O.....O...#....O#
|
||||||
|
#....O...O.O.#....O.O.O.OO..#......OO..O.OO.O...O#
|
||||||
|
#O.O..OO..#...........#O...O.O#...O...O..O..O.O..#
|
||||||
|
#OOO...O...#O.O.O...OO..#OO.OO#..O...O..OO...O...#
|
||||||
|
#..#........#...O..O...#.O..OO..#O.OO.#O......O..#
|
||||||
|
#O.........O.#O.......O.#.O.O....O#...OO...O...OO#
|
||||||
|
#.#...O.O....O.O....#...#.O...............O..#.OO#
|
||||||
|
#...O.....O..OOO...O..#O..#.......#OO..O..#...O..#
|
||||||
|
#OO.O#..O.#..O.#.........OO...O.OO..O....OO.O....#
|
||||||
|
#.O..O...O.......OOO....OO....O.OOO........O..O..#
|
||||||
|
#O..O..#..O.O.O..O.O.O..#O.......O..OO..O..O.....#
|
||||||
|
##O#.....#.O.....O#......O.........OOO.O...#.OOO.#
|
||||||
|
#O.#OO...O..#.O#.O..O.##OO......#..#OO.......O.#O#
|
||||||
|
#..O...#..O....OOO..#...@....OO.#.O#..OO......O..#
|
||||||
|
#.O#.....O...O..O#..O.OOO.OO.#O.O.O..O....O..OO.##
|
||||||
|
#..#.#.O#....#..O.O.OOO.......OO......O.OOO......#
|
||||||
|
#.....O....O...#.OO.OOO..#...O..O...O..#..O#OO.O.#
|
||||||
|
#OO.O.......O#...O.O......OO....#.O...OO.O..O.O..#
|
||||||
|
##O..O..O##..O..OOOO...O..#O..O.OO.O....O....#.#.#
|
||||||
|
##..OO#O.##...#O.OOO.......O.....O..O..OO.O...OOO#
|
||||||
|
#...#..OO.......O.O..OO..........O...OO....OO.O#.#
|
||||||
|
#..O.O..#OO.....O.........O#O.#..#..O...O.OO..O..#
|
||||||
|
#..O.#O...O............#O.O.O...O..O.O...#...OOO##
|
||||||
|
#...#OO.O#.OO.......#.......O..O.##....OO....OOOO#
|
||||||
|
#.O.....O..O...O.....#..O.....O...OO.O.O.......OO#
|
||||||
|
#...#O...O.O.#O..O..#..OOO#....O##....#OO.#.#OOOO#
|
||||||
|
#.O.#OOO......O...O..O.#O.OO..O.......O...O..O..##
|
||||||
|
#O.....O.#....O.OOO..O...#O#O....OOOO........#...#
|
||||||
|
#O...#.O...O.OO..O.O.O.............OO.O.#...#.O###
|
||||||
|
#O....OO.O.OOO#...#..#.....O#O..O..O.O..O#.O...O.#
|
||||||
|
#.........O#.##.OO..O..O..##..O........O..OOO....#
|
||||||
|
#.#....O.....O.O......O.O.O...OO.O....O..#O..O...#
|
||||||
|
#....O##O.O..#....O.OO.O...O..O..OOO..O...#..O...#
|
||||||
|
#O#....#.......O..O..#..OO.......O.OO.....OO.O...#
|
||||||
|
#O...O#OOO.O......O......OO..O.#.O.....O.O....OOO#
|
||||||
|
##....O##...#O.....O.#........OOOOO#..O....#.O.O.#
|
||||||
|
#O...O.....OO.....#O...O......O..OO.O..OOO.O#.O.O#
|
||||||
|
#O.O..#.O.O.O.O#.O#....OO.O....O.OO......O#OO...##
|
||||||
|
##################################################
|
||||||
|
|
||||||
|
>><^v><>^v<<vv<>vv><v><<^^>>>>^^><>^<^^vvv>>><><>v^^^^<<^<^><>>>v><><vv^v^<>>>^>><>v>v>^v>>v>>>v^<<^>v^<v<v<v^^>>v<^v>vv^><vvv<<^<><>^<>vv>^>^^^v<^^>v^>v>v<<^>>>^^vvv<>v>><^^<><<>v>>>^<v>vvv^^v>^^v<>^^<^^v^><>>><<<v^>v^>v^><v<^<<>^v^><v<^><^<>>>>v^<><^^>>>^^v^^<v^^>^v^v>>v<><<<vv^<<>^>^v>>v^v^<^<<><^>>^vv>>vvv^<v>v^<vv><^<<<vv>vv>^<^^>v>>^^^<^^^^<<^<<<<<<v>^v>^^v>>>^<>vvvv>>><<><>^v>>vvvvv^<<^<>^>v>>^>>>v<v><>^v^v><<^v<vv<v^<v^v>><^v<^>>^>>v<^v>>v>>v^v^v<<>v>><<><^<v<^<<v<<v>>^vv^vv<>v<v^<^^>^^^vv^<<>^>^^vv>^^<>>v^<v>>>><v<vv<v<^><^v<^vvvv><v>><<><>v<^<^vv<<<>><^<>^<^<>^<vv^>>><v<^^>vv<>v^>^<<^<^>^<^vvv>>v^>>>^<^>vv^<<^^<<>>>v><>v>^>^v>><><^<<>v^>>^<<>^v^<^<><^^^v<>^<v^v^v^<<^^<<<^>v>v<>^^^^^>>v>^v^v>><>^<<>^<v>>v^><v><<<>v^<<^^><>v<<v><vv^^<>v<<v<>>>v>v<<^v<vv><v<v>>^<<>vvv<<^>vv<<vvv>v>^>>^^^^^^^vv^v>>>vvvvv>^>^v<>v>><^v^^v^^v><>vv>><v<^<^>^v>^^^<<^><v>v^<^v<>><<^v^<^><v^v^^><<^v><><^^v<v><v>^><<^<<<^v<^>><>^^vv<^<<^^^^^v<vv^<v<^<<>>>^><^^>^v^v>v^<v^v^v^^>^v>^^><>v^v>vv>^>v^><v<>v<v<
|
||||||
|
>>v<v^<vv<v<><<>><^<^<^>><^<>>^>^^<^v^^^<v<^^vv^^^>>^>v>>v<<v^<>vv^<<>^v><v^v>v<>v<<^^^^<^v^<><vv^^v>v<<>>^>>^<^>><<v^^^>vvv>><>>^<^>v><v<<^<<v<<>v<^vv^v<>^>^v^><<<><^v>><v><<^v<<^<^<>>>>v><v>>v<>>><v>v>v<vv<>^>v<^>^^>v^^vvv>v>v<vv>>v<<vv^^v>><>><<<v^vv<<v^^v<<><v>^^>^^vv>v><>v<>>>>vvvvv<>v><<<<>vv>vv><^v^<^<v^<><<^^vv><^<vv^v>>^<>v>><>vv^>v<vv^<^><^v>^>v>^v<v<>^v^<>v><v<>>vv>>vv<^>^<>v><<vv^<><^<>vv><<<<v<<^v>>>^<>>^v^><>v^>^<<^>v^^^vv>>^vv^<<v><>vv^^v><vv><v<vv^<^>>v<><^<^v><^<<<^^<>>vv>>^^<^<<v>><>^^^<vv^<v<vvv><^^>^<<<^>v>^^v<<<vvv<^v<<vv>vvv<^<<v>v^><^^><>^<vv<>^<v<>v><<<v>>v^v<>>^><v><<^v>><v<^<vv^<^>>>>v>^>^<><v^v^v<v^<vvv<<<^<vv^>>v^^<^><^v><^^>v>v^>^>v>>^>>>>^<<v><v<<vv<<<^^<><v<^^<>v>>^^>v><><><<><v><v<>v>>^>^<v<^>^^<^><^^^v>v>>^^<<>>>vvv^v>v^v^<>^^<^><^vv^>^^^>>^><^><>>^<^^<<>>>v<<><v><>vv>^>v>^<^>^^>v<>>vv>^<^^^><vvvv^^vvv<v<<^<v^<<v<^>v><^<>v<<^>v><>>>><>>><^><^><^<<v^^^>^<v><v<>v>v<<^<>^vvv<>v>>>>^v>v^>v<^>^vv<<^<v<>v>vv^^<<vv<^^>v^<><<<v>v>vv^^>v<^^v><<>v>^>>^^v>>^>vvv>^
|
||||||
|
^^<v><<>^vvv<^v^>><^<^<>^<<v^v<vv>>vv^<^^<vv>><vv^v<<>^<^><^v>^>v^<v>>>>vv>vv<^>^<>^>>^><^>^<>^<>^^v>^vv<^^v>^>v>v>v<><<<>>^vv^<>vv^^^^^<<v>^^^^<<v<<v<v>v<<<^v^><<^>vvv>><v^^<<^>vv>^<<>>vv><<>^v>v^<vv>^vv<<^<v>>>>>>>>><>><^><^^^^><><<>^^^<<<v^^<<>^>v<^>^^<<><>^<<<>v^<>^v^<>v<^<<v^vv>v><^<^v<><<<>>>v><<<^<^>>^<^^><v<v^>vv^^><v>vvv^><^>^^>v><<v^>^v>^><vvv^<^<^^<^^>>>v^>^>v<v^<<^><<^<v<<>>^>^v<v>v^^vv><vv^>v<<v>^>v^v>>v>vv<<<<<^><^^<^<^^>><vv>^<<<vv^^v^vv^^^>v>vv^v^^>><v>^v<^v^>>>^>>^>>vv^v^<>^<>^><^>>^>^><<><^v^v<vv<<vv^<v^v^><<>v<^><>v>^v^<^>v><^><v<>>^v^vv>>^v<vvvv>><><>^v^vvv^<v^v<v<>^<v^<<v>v<<<>^<<>>v>v>><<^>><^<<<<<<<<^^>^>^^>><<>>^<v>v^^>v>>>><^^v^<>vv>^^vv<^<>v^v<<^^vv>>v^>>v><v^^^^<^v<<vv>vv<>^>v<v>v<><<<v<^v<^v^^^<<^vvv^>>vvv^>>^><v^^><>v<vv><>v>v^<<v><v<^><<v<^<v>vv<<><<v><<^^v>^><<<v<<v>^v>vv^><<<^>>v><><<<vv^>>^^<<^>^v^<>^v>v^>v><>v>>^v>^<^^>>>vv>>v^<>vv^^v>>v<^<>>^<^^>^>vvvv<>vv>>v<><v>>v<>v><^^^<<v<>v>v>>^v<<^<>><>^^<^<v<^^>><^^v<<<^>^>v^<>^><><<^^>>>>^<v<v^>>>>>><<<>^v<v>
|
||||||
|
>^>v^^<^<^<<^<vvv^>v^<v^^v>^<v><><^<^>><^v<^^^vv<v>v><^>^><<^^<^^v^>>><<v>vv>><><<<^^>>^^>>^^v<^>v^>><>v^v^>^^<^v><v^>^^<>>>v<<v^v<^>v^<vv^><>><^>v>v<^>>^>>>v^>v<^>^<v>>^<<^<v<vv>^<v<<v>^<v^<^<^v<><v>^vvvv<>>^^^<<<vv<>>v>v><vvv>vv^<^^^^^>v<^^<^>>v^^<>>v^vv^^v^><v^^^^>^^vvv^<^^<>vv^v<>><^^>v^>^v>>>^^>>>^<^v<v>^>vvv^^<><>><^vv>>^><<<<<^>>>^<vv><<v>>>v><><>>><vv>v^<^>>><^v>vv<<^<>v<><>vv><^^<^v^<<^v>^>v^vv<>^v^>v<v<>^<vv^v<^>^<<^<>><^^^<><^vv^v^^v^<vv>>^^>^<<^>>>><>^^<^^<v<<<<v>>>^<>^^>v^^^<v^>>^^v>><v>v^vv<v>^<^<<><v^<^<^^vv^v>><v<<^v<<^^^<<^v<v^>vv^^v>^>^v><^>><<^<v^<vv>v^^v><<^v><^v><>^^>^v><>vv^v><<v^<>^^>v^><><><^v>v^v>vv>^v><><<v<><>^<>vv<^<>^<<v^>vv>^v^^^v<vv^v<<<^<><<<<<v>>^v<v<<<v^v<vv<>^v>^<^<vvv>^>v><v<>v><>vvvv>^^v^^<>>>v>>>^^>vv^v<<^>v^<v><vv<^<>v<<^<<<vv^^>^vv>^<><<>^>>v^v>^<^v^<v<^<<>^<>^^<>^<^><vv<>^<<v<<><^>v><^<><vv<<v^<^>^<>>vvvv>^vv^vvv^^v><<^v<><<<^vv>><<^>^<^>v>v<>>^<^>^^v<^v<<^v>>>><>vv<^<v<^^v<>^<<>v^v><<v<v<>>^>^^<<v>^^<vv>vv<>>^>v>v>>^^v>^^>><v><^><v>>v<><^v<^v<^
|
||||||
|
<>v<v<^<>v^>><^<^<v<>>v^>v<vvvv<>^^><^>^>>^^>^v<^<v^<v><>v^<vv<^<v<^><v<v^>v^<<>>^^>^v<>^v<vv^<<v<>><vv^<^^vvv<><^vvv^><^<<v^^<<v^^><v><^v>^<^v^>v<>>^vv><<^v<<v<<vv<vv^>>>vv>vv^><v<<<^vv><>^v>^><<^v<<>>><^>><>vv^<vv<><><^<>^<v>v>^>>>>vv>vvv>v<>vvv^v^v<^<^v>><<>><><>vvvv<>vv<vv>>v^>><>^v<vv^v^>><^vvv^^<v^><v<^vvv<><><^^^v^<<v<>v^>^v<<>^>>^v^>^>^v>^<^^<>^<^^><>>v>^^><v^<v>^>v<v<<<<<<^v><vv<<^vvv>^>><>^><><v^v^^<vvv<^^<v^^>v<v<>v>^>><<^vv><<>><<v<><v<>^v^^<>v^v<v>v^>vv^<<>^>vvv^v<v^^><>v<<>><<v^<><^^vv<<<^><<><^>vv>v<<<^><vv^>>v<<><>>v^v^v<><<>^v>>v<v<vvvv<^^>><^><<>v^^><<v^v<>v<<v<^<^^<>v^>>^v^<<<>>^v^>^<^<v<v><^<>^v^<<><>v>^^^<<^<v^v^>vvv<v><^v^^>v^>>v^<<><<^^^<^><v<v^v^>><^^>>^<vv^>>>>^>><^v^v<^<v^v<><vv>v^v><>^<v^><v^v><>>^^>v<<<<>v<>v>v^v<><<>^>><><<^><<><^vvv<><<^^<v<v>^v^^>>v<vv<^<<^><<<<>><^v^>v>^v^<^<<v><vv>^^v<<><^^><<^v<>v<<<v^vv^^^>>v<><><>><>vvvvv<>>>vvv<<<^v>^^^>v>>v>vv<vv^vvv^<>>^<<v<>>>>^<<<^v<<^^^<vv<<v>>^v^<>^<><>v>v<^<<<v>^><v<^>^v^v^<vv><>v^>^<^^<vvv><<^>v<^^<^vv^^<v^v
|
||||||
|
^<>v>><<v^>^v^<>^^^>^>>vvv<>v<v>^<^vv<v^><vv^><>^v<<vv<>v><^^v^^v^^^^<^^v<<^^vv<<<<>vv<v^^v<^v<^>>v<^^>><vvvv^<v^<v<<^<>^^^<<>>v><^><^<v>v>^^>v><>^^vvv>^<^^v<v^v<<<^<>^<v<<<<v><^>^^<>vv<><^><>v<>v><^vvv>>>^>>v^<vv><v<>>>><v<^<^^<>^v><>^^^>^>v><^<v^<^v<>v>>v>v^<>^v<><>>><v>^<<<<vv>>><v>>v>^^v>><><^<<>><<<^<<^v^v^>^^><^<<<<>^><<<^v<<>v<<v>>^vv<^v><<<v><^^^><v^^<^vv>>vv<v^<<>^<^>vv<><>^v><>v^>v><^^<^v^v<^>vv>v><^>^>vv<v>^<^><^^^<>^>>vv<<vv^<v>>vv>vv<v<v<^<<<<<^<^^<<><^^<vvvv^<v^>><<<v>v<>><>><^vv<v<<v>^^<^^><^^<><^>><^>>^vv<^^v^<^v^v^<v>v>^><><<^>v^<>^>><^vvvv^><<<v<v<>>^vvv^vvv<><><>v><>v<vv>v>>>^<><^v>>^>v<><<v<>><>>>v^v>v><vv>^<v<^^^><v<<v<v>>><^<^^v^^><v><>><>><^<>>^<v^<<<v^>v^^v>>>^v>v^vvvvv>^<^^>><v^v^>><vvvv^^>vvv<^v^<^>v<^v^<>><>v^>>v<^<v<v>^>v><v>>><^v>^><v<v<vv^^<<>><<<v>^v^^v>v<><>v><<v>vv<^^v>>^>>^v^<^><^><v>^vv^v<^^v>v>v><^^^<><vv<<^v^<v<v>v>vv^>v^>>^vv^vv^^>v>>><<>^<vv>^>^>>^>^<>vvv^>^^<^^><>^vv><>v>><vv<^vv<^<<v>v^>^<>^^<^^>>v^<>>>>v^>v^^><>><v><^v^>>vv>>v>^^v^>^<^>>v<>v^>v
|
||||||
|
>^<<<^>><v<<^^><<v^v>^<>^^<>>^v<<<^vv<>><<^<><>^<^v<v^^<>v^<v<<vv^<><<v>^<<>>><vvv^>^>v><^v>^<v<v^<<<>>><^><v<<<>^^<<v>^<<v<vv><v^vv>>^<<v><>>v<vv^^<^^<><v^>^v^<<<v>v^^vv<v^>>^^^v><<^><v^^>vv^^>v<^>v>v><><vv<<><>^<<>>v^^<>vvv>v<<<^^<>^^<vv>^^>><>v>v>^vv>v><>^^><<^v^^vvv<v^^^v<^^<<<v^<v>vv^<^^v<><^>vv>>vv>^<>>^v^>v<^v<<v^>^vvv<v^>>>v^^>>^^v<v^^<>v<v<>^<<^>>v<<<>>v^<<<<v><<v^^<v^>>^^<^>^<<><^^>v<vv>v>v<^<v>><>v<^<v>>>v<vv<<<>^<>^^v^><^<>vv^^>>>^>v^<<>v><<v<<^>^>^<>vvv<vv>><<><>^vv<v><^<<vv>>v>>^<<v^>^^<v>>^>^>v^>><>>v<v<^<<<<><v<>^v^^<^v^^v>v>^v<><>>>^^><<<>v^^^<^v<v><^^v<>v<v><v>^^<<>^^v<>>^vvv>><<<<^vv^v>^v<>^>vv^^vvv>vv^><^<<>>v>^vv^v^>><<v^^>^<>>>vvv>^vv^^<>^vv^>^<><^<v^<<><v<>>>>v><>v>^vv>>vv<^^<^^>^>v><^><v^^<>vv>>><>>^^>>^v^v<^<>^vv^>v<><<^^v<><<v^^<<v><>v^v<>^<>v^^<<^^^^^><>v^v><^^v^<^><vvv<^>^<<^^v><^^>v><v>>^<vvvv><^<v>><<<>v>>>>^<>^<^v><>^<v<v<<>^<<^<^v^>v<<>^>^<v<^v^<>^v<>vv>v^<vv<^v>vv>v<<<>^v<>^><v><<<>^^<^^<v^><><<><^^>vv^^<^<^v>v>vv^>^>><^<v<><^><<>>>>^vv>^<v<><<<v<v>>v^^
|
||||||
|
vv<v>>>^<<vvv^>>v^^v<v^<><^^v<v>^v^<>><>>vv^>>v<<>v^^<<<>vv>^v^>v<>>^>v<^v><<>>^<>^^<<v>^^>>^v><>^^<>vv>><v>vv<><^^v^^<v^>>>^v^^<v><<<>^^vv><>v<><>>^^<v^v^<vv<><vvv><<vv^>^<><><<v^^><^v>v<^^^>>^v^>^><vv<<<>v>^v><v>^>v<v>^vvv<>v>><vv^v><<vv<^^>>v<>^<>v^v^^>^^<vv^><^<^v>v<vvv^><v^<^<v<><>v^^v>v>vvvv^vv^^^>v>vv<>>^<v>^vv^>v^<<v^v><>>v^>vv>vv^>^v^>>^<><^><v>v^^<v<>^><<>v<^>^^<v><>>><vv><^><v<^><<>^<vv^vv>^>^<^^<<^>v^v>^<^<v<v<^<vv^>>vv^^<<^^vv>>><^>vv^><^<><v^<^^v<><^<v<^v^^^v>>vvv>>^^^^><^>>>vv<>>v>>^^>^^>^v^vv^>>^>>v^v^^^v>>><>^<>>><^<v<<<><<>>^^vv<vvvvv^vv><^v^<^<<v^^<>><<>^<^<<<^^>v>v<<<<^v^v<>v^<<>>v<vvv>^vv><>^^^<>v<vv><v<<><vv<^v<>>^v<<<>v^^^^^>v^^<><<<vv^<>v<^v>v<vvv^<^^>^<<<vv<>^>^<v^<><^><^<^<^v><v^^v>^v^><^^<<^><^^>^>>^v>^<>v>>vv>v<<<^^v<^v<v>^>><v><<^^<<^v><<v<^^^^v>>^v>>>v>^^^^v>^<<<><<v<>v^>v^^>^v>v<vvv>^<>v^^v>^>^v><v<^<><^<^^v>>^<<vv<vv>>v^<vv<v><<^>>><<^>^>v<<^><^v^v^>^>^vv^vv>>vv<<<<v><^v><^>>^>>>v>>^>^>><<>><>v^><^^v<<^^v<>^><^v<<<vv><^^^<>^^v^<>>v^<>^^^^<v>>v><<<><>^v>v
|
||||||
|
v<v>v<>^>v^<^^<>^^>vvv<>><>>v><><<<>><^^>^<<<v^<vvvvvv<^v>v^>^>^>vv>>^v^v^<><><^><vv<>><<v>^v^vv><<>><vv><>v^<^<>v^<<v>^vv><<v>>vv><^>^>vv^vv<<^v<<v<><vvv<^>vvv><>>v^<^^^v^^<^>^^^>vv>^^<<v<^^>vv^v^<>^<<vvv>v<<>v^vv<v>>v<v<vvv<>>^>>v>vv>^v^^<<v>^vv<>v^>>><^<<>^^v^vv^v><vvv<<>>^^v<^<^<>vv><^>>^<<>v<^v<>^<>v^^vv<>><><^^<^v^<v>>^^<<^^v><^^v^^vvv>v<><^>><^<^<>v>>vv^>>^vv<>>vvv^><v<><>^v<><<>><>^^<<>>v<<^<><<^^v<<^^>><<^<vv<<<v^^<^<>>vv^^>><>>v><^<v^^v<>^>>^v<v^><v><^><<^<v<<vvv<<^>^^><>^<<><<><<^>>vv>>^vv<>^^>>v<>><vvv<<^^v^^<>>vv<><<vv><^^v^><v>^<>^^><^v^>v^v><v<^v^<>^<<>>vv<v<^^vv<v^v^vv<><vvv><vvv^^<vv><<<^v><^vvv<>>^v<>^^<^^<vvv^<v^<<^^>v^<^>v<>>^vv<<>^><>>v^^v>v^<v^^^<>^v^v>>><>^>v<>^^<><^><<<<v<<<vv^>>>v^vv^><>>>v<<<>v<<<v^^>v<^>^v^v<^vv<<<^>v>v^>^^><^>v>v><v><^^v>^vv>>vv^>^<^v>><>vv<vv^<^<v>^v^v>^<>>v^<^^^><v^v^><<<^^>>>^^>><v>^>^^><^^v>v<>vvv><^vv^^^^v^^<^><>>^>>^>^<v^><>^^<v>><vv><vv^>>>^<<v^v<<>>vv^>^>v>v^><v^^^^^^<^>vv<>>^>^>>^>><v>v><><vvvvv<^v^>v^>>v<v<v<^<vv^>>>>^<>^<<v<><^^><
|
||||||
|
><<>^>>^<^^v^^><<v>v>v^>v>>^^<><^^<^vvv<><<^^<^^><vv<^^v<>^^v^^>^vv><v^^^<>^<<<v><>^<<>vvv^v<v>^^<><>>><<>><^<>>^>^<^v>v>>v^>^^v^^^>^vv><v<<v>vv^v<>v^^^v<v<v>><^<>><>>vv<^>v^>^v<>^^^vv<<>v<<v>^^v><>^<<^>^>>^<<>^^^<<^vv^<<<^^^^<v^^^>>^>v<^<<^^>>^vv^><vv<^^^^<v><v<^v<<vv>v>v>^>>^^^v<<vv><^vv^^>>>^>^^^^<>>>>><^>>^^<><v>^<<v^>v^^vv<v^>^><>>><>>^v<^><>v^>^>>^>^^^>vv>v>^^^^vv<>>>v<<^^>>>v^v<^<^v<v><<>>^^^<>^v>>^<><v<>^><^>>^>>v><><vv^^vvv^<<^^v<vv^<<>>>v>><^<<<><v^>v>><>^>>>v^vv<>vvvv>v>>vvv>>vv^><>^^>v^>v<v<v>>^>v^vvv^^>>v^>><vv><v^<v<>>^>v<v<v>>^<><v<<v<<^<v<><<<>^^>v^v>>vv>^^<vv^v^<>>^<>>^v<^<<><<^><v><>^^vv>^<^^v>>^><^<^^><^v<v>>>^vv>><v>^v>^<v^>><v>^><^vv><v>^^>>v^>^^<^v^<<<v<^<<^v>^<<v>vv<v<<>vv^vv>^>><>v^><<vv>><><v^<^vv^<<>v<<>vv^^^<^vv>v^v><>^>>^v>><^<^^v>v^>vv^^>>^<><><^v<><<^><<><><vvv<<v<<vv^<<<<^<^v<v<v<<v<^>>^v>v<<<v^vvvvv<<^><vvv^<<>><v<><<^<>><^<^<>>^<v>v>><<^><>v>^>^v><>>^>>><<v>v<vvv>>>>>><<<v><>v>>v^^vv<^^<<<>vv^>vv<^^>^<><vv<^^<><v<^>v<v<^>^^<><^^>v^^>^>>v>vvv<<<v^>>>^<^v
|
||||||
|
v<>^^^>^<^>^<<<<v^>^vv^>><>v<<>>^<v<^v>v^^^>><>>v^^<<><^^^^>>^<^^<v<>v^v>v<<v>^>>v>^>^v<>^>v<<>>^<>^^<^<>>>^v>^<vv>>^><^^>><<^^><>^><<>^>^<v<><^^<vv>>v^v>v>v><^>>>>v<>^<vvv^^>^v<^^v>><<v<<>>>v<<v^>>^<>v<v>v<^>>^>><>>v>^v<>^^<^><>><>v<v><vv<>>^>vv^>^^<v>>v>>v>>^v<v<^^><<<<<^vv><<v>vv^>>v><>><vv^<^v^v^v>><v<^^>vv<>>^^<^<v<^vv^^<<<^<v<^>v^v<vv>v<<><>^v<^<<<vv^<>vv^v<>v>v<>^^^>^^>>v>vvvv><vv^v^v^v><<>v>v>>^<vv<<<v><^>><^v<^v><v>^>v<<<<vv^<^v><<>v^<<<^^^^<>vv>vvv^>^v>v>v><><<<^^vv^^^><v><v>><v^v^^<>v^^>vv>v<>>v><^v>><<><>v<^<>^^vv^^><>v^^^<vv>^>^^^<<>^<v><<<>^<^<<v^vv<<<vv^>>v<>>vvvvv<v>v><^vv>>v>><<><><^^>^>^>^<v><<<vvvvv>^<v<v^v>^^v><<<^v<>>^>>^v>^^v^^^^v>^>>v>vvvv<vv<^v<vv><^>v>^>^<>vv^^>><^^>>v^v<^>vv^<vv^>v^>v>>>>v>v^v^>>v><>v^v^<^>v<^^^^^v<<^>v>>^<v<v<>v>v^v>v^>vvv>vvv^vv^^v>^>v^v<v>^^>v<^vvv><>^v>^vvv>v<><vv<^><^^>v^^>><^<v^>^<^>vv>><<^^<>^<>>^><^^v^<<>>^^v<v^>>v^>v>^v^>v>>>>^>>>^>^><>^v^v^>vv^^<^^^>>^vv^^^>v^>>^<<v^^^v^vv><<^^<<v<v>^>^v^^^>><<v^<>><v>><>^<><<v<v<<>><<^>vv>vv<v<v<<<^
|
||||||
|
v>vv<<v<^v<v<^v>^v<>>>^>>><^^^><v^<><<<>^v>>^><<v>>^v>>^<>>v^>^^vv<<^^><<>v<vv^v^^^>^<>>^<<<<^^^><^<><^vv><>>v<^^>v>^v^^v><v>^v^>>^<^>vvv>^v<>v<>v>^^^><>^vv^<^<^>v<v<v<v<>^v^<vv<<v<^vv<v<v^^<vvv<<^^v<><>>><^v<v^v<^<<vv>^<>^^^<^><<v>>>v^v<^>v<^>^<vvv<^^^vv<^v<<<<v><<^<vv<v<>>^^^^<<<><v<<><><^>v>><v<>><^<v<^^>^>v^><v^<^<^<<>v^vvv<<^^^><^><^>>><<<<^<^^v<^<^v^<^><<^>>v<^>v<>><^v><v<<v><<<>>vv^<>^^^><^<vv^<^<^<v<<^><>^^><v^vv><^<^>v>>>^<><v<v>><>v<>vv<^^<^<^^<><v^<>v<><<vvv^vv>v^vvvvv<>v>>v><^^<<v>><<>v^>^v^><^<>>vv<>^^<<^<<v<<<v<^^^^><<>v^^<^>^v><><^>>v<>^vv^v>^v>>vv<^<^>vv<^<^<^^^<>v^vv><^^>v><<<<>>v^vv<^<v><>v><v<<<vvv<^<<v^><<<><><^vv<>v<vv<<<<^^v^v<<v><^v^<><<>^<^^vvvv<<>^^vv<>>><v<^<v^^vv^v^<v<><v>><>^v^^^>v>>^>v^>^<<>v>>^v^^<<^^v><>^v^>vv>>v<v<^vv>>^<^v<>>vvvv>>>^^<v<><vvv^<><>^><>>v>><<^<>^>^>v>>>^^<^><^v>><^><><<v<^v<v>>^v^^>v^v>>^v^v<<<^^^<^<^<<^v>^<><vv^vv><>>>v>^<<><>v<v>v>>>^>v<><>vvv^v>^v^vvvv>^<v^^^^>v><v<v>>^<^>v>^>>><<v>>vv<>^^<<>^v^v<<>vv<>^v>v<>^^<<>><<^vv^>><v<v><vv<<>v^
|
||||||
|
^^><v^^^<v>vv><v>^<<v<^>>vvv<^<vv<>^v>v>v>v<v^vvv<>>v>^v><vv>>^^><>v>v><<v<<vv><v^^><vv>><^>><^v>v^vv^^<<><^>v<vv<^><v>v^>>^><<v^<^v<<>v>^><<<^<<>^vv<>>v<<<<><>v>^^<v>><^><<vv>>>v^>v<^vv>v>^^<^>>v>^^<v<<<<>><v<^<v>>v^vvv^v>v^<^v<v<^^^<^v>>><<>>>v<<<><>^<>^>^>vvv^^^>>v<^<v<v^^<^<^><^^^<^>v^>^<^v><><^vv^^><><^>^<<^>>v^>^v^<<^>v^>^<^>v>vvv<<v^<><<>v>>>>^>>v^><^vv><v^v><<vvv^^>>><<>vvv<^<<><vv>>>^<^v^^>^>v^<^><><<vv^vv<vv^>v^vvv^^^<>^v>^>><^<<>>>>>>v<^>vvv>v^^^<<^>v<^><>>v>vvv<^^><^<^vv>^v<><v<v><>><vv>^<vv>>>^>^<^><^>vv<v>><v^v><><^><<<<v^<vv>>>^>^v><>>v^v>^v<^^^><vv^<><><^^>^^>v>^^^<^v><<<>>v<>>^>^^v>^^><>v<^^<<v><>>v<v<><v><v^^><^^>>><<^>>^^vv><<>><>^<<vvv^>vv<<v<v^<^<vv^<><>>v^<vv<^^<v^^v>^v^v^^<><<<>v<>>^>>^<^<<<<vvv>v<vv^v^>^>>^<^<<>vvv<><v><>vvv>>>>^^>^v<v>v>><v^<^^v<v>^^v>>v<>^^^><^^^><>>^<v^<v^>^^<<>>>v<^v^>^^<vvv<^^^<v^<>^vvv><^<><>>>^v<><><v>^>>vv>^^vv^^<^<>vv<^<^<vv><<>^>><<>><vv^>>^v><^v^^v^<^>v<<><v<^<>>^v^^<^^>^>><>>^><>^><v<>v^>>^^^^^^<^>^^><vv^>vv>>>>>^>v>^><v>^>>^v>>^><<>
|
||||||
|
>v><>^v^^>><<<<^^><>^><v^vv^v>v<<<>vv^^^v^^<<<>v<<^^<>v<><^v<<^^v<>^v>^v<^v^<vvv^><<v><<>>^<vvvvv<^>v^<><<<>>v><>v><vv>^v<v<<>^<v<v^<^>^vv^^><><v>v>v^>v>><v^^^<<vv><v^<^<^^^<><^>^<><>vvv>v^^<>vvv^^v>v><^>^>^<<<v>^v<^><^<v>vvv<vv<^><^>^>v>>^>^^vvv<>v<<<^>vv^>v>v^v<v>>v><<>vvvv>^>^v<^v<>>v<vvv>v><>v^>>^<^^>v<^^>>>><vvv<^><><v><^v>>^>^^>^^^>^>><^<vv<>^<><vv>^^>v^<<^<^<v<v^v<v<<v^v^^v<<v^^<<v^><vv>^<>vvv><>>v^^>^<^v<^^<vv^<^^<>^^v>>>^>^^v<<<<>>vv>vvv<^>vvvv<^<vv^vv^v^^<>^^>^>v<>>>^<><^>><^>v<<<^><>>^<v<v>>v><<<<^>v^^<v>>^^vv<^<<v^vv<^<><v<>>>v<v<>>^>>^<^<<^v>^>>><^^vv<<vvv<><v<<v<v>>^>v^><^>^vv^<>><<^>^>><v>^>^>v><<>^<<v>v>>^>v^>^^v<>v>^v>v<>>^^>>>>>^><>>^>><<v^<^^>vv<>v>^>>^<v<v<<<<^<^>^<vvv<><<vv^vv<v>>>>^>v<v<v^^>>^>>>>vv><<^v<^<<>^<^>vv>^v<v^^vv>>^^^>>><<<>v^^^<^<^><v><^<^>v<><>><><^v^^>>^<<v><^^><v>>>^<><^><<^v^<>>^v>^^<>^^^^^^v<^<^v<<<<<>>>>vv><v^^v^<^<<<>>^<^v<^>>^>><v^<<>^v<^^v>v^v><v^vv^^<<<^v><^<^v><<<>v>v<>^>^>v>v>^vv<<>^v<<vv><^<vv<>>>^<<<v^^v<^v^><<<<^v^v<v<><><>^^v^<><^v^^<><
|
||||||
|
^>v^<^><<<vv<vv>v<>>v<<vv>v>v<<<<<<^vv^<<<v^^v<v>>v^vv<vv^<<v<^v>v<^vv^<>^>^v><^>>^vv<<<^^^v>^<^><>vv<<v^>v<v^<<^><^<^>>^<^v<>^^<^v<^><v>><^v>^^<vv<v>v<>>><v>v^<>>v<<<^>^>v<<>>>^<v<>>><><^v<>vvvv^<v^<>v><v^>^^>^^^>^v^v<>^v>^^v<^>vvv<>><^^^<^^<>v>^>>v^<>^^vv<^vv<>v<><^<>^^><<<^^>v>v^^>>v>vv^>vvv>v<<^<v>><<<<>v<vv<><>^<v^>^>v^><>^>vv<><<^^><v^v>vv<v<^<v<<^>^<<<><^>^<>>^<^vv<>v>^<v<<<>vv<^>v<><^v><<<vv><<<v><^v<v<<vv<^v^<v^^<>v><^<vv^>><><^<v<v^<<>>^v>v>^v^<v<<v><v<>><><>>>^>^>>>v><>>^^<<<<<v^vvv<^v^<>^vv<>>v^>^<<vv^>>^^^<>v^v^vv><^vv>><^<>^>v>^<vv><v^^^v^<^^^<<^>^<>>>>^<^v<v<><>>^^<v<>^^v^v<>^>v<^^><^<<v><^>v>^vv<^vv<>>>>><v<^^vv<v<^>vv<^v^v^^v<v<<vv>^><<<<^>vv^><v<<v^>>^>v<v><^<^>^^>v><<^<>v<<v>v<><v^<<^>v>^<><v^<<v<v^v>^>vv^^<<^^v><>>vvv<>>^vv>><<^^<vv<>>>^<^^^><>^vv<v<^^v^^^^^<<v^<<v<>v>^^^v<^<^>v><v^v^v>><<>v><vv>>^vvvv<^^<<<v><<<vvv^>><v>v<^^^><vvv^^<<^vv>v^v^>v^^<>^v<v^>v^v><<<^v>^v>^<v^<v<v<^>^<^v>>v^><v^^^<>^>v>v>^^vvv>v^^>>^v<>>^v^<v>^^>^^<^><><v<><>^v<v<><^<v>>^>>><v><^v<>vvv^>
|
||||||
|
<>><>>v>vv^<^^<^vvv^v><^><<>vvvv^><<<>v<<<>^><^v><vv><^<v<v><v<^v<vv^^<<^v>>v^>^>vv><vv^vv^<v^vv^^>^<<>v>>>>^^vv<v^^v<>>v>^vv^>^v>v><vv<^v<v<<^v>>v>><v<<v>^^^><>v>>^v>>v^><^vv^^vv<v<<^^v<>^<>v<>><^^v^>v^v>v>vv<<<v^^^^<^^v>vvvvvv^v^^^><<>vv>^v^><>^^v>>><^>v>>><vv<><v^>>v^vv>^<vvvv^vv>v<v>^><<>^v<>vv>vvv^v^vv^v^^<<vv<<^v>>^<>v^v<>>^<v>><^>^<>^^v^v^v>>vv><vv<>v>v>v^>>>>>^><<>^v<>^<^^^v><>v>^^^<>v^>^vv>>>>>><>v>><>>>v>><<^>v^^>v<vv<^^^>v><><<>v^>vv^^^v<<^>v^<>v<>>v>^^^v<v<v^<^>>v<^vvv<v^<>^v<<><v<v<<^v<vv^^vvvv^>v><<vv^<<^<<>v>^^^<^^^><>>^vv>^<<<vv^<v<v<<><^^><v^<<^v^^>^<^v<^^vv><^^>^<^><>^<v<<^^>v>><<^>vv<^>^><<v<<v^<<^v<^^^vv>>^>^>v><>^>>^<vv>>v>^^>vv<<<>>><>^>^><<>v^<<<<>^^v^<>>>^><^>>>^><v>v<>>^v<^>>><^^<v^vv^>^><<<>><><^v>^<>v<v>^<<^<^>^<>>>^v>><<^vv<^vv^v<>>v>v>><vv>v^^vv^<^^vv><^v<>^v>>vvv>v<<^<>^v^<vv^v<<>v^>vv<>^vv<^<^>><<>vvv^<>v<^<v>v>^^v^<v<<v^v^^^>vvvv><v<<v^vv<>vv^v^<^<<^v>v<^<<><<vv<>>v<^<^<<^>v<<^<<<>v><><^^>v<v<>v^>v>v><><<<^^<^>vv<v>><<>vv<<<>^v>>vvv^^v<^<v<v^v^^>><v<>^<^
|
||||||
|
<v<<v><vv<>^^v^v>^>vv^><^<>v><^vv^<^>>v<v>vvv<>>^vvv<>>v<>^v>><>vv>^v<v>vv^v^^<^v><<<vv<vv<v^<><v^><^>>v>vv^<^v^<^vvv><>><^^v<^<^<>>^>^<v>^<<v><<>v^vv>^v>><v^v^v<vv^^v^^vv<v<<v^v>^>^^v<<^^^>v<><><^>^>>v>>v<>^>>v><><v^<<v<>vv>v>>>^>^<>v^>vvv<^<vv><<>vv<<><v<<<><>^vvv<><<v>^^^v^^v>><<v<v>v>>v^v<vv<<<>>>^v<v>v>v>^v^<<<^>>^>^^^<<^>>^><v<^v^>v<><>^^<v>^^<>^vvvv^^v^<<<^><^><<^>v><^v^>v<<^><<vv<v><vv<<><<^^v<v>^^^><<v<>v>>^><v^<v>^vv<<<<^vv<v>v>>>^><><<<<v>v<^^v><>^v<^<>^<<v<^v^>vvv<<v>^^><><v<><^v<>>><<^>v><><v<>>><><^v<^<<><v^^v>vv>v>^^><^<^>v^>v>vv<>^<<^><v<<v><^^><v^>v<^v>^vvvv><^vv>^^^><^v><><vvv<<v^^^^vv>>v^>>v^v<>v>>><>v><>^<^<<<>>>>vv>>v<^>>><^<^>^^>><>^^<<<>v><v^^>v^<^v<<>vv>v^<v<^v><vv^<<>>^^<^><^<vvv>>vv^>>^<v>v><<><<>^v<><^^vv<^vv<<v>>><>>v>^<<^v<^v<^^>^><^>^^>><<<>^>>>>v>v>>>^v>^^v<^v>^<>^>>^<><^>vvv>>vv<<>^v^>^^>^<^^><^v<>>^v<><<>v>v^>^vv<vv<<v<^^><<v<v>^<<v>v<<v>><^v><v>^<^<<^<^v<^v>>v^^^v>v<v>>>^<^<v<^>v^v^v>><<^>^v>>v^<>v>^>^^<^v>>^v<^<^^><><<<<^vv<<^^>^><>>^>>>v>^^>^<v^^<>><
|
||||||
|
v<vv^>^<^^<><^^>>v>>v^^^<>v>v^<^<<v^^>>^>^>>^<v><^^^^>^<v>^v><vvv<^vv>v>>^><<^>>^vv<^^^^>^^v^<<v<><<vv<^<vv><v^v^v>v<^><<v^<<>^>><v<^v<<vvv><>>^vv^^<<^v<<>v><>^<<v>>v^v>^<<v><<v<^^>v>><vv<<^>><v<^>vv^vv<^<<v^vv<<^^>^^v><<^v>>>vv<^<^<v^^>^^v^>v><<>v^<>v><<v>v<v^vv^<^^>v<v^v>><^<<>>>v><^<v<><>^^<^<><^<<v>vvv<v^^vv^<^^><<v<vv^<<><<>>>^^^^>>v<^>>^v<v<^>v>vv<^>vvv><<v^>^^v<>^<>vvv^><v^<<<v<<><vv^<>>v<v^vv<><>v<<>v<^v^^<<v>^vvv>v<<v<v><<><v<^>>v^<^>v^vv^v>v^v<v<>><<>>>v<^<<^>vvv^>v>>>^vv><><<<v<>vvvv>^<>><^^v><><^v^v^^v<v<^vv^<>><^^>>>><^>^>^>v>>vvv<<>^><>^^v^^^v^^>v<<v>vv^><>><<v^<vv<><>v<v<^^vv<<><<vv^v<>v^><^v^^^^^<><<^<^^^>^^^vvv^<<^v>vv<<<v>v^<>v<<v^<<>^>v^vv^>^^>v<>vv^v><><>^<><>>><><^v^<>><<v<^v<<><v>vvvv<<^><v^><v>^v<><>v^<<^^vvv<<<>^>^>^^^>^v><^^<>^>^v<v^^v>^>>^v^v<<>vvvvv^<vv>^v<>v^<><^<^v<>^v>^^><^v>v<>v>vv>^>^v<^<<^>v^<v^<><v<vv>v>^^><vvvv>^<^>^vvv<<<^><^<v>^<^>>^^>^<<<>^>^vvv^v^<vv<^^v<v^^^>><v>^>><v>v<>><>><v<<<><^v^v^>>^^>>>v<<^^^>^v^^^><v><<<<<<^v><><vv<><^v>vvv>^v<v<v>v><>v<
|
||||||
|
<<>>v<^><^vv^^^^v^v^v^^<v<^v<<>^<^v<^^<<<>v^>>^^^v<>v^v>>>v<<><<<>^^>>^<<v>>v^<v>v^^^>^>^><>>><>>^v>><<^^vv>^<^^^<>^>>^<v>v<v^<>>>vvv^>v<v<><>^^v^<vv<>^^v>v<><<<>v^v>v<^v>^<^v^vv^><^>v^>v^>v^^^<>v>v<<v>v>v^^>><>^><v<<><<vv^>^vvv^v>^^<<<>^>v<<v<v<v>^<v>v<<>v>v<><>^^<v>>^vv<<v<^>><>vv>v<>v^>^^><v<<><^><><v<<>>><v^>v<^<v^v>><<<v<<v^><vv^^<<^<<>^<>v^><v<^v^v^<>>>^^^vv^<v^>><>vv<<vv>^<^v<v^^^><^>^>^<^v>><^v^v^>>^^v^v>v>>v>>vv^^^^>><>vv><vvv^v><<vv^<>>^^v><<<><vv>v^>^>^<^>^v>^<v>vv><><^<<<<^<^<v>^vv<<>>^v^^v^>>><vv>><^><v>>^<v>v>>v<v<v>><v<><v^<<^v^<v^v<<v^^<<><<^^v>v>>^<^^v>>vv<<^vv^^v<^>^^v<^^<<vv>>vv><^<v^^^<<^vv<<<v<^><<^><^^vv>^^>^^^<<v<v^><<<^v>>vv<vv^^><<<><^vv^><v>^<^<>>vvv^v>><^<vv>^^^>^v<>>vv^^<v<>^<>>^^v>>>^^vvvvv^<^<<>>v<vv^^<^<v><<>^<<>^<v^^^^>>>>v<v<><^^>v^><<><vvv^v<<vv<^v^v><><>^v^^v>>^<<v<v^^v^>>v<^<^^^v<<^>^^<<<<<^<>^><^<^v>^^^<>v^<>>^^>v^<^>^>^>^<<^><>v^v>>^<><^^>^>v<<v<><vv>>>v>>>^>>v<><<^<^v^<v^<v^<v^v>>>>v^<>^v<vv^^<>vv<<vv><<>>>^>^v^v><>>><vvv^<>^vv<<^^<>^v>><<v><<^<<^
|
||||||
|
vv<v>vv><><>>^^^>v><<>>><>^<^^^><v<vv^<<<><>><v^v^><>^<v^v^^v<<<v<v^<>>v><<<>>^<<^<v^<<<^>v<v^><<v^v<<^<<v><<^^^><v^>>>>^>>>>^><>v>><v<^^^>v>v>>v>><vv^vvvv>^^<>v><v^>v^^^^<<>vv<v><^>>>>^v>vv^>vvv^v<v>>>v<^^^>v>vvvv<<<vvv>^>^>><>v^<^^vv>^<v<^v><<><v^><<>v><<<><^v^^>><>>^^<v><><>^<<>>>^<>^<v>>^>><>^<<><vv^>^<v^v<><vv<^<<^v>^>><<>><^><<<>>v<>v^^>vvv<<^<>vv^>v<vv<>^><>^>^^v>^><><<v^<>v^v>v>^><><><^<v<^v>^^^>^v<^>^vv^^v<^><>>><^<<v<vv<v><^>>v><^v>>^>v>>v>>>vv><>v<^^v<<<^^<>^v><^<<v<<v<^^v><^^^^^>>vv^<<><>v<^<>vv<<>^^<>^>v<vv^^<^^^<v^>vv>^<<vv>v<v>>^^<>>>^vv^^^^^^><vvv>^><^^>v>^vv<<vv><><<>vv>v<v>^><><^>>v^>^>>v<v>vv<vv<^><v><<v<vv<v><><><v>^<>^<vv<^>^^v>^^^^^^v^>^<v<><^^^^<>><v>>>>>><<>>>>^<vv><<^>>>>>^>vv>^<<<<>v^><v>>>v^<vv^>vv^>>v>>v^^<><^<>v<^<v<<^<^><^><><><^^<^<><>^>v^<^>><>>>^^<vv<<vv>^^v<<vv^^vvvv^v^^<^v^v^^^^><v^<>^^v>vv<<^<>v<^>v><>^^^<<<^><<v>>v<<v<v><v^<v^vv^<vv<>^<^<>^>v>v<<^^^>>^^<>^<<^^<^^v^v^^v^^<^<<v>^<v>^^>^>^>v><^v^^^v>v^v>>v^>^>>v<>^<^v^^^^^<v>v<v^<^><^>>v^<^<<>^v^v^><<v
|
||||||
+1020055
File diff suppressed because it is too large.
Load diff
@@ -0,0 +1,9 @@
|
|||||||
|
#####
|
||||||
|
#...#
|
||||||
|
#.O.#
|
||||||
|
#.O@#
|
||||||
|
#OO.#
|
||||||
|
#...#
|
||||||
|
#####
|
||||||
|
|
||||||
|
<>^<^<v
|
||||||
@@ -0,0 +1,7 @@
|
|||||||
|
#######
|
||||||
|
#.....#
|
||||||
|
#.OO@.#
|
||||||
|
#.....#
|
||||||
|
#######
|
||||||
|
|
||||||
|
<<
|
||||||
@@ -0,0 +1,8 @@
|
|||||||
|
#######
|
||||||
|
#.....#
|
||||||
|
#.O#..#
|
||||||
|
#..O@.#
|
||||||
|
#.....#
|
||||||
|
#######
|
||||||
|
|
||||||
|
<v<<^
|
||||||
@@ -0,0 +1,11 @@
|
|||||||
|
#######
|
||||||
|
#.....#
|
||||||
|
#.....#
|
||||||
|
#.@O..#
|
||||||
|
#..#O.#
|
||||||
|
#...O.#
|
||||||
|
#..O..#
|
||||||
|
#.....#
|
||||||
|
#######
|
||||||
|
|
||||||
|
>><vvv>v>^^^
|
||||||
@@ -0,0 +1,13 @@
|
|||||||
|
######
|
||||||
|
#....#
|
||||||
|
#....#
|
||||||
|
#.O..#
|
||||||
|
#.OO@#
|
||||||
|
#.O..#
|
||||||
|
#.O..#
|
||||||
|
#.O..#
|
||||||
|
#....#
|
||||||
|
#....#
|
||||||
|
######
|
||||||
|
|
||||||
|
<^^<<vvv
|
||||||
@@ -0,0 +1,11 @@
|
|||||||
|
########
|
||||||
|
#......#
|
||||||
|
#OO....#
|
||||||
|
#.O....#
|
||||||
|
#.O....#
|
||||||
|
##O....#
|
||||||
|
#O..O@.#
|
||||||
|
#......#
|
||||||
|
########
|
||||||
|
|
||||||
|
<^^<<>^^^<v
|
||||||
@@ -0,0 +1,141 @@
|
|||||||
|
--- Day 16: Reindeer Maze ---
|
||||||
|
|
||||||
|
It's time again for the Reindeer Olympics! This year, the big event is the Reindeer Maze, where the Reindeer compete for the lowest score.
|
||||||
|
|
||||||
|
You and The Historians arrive to search for the Chief right as the event is about to start. It wouldn't hurt to watch a little, right?
|
||||||
|
|
||||||
|
The Reindeer start on the Start Tile (marked S) facing East and need to reach the End Tile (marked E). They can move forward one tile at a time (increasing their score by 1 point), but never into a wall (#). They can also rotate clockwise or counterclockwise 90 degrees at a time (increasing their score by 1000 points).
|
||||||
|
|
||||||
|
To figure out the best place to sit, you start by grabbing a map (your puzzle input) from a nearby kiosk. For example:
|
||||||
|
|
||||||
|
###############
|
||||||
|
#.......#....E#
|
||||||
|
#.#.###.#.###.#
|
||||||
|
#.....#.#...#.#
|
||||||
|
#.###.#####.#.#
|
||||||
|
#.#.#.......#.#
|
||||||
|
#.#.#####.###.#
|
||||||
|
#...........#.#
|
||||||
|
###.#.#####.#.#
|
||||||
|
#...#.....#.#.#
|
||||||
|
#.#.#.###.#.#.#
|
||||||
|
#.....#...#.#.#
|
||||||
|
#.###.#.#.#.#.#
|
||||||
|
#S..#.....#...#
|
||||||
|
###############
|
||||||
|
|
||||||
|
There are many paths through this maze, but taking any of the best paths would incur a score of only 7036. This can be achieved by taking a total of 36 steps forward and turning 90 degrees a total of 7 times:
|
||||||
|
|
||||||
|
|
||||||
|
###############
|
||||||
|
#.......#....E#
|
||||||
|
#.#.###.#.###^#
|
||||||
|
#.....#.#...#^#
|
||||||
|
#.###.#####.#^#
|
||||||
|
#.#.#.......#^#
|
||||||
|
#.#.#####.###^#
|
||||||
|
#..>>>>>>>>v#^#
|
||||||
|
###^#.#####v#^#
|
||||||
|
#>>^#.....#v#^#
|
||||||
|
#^#.#.###.#v#^#
|
||||||
|
#^....#...#v#^#
|
||||||
|
#^###.#.#.#v#^#
|
||||||
|
#S..#.....#>>^#
|
||||||
|
###############
|
||||||
|
|
||||||
|
Here's a second example:
|
||||||
|
|
||||||
|
#################
|
||||||
|
#...#...#...#..E#
|
||||||
|
#.#.#.#.#.#.#.#.#
|
||||||
|
#.#.#.#...#...#.#
|
||||||
|
#.#.#.#.###.#.#.#
|
||||||
|
#...#.#.#.....#.#
|
||||||
|
#.#.#.#.#.#####.#
|
||||||
|
#.#...#.#.#.....#
|
||||||
|
#.#.#####.#.###.#
|
||||||
|
#.#.#.......#...#
|
||||||
|
#.#.###.#####.###
|
||||||
|
#.#.#...#.....#.#
|
||||||
|
#.#.#.#####.###.#
|
||||||
|
#.#.#.........#.#
|
||||||
|
#.#.#.#########.#
|
||||||
|
#S#.............#
|
||||||
|
#################
|
||||||
|
|
||||||
|
In this maze, the best paths cost 11048 points; following one such path would look like this:
|
||||||
|
|
||||||
|
#################
|
||||||
|
#...#...#...#..E#
|
||||||
|
#.#.#.#.#.#.#.#^#
|
||||||
|
#.#.#.#...#...#^#
|
||||||
|
#.#.#.#.###.#.#^#
|
||||||
|
#>>v#.#.#.....#^#
|
||||||
|
#^#v#.#.#.#####^#
|
||||||
|
#^#v..#.#.#>>>>^#
|
||||||
|
#^#v#####.#^###.#
|
||||||
|
#^#v#..>>>>^#...#
|
||||||
|
#^#v###^#####.###
|
||||||
|
#^#v#>>^#.....#.#
|
||||||
|
#^#v#^#####.###.#
|
||||||
|
#^#v#^........#.#
|
||||||
|
#^#v#^#########.#
|
||||||
|
#S#>>^..........#
|
||||||
|
#################
|
||||||
|
|
||||||
|
Note that the path shown above includes one 90 degree turn as the very first move, rotating the Reindeer from facing East to facing North.
|
||||||
|
|
||||||
|
Analyze your map carefully. What is the lowest score a Reindeer could possibly get?
|
||||||
|
|
||||||
|
Your puzzle answer was 143564.
|
||||||
|
--- Part Two ---
|
||||||
|
|
||||||
|
Now that you know what the best paths look like, you can figure out the best spot to sit.
|
||||||
|
|
||||||
|
Every non-wall tile (S, ., or E) is equipped with places to sit along the edges of the tile. While determining which of these tiles would be the best spot to sit depends on a whole bunch of factors (how comfortable the seats are, how far away the bathrooms are, whether there's a pillar blocking your view, etc.), the most important factor is whether the tile is on one of the best paths through the maze. If you sit somewhere else, you'd miss all the action!
|
||||||
|
|
||||||
|
So, you'll need to determine which tiles are part of any best path through the maze, including the S and E tiles.
|
||||||
|
|
||||||
|
In the first example, there are 45 tiles (marked O) that are part of at least one of the various best paths through the maze:
|
||||||
|
|
||||||
|
###############
|
||||||
|
#.......#....O#
|
||||||
|
#.#.###.#.###O#
|
||||||
|
#.....#.#...#O#
|
||||||
|
#.###.#####.#O#
|
||||||
|
#.#.#.......#O#
|
||||||
|
#.#.#####.###O#
|
||||||
|
#..OOOOOOOOO#O#
|
||||||
|
###O#O#####O#O#
|
||||||
|
#OOO#O....#O#O#
|
||||||
|
#O#O#O###.#O#O#
|
||||||
|
#OOOOO#...#O#O#
|
||||||
|
#O###.#.#.#O#O#
|
||||||
|
#O..#.....#OOO#
|
||||||
|
###############
|
||||||
|
|
||||||
|
In the second example, there are 64 tiles that are part of at least one of the best paths:
|
||||||
|
|
||||||
|
#################
|
||||||
|
#...#...#...#..O#
|
||||||
|
#.#.#.#.#.#.#.#O#
|
||||||
|
#.#.#.#...#...#O#
|
||||||
|
#.#.#.#.###.#.#O#
|
||||||
|
#OOO#.#.#.....#O#
|
||||||
|
#O#O#.#.#.#####O#
|
||||||
|
#O#O..#.#.#OOOOO#
|
||||||
|
#O#O#####.#O###O#
|
||||||
|
#O#O#..OOOOO#OOO#
|
||||||
|
#O#O###O#####O###
|
||||||
|
#O#O#OOO#..OOO#.#
|
||||||
|
#O#O#O#####O###.#
|
||||||
|
#O#O#OOOOOOO..#.#
|
||||||
|
#O#O#O#########.#
|
||||||
|
#O#OOO..........#
|
||||||
|
#################
|
||||||
|
|
||||||
|
Analyze your map further. How many tiles are part of at least one of the best paths through the maze?
|
||||||
|
|
||||||
|
Your puzzle answer was 593.
|
||||||
|
|
||||||
|
Both parts of this puzzle are complete! They provide two gold stars: **
|
||||||
Executable
+75
@@ -0,0 +1,75 @@
|
|||||||
|
#!/usr/bin/env python3
|
||||||
|
|
||||||
|
import sys, math
|
||||||
|
import numpy as np
|
||||||
|
|
||||||
|
|
||||||
|
def dijkstra(graph, v, a):
|
||||||
|
Q = [n for n in graph.keys()]
|
||||||
|
lq = len(Q)
|
||||||
|
while len(Q) > 0:
|
||||||
|
u = min([u for u in Q], key=lambda x: a[x])
|
||||||
|
Q.remove(u)
|
||||||
|
for vo in graph[u]:
|
||||||
|
if vo in Q:
|
||||||
|
distance_update(graph, u,vo,a,v)
|
||||||
|
return v, a
|
||||||
|
|
||||||
|
|
||||||
|
def distance_update(g, u, vo, a, v):
|
||||||
|
dist = 1 if vo[2] == u[2] else 1000
|
||||||
|
alt = a[u] + dist
|
||||||
|
# joining the sets does not work because we never remove the older nodes!
|
||||||
|
if alt <= a[vo]:
|
||||||
|
if alt < a[vo]:
|
||||||
|
v[vo] = set([])
|
||||||
|
a[vo] = alt
|
||||||
|
v[vo].add(u)
|
||||||
|
v[vo] = v[vo].union(set(v[u]))
|
||||||
|
|
||||||
|
|
||||||
|
def count_set(edges, lab):
|
||||||
|
edg = set([])
|
||||||
|
for e in edges:
|
||||||
|
edg.add((e[0], e[1]))
|
||||||
|
lab[e[1]][e[0]] = 'O'
|
||||||
|
return edg
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == '__main__':
|
||||||
|
lab = [list(line.strip('\n')) for line in open(sys.argv[1])]
|
||||||
|
rot90 = {(0,-1): [(-1,0),(1,0)], (1,0): [(0,-1),(0,1)], (0,1): [(1,0),(-1, 0)], (-1,0): [(0,1),(0,-1)]}
|
||||||
|
|
||||||
|
start = (1, len(lab)-2, (1,0))
|
||||||
|
end = (len(lab[0])-2, 1, (0,-1))
|
||||||
|
graph = {}
|
||||||
|
distance = {}
|
||||||
|
pred = {}
|
||||||
|
for y, l in enumerate(lab):
|
||||||
|
for x, f in enumerate(lab[y]):
|
||||||
|
if f == '#': continue
|
||||||
|
for d in [(0,1), (0,-1), (1,0), (-1,0)]:
|
||||||
|
distance[(x,y,d)] = math.inf
|
||||||
|
pred[(x,y,d)] = set([])
|
||||||
|
graph[(x,y,d)] = []
|
||||||
|
for d1 in rot90[d]:
|
||||||
|
if not lab[y+d1[1]][x+d1[0]] == '#': graph[(x,y,d)].append((x,y,d1))
|
||||||
|
if lab[y+d[1]][x+d[0]] != '#':
|
||||||
|
graph[(x,y,d)].append((x+d[0], y+d[1], d))
|
||||||
|
distance[start] = 0
|
||||||
|
v1, a1 = dijkstra(graph, pred, distance)
|
||||||
|
d1 = count_set(v1[end], lab)
|
||||||
|
|
||||||
|
# challenge 1
|
||||||
|
res1 = a1[end]
|
||||||
|
print(f"challenge 1:\n{res1}\n")
|
||||||
|
|
||||||
|
# challenge 2, needed some reddit help again...
|
||||||
|
d1.add((end[0],end[1]))
|
||||||
|
d1.add((start[0], start[1]))
|
||||||
|
res2 = len(d1)
|
||||||
|
print(f"challenge 2:\n{res2}")
|
||||||
|
|
||||||
|
for line in lab:
|
||||||
|
print(''.join(line))
|
||||||
|
|
||||||
@@ -0,0 +1,15 @@
|
|||||||
|
###############
|
||||||
|
#.......#....E#
|
||||||
|
#.#.###.#.###.#
|
||||||
|
#.....#.#...#.#
|
||||||
|
#.###.#####.#.#
|
||||||
|
#.#.#.......#.#
|
||||||
|
#.#.#####.###.#
|
||||||
|
#...........#.#
|
||||||
|
###.#.#####.#.#
|
||||||
|
#...#.....#.#.#
|
||||||
|
#.#.#.###.#.#.#
|
||||||
|
#.....#...#.#.#
|
||||||
|
#.###.#.#.#.#.#
|
||||||
|
#S..#.....#...#
|
||||||
|
###############
|
||||||
@@ -0,0 +1,17 @@
|
|||||||
|
#################
|
||||||
|
#...#...#...#..E#
|
||||||
|
#.#.#.#.#.#.#.#.#
|
||||||
|
#.#.#.#...#...#.#
|
||||||
|
#.#.#.#.###.#.#.#
|
||||||
|
#...#.#.#.....#.#
|
||||||
|
#.#.#.#.#.#####.#
|
||||||
|
#.#...#.#.#.....#
|
||||||
|
#.#.#####.#.###.#
|
||||||
|
#.#.#.......#...#
|
||||||
|
#.#.###.#####.###
|
||||||
|
#.#.#...#.....#.#
|
||||||
|
#.#.#.#####.###.#
|
||||||
|
#.#.#.........#.#
|
||||||
|
#.#.#.#########.#
|
||||||
|
#S#.............#
|
||||||
|
#################
|
||||||
Loaded 100 of 154 files, more files were not shown because too many files have changed in this diff.
Show more
Reference in new issue
Block a user