Compare commits
15 Commits
34d3ba95ff
...
main
| Author | SHA1 | Date | |
|---|---|---|---|
| 2fffa5ff00 | |||
| 1756e53efc | |||
| 27083bf502 | |||
| 12155f7fe8 | |||
| 0af82b0d8b | |||
| 6064f85200 | |||
| efd89d58f9 | |||
| 904f7f7c27 | |||
| 0af1538d7f | |||
| 11ca505c83 | |||
| 8995e45bfc | |||
| 71629c5523 | |||
| 0a36d9db83 | |||
| 28c35f5375 | |||
| 659572734a |
151
15/15-1-with-anim.py
Normal file
151
15/15-1-with-anim.py
Normal file
@@ -0,0 +1,151 @@
|
||||
#!/usr/bin/env python3
|
||||
# -*- coding: utf-8 -*-
|
||||
|
||||
import numpy as np
|
||||
from PIL import Image, ImageDraw, ImageFont
|
||||
import cv2
|
||||
from time import time
|
||||
|
||||
file = "./input.txt"
|
||||
#file = "./ex.txt"
|
||||
#file = "./ex_s.txt"
|
||||
|
||||
start_time = time()
|
||||
|
||||
def array_to_image(ar):
|
||||
# Konvertiere das Array in ein NumPy-Array
|
||||
np_array = np.array(ar)
|
||||
# Erstelle ein leeres RGB-Bild
|
||||
height, width = np_array.shape
|
||||
image = Image.new('RGB', (width, height))
|
||||
# Fülle das Bild mit Pixeln basierend auf den Array-Werten
|
||||
for y in range(height):
|
||||
for x in range(width):
|
||||
if np_array[y, x] == "#":
|
||||
image.putpixel((x, y), (255, 0, 0))
|
||||
elif np_array[y, x] == "O":
|
||||
image.putpixel((x, y), (0, 255, 0))
|
||||
elif np_array[y, x] == "@":
|
||||
image.putpixel((x, y), (255, 255, 255))
|
||||
else:
|
||||
image.putpixel((x, y), (0, 0, 0))
|
||||
return image
|
||||
|
||||
def add_text_to_image(image, num):
|
||||
draw = ImageDraw.Draw(image)
|
||||
font = ImageFont.truetype("arial.ttf", 20) # Wählen Sie eine Schriftart und Größe
|
||||
draw.text((5,5), f"{num:04d}", fill=(255, 255, 255), font=font) # Weißer Text
|
||||
return image
|
||||
|
||||
def pil_to_cv2(pil_image):
|
||||
return cv2.cvtColor(np.array(pil_image), cv2.COLOR_RGB2BGR)
|
||||
|
||||
def read_input(input_file:str) -> tuple[list[list[str]], list[str]]:
|
||||
out_field=[]
|
||||
out_moves=[]
|
||||
f = open(input_file, "r")
|
||||
for line in f:
|
||||
line = line.strip()
|
||||
if line == "":
|
||||
continue
|
||||
if "#" in line:
|
||||
temp = []
|
||||
for b in line:
|
||||
temp.append(b)
|
||||
out_field.append(temp)
|
||||
elif "<" in line or ">" in line or "^" in line or "v" in line:
|
||||
out_moves.append(line)
|
||||
f.close()
|
||||
return out_field, out_moves
|
||||
|
||||
def get_position(game_field) -> (int, int):
|
||||
for li in range(len(game_field)):
|
||||
for ro in range(len(game_field[li])):
|
||||
if game_field[li][ro] == '@':
|
||||
return li, ro
|
||||
|
||||
def print_field(f:list[list[str]]):
|
||||
for r in f:
|
||||
for s in r:
|
||||
print(s, end="")
|
||||
print()
|
||||
|
||||
def do_move(f:list[list[str]], m:str)-> list[list[str]]:
|
||||
li, ro = get_position(f)
|
||||
#print(li, ro, m)
|
||||
if m == ">":
|
||||
for i in range(ro+1, len(f[li])):
|
||||
if f[li][i] == '.':
|
||||
for ml in range(i,ro,-1):
|
||||
f[li][ml] = f[li][ml-1]
|
||||
f[li][ro] = '.'
|
||||
return f
|
||||
elif f[li][i] == '#':
|
||||
return f
|
||||
elif m == "<":
|
||||
for i in range(ro-1, 0, -1):
|
||||
if f[li][i] == '.':
|
||||
for ml in range(i,ro):
|
||||
f[li][ml] = f[li][ml+1]
|
||||
f[li][ro] = '.'
|
||||
return f
|
||||
elif f[li][i] == '#':
|
||||
return f
|
||||
elif m == "v":
|
||||
for i in range(li+1, len(f)):
|
||||
if f[i][ro] == '.':
|
||||
for mr in range(i,li,-1):
|
||||
f[mr][ro] = f[mr-1][ro]
|
||||
f[li][ro] = '.'
|
||||
return f
|
||||
elif f[i][ro] == '#':
|
||||
return f
|
||||
elif m == "^":
|
||||
for i in range(li-1, 0, -1):
|
||||
if f[i][ro] == '.':
|
||||
for mr in range(i,li):
|
||||
f[mr][ro] = f[mr+1][ro]
|
||||
f[li][ro] = '.'
|
||||
return f
|
||||
elif f[i][ro] == '#':
|
||||
return f
|
||||
return f
|
||||
|
||||
def sum_gps_coord(f:list[list[str]]):
|
||||
result = 0
|
||||
for l in range(len(f)):
|
||||
for r in range(len(f[l])):
|
||||
if f[l][r] == "O":
|
||||
result += (100 * l) + r
|
||||
return result
|
||||
|
||||
if __name__ == "__main__":
|
||||
field, moves_list = read_input(file)
|
||||
print_field(field)
|
||||
|
||||
fourcc = cv2.VideoWriter_fourcc(*'mp4v')
|
||||
fps = 30
|
||||
frame_size = (len(field[0]), len(field))
|
||||
out = cv2.VideoWriter('./solution_p1.mp4', fourcc, fps, frame_size)
|
||||
gif_anim=[]
|
||||
|
||||
img = array_to_image(field)
|
||||
gif_anim.append(img)
|
||||
cv2_image = pil_to_cv2(img)
|
||||
out.write(cv2_image)
|
||||
|
||||
for moves in moves_list:
|
||||
for move in moves:
|
||||
field = do_move(field,move)
|
||||
#print_field(field)
|
||||
img = array_to_image(field)
|
||||
gif_anim.append(img)
|
||||
cv2_image = pil_to_cv2(img)
|
||||
out.write(cv2_image)
|
||||
out.release()
|
||||
gif_anim[0].save('./solution_p1.gif', save_all=True, append_images=gif_anim[1:],
|
||||
optimize=False, duration=30, loop=0)
|
||||
|
||||
print_field(field)
|
||||
print(f'Solution Part1: {sum_gps_coord(field)}')
|
||||
print(f'Runtime: {time()-start_time:.2f} s')
|
||||
157
15/15-1-with-bigger-anim.py
Normal file
157
15/15-1-with-bigger-anim.py
Normal file
@@ -0,0 +1,157 @@
|
||||
#!/usr/bin/env python3
|
||||
# -*- coding: utf-8 -*-
|
||||
|
||||
import numpy as np
|
||||
from PIL import Image, ImageDraw, ImageFont
|
||||
import cv2
|
||||
from time import time
|
||||
|
||||
file = "./input.txt"
|
||||
#file = "./ex.txt"
|
||||
#file = "./ex_s.txt"
|
||||
out_file_name = "sol_bigger"
|
||||
grow_factor = 10
|
||||
|
||||
start_time = time()
|
||||
|
||||
def array_to_image(ar):
|
||||
global grow_factor
|
||||
# Konvertiere das Array in ein NumPy-Array
|
||||
np_array = np.array(ar)
|
||||
# Erstelle ein leeres RGB-Bild
|
||||
height, width = np_array.shape
|
||||
image = Image.new('RGB', (width * grow_factor, height * grow_factor))
|
||||
# Fülle das Bild mit Pixeln basierend auf den Array-Werten
|
||||
for y in range(height):
|
||||
for x in range(width):
|
||||
color = (0, 0, 0) # Standardfarbe schwarz
|
||||
if np_array[y, x] == "#":
|
||||
color = (255, 0, 0)
|
||||
elif np_array[y, x] == "O":
|
||||
color = (0, 255, 0)
|
||||
elif np_array[y, x] == "@":
|
||||
color = (255, 255, 255)
|
||||
for dy in range(grow_factor):
|
||||
for dx in range(grow_factor):
|
||||
image.putpixel((x * grow_factor + dx, y * grow_factor + dy), color)
|
||||
|
||||
return image
|
||||
|
||||
def add_text_to_image(image, num):
|
||||
draw = ImageDraw.Draw(image)
|
||||
font = ImageFont.truetype("arial.ttf", 20) # Wählen Sie eine Schriftart und Größe
|
||||
draw.text((5,5), f"{num:04d}", fill=(255, 255, 255), font=font) # Weißer Text
|
||||
return image
|
||||
|
||||
def pil_to_cv2(pil_image):
|
||||
return cv2.cvtColor(np.array(pil_image), cv2.COLOR_RGB2BGR)
|
||||
|
||||
def read_input(input_file:str) -> tuple[list[list[str]], list[str]]:
|
||||
out_field=[]
|
||||
out_moves=[]
|
||||
f = open(input_file, "r")
|
||||
for line in f:
|
||||
line = line.strip()
|
||||
if line == "":
|
||||
continue
|
||||
if "#" in line:
|
||||
temp = []
|
||||
for b in line:
|
||||
temp.append(b)
|
||||
out_field.append(temp)
|
||||
elif "<" in line or ">" in line or "^" in line or "v" in line:
|
||||
out_moves.append(line)
|
||||
f.close()
|
||||
return out_field, out_moves
|
||||
|
||||
def get_position(game_field) -> (int, int):
|
||||
for li in range(len(game_field)):
|
||||
for ro in range(len(game_field[li])):
|
||||
if game_field[li][ro] == '@':
|
||||
return li, ro
|
||||
|
||||
def print_field(f:list[list[str]]):
|
||||
for r in f:
|
||||
for s in r:
|
||||
print(s, end="")
|
||||
print()
|
||||
|
||||
def do_move(f:list[list[str]], m:str)-> list[list[str]]:
|
||||
li, ro = get_position(f)
|
||||
#print(li, ro, m)
|
||||
if m == ">":
|
||||
for i in range(ro+1, len(f[li])):
|
||||
if f[li][i] == '.':
|
||||
for ml in range(i,ro,-1):
|
||||
f[li][ml] = f[li][ml-1]
|
||||
f[li][ro] = '.'
|
||||
return f
|
||||
elif f[li][i] == '#':
|
||||
return f
|
||||
elif m == "<":
|
||||
for i in range(ro-1, 0, -1):
|
||||
if f[li][i] == '.':
|
||||
for ml in range(i,ro):
|
||||
f[li][ml] = f[li][ml+1]
|
||||
f[li][ro] = '.'
|
||||
return f
|
||||
elif f[li][i] == '#':
|
||||
return f
|
||||
elif m == "v":
|
||||
for i in range(li+1, len(f)):
|
||||
if f[i][ro] == '.':
|
||||
for mr in range(i,li,-1):
|
||||
f[mr][ro] = f[mr-1][ro]
|
||||
f[li][ro] = '.'
|
||||
return f
|
||||
elif f[i][ro] == '#':
|
||||
return f
|
||||
elif m == "^":
|
||||
for i in range(li-1, 0, -1):
|
||||
if f[i][ro] == '.':
|
||||
for mr in range(i,li):
|
||||
f[mr][ro] = f[mr+1][ro]
|
||||
f[li][ro] = '.'
|
||||
return f
|
||||
elif f[i][ro] == '#':
|
||||
return f
|
||||
return f
|
||||
|
||||
def sum_gps_coord(f:list[list[str]]):
|
||||
result = 0
|
||||
for l in range(len(f)):
|
||||
for r in range(len(f[l])):
|
||||
if f[l][r] == "O":
|
||||
result += (100 * l) + r
|
||||
return result
|
||||
|
||||
if __name__ == "__main__":
|
||||
field, moves_list = read_input(file)
|
||||
print_field(field)
|
||||
|
||||
fourcc = cv2.VideoWriter_fourcc(*'mp4v')
|
||||
fps = 30
|
||||
frame_size = (len(field[0]) * grow_factor, len(field) * grow_factor)
|
||||
out = cv2.VideoWriter(f'./{out_file_name}.mp4', fourcc, fps, frame_size)
|
||||
gif_anim=[]
|
||||
|
||||
img = array_to_image(field)
|
||||
gif_anim.append(img)
|
||||
cv2_image = pil_to_cv2(img)
|
||||
out.write(cv2_image)
|
||||
|
||||
for moves in moves_list:
|
||||
for move in moves:
|
||||
field = do_move(field,move)
|
||||
#print_field(field)
|
||||
img = array_to_image(field)
|
||||
gif_anim.append(img)
|
||||
cv2_image = pil_to_cv2(img)
|
||||
out.write(cv2_image)
|
||||
out.release()
|
||||
gif_anim[0].save(f'./{out_file_name}.gif', save_all=True, append_images=gif_anim[1:],
|
||||
optimize=False, duration=30, loop=0)
|
||||
|
||||
print_field(field)
|
||||
print(f'Solution Part1: {sum_gps_coord(field)}')
|
||||
print(f'Runtime: {time()-start_time:.2f} s')
|
||||
100
15/15-1.py
Normal file
100
15/15-1.py
Normal file
@@ -0,0 +1,100 @@
|
||||
#!/usr/bin/env python3
|
||||
# -*- coding: utf-8 -*-
|
||||
from time import time
|
||||
|
||||
file = "./input.txt"
|
||||
#file = "./ex.txt"
|
||||
#file = "./ex_s.txt"
|
||||
|
||||
start_time = time()
|
||||
|
||||
def read_input(input_file:str) -> tuple[list[list[str]], list[str]]:
|
||||
out_field=[]
|
||||
out_moves=[]
|
||||
f = open(input_file, "r")
|
||||
for line in f:
|
||||
line = line.strip()
|
||||
if line == "":
|
||||
continue
|
||||
if "#" in line:
|
||||
temp = []
|
||||
for b in line:
|
||||
temp.append(b)
|
||||
out_field.append(temp)
|
||||
elif "<" in line or ">" in line or "^" in line or "v" in line:
|
||||
out_moves.append(line)
|
||||
f.close()
|
||||
return out_field, out_moves
|
||||
|
||||
def get_position(game_field) -> (int, int):
|
||||
for li in range(len(game_field)):
|
||||
for ro in range(len(game_field[li])):
|
||||
if game_field[li][ro] == '@':
|
||||
return li, ro
|
||||
|
||||
def print_field(f:list[list[str]]):
|
||||
for r in f:
|
||||
for s in r:
|
||||
print(s, end="")
|
||||
print()
|
||||
|
||||
def do_move(f:list[list[str]], m:str)-> list[list[str]]:
|
||||
li, ro = get_position(f)
|
||||
#print(li, ro, m)
|
||||
if m == ">":
|
||||
for i in range(ro+1, len(f[li])):
|
||||
if f[li][i] == '.':
|
||||
for ml in range(i,ro,-1):
|
||||
f[li][ml] = f[li][ml-1]
|
||||
f[li][ro] = '.'
|
||||
return f
|
||||
elif f[li][i] == '#':
|
||||
return f
|
||||
elif m == "<":
|
||||
for i in range(ro-1, 0, -1):
|
||||
if f[li][i] == '.':
|
||||
for ml in range(i,ro):
|
||||
f[li][ml] = f[li][ml+1]
|
||||
f[li][ro] = '.'
|
||||
return f
|
||||
elif f[li][i] == '#':
|
||||
return f
|
||||
elif m == "v":
|
||||
for i in range(li+1, len(f)):
|
||||
if f[i][ro] == '.':
|
||||
for mr in range(i,li,-1):
|
||||
f[mr][ro] = f[mr-1][ro]
|
||||
f[li][ro] = '.'
|
||||
return f
|
||||
elif f[i][ro] == '#':
|
||||
return f
|
||||
elif m == "^":
|
||||
for i in range(li-1, 0, -1):
|
||||
if f[i][ro] == '.':
|
||||
for mr in range(i,li):
|
||||
f[mr][ro] = f[mr+1][ro]
|
||||
f[li][ro] = '.'
|
||||
return f
|
||||
elif f[i][ro] == '#':
|
||||
return f
|
||||
return f
|
||||
|
||||
def sum_gps_coord(f:list[list[str]]):
|
||||
result = 0
|
||||
for l in range(len(f)):
|
||||
for r in range(len(f[l])):
|
||||
if f[l][r] == "O":
|
||||
result += (100 * l) + r
|
||||
return result
|
||||
|
||||
if __name__ == "__main__":
|
||||
field, moves_list = read_input(file)
|
||||
print_field(field)
|
||||
|
||||
for moves in moves_list:
|
||||
for move in moves:
|
||||
field = do_move(field,move)
|
||||
|
||||
print_field(field)
|
||||
print(f'Solution Part1: {sum_gps_coord(field)}')
|
||||
print(f'Runtime: {time()-start_time:.2f} s')
|
||||
21
15/ex.txt
Normal file
21
15/ex.txt
Normal file
@@ -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^<<^
|
||||
9
15/ex_p2.txt
Normal file
9
15/ex_p2.txt
Normal file
@@ -0,0 +1,9 @@
|
||||
#######
|
||||
#...#.#
|
||||
#.....#
|
||||
#..OO@#
|
||||
#..O..#
|
||||
#.....#
|
||||
#######
|
||||
|
||||
<vv<<^^<<^^
|
||||
10
15/ex_s.txt
Normal file
10
15/ex_s.txt
Normal file
@@ -0,0 +1,10 @@
|
||||
########
|
||||
#..O.O.#
|
||||
##@.O..#
|
||||
#...O..#
|
||||
#.#.O..#
|
||||
#...O..#
|
||||
#......#
|
||||
########
|
||||
|
||||
<^^>>>vv<v>>v<<
|
||||
71
15/input.txt
Normal file
71
15/input.txt
Normal file
@@ -0,0 +1,71 @@
|
||||
##################################################
|
||||
#.#O.O...#..##O.#.O...#OO.O....O.O#....#.....#.OO#
|
||||
#...O..O...O.....O...#...OOO.O..#.....OO....##O..#
|
||||
#O....O........O#........O#O..O.#.O..OO.O.O.O.OO.#
|
||||
#....#......O...O...O....#.O.OO.OOO.#OOOO.#...#..#
|
||||
#O.O....OO.#O....O#O...O...O.#...OOO.....OO.##O..#
|
||||
##..O....OO.O...O..OO.O...O..#.O....#....O...##..#
|
||||
#O.O.OO#.#O.OOO.........OO..OO#OO..OO.OOO..O.....#
|
||||
#O...................O..#....OO..O..O.O#..#....O.#
|
||||
#..O.#.O......#.O.OO.#.OO..O.O.OOOO....O...#..O..#
|
||||
#....O..O#O.O.O............OOO...O....O.OO..#...O#
|
||||
#.#.O.OO..O...#.O#.OO#.....O....O.#...O.O.O......#
|
||||
#....O...OO...#..OO.O...O.....OOOO.......O....##.#
|
||||
#........#...OO#O...#......#....O.O...OOO......O.#
|
||||
#OO#.O...O..O..#O#.O..O.OO......O#.O.O...O...O...#
|
||||
#..O..O.O.OO.O.O..O......OOO......O..#OO.O#..O.O.#
|
||||
#..O..OOOO...#O..#...#......O.O.O.O#...O....O....#
|
||||
#O...OO.OO..O..O..O......O..#.O...O..OO...O.#O...#
|
||||
#.O..#..OO..#....OO..OO..##....O.OO.OO#O....O.#..#
|
||||
#..O.O.OO.OO.....#O.OO....OO....OO.#....O..#.OO..#
|
||||
#......OO#..O.#....#..OO....O.#OO....O#.O.#..O#.O#
|
||||
#.O.......#..#.O..O......O#O.#...O...O.......OOOO#
|
||||
#..OO.O..O#..OOO..O.OOO..........O........O.....O#
|
||||
##OO#...O..OO...OO..#..O..OO......OO.OOOO.#O...O.#
|
||||
##O.O...O....O..O.O.....@...OOO..O.#O....O....O.##
|
||||
#.....OO...O##.........OO..O#..OOOO.O.O....O..OO.#
|
||||
#OO...#.O.O..O.O.OOO#.O.O##....O......O.....O....#
|
||||
#O.O.......O.O....#O.O.....#.....#.#...OOOO.O#OO.#
|
||||
#..O#O.....OO.#.O.........O......O.#....O.#.##...#
|
||||
#....O.O.O.......O.O.....OO#.O....O...O.O.#..OO..#
|
||||
#...O......#.O...#.OO..O.O...O...O..#O#O...#....O#
|
||||
#.###OO....O..O...O.O..###..O..........#..OO#.O..#
|
||||
#OO...#OO.O.#..O#..#OO.OO#OO....O....#....O....O.#
|
||||
#.OO.O....O.O....#O.O.O..O#........#..OOO...#....#
|
||||
#.OO...O.O....O...O#O#..#...#O#......O..O.#.O....#
|
||||
#O........OO.#..##O...O...OO........O.#O.OO.....O#
|
||||
#...OOOO....O...#O..OO.OO...O.O#.....O..#........#
|
||||
#.OO..........OOO..OO..O..............OO.#O.....##
|
||||
#....O..OO.O..##.##...#.....O.O#O###.O.O......#..#
|
||||
#..O#O#.#...OOO.#...##O...OOO..OO.#OO.#.....#OO.##
|
||||
#..OOOO.OOO.#O......#..O..O..OO.O#.O.O.#O....#..O#
|
||||
#...O.OO#.#.....OO.....#.#..........O#.O.O.O.....#
|
||||
#.....#..O...O#O.##...O.......OO.O.......OO.....O#
|
||||
#OOO..#.........OO.........O..#.#O#....OOO.##OO.O#
|
||||
#.......O.......O.O....O..O...O......#O........#.#
|
||||
#....#OOO...O.O..O#....#.O...#.O.#.#O#O.#......O.#
|
||||
#.OOO..#O..........##..O...OO.O..........#.O.....#
|
||||
#.O.O..OOO......O#..O...##.......OO......OO..O..O#
|
||||
#.O.#.OO.#.....#O.O.#.O.O......##.........O.O....#
|
||||
##################################################
|
||||
|
||||
vv^>vv<<>v>^^v>><<>vv^>^><<>v^<vv>^<><><<><vv^v^>vvv><^>^^><^<>^<<v>>>v>v>><vv<>>^^vvv<>>^v<<>^<^v>vv<^<>v>>^^^>^^<<v^v<>^v<>><<^^>>^v>^^>>>><><^<<>>^^v><<^^v<vv^<<<vv<<<vvv>><><<><vv^^>^>>v^v^^>><vv>v^<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<>>^<>^>^<^v>vv<<^^vv>v^>v>v<^<><v<v>^^v<>^<<vv^^vv<v<^^><^^>v^v^^^v<v>^><>v<v<>^^^>>>v<vv^v^>>^v<^^<>^><^>>^vv<>^>v>v^^^^>v^v<^>>v>>^^v^v^v<<><^><>v<v<v>>^v>v>v>><>^<>v^v<><>^<vv>vv>>^<v^<^>v<^>^^^<>>^^^>v^vv<vv<v>>v>>v^<>v<<<<v<<v>vv<<<>v>v>v^v^<>>^>^<v><v>><^^<^><>vvv^>v>^^^><^><^>^<>>><><<v>^vv<v^><v<<v<vv^^>v>^<<v>^v>>^>v^<^^^^>^^>>>^^^<<^v>^v>^vv^<v>^^vv>^^^<<^vv<>><v^v<<<v>>vvv<>^^>>^<v>v^^^>v^^<>^v>>^>^>v^>^^^v<<^>v^>^>^>v<^<^^><^^<>>^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<<>^<<<<v<>v<>v^^^>><><v><vvv^v^v<^<>^v<vv^>v><>vv<><vvvv>>>^^^^^^<
|
||||
>vvvvv^<><v<<v^><vv^>^^<vvv<^^<v><^>>v>>v>>^vv<>>v>^^v<<^^<>^>^v<v>vvvvv^^>v>^<<<v><<v^vvvv>v>^^<>^^<<>>v<^^<>v>^>>v<^><^v>^^><v<vvv>v^>^<>^>^<^vv<<>vvv>><><<><^^v>^^^^<^<>^>>v>>vv><><<^v><v<^^<>v><>^<><v<>vv>^v<v^v^^<<><^v>v^v>>^^^<>v>v^<>^^v>v<<<^v<^<vv^>>^<<^v<v><^>^^vvv^v><^^v>v>^vv<>v<vv^v<^v<<><v^>v>^>v<<<^^v^<v><>>><<<vvv<^>^<v^<<^^v<<<>vv<v^v<v>vv^v<<^<^^>><<^<^^<<^>^><>v>>v><<vv^<>^vv^v^>><<v>>v^^<>><^>vv>v>>>><>^vv^v<v<^^v>^v<^^^<<^^v<^vv><^<v>v>^<^vv><><vv<^><v>^^v^>><^<v>v^<<<<v^^^vv^<<^v>v><^^^vvv^^<vvv><>^>>v^<<>v<>v><<^vvv^>v<v>vv>>^v^<>>^><v<>^vv<^>v<<v<^v^^v^^>><<<>>>^v>v><<vvv>vv>>vv>vv<><><<v<^><>><>^<^<^v>v><<<v^v^><v^vv>^<<v<vv^^vv^<v>^<vv>>vvv^v<vv^><>^v><v<v^>vv>>^^>vv<>><<>v>^>>vv<>><<>v<><vvvv<<v^>v^<><<^<>v<^^v^^v^<<^^^v^^><>^v><>>v<v<v^^v<><>^v>v<^>^v><<v>v^v^<^v>><<^>vv<>>>^>^vv^v<<^^v>>^<^v<>v>^<^v>v<^vv^<^<>vv^^^<>v>v<<<<<vv<>^vv^^<v><>v>^<^v^<^^^v^^<^<<^^>^v^v<><<<><v<^>>>>>><><^<^<^vvv<>><<>v^^v^><>>v^^^>>^v<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>^^v^^v>v^>^>v><<v<^>v<>vv^<v<<><>>>>^v<>^<>^^<>><<^>>v>v^>>>vv<<>>^^<v<v^><><><<>v>v^>^>v>^^v<v>>>v>vv^>>^>>><<v><<v<vv^vvv<><v<<vvv<v>vv^>>vv>^>v><v<>^<v>v>>^<>>^vv^^><v^<>^<<^>^><v^><<v<v<<^<^>>v>vvvv>vv^>>>vv^v<<<<v<vvvv^<><v^^>^<<^v<v<>><>>>^<<<vv^>vv^^>v^^>^vv>>v^<vv<>vvv<v>v<<v^<v^v>v<^vv>vv>^v<>v^>^vv^v<v>vv>><<>v^<^>^v<v<^>vv^^>^^><>v<<v<v>>^vv^vv<>vv^^^v<^vv>vv^v<^><vv>^v^^v^v^v^<>v<^>>vv^v><^><<>>v^v^v>>^^v><^^^^><vv><>v>>v^v^<^<vv<^>vv<<v^^^^<^<><>v>^^<<vv<^v<<<<vv^>>^>v^^<<^<vv^<v<><^v<^^>v^v^><<v><<><^^^vv<<vv^>>v<^<<vv<v^<^>>>><v<v<^<^v>^<v<>v<<<v^>^^v^v<^>><<<<vv^^vv><<vv<^>^^v<v^^v<^^>>v>v<v>vv<>>^^^<>>^<>><v^vv>vvv<<^v^<>^^<<v^>v>vv>>^vv>^><vv<<><><>v><v<v^>^v><<<<<v>>>>>>^<<^>^^v>><^>vvv^<v^v<^vv><^v>>><<<>><vv^v>>>>^<>^^^><^<^v<v>^<vv<<<>v<^^<>^^^>>>^<^<><^>^^><<>>>>^v>><^^^<>v^><>>v>v<^^v>vv^><<<v<vv<<^^>><v><v^><>^v<^<^^<vv<v>^<v^<^<v><>v>>><>>^<>^><>^^v^>
|
||||
<^><^<^<<^<><><<<>^<^<>^vvv<<^<vv<^<^<v^>^v><v>>v>>>v^^>^^>>v<^<^v>^v>>^>>>>>>>>v^v^<>v<v<v>v^<v>><v^v>>vv^v^><<v<<<>>^v>^v^><^<v^<^<^^^<^>vvvv>^>>><<>^^^^^>^v^^<<>^<><<^>v^v>v^<>v<^><^^><<^v^<><^^v^>^vvv<>>v^v>^v^v^^v<vvv<v^^^^>^v>v<>v^>^><^^<><vvvv>^>><vv<v><<<^^>><<<^>v<>^>>><^<<v^v>v<>^<v<<vv>>vv<>^>>^<><v<^^<>^^><><^^vv<^^><<^<>v<^<^><>^vvvvvv>>>>^^^^<v^><<v<<>^^v>^>>v<^^v>v<>^<>>^^><<>^^<>^v<vv>><v>>v^>vv^<<<v<^^><^><<vvv>>>^^>v<<<<^v<v^v<^<^^v>>>vvv><^v<>^^^^v>>vv^vv^<vv<<<>><v<^>vv<v^<vv^^^><<^^v<<^^vv<v>^^<<v<^^<^^^>v<^^>>>v<>^>vv<<^<^^<<<>><<<>vv<<>>v>^^<>>^v>>^vvv<vv<^v<>>vv<^v^v<<<<^><^^>v><<v^^v^<>>^vv<><v^<>v^>^^<vv<<>^vv>v>><^^v<<v^^v<>><><<v^<><<v>><><v^vv>^<<<>>v<<vv^<>v>>^^>>v^v<<<^vv<>^v^>^vv^^v^vv^^^>>^<>>><>>>v<>>v>^v<^<>><^<<>^><vvvvvv><<vv>vv<^v<<^<v><<<<>>>v>>^^v^^^>^>^>><^v><<^<><^>>v<^<<>>>>v^v<<>><v>^<v<>v>><v<>v<>>>>^v^vv>^v><>v<<v>^v^<^<>^^v><^v<^<^^>>vvv^>>v^><v^><<v>><v>>^>^v^^v>v^<>v<v<<v^vv>v<>>>vv<<><<><^>^>v>^v<<v^^v<>>>^<^<>>v^^^<v>vvv>>^^^v^<>vv>>v<
|
||||
^v^>><^>^<<^<>>v^<^v^v>><^<>^<v<^v<v<>v^<><^vv<^vvvv>^^>v><vvv^<<<<>vvv<^<<>v^>^v^<<>><>>^vv<>>>vv<<<^<^<<>v<v<v><>^>^^>v^v<v^><>v<<vv<^<v<>^^^^^vv>^<^>^^v<v>^v<>>>v<><>^<v^^><v^^^>vv>>>>>v^<<<v<v^v<vv^<<^^vv^>v>>>v>vv>>^^^^v^vv<<v>v^^^<v^><v<vv>>>>v^v^v^<>^^v^>v<vv^>>^vv<^<<^^>^v<v>^>v>>^<<^v<>v^^vv<^<<<><>v>>>><^vv^^^<<vv^^v^^v^v>^^v><<<v<v>^^^^vv^>>v>>vvvv>><<^>v<^v^^vv>><v^v^v>vvv<<>>^^v>^^><<>vv^vv>v>^<^^<>>vv^^<v^^^>><<>v^>^<v><>><^<v^^<^>>>>>><<<>>>^<<^^^<v^>^v^^v^vvv><^<>><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>>>v>^v>vv>v<<v>^vv>^><v^^<vv<v<<<^>>^v<vvvv^<<^v^^^<^<v><<<^vv^vvv>^>vv<>v>>^<v>>>^v^>^>>^v^vv><v<<><^vv>>>v>^v^v<^^<v<<<^^^v<^<^<v>^v^v><>>>v>v>><<>^<^>^<^v<^vv<<>v>^^<v>^v<^<^v^>^<<<v>^<>>^>^><<v<^v<<>>>v<^><<><><vv^><v>>vv>>v^<v<v<^^vv^^<<^v><vv^<>^v>v<^^<v<><><^<v<v>v<^^<<>^<^<<^v>>^><>><v<v^<vv<^><v^^>^<>>^v^<<v>^v>v>><<^^<<^<<^<<^<<^>vvv<vvv^^vv^^<<<v<<<>^<^v^^>^v>v^^v<<>v>>^<>><v^^><^v<
|
||||
vv^^^<^vv<v^^^^^><^^>^>><^>>>^^>^^v><v>^><^>><<v><<>^<<^vv^^>^>v^>v^^>v<v^^^v^<<v<>><><v>vv><^<>>>>>^<<v^^<^^><>v^v<vv>^v<><>vv^<^vv^vv<^<^>^v<>>><vv>>^>v<v>><^><><><^<<^v<^>>vv<^<><^>^v^^^<<>>v^<v>^^<vv>^^v^<^^>>>^<>^>v>>^><>v^<><>>v<vv<><<^v<v>vv<^<<vv>>>v><>^<^<<<^^^<<vv<<v^^vv>><v<<<<v^v<>>v><<^v<><>v^v>>>^>^<v>vvvv><<><v><<v<v^><<><><>>>><<^>v><^v^>v><>v^^<^v<^v<^<>^<<v<>>^<<^v<<<v<v><vvvv^v^<>><><v<v<><<^^^v^>v^>^^^<><<^><vv^^^>^><v^vv>v>>^><vv>v^>^v>vv><^>v^>>><v<v><^^>^^>>><>^^><>^^^^^vv<>>>^^^v^v<<<v^>^v^v<^<^^<v>^<^<>vv<v^v^<<>><>v>><><<v<^v><><^<<<>>><^>^<v^^><v<><<v>^^<^>v^><vvv<v><><v><^>^<<><vvvvvv>v<v^v><><>v<<^<v>v<<>>v^^^v<<>>><<vv>>>^>^<<<>v^<^^vv^v^v<v>v<v>^>^<v<v^v>>^^>^<>vv^^v^^^>^v^<v<v>^<v^v^vvv<v^^^^^<><^>v<^v<<<<>v<<>^<^^^>><><^<^^vv^v>><><v<<>vv^^^><<<^^<^v<v>v<>^v^<<^v><vv^v^^<<^>v^^^>^^^<>vv>><<<^^v>v<>^^^v^v<>><v>v^v^<><^<>><^><v<<>^v^^^v<^v^<v<>^^>v^><v^>^^^>^<>^vv<<<>>v>>>>v^>v^^v^>>vv^v^vv^v<>>^<v<v<^>v>><v>><^^v<>^><v<^^vv^<v>v<<vv<<^vvvv^^^vvv^^<<><<^^
|
||||
>v^v>>>>><vvv><<>^<v<<<v<><^^<^^^>><>^^^<>vv<>v<v<>vv<>v<>>v<vv<<>vv><^vv<>v^>^<v><<^v^^v>>^>v^v><<v>vv^>^^^><v<v^>vv^<^v><v^v>^>v>vv^^><v>><<><v^<v^vv^^<>><v>>^^<^>^^v>^>^^><<v^<v><><v<<v^>>^<>vvv<>><vv<vv<<<><<v<>^v>>^v>^>>^^v>^vv<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^<^<<vv<>v>v<v<>v>^^>v^^><^<v^v<v>v^>>^>^^^v>><><><^^^<^>v>^>><<vv<v>^>>><<>v<>>>v<>v^>^vv><<^vv<<v^<v<^<<>>v>v<>^><vv>v><v>v><^<^<>>^v>><v<<>^v>^><^v<<^<^^><vv>^v<^^v<^>v<<^^vv<v<^v<>><<^<<>^^^v^<vv>>>^v^<>>>^v>v^>>^>^^^^>v>^>>^>vvvv^<>^^>><^<<<^>>><^^^^^>v<>v^<><<<<>>>v<^^><>>^v<^<v^><>^>>v<^>v^<>>>^^^>v<<>^vv>v^<<v<v>><<>vv^v^vvvvv^^>^<^<>>^v>v<>^<v^^<v>^<>>>>v^<vv^<>^v>>^<vv^^^^v>>>>^>>^><^<<<^<^><v<^<>>^^v<>v>vv^v^v^<<>v<<v>><v^>v>>><<v^<>^<^^<^>vv<><<<^<v<v^<v<v>><^><v<>>v<<<>>^><^v<><>>v^<vv<>v<<^><<v<>^^<><^^>v>^<vv><>^^>v<v>^<>v<^>vvv><>>vv^^^>vv^>v^v<<<^<^^>v<v>>><vv<<^>>^^>^v<v^v^v^v^^<><<^<^^v><<^^^vvv>>^>>^^v<^>vv<<>^v^^>v^>>>vv^>>v<>^v<>vv^v><<v^>>vv<>^^>^<v<^<
|
||||
<<^v<<^^>^^^v<^<<^^v>><^^v<<<v<v^><>v^v>^^^>v^v^<>v^vv<><^<<>v^<>^<v>^v>v^v><>vv<<>^<>^<v<^^>vv><>^v<><<vv<<<<>v>^>v<v>v><<<>^<>>><v^><><^^v><>^v<vv^<><<vv><><<^^><>^vvv>^<>vvvv>^^^^^^<<>^^>^v>><vv<>^^<<^>^^>^v^^v<v^<^><vv>^<><<<^v^<^vvv><>>^<^v>>v>>vvv<>v>^<^^^^>>v><<^>><><>v>>^v^^^vv<<^^v>^^v<v<>><v^vv>>^<v<vv<>^>v>vvv<<vvv>^^^<v<>v<^>>v<^<<>>vv^<v^>v>^<<<v>vv>v^vv<v^>v<v<<^<>^v>>vv<v>>v>>^v<>v^>^>^<<>>><^^v<>v<^>>^^v^^>>^<^^^v^>v^^v<vv^<<v^<v^>v<^^>>^vv>^>^>^v<v^^<^^<vv<<^v<v^^vv>v^^^v<>><<<^^v<<v^>>>>>^v^>><^^>^^v>v><^>v<^<<^vv<>^><^><v<<>v^><v<<>^><v<<><><<^>vv^^<<^>v<^<<>^<vvv<<^vvv>>vv<<>vv<^^v>^>^v><<<>vv><^^^>><<><^v^v<^<v<^v^>^v<v^v>v^^^vv<<>v>v<^v<>^<^v>^^<^v^^^>><v<>><^<><^>^<><^^>><^vvv>>vv>>>^><^^<vv<^>^<<vv>^v<v<<<>v<v^><^^>^<^>^^>>>^><>><<^^><<<vv<v^<<^>^v><<^<><^v><^^>>><^v>^^^v>>v<>^^^^^^<<>^^>v<>^vvv>>>vv<<<^vvv<v<<><^<^^v><<^^>>><>><<^<<^^>v^^^<<v<^v^^<vvv^<^v>^<<<^<^>^v<v<<>vvv<vv>>^>^vvv<^<v>>^<vv>>v^<>v<<^<>^>^vv^^v><<^vv^v^vv><v<^>><v><v<><^vv>^v>v^^v>>>^<^<><^>
|
||||
>^^vv^v^^<><<v<>v>>^><v>v^<<v>>vv^<<v<^<>vv<>>^>><>>^<<<<><<^^>><v<vv<>v^<<^>>>><>><^>v^^>>>>vv>><<v<<^<>^>>^^<v^>vv>v<<v>v<>v>v<v><^>^<>>><<><^^>v<<v<v>^^<>>>^><>v>vv^^^<^^<vv><v<<v<><>>vvv^>>>>>^vv<v>>^>^v>^^>vvvv^<v>^v^<^>^^<^<<<<>^^<v>><<<>v<<>><v^v<v>^>v<^v>>>^v>v<^<<<vv<^v<v>>v><<v>>v>v><>^v^v^>>^v>^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<v>>>>>>vv>><>v^^><<v<^>^vv<<^>^v<^^^<>v>^^>>v^<^>^^^^v^>>>>v<>v<<<>^><v<v><<>v^^>>^<v^v<>^<>>>v<^<v<<><vv<v>>>>><v^>v<>^<><<vv^<>>^<vv^<<v>^v>^^vvvv>v>^vv>v>^><><^>>vv^<>>^v^v<<^><>^<^^>vv><<<>>vv>v^<>>^v^v^<^>>v^v><<^^>>^<vv^^^<><^vv>^>^^^v>vv^>>^<<>vvv>v^^v>v>^v><^>><<^<<^>^<^^vv><v>^><>^v<^^<v>v><><^vv^vv<<^<v>^^>v>>vv^^^><<>^v><^^v^<v<<<>vv>v^>>><<^v<v^vvv^><^>>>><><<vvv>^v<><>v>>v>^v^<>v^^<<^v>v<>>v><><v<v^^v<>vv^<v>>>v^<><^^^<<^<v^>>^^^>v^^>vv^v>>^<<<><>^v^^<^^><vv<>>v^^>>^v<^v>>^v^v<v>>^vvvv>v<>><<^^<<vv<v<>v^^>><<v^<v^<>>>>^><>v^<<^<><>v>v<
|
||||
<v<>v<>^>^v<>^vvvv^<^>vvv>v^<>^<>>v<v<v<>>^<^vv^>^^^<^v<^v^^v^>v<^<v<<<vv>^v^v><<<><^v>^><>>^v>vv>>v^>>^><><>v>^v>v^^v<^<<v^v<>vv><>^v>>v<^>vv<>><v><<<vvv>^v>>v><^^^^>^<^>><>^vv>^><v>^>v>^<<v<<^>^^vv>v^>>v^v>^^><<<>^<>>vv^<>^v><<v^<^>vv^><^^^v>^<v^<^>>v<<^><><<<><<v>^^<>^vvv<v>>>><v><v>^><v^vvv><^<>v>v><v<v<<^v>>^^vv^<^<><^<>v^><vvv>vv<^>^<<vv^^^vv<v<vvv<>><v^<v^<v^<>^^<^>^><v>^<<v>^>v^<v<^vv^v<^<v>v<>><<>>^vv<>>><<v^<^^^^v>v^v^v<>vvv>>^><<v<v><v><<>v^<^vv<^^><^vvvvvv^<vv<v^v<><<^>>^^^^v<>vv<^v><<<<v>><>vvv<v>^v^><^^^^>^<v>>v>v>v^v<>v>><<^><<^v<v^>>^<v^<^^<^>>^<v><>^<<>><>vvvv^>v<v^v^><<>v><v<^<<>v>v^>vvv>vv^<>v<<^^<^>vv^v>><^vv<v><^^<v>^vv^>v<>^^<v<vv<^<v>v^<<^<<<>>><v^<>v>>^>><<^<>>>v^<<v<v^^>^<^>^<>v^^^^<v^vv>v>v<v^><<>^<>>>v>v<<^v^<<><v>^><v><<>>vv><^<v<>>vv<>><<><>^v^>v>^<><>v<^^<<^v^<^<v<v>>vvv^vv<^><<^>^^><^>^>>v><vv^>>^>>v<^^>vv<v>>^>>^^v<<<<<<^>^^v>^v>>^v>vv^v<v>^<<<^>v^<>>>v<^<<>^v>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>v^>v><^><^v>^v^>^^><^<<^^<<<^<<^v<^<>><^>vvvv>v<<<vv^^^vv<^v><^<>^<>^>^v>>^<v>vv<^v<>^^^vv<<^<<>v>>>^^v<v^^^>^<><^^>^>^<><vv^<v<<<v<vv>^><v^<<>^<<<^<v>>>v<<<><<v<<><vv<^<><>^^><<^>vv<v^vv<v^v^<>><vvv^<^v<^^>>v>^><v>^v<v>^^v^>v>v^><><<<<v^>>v><>vv><^><v^>^<<^<v<v<^<>>>v^vv><^^>>>v>>^<vvv>^<><>^v<>>v^vv^v<<^v<^v>^vv^^>>v<v^>v<<^><><>><><^v><>^<^^>>>>vv^v^>vv^<^vv<><>^><><><^vv^^<>^v<<>^v^v^v<v>v^>^vv>>>>>vv><>>^v<<v><>^<>v<<<v<vvv><>^^>v><v>v^^v<<vvv^^<>v^v>^^^<^^>>>vv>v><<>v>>>^^<^<<^vvv^<>^<^v><vv>>^<>>^^><><^vv<<<v<>^v^>^><^v^<v>>vv>^^><v<<<^<^<vv^v<^v^^>^>>vv^vv><>^v>v>>v<>v<>vv^vvv>^<>v>^v^>>^>^<v^<^vv><<v<<^^>^<v^><>v<^>v^^><>vv>v<<<>>^^^^>vv<v<^>v><v>v^v^v<v>v>^v<>>>v<<>>v^<<>>^^^<^v^>v>vvv^>^v^v^>>>><v>><vv^>v^vvvvv>v<<<<>^<^^^v><^<>>v>^<^>vvvv<>v>^^>vv^><^v^v>^v>>v^^v>>v<vvvv^v^^v>^^^^>><^v^^v>v><<>v^^><^<v>^^^<vv>^v<>^v>>vvvv>>^>^<^<>^><<v>v^>^>>^<<^v>><v>v>^>^<<v^<<^>^<^^<v<<<^<v<<>v^^>><^^v^v^vv^>^v<<^^^><<^^<<<vv^^><><v<<<>^^^^^^^>vvv<>v<vvv<<>>v<>^<^^^><v>^<^vvvv^v^
|
||||
vv^^><>^vv^v<v^<^v>v^>^v>v<>v<<<<>v>>vvvv>v<^^><>><<v>vvv<>^vv><<>^<>>v<>v<vv<<<^>^<<^v<^v^>>vv<^^<><v^><<>v<<>>>v<>v><^vv>v>^v<^<<>>v>^><vv>^^v^<vv>><<v<^^vv^vv^<<><^v^vv<>^^^^<<v^^^>>v^v>^>><<>^>v<^^vv^>^^^<^^vvv<^^><<>vv^^^><v^<v^>v>^<^vv>^><<<><>>v<>v><><>>>^<vv<v<^><><<>v<<<>>><<^><<><<<^><^v^^><<v^^<^<vvv>v>^>v^v^^^<v><v>>^^v<vvv>vv>^<^vv<^^<>^>><<^<>>><^vv^>>vv<v^^^^^v<<<^<<^<>><<v^<<^v^vv^<^v^>>vv><^^^v^>^v>v^v>v^^>^v<><v><^<^v<^v<>^<><<v<^vvv<>v<^><>^^>^^<>>>^<>vvv^v<>^v>^><<^vv><>>>^v<^><<>><<<^v<><^<>>^^><^<v<^^>^<vv^<<^<<><><^><^><^<v^^^vv>v><^v<^>vvvv<>^<^<<^^v<v^>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><^>vv<^v<vv<><>v<>^^v<^v>v<vv<^<vv<<vv^<v><^^^^>vv^>^vvv><v^^<><<<<^^>vv^^<v>>>>^v>>^<v^<>^><v<<>v^<<><<^>>><^<<>>>^<>^<<^vvv>>>v>v>><><^vv^<>v><v^<^^<^<vv^>v^v<v>><>>^<v>>v><^<^>><v>v^<<>v^<<^^v<^v^><><<v^vv^^<>vv>^^><^<^^<vv>vv<<v>v<<<vv^^^^>^^^v^^^vv<^^^v^v>>>>v<v<><^><><>^^>>^^^^<v^<^v
|
||||
v>v>^v^><<<><<<v^vv>^^v><>><^^>vv^>^v>>v>v>^<v<^vv<><><^><<v<<<<^^>v<^<>^v><>v^<>^v<vvv^^><<^>>v>>^^^<><vv^v><^^<vv>>^^v>><vv^<v<^^^>vv^>v^v^>^^^^<^>><<<><v>vv>^^^v><^^v^^^^^>><<^>>v>v>^><>>^vv><^<<v<><<>>>>><>^>vv^<><><><^<vv<>^>^<<<^<^vvv<^v>vv><v>>^>^>>vv>>^<<vv><<^<<v>v>^v>v>v>vv<^>v^>v^v^v^<v>^>^>^^<>v><vvv>v>^^^<>^^^<<>^>>^<>><>^^>v>>^^^>v^<^<<v>>^^<^>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<>^>^^^vvv>vv>>v<v><>^v^^^>^<>vv<^><vv^v<v<>v>v<>><<<^v^<v^^^>^<v^>^<v>v<^<<^>^^>>^^>>><<<^<^<^><<><^^><><vv>>^<<^^<v<^<><><<^><^v^<vv><v<<^v<><v^v><<^>v<>>>>^>^^v<^>>v<v^>^>vv>v<><<>^<v<>^v^>^>^^<<>^>v<><^^^>>^^v><>>>v><^^^<>vv<<<<<vv><^>><v^v<^v<vvv<>^v>>v>>^<v<>^v^v><<^<>><v>>^>v<<v^^^<<^<<v<^^><^v<^^v>^^<>^v^>>^>>^<^<<^v<<>vvv>vv>^>^v^<<^>>v^><<<^<><^<><^><^vvv<v<>v^>v><^^<v<^^^>><<<>>vv^>v><>v^v>>vvv>v>^vvv>^>v<^>v>>><>>^^^<^vv<<^^<^>vv<v<><>>>^<v>v<^^vv<>^v>v>vv>v^>><><^<><^v<^<<^^v^<^>^vvv>><^>v>>>>>^><>
|
||||
>^<vv>><<vv>v<><vv>^^>^^vv^v<v^>>^<<<vvvv>^^v>^>vvv><vv^v<^^<<<vv^>v^v><v<<^<<<^v^<>vv^<>v^>^v>>^vv^>>>v^^<<<>v<^v<^>^>^<^<^^v^^>^<<<^<<<^v<><>v>>><^^<vv<><v>v<<v>vv^v>>>^^vvvv^<<<vv>^vv<>^<>^<>><>><vv^^<v<><>^^<^^^<>^<vv<vvv><><^<>><<<vv^<><v>>^<<v^<^^^<^^v^<vv<^v^v^>>v<v><^v>>^v<^<<v^v<><>^^v<^>vv>><^vv>v<<<^<>>v>^<<>^^^<><^<^<vv^<>^vvv<v^>v<v>v<>^^<v>v^>v^><^^>^^v<>>><v><<^vv<v><^<v>><<<v^v<vv<v><vv^<v^><><^>v^vv><v<vv^<v^>vvv^>>v>v^^^>v<v<v<<^<^>^>><v><^>^<vv^><v^>>><^>^vv^^>>v<^v>vvv>v>v^<^>>^^><>v^>^v^^vv><<^>v<<<><<>^v^<<>>^v>^^>^<^<>^<v<v>^>^v^<>><^^<<<><v^^<>^><<<v>><<v^<vvv><<>^>><^<>vv>^>>^v<v<>v^>>>v>>><^vv^>^v<><>>^v^<^<><v>^<<>>>>>><>v>^>v<v>>^<>v><vvvvv<<<^>><^<><<v>>><^<^<v><<v<><<<<>v>^vv<>^^vv<>^v^vv<>>><vv<>>v^<^<>^<v^<v<^^<>^vv^^<>^>^>^<v>vv<>>^vv<v>v^^v>^^<v>>>>^^^<^>><>v^>^><>v<^<<<^<^>v<<<v>vv>v<^<>>vv<<^v>><^<<<>>>^v^<<^><<<v<vv^<^>>v<^v>^<>^^<>v><<vv>>^v<v<v^<^^>v^><>^<v<<>><>^>><>v<<v>v<<v<<v>v>^>v<v^v^<v><vv<^v>><>>v^<^<<^^^>vvv<v^vvv^vv>>^v<>v^v^<><v<vv^^>><
|
||||
<v>v<v<v>^v>v<^<>^<>>^>>vvv^^><vv<>vv<<><vv>vv^<v><<^vv<<^v<^<v><>>^<^^>v<>v<>^<>v<><^v<^>vv<vv><vv>vv^<<>>v>^^<^><>^v>><v<><v<vvv<^^<><>^^^>>^<>^<^><vv<<<<>><vv<^vv>v^>v^^>>>>v^^v^^v><^vv^<>v<v<>v^>v>^<><<<<>^v><<^v>><>v<^<<^<^>^v<v<><^><><>^v<>vv<^>v>^v<<^v<^>vv^<v<>>vv^^^><^^>>><^>><<>v>^v>^>^v<v><><v^^<>>^^v<^><<v^^>v^^v>^^^^<v<<<^^v^v^<^<vv><<^><^>><v>^^^v<<vv^vvv>vv^<<v^<v><^><<vv><vvv<v>><v<^<v^v^^>>^^<>>v<><^<^v<><^<<><^<vv><v<>v><^<<^v><<v<vvv><<v>>v^><<vv>vvv<<>^<<>vv>v^v>v>^vv>>v<v<^^<>vv<><<v^<>^<<>v>^^v<v<^<<v<vv^<v><>v^<>><vvv><>><^>^^<>^v^^^^><>><^^<^^^v^v^>v^>vvv>^>^^vvv^<^v^^^<^^<^v^^<>v<<v^v^^>v^^>>><>>v^<^<<v^v^>>v>>^^^^>v<vvv><^<>^^v<^vv^<v^v^<^v>v^>v<vv^<^<^v^^><<vv^>^v><v<<vvv>v<>>^<<^<>>>v^^^<^v^>>^vv><<>vv^^<>><>><<vv>vvvv^^^<^><vv<vv<<<^><><v^^>^^>v>^<<v>v^v^^<^>^v^v>>v>^<><v<>>^^^><>>>>v><^>^vv><^^^v^^^>>^v>v^>vv^vv<>v>^<>>>><<<^^><<<>v<^<v<>vv^>>^<>v<vv>>>^vv><v><v^^<v<^<>>>v^<<v><><<v><vv^v>><v^>>>^<><>^v<^<<^><<><^^<^><^^><<><>v>><<^>v>v<^^vvv<^v>vv>^<v^vv<
|
||||
v>^^>^v>v<^><^^<v<^v<v>>>>>v<^<><>>v>>^vv^<vv>v<<^^>>v<v^>^<<^v><<^>^<v><<v><^>^<^^v>>>v^>>^>>^<<^^<^v><><<>>><<vvv>>^<v^^vv>^<^<<<>^>v^><<<>^^v^^>>><^>><>>^^^vv>v^>^<>v^>v>>><v^><>^^<<v^>v<><v<>^vvv>v<<^v>v^<>^><<<v>^<>v>v^^>^^>><v><^<<<><v>>v^>vv^^>^<v^v<<<^v>><<<<<^^^>>vv^^>>>>^vvv<<>vv^><^^>^<^><v<v<v<^v<v<v<><<v^v<vvv><>v>^<^^<^>^><<>^^^>>><v^>>>>^>v>><>^>>^^<^<^<<>>>>^^><<<>v<<^>^^<^v<>^v<v<>v^v<>^>><<<<^<<>v>>^vv<<>^^>v^v>v<v^v>v^v<^^<<v<>v><^^^<vvv>^vv<>^><vv<v^<v><<<vv>^<>v^v^v<<<^>^^<v<<<v<<>^^v^vv^<^v>^vvv>^>v<v>v^vv<vv>^^^v^^<>v<<vv<<^>>>>^>v<^^^>v^<>v<v<v^^^>v<<><<v>^v><>vv^<^^v^^<<^<<<^<<<<<<^><^><<<^^>><<^vv<^^<v<>>^^>>v<v<^<^v<v>v>vv^<^<v>vv^>^^v^vv<<<><^^^^>^^^vv<v<><<>^v>>vvv><>^v<>><<<vvvvv^vv>^^v<<>v^<><<v^<v^<<>^^vv<>>v<><<<^^^^^v>^<^<v>^>>v<^^v<>v>^<^v>^>>^>v^<<v<vvv>>><>>^<v<>^<^v<<<><<v>vv><>vvv^<<<>>v><v<<^<^v>^><^^v^><>><<>>v^^<><vv>><v>v^><v>>>v^<<vv<v>^<^<v^^>v>>^vv>^><v>v>><<v^vv^v>v<>^<v^<^>^v^^>^>>>^>^^>>>>v^^^^<^<>>vv^<<^>>>^v><<^<^v<vvv>>>v<<v<<^v<v<v^<
|
||||
vvv>vvv>^><>^<^>>vv^<v>vv><^^v><^vv^^^>^v<^<^<<>v>^<>^^><vv^^>vv^><>^<<<><>><v>>^<<^^vv<<^^<<v^v>v^<^^<<<>v^^<>>><^^<v<vv^^v^>^v^vv^vv<><>>^v<<>>^>^^v<>^vvv>vvv<v>v<v^^^<^<<>vvvvv>>^vv<>^<>^<>v^^v><<>>>^<vv><^^v^<>>v><<^^>v<<v^v>v^>^<v<v<v>>>><^^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>vv>><^<>^^vv<<>v>>^>v^<^<><^<^<v>v<^>>>^>v^>^>^>^^v<><v<vv^v>^<^><^v^<<><>><v^><v<v<<<<^v<^<^^v<<>^<v^vv><vvv^<>><<<<>>><v>^><^v^vvvv<>^><^<^><>^<^^v>^^^<>>>>^vv^^>^^v^><^>>^>^<>>^vvv<>vv^^^v^>^><v^<>vv>><^<><>^v^<v^>^v>vv^v^>>><v^><<^^><<>^<^<^v>^v>^>^><<>v><^<^^^v>>^^<<<^^<<>>>v^v<<<>>^^v<^<<<>v^^^^<<^>^vv<^>^^>^v^<v^^<v<<^v>><v>><^^>>vv<v>^^><>^<<v<v<^<^>v<^<vv><<v>v<^^^vv<^^<<^^v<v<<<^^^>>^^><><^><><v<^<>>><<<<<>v><^v^<<>^<^<>>v<^v<vv^<^<^><><v><vv<>>>>^>^v<<>>v<v^^^v<>>^>v><<^>>v^v><<<<<v^<vv^vvvv^vv^>v>vv<>v><v>v^vv^^<><v^v<>^vv^<>>^v^v<v^>v^<<><>v>>><>v<<v><>v>>v^<<<>>>v<^^<<<v>v<<<vvv<v>^^v<^^v<^>v^<><>v>>>>^<>v>v<v<>^^
|
||||
<<vv^>^<>^^<vv<<<^^><^v<>^<^>vv<v^<<><^><><<^v<vv><^>v^<^>^^<^v^^>>^^^<<^^<>>>>v>^^<vv>v<<>^^v<^v^^v<>v<^>v<>>^^^v<<>^^<>v>v<v<<<v^<vv>><^^<v<>vvvv^<>^><v<>v>>^^v^^>v^^v^^>v<>>>v>>vv><>>>>^^^v^<v<v^v>^<<vv>^<v><<v>^<^^v>v^v<v<><<v><^<^<v>v<vv<^^v>>^<v><<<^<<^^^v>>><<^>v<vv<^^vv<<>^>^<>>^^^<<^>v<v>>>>v^>>v>^v>v<<^>v>vvv<v<^^>>>><<<^v^vv>>>>v>v^v>><<^<v>v><vv^^^>^vv^vvvv<<<v<^>v^^><><v>v>v<v>>>>vv^^<v>^v<<<<<^^^^<v><v<><v^^>v<^>>^<<^<>^^^^v<v<>^>><v>^v^vv><<<^<>>>^>v>^v<v>>v>v^><v<v>^^v><vv<^><>^<>vv^<^>>^<><>v^^v<><v<^>><<v>>vv^><vv<><^>v>^<<^^^<<v<>^vv><>^^^>^^^^^>^<<>v<<^><^>^<^>^^^v^^<><<^v^vv>^>^>vv^v><>vv<<^^vvv><^vv^<<<>>vv^^>^>>>>>><<<^^^^<^v>>><^^<v^>vv>v>v^^v^><v^^^^><v<>v>^v^vv<v<^><v^<>v<^<<^>^^><^^<<>v<><^>v^^>>v^<^v^^<vv>v^<^<v^>>^>vv^<^<<^<v<<^v>v>v^<><v^>vvv^>>>v<<v>>^>>v>^v<<^^><^>^v>>^v^v<<^^v^<><<v^>^v<<><><>>v<^<<^<v>v<^>>^^<<vvvv<v>><^^<<vv<<><v<<>v^v<v><><<v>>^<<<v<<<>v>>><<>>^>^^^^v><<<^<<<<^><<<>v>>^<<<v^^>>>^vvvv<<^>^^<vvv<vv<vv^^^^>^^v<^<>v^>^^<vv^<><>><>^^v<<<v
|
||||
^vv>v<>vvvv<><^<v>^^v^v>>><<v<<<>^<<<<<<<^<>v><<v^<<>>^<^<^><<<>v<^<v^^v>>>>>^>>>><>vv>^>><^>^<<<><vv>^<^vv<>^<<<vvv>^v><v<<vvvv>^>>^<<^<v^^<v>^v^^v^<vv<v>vv<v<>^<<<<<>v<^vv^v<^^vv<v>>v^^^v<vv>^><<>^>>^>^><^><<<><>><<v>>v<>^v^^<^>vv><>v<<>>^v^<vv>v<^v<v><>^>^>v<>v>v^^>><^>v>^v^<^v^^v>v>>><<v^<><>vv><^vv^<>^<^<v><>^>v^><<^vv>>^<><^>><><vv>v<^><<^<<>v^^<v^^vv^^v^<v><>vv^<^<v<>>^^<<<^>>v>^^v^<>>><vv^v<<<>>>><^v<v>>^>>^<^^v<v<<>^v>v<>^<vv>v<>>>>>^^<v>vvvvv>>vvvv<>^v<>>v<>><<v><^v><v^>v>v^<<<>^^^>>v>^<^^vv<<<><>v^<^v>>^>>^<^>v<^^vv^><<^vv<vv>vv^v<v^<v^^v^<^<^vv<>v>^<>^><<>v^<>v<v>^>>>^v>^<<<>v^<^>v>^<^^v<^^>^vv<<<<v<v><>v>>^vv<>^v><>v^><vv<^vv^^vv^>><^><>^><vv<><v>v>^<v^<^v^<<<v<>>>^v<vv^><v>^>vvv^^v<v<^^^<>vvv>v><<v><>>>><^>vvv<vv^<<^>><<^v<^^v^><^<>v<^<<^>^^<^^^v>^<<>v^v<>v^vv^<<^<v<^^<>^<<v>>v>v^>>>v<v^<v>^v>vv^>><<<v<<^v>v<v^^vvvvv><>^>>v<<<v^^^^<v^vv>>>>>^^><<^^v<^>>v<v^^<^vv>^<>^v^<<^vvv>>v>>^v>>>>><^v>v<>v<>>vv^<><v<>v^^<^^>><<v^<<<v><^>v><v<^^<vv^v^vv<vvvvv<<v<>>><<<vv^<><v^>v<vv<>>
|
||||
<<>^<^<>^v^><<<<>v<^<v^v^^v^<^<v><v^^vv^<><v^v>^>v<v^><^<><<<^v^^^>>v^v^^vv^><<>v>><v><^<^>v^v^v^vv^<><<<^<>^<vvv^<<^<^<vv<>^v<>>^<><^^>^v>>vv>>^v^^><^^<vv<<vvvv<^>v^<><<<>v>vv><>><vv<^>^<v^<^>^^>>>^>vv^vv^<v^>^^^v<>>>^<<>>^^v<v^v<^vv^<>v>>^>>^<><vv^v>^^v>^>>^><^>v><^^<<^>^v>^<>vv><><>^<v>>>^^<^><^<v<^<<^>^<<^^v^<<<v>>^>v<>^><><v>v<<v^vv><^><v<^<v>v>^^>v^^^^>>^>^<>^vv<>^vv><<^^><^^>^v^<vv<^<v^^^>^v><<^<>^^><vv^<<v^^vv<vv^^>>><<v^vv>^^^^>^<<v<><vvv<^<<<<^vvvv>>^v<<v>^>>><><<<<v^v<v>^^><v>^<><^v<<^<>>>^>>>>^<<v<v<vv<^v^v>v<<^<>v><^vv<vv^v^<<><<v<<>v^^<<<<^vv<<v>><><>v^>>v>^<<v>>vv^<v^<v>vv<^<<^vvv<^>v<<><>^vv>v^<v^v>^vv<^>v^^>>v^<^^^v<>>>>><^>v^^<v<>v<<><v^v^^vvv>^vv<^vv^v^^>vv^<^>><<vv^vv^v><<v>^v>>v<<<^v>v<^^v^^>>v>>v<v>><>v^vvv<v>v<>vv^<<v^v>^v<v<>>^v<^><<^><<^^<>v^v^<^><>>>><>><>^<>vvv<>vv>><><<vv<v<><<>v^^<^<<v^vv^>v^<^v^^>^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>v^<^v^<<>^^v<^^>v<<
|
||||
BIN
15/sol_bigger.gif
Normal file
BIN
15/sol_bigger.gif
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 1.3 MiB |
BIN
15/solution_p1.gif
Normal file
BIN
15/solution_p1.gif
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 648 KiB |
BIN
15/solution_p1.mp4
Normal file
BIN
15/solution_p1.mp4
Normal file
Binary file not shown.
38
16/16-1-ki.py
Normal file
38
16/16-1-ki.py
Normal file
@@ -0,0 +1,38 @@
|
||||
file = './ex.txt'
|
||||
#file = './ex2.txt'
|
||||
#file = './input.txt'
|
||||
|
||||
from heapq import heappush, heappop
|
||||
|
||||
def solve_reindeer_maze(maze):
|
||||
start = next((i, j) for i, row in enumerate(maze) for j, cell in enumerate(row) if cell == 'S')
|
||||
end = next((i, j) for i, row in enumerate(maze) for j, cell in enumerate(row) if cell == 'E')
|
||||
|
||||
directions = [(0, 1), (1, 0), (0, -1), (-1, 0)]
|
||||
heap = [(0, start[0], start[1], 0)]
|
||||
visited = set()
|
||||
|
||||
while heap:
|
||||
score, row, col, direction = heappop(heap)
|
||||
|
||||
if (row, col) == end:
|
||||
return score
|
||||
|
||||
if (row, col, direction) in visited:
|
||||
continue
|
||||
|
||||
visited.add((row, col, direction))
|
||||
|
||||
for new_direction in range(4):
|
||||
new_row, new_col = row + directions[new_direction][0], col + directions[new_direction][1]
|
||||
if 0 <= new_row < len(maze) and 0 <= new_col < len(maze[0]) and maze[new_row][new_col] != '#':
|
||||
new_score = score + 1
|
||||
if new_direction != direction:
|
||||
new_score += 1000
|
||||
heappush(heap, (new_score, new_row, new_col, new_direction))
|
||||
|
||||
return float('inf')
|
||||
# Einlesen des Labyrinths und Lösen
|
||||
maze = [list(line.strip()) for line in open(file, 'r')]
|
||||
result = solve_reindeer_maze(maze)
|
||||
print(f"Die niedrigste mögliche Punktzahl ist: {result}")
|
||||
15
16/ex.txt
Normal file
15
16/ex.txt
Normal file
@@ -0,0 +1,15 @@
|
||||
###############
|
||||
#.......#....E#
|
||||
#.#.###.#.###.#
|
||||
#.....#.#...#.#
|
||||
#.###.#####.#.#
|
||||
#.#.#.......#.#
|
||||
#.#.#####.###.#
|
||||
#...........#.#
|
||||
###.#.#####.#.#
|
||||
#...#.....#.#.#
|
||||
#.#.#.###.#.#.#
|
||||
#.....#...#.#.#
|
||||
#.###.#.#.#.#.#
|
||||
#S..#.....#...#
|
||||
###############
|
||||
17
16/ex2.txt
Normal file
17
16/ex2.txt
Normal file
@@ -0,0 +1,17 @@
|
||||
#################
|
||||
#...#...#...#..E#
|
||||
#.#.#.#.#.#.#.#.#
|
||||
#.#.#.#...#...#.#
|
||||
#.#.#.#.###.#.#.#
|
||||
#...#.#.#.....#.#
|
||||
#.#.#.#.#.#####.#
|
||||
#.#...#.#.#.....#
|
||||
#.#.#####.#.###.#
|
||||
#.#.#.......#...#
|
||||
#.#.###.#####.###
|
||||
#.#.#...#.....#.#
|
||||
#.#.#.#####.###.#
|
||||
#.#.#.........#.#
|
||||
#.#.#.#########.#
|
||||
#S#.............#
|
||||
#################
|
||||
141
16/input.txt
Normal file
141
16/input.txt
Normal file
@@ -0,0 +1,141 @@
|
||||
#############################################################################################################################################
|
||||
#.#.....#.........#...#.......#.......#.......#.................#...#...#.........#...#.........#.....#.....#.......#.......#...#.......#..E#
|
||||
#.#.###.#.###.#####.#.#.#####.#.#.###.#.###.###.#####.#.#######.#.###.#.#.###.#.#.#.#.#.#####.#.#.###.#.#.###.#.#####.#.###.###.#.###.#.#.#.#
|
||||
#.....#.#...#.......................#...#...#.....#...#.#.....#.......#...#...#.#...#...........#...#...#.....#.#.....#...#.....#...#.#.....#
|
||||
#.#####.###.#.#.#####.#####.###.###.#########.#####.#####.###.#.#.#.#######.###.#####.#.###.#.#####.#######.###.#.#######.#######.###.#####.#
|
||||
#.#...#.#...#...#...#.....#.#.#...#...........#...#.#.....#...#.#.#...#.......#.#.....#...#.#...#...#...#.....#...#.#...#.........#...#.....#
|
||||
#.#.#.#.#.###.#.###.###.###.#.#.#.#############.#.#.#.#####.###.#.###.#.#####.#.#########.#.###.#.###.#.#.###.#####.#.#.###########.###.#.#.#
|
||||
#...#...#.....#...#...#.....#...#.....#.....#...#.#.#.#...#...#.#.#...#.#.....#.............#...#.#.#.#...#.......#...#...#.........#...#...#
|
||||
###.###.#####.#.#.#.#.#########.###.#.###.#.#.###.#.#.#.#####.#.#.#.###.#.###.###############.#.#.#.#.#####.#####.###.#.###.###########.#####
|
||||
#...#...#...#...#...#.#.#...........#.......#.#.....#.#.....#.#...#.#...#.#.....#...........................#.......#.#...#...#.......#.....#
|
||||
#.###.###.#.#.#.#####.#.#.###.#.#########.#.#.#######.#####.#.#.#.#.#.###.#####.###.#######.#####.#.###.#.#########.###.#.###.#.#####.#####.#
|
||||
#.#...#...#.........#.#...#...#.#.......#...#.......#.#.....#...#.#.#.#.#.........................#.#...#.......#.#...#.#...#.#...#.#...#...#
|
||||
#.#.#######.#.#.#####.#####.###.#.#.#####.#######.#.#.#.###.###.###.#.#.###.#.###.#.#.###.#.#.#####.#.#########.#.###.#.#.###.###.#.###.###.#
|
||||
#.#.......#...#.....#.....#.#.....#.#.....#...#.#...#.#.#...#...#...#.....#.#.......#.#.....#...#.....#...................#...#...#...#...#.#
|
||||
#.#######.#####.###.#####.#.###.###.#.###.#.#.#.#.###.#.#.###.###.###.#####.#.#######.#.#######.#.#####.#########.#.#.###.#.###.###.#.###.#.#
|
||||
#.#...#...#...#.#.#.....#.#...#...#.........#...#...#...#...#.....#...#.....#.#...#...#.#.....#.#.....#.........#.#.#.#...#.........#.#...#.#
|
||||
#.#.###.###.#.#.#.###.#.#.###.###.#########.###.###.#######.#######.#.#.#######.#.#.###.#.#.###.#####.#########.#.#.#.#.###############.###.#
|
||||
#.#.........#.#...#...#...#...#.....#.......#...#.#.......#.#...#.....#...#.....#...#...#.#.....#...#...#.....#.#.....#.................#...#
|
||||
#.###########.#####.#.###.#.#######.#.#######.###.#######.#.###.#.#######.#.#########.###.#######.#####.#.###.#.#.#######.#.#.#########.#####
|
||||
#.#...#.....#...#...#.#...#.....#...#.#.....#.#.....#...#...#...#.#.......#.#.......#...#...#.#.........#...#...#...#.....#.#...#.#.....#...#
|
||||
#.#.#.#####.###.#.###.#.#######.#.###.###.###.###.#.###.#.###.###.#.#.#.###.#.#####.#######.#.#.#####.###.#.#######.#.#.#.#####.#.#.#####.#.#
|
||||
#...#.#.....#.#.#...#.#.#.......#.#.....#...#.....#.#.......#.#...#.#...#...#...#.#...#.....#...#...#.#...#.....#...#.#.#.......#...#...#.#.#
|
||||
#####.#.###.#.#.#.#.#.#.#.#######.###.#.#.#.#######.#.#####.#.#.###.#.###.#.###.#.###.#.#########.#.###.###.#####.###.#.###.#####.###.###.#.#
|
||||
#...............#.#.#.#...#.....#.....#.#.#...#...#.#...#.#.....#...#...#.#.#.......#.#...#.......#.....#.....#...#...#...#.#.......#...#.#.#
|
||||
#.#.#.#.#.###.#.#.#.#####.#.#.#.###.###.#.###.#.#.#.###.#.#.#####.#######.###.#######.#.#.#.###############.#.#.#########.#.#.#####.###.#.#.#
|
||||
#.......#.#.#.#.#.....#...#.#.#...#.#...#...#.#.#.#.....#.#.......#.....#...#...#...#.#...#.#.#.....#.......#.#.#.....#...#.#.#...#.....#.#.#
|
||||
#.#######.#.#.#.###.#.#.#.#.#.#####.#.#####.#.#.#.#######.#####.#.#.###.###.#.###.#.#.#.###.#.#.#.#.###.###.#.#.###.#.#.###.#.#.#.#####.#.#.#
|
||||
#...#.....#...#...#.....#...#.......#...#...#...#...#...#.......#...#...#.#...#...#...#.#...#...#.#.....#...#.#.#...#...#...#...#.....#.#.#.#
|
||||
#.#.###.#######.#.#.#.#.###############.#.#######.#.#.###.###########.#.#.#####.#####.#.###.#.###.#.#######.#.#.#.#####.#.#.#.#######.###.#.#
|
||||
#.#...#...#...........#...#.#...........#.....#...#.#.#...#...#.........#.#.....#.#...#.....#...#...#.....#...#.#.#.....#...............#.#.#
|
||||
#####.#.#.#.#############.#.#.#####.#.###.#####.###.#.#.###.###.#.#####.#.#.#####.#.#############.#.#.###.#####.#.#####.#######.#######.#.#.#
|
||||
#.....#.#.#...#...........#...#...#...#...#.....#.....#...#.....#.#.......#.....#.#...#...#.....#.#.#...#.#...#.#.#...........#.......#...#.#
|
||||
#.#####.#.###.#.###############.#.#.#######.#.###########.#.#####.#.###########.#.###.#.#.###.#.#.#####.#.#.#.#.#.#.#.#.#####.#.#####.#####.#
|
||||
#.......#...#.#...#.....#.......#...#.......#.#...........#.#...#.#...#.........#...#...#.....#...#...#.#.#.#.#.#...#.#.......#...#.....#.#.#
|
||||
#.#.###.#.###.###.###.#.#.#############.#####.#.#.###########.#.#.#.###.#########.###.#############.#.#.#.#.#.#.#.###.###########.#.###.#.#.#
|
||||
#.#.....#.....#...#...#.#.....#...#.....#...#.#.....#.........#.#.#.#...#...#...#.....#...#...#...#.#...#...#...#...#.......#.....#.#.....#.#
|
||||
#.###########.#.###.###.###.#.#.#.#.#.#####.#.#####.#.#####.###.#.#.#.###.#.#.#.#######.#.#.#.#.#.#.###############.#######.#.#####.#####.#.#
|
||||
#...........#.#.....#.....#.#.#.#.#.#.#...#.......#.#.#...#.#...#.#.#.....#...#.#...#...#...#...#...#.#.............#.....#...#...#...#...#.#
|
||||
#.#########.#########.###.#.#.#.###.#.#.#.#.#######.#.###.#.#.###.#.###########.#.#.#.###############.#.###############.#.#######.###.#.###.#
|
||||
#.#.......#.#.........#...#.#.#.....#.#.#...#...#...#...#.#.#...#.#...#.#.....#...#...#...#.......#.....#.........#.....#.#.........#.#.....#
|
||||
#.#.#####.#.#.###.###.#.#####.#.###.#.#.#.#.#.#.#.#####.#.#.###.#.###.#.#.###.#########.#.#.#####.#.#####.#######.#.#.###.#.#####.###.###.#.#
|
||||
#.........#...#.#.#...#.#.....#.......#.#.#.#.#.#.....#...#.....#.#.#.#.#.#.........#...#...#...#...#.....#...#...#.#...#...#...#.#...#...#.#
|
||||
###.#######.###.#.#.###.#.#####.#######.#.###.#.#####.#######.#.#.#.#.#.#.#.#######.#.#.###.###.#####.#######.#.###.###.#.###.#.###.###.###.#
|
||||
#...#.....#...#.#.#.#...#...#.#.........#.#...#.....#...#.....#.#.#.#.#...#.#.....#.#.#...#.....#.#...#.....#...#.....#.#.#...#.....#...#.#.#
|
||||
#.###.###.###.#.#.#.#.#####.#.#.#######.#.#.#.#.#######.#.#####.#.#.#.#####.###.#.#.#.###.#####.#.#.#.#.###.#.###.###.#.#.#.#######.#.###.#.#
|
||||
#...#.#.#...#...#.#.#.#.....#...#.....#.#.....#.......#.#.#...#...#.#.......#...#.#...#.#.....#.#...#...#.#.........#.#.#.#.#.#.............#
|
||||
###.#.#.###.###.#.###.#.#####.###.###.#.#########.#.#.#.#.#.#.#####.#########.###.#####.#####.#.#####.###.#.#######.###.#.#.#.#.#.#.#.###.#.#
|
||||
#...#.#.#...#.#.#.......#...#.#.......#...#.....#...#.#...#.#.................#...........#...#.#...#.#...#...#...#.....#.#.#.......#...#...#
|
||||
#####.#.#.###.#.#########.#.#.#.###.#######.###.#.###.#####.#########.#################.###.###.#.#.#.###.###.#.#.#########.#.###.#.###.###.#
|
||||
#.......#...#...#.........#.#.#.#.....#.....#...#...#.......#.........#...#.....#...#...#...#...#.#.#.....#...#.#...........#.#.#.#...#...#.#
|
||||
#.#########.#.###.#########.#.#.#####.#.#####.###############.#######.#.#.#.###.###.#.###.###.###.#.#####.#.###.###.#########.#.#.###.###.###
|
||||
#.#...#.....#...#...#.#.....#.#...#.#...#.............#.....#.....#...#.#.#...#...#.#...#...#.....#...#...#.#...#...#...#...#...#.#...#.#...#
|
||||
#.#.#.#.#####.#.###.#.#.#####.###.#.#####.###########.#.###.#####.#####.#.###.###.#.#.#####.#########.#.###.#.###.###.#.#.#####.#.#.###.###.#
|
||||
#.#.#.#.........#.....#.#.....#...#.....#.#.#.......#...#.#.#...#.......#...#.#...#...#...#.......#.......#.#.#...#...#.#.......#.......#.#.#
|
||||
#.###.###.###.#.#.###.#.###.###.#.#####.#.#.#.#.###.#####.#.#.#.###.#####.###.#.#####.#.#.#######.###.#####.#.#.###.###.###############.#.#.#
|
||||
#...#.#.......#.#...#.....#.#...#.#...#.....#.#...#.....#.#...#...#...#...#...#.....#...#.......#...#.......#.#.#...#.....#...........#...#.#
|
||||
###.#.#.#.###.#.###.#####.###.#####.#.#######.###.#####.#.#######.#####.###.#.#####.###.#.#####.###.#######.#.###.#######.#.#.#######.#####.#
|
||||
#.#.#.#...#...#.#.#...#.....#.#.....#.#...#...#.......#.#.......#.....#.....#.....#.....#...#.....#...#.....#...#.......#.....#...#.#.....#.#
|
||||
#.#.#.###.#.#.#.#.###.###.#.#.#.#####.#.#.#.###.###.###.#.#####.#####.#.#####.#.#.###.###.#.#.###.#.#.#.###.###.#####.#.#.#####.#.#.#####.#.#
|
||||
#...................#.....#...#.....#...#.....#.#...#...#.#...#.....#.#...#...#.#.#...#...#...#.....#...#...........#.#.#.#.....#...........#
|
||||
#.###.#.#.###.#####.#####.#.#######.#########.#.#####.###.#.#.#####.#.###.#####.#.###.#.#.#########.#####.###########.#.#.#.#####.#.#.#####.#
|
||||
#.#.#...#.........#...#...#.#.......#.....#.....#.....#...#.#.#...#.....#.......#.#...#.#.#.......#.......#.......#...#.#.#...#.#.#.#.....#.#
|
||||
#.#.#.#.#.###.###.#####.#####.#######.###.#.###.#.#####.###.#.#.#.#####.#########.#.#.#.###.#####.#.#####.#.#####.#.###.#.###.#.#.#.#####.#.#
|
||||
#.#...#.......#...#...#.......#.......#.#.#.....#.#.....#...#...#.....#.....#.....#.#.#.....#.....#.#.........#...........#.#.#.#.#.....#...#
|
||||
#.#.###.#.###.#.###.#.#########.#######.#.#.#####.#######.###########.#####.#####.#.#########.#####.#.#######.###########.#.#.#.#.###.#.###.#
|
||||
#.#...#.#.....#.....#.........#.#.......#.#.....#.#.....#.......#...#.....#.....#.#.......#...#...#.#.......#...#...#...#.#.#.#.#...#.#.#...#
|
||||
#.###.#.#.#.#.###.#######.#.###.#.#####.#.#####.#.#.###.#.#.###.#.###.###.#####.#.#.#.###.#.###.#.#########.###.#.#.#.#.#.#.#.#.###.#.###.###
|
||||
#...#.#.#...........#.....#.#...#.#.#...#.....#.#...#...#.#.#.#.#.#.....#.#...#.#...#...#.#.....#.........#.#...#.#...#.#...#...#.#.#.....#.#
|
||||
###.#.#.#.###.###.#.#.#######.###.#.#.#.#####.#.#####.#.#.#.#.#.#.#.###.#.#.###.#.#.###.#.#############.###.#.###.#####.#######.#.#.#.#####.#
|
||||
#.................#.#.....#...#...#.#.......#.#.#.....#.#...#.#.#.#.#.#.#.#...#.#.#...#.....#.....#...#...#.#...#...#...#...#...#.#.#.......#
|
||||
#.#.###.#.###.#.#########.#.###.#.#.#######.#.###.###########.#.#.#.#.#.#.###.#.#.###.###.#.#.###.#.#.###.#.###.#.###.###.#.#.###.#.#.###.#.#
|
||||
#.#...#.#.#...#.#.........#.#...#.#.........#.....#...#...#...#.#.#.#.#.#.#...#.#.#.....#.#...#.#...#...#...#.#.#.#...#.......#...#.#.....#.#
|
||||
#.###.#.#.#.#.#.#.#####.#.#.#.###.###.#.#########.#.#.#.#.#.#.#.#.#.#.###.#.#.#.#.#####.#.#.###.#######.#####.#.#.#.###.#######.#.#.#######.#
|
||||
#...#.#...#.#.........#...#.#.#.#...#...#.....#...#.#...#...#.....#.#.....#...#.#...#...#...#.....#.....#.....#...#.....#.....#.#.#.#.......#
|
||||
#.###.#.#.#.###.#####.#.###.#.#.###.###.#.###.#.###.###########.#.#.#.#.###.###.###.#######.#.#####.#####.#.#####.#######.###.#.#.#.#.#.#####
|
||||
#.#...#...#.#.#...#...#...#.#.....#...#...#...#...#...............#.....#...#...#...........#.#...#...#.#.#...........#.#...#...#.#.#.......#
|
||||
#.#.#####.#.#.###.#.#####.#.#.#####.#.###########.###.#######.###.#########.#.###############.#.#.###.#.#.#########.#.#.#.#.###.###.###.###.#
|
||||
#...#.....#.#.....#.....#.#.#.#...#.#.............#...#...#...#.#.#.........#.........#.........#...#.#...........#.#.#.....#...#...#.....#.#
|
||||
#.#####.#.#.###.#######.###.###.#.###############.#.###.#.#.#.#.#.#.#.###############.###########.###.#.#####.#####.#.#####.#####.###.#.###.#
|
||||
#.#.....#.#...#...#...#...#.....#.....#.........#.#...#.#...#...#...#.#.............#...#.............#.#...#.....#.#.......#...#.#.#.#...#.#
|
||||
#.#.#####.#.#.###.#.#.###.###########.#.#######.#####.#.#####.###.#.#.#.###########.###.#.#####.###.#####.#.#.###.#.#########.#.#.#.#.#.#.#.#
|
||||
#...#...........#.#.#.#.#...........#...#...#.#.......#.#.#.......#.#...#.........#.....#.....#...#...#...#...#.#...#.........#.#.#.#.#.#...#
|
||||
#####.#.#.#.###.#.#.#.#.#.#.###.###.#####.#.#.#########.#.#.#######.###.#####.###.###########.###.###.#.#######.#.###.#########.#.#.#.#.#####
|
||||
#.............#...#.#...#...#.#.#...#.....#...#.........#.........#...#.....#...#...#...#...#...#.#.....#.....#.#.#...#.......#...#.#...#...#
|
||||
#.#.#####.#.###.###.#########.#.#.#####.#######.###.#############.###.###.#.#####.#.#.#.#.#.###.#.#####.#.###.#.#.#.###.#.#######.#.###.###.#
|
||||
#.#.#.....#.#...#.............#.#.#...#...#.......#.....#.......#.#.#.....#.......#.#.#...#.#...#.#...#.#.....#...#.#...#.#.....#.....#.#...#
|
||||
#.###.###.#.#.###.#.###.#.#####.#.#.#.###.#.###########.#.#####.#.#.#############.#.#.#####.#.###.#.#.###.#.###.###.#.###.#.###.#.#.###.#.#.#
|
||||
#...#.#.#.#...#.....#...#.#.....#...#.#...#.#...#.....#.#...#...#...#.....#.......#.....#.#...#...#.#.....#...#...#.#.#...#.#.#...#...#...#.#
|
||||
###.#.#.#.#.#########.###.#.#########.#.#.#.###.#.###.#.###.#.#####.#.###.#.###.###.###.#.#####.###.#########.#####.#.#####.#.###.###.#.#.#.#
|
||||
#...#...#.#.#.......#.#.......#.....#.#.#.#...#.#...#.....#.#...#.....#...#...#.....#...#.#.........#.......#.....#.#.#.....#.....#.#...#...#
|
||||
#.###.###.#.###.###.#.#.#####.#.###.#.#.#.###.#.###.#######.###.#############.#######.###.#.#########.#####.#####.#.#.#.#####.###.#.#.#.#.###
|
||||
#...#.#...#...#...#...#.#...#.#...#.....#.#.#.#...#.......#...#...........#...#.......#...#.#...#.........#.....#.....#.......#.....#.#.#.#.#
|
||||
#.#.#.#.#####.###.#####.#.#.#.###########.#.#.###.#######.###.#######.###.#.#########.#.###.#.#.#.#########.#.#######.###.#.#####.#.#.#.#.#.#
|
||||
#.#...#.....#...#...#.....#.#.......#...#...#...#.......#.....#.......#...#.......#...#.....#.#.#...#.......#.......#.....#.....#...#.....#.#
|
||||
#.#######.#####.#.#.#######.#######.#.#.#######.#.#####.#############.#.#########.#.#.#####.#.#.###.#.#########.#.###.###.#.###.#.#####.#.#.#
|
||||
#.#.....#.#...#.#.#.#...#...#.....#...#.#.......#.#.....#.............#.........#.#...#...#...#...#.#...#.......#...#.#...#.#...#.......#...#
|
||||
#.###.###.#.#.#.#.#.#.#.#####.###.#####.#.#######.#####.#####.#.#.#.#.#######.###.#.###.#.###.#.#.#.###.#.###.#.###.#.#.#.#.#.#########.#.#.#
|
||||
#...#...#.#.#.#.#.#...#...#...#.#...#...#...#.#...#...#.#.....#...#.#.#.#.....#...#...#.#.......#.#...#.#...#.#.....#.#.#...#.......#.#.....#
|
||||
###.###.#.#.#.#.#.#######.#.###.#.###.#####.#.#.#.#.#.#.#.#####.###.#.#.#.#.###.###.#.#.#########.###.#.###.#.#.#.###.#####.#######.#.###.#.#
|
||||
#.#...#.#...#...#.#.....#...........#.....#.....#...#.#.#.#.#...#...#...#.#.#...#...#.......#.....#...#...#.#...#...#.....#.#.#.....#.....#.#
|
||||
#.#.#.#.#####.###.#####.###########.###.###.#.###.#.#.#.#.#.#.#####.###.#.###.###.###########.#########.#.#.#######.#####.#.#.#.#####.#####.#
|
||||
#...#.#...#.....#...#.....#.....#.....#.#...#.#.#...#.#.............#...#.....#.#.....#.#.....#.........#.#.#.....#.......#...#.#.....#.....#
|
||||
#.#.#.#.###.###.###.#.#####.###.#.###.#.#.###.#.#####.#####.###################.#####.#.#.#####.#######.###.#.#.###############.#.###.#.#####
|
||||
#.#.#.#...#...#.#.....#...#...#...#...#...#.......#...#.....#.#...........#.........#.#.#.#.....#.......#...#.#...............#.#.#...#.#...#
|
||||
#.#.#.###.###.#.#.#####.#.###.#####.###############.###.###.#.#.#.#####.###.#######.#.#.#.###.#######.###.#########.#########.#.#.#.###.###.#
|
||||
#.#.#...#.....#...#.....#.....#...#.......#.......#.#.........#.#.........#.#.....#...#.#...#...#...#.#.#.......#...#.......#...#.#...#.#...#
|
||||
#.#####.#.#####.###.#.#########.#########.#.#####.#.#.#####.#.#.###.#####.#.#.#.#.#####.###.#.#.#.#.#.#.#.#.#.#.#.###.###########.###.#.#.#.#
|
||||
#.#.....#.#...#...#...#.#...#...........#.#.....#...#...#...#.#...#.....#...#.#.#.......#...#.#...#.#...#.#.#...#...#.#.........#.#.#.#...#.#
|
||||
#.#.#######.#.###.###.#.#.#.#.#######.#.#.#####.#######.#.###.###.#####.#######.#######.#.###.#####.#.###.#.#.#.###.#.#.#######.#.#.#.#####.#
|
||||
#...#.......#.#.....#.#...#.#.#.#...#.#.#.....#.....#.#...#...#.#...............#...#...#.#.#...#...#.#.....#.....#.#...#.....#...#.#.....#.#
|
||||
#.#####.#####.#####.#.#.#.#.#.#.#.#.#.#.#####.#.###.#.#.###.###.#####.#########.#.#.#####.#.#.#.#.###.#.###.#####.#.#.###.#.#.#####.###.###.#
|
||||
#.......#...#...#...#.#...#.#.#.#.#.#.#...#...#...#.#.....#...#.#...#.......#.....#...#...#.....#...#.#...#.....#.#.#.....#.#.....#...#.#...#
|
||||
#########.#.###.#####.#.###.#.#.#.#.#.#####.#######.#.###.###.#.#.#.#.#.###.#.###.###.#.###.#######.#.###.#####.#.#.#######.#####.#.#.#.#.###
|
||||
#...#.....#...#...#...#.#.#.....#.#...#...........#.#...#...#...#.#...#.#...#.#.....#.#.#.#.#.....#.#.....#.....#.#...#...........#.#.#.....#
|
||||
#.#.#.#####.#.###.#.###.#.#.#####.###.#.#.###.#.#.#.###.#.###.###.#####.###.#.#.#.###.#.#.#.###.#.#.###.#.#.#.###.###.#######.#.#.#.#.#.###.#
|
||||
#.#.#.#...#.#...#.#.#.#.#...#.....#...#.....#.#.#.#...#.#...#.#...#...#...#.#.#.#...#.#.#...#...#.#...#.#.#...#.#...#.#.......#.....#.#...#.#
|
||||
#.###.#.###.#####.#.#.#.###.#.#############.#.#.#.###.###.#.#.#.#####.###.#.#.#.###.#.#.#.###.#.#####.#.#.#.#.#.###.#.#.#####.#######.###.#.#
|
||||
#.....#...#.#...#...#.#.#...#...#...#...#...#...#...#...#.#...#.......#...#...#...#...#.#.#...#.#...#.#.#.#.#.#...#.#...#...#.....#...#...#.#
|
||||
#.#######.#.#.#.#####.#.#.#.###.#.#.#.#.#.###.#####.###.###########.###.#########.#####.#.#.###.#.#.#.###.###.#.#.#.#.###.#.#####.#####.###.#
|
||||
#.........#...#.......#.#.#...#...#.#.#...#.....#.....#.....#...#...#...#.......#.......#...#.....#.#...#.....#.#.#.#.#...#.......#...#.....#
|
||||
#####.#######.###.###.#.#.###.#####.#.#####.###.#####.#####.#.#.#.###.###.#####.#############.#####.#.#.#######.###.#.###.#####.#.#.#.#####.#
|
||||
#...#.#.....#...#...#.#.#.#...#...#.#.....#...#.....#.......#.#...#...#.......#.#...........#...#.#.#.#.......#.....#...#.....#.#...#.....#.#
|
||||
#.#.#.#.###.#######.###.#.#####.#.#.#####.#.#######.#######.#.#####.###.#####.###.#####.###.###.#.#.#####.###.#.#######.#####.#.#######.#.#.#
|
||||
#.#...#.#...#.....#.#...#.......#.#.......#.#.....#.....#...#.#...#.#.....#...#.........#...#...#.#.......#...#.....#.........#...#...#.#.#.#
|
||||
#.#####.#.###.###.#.#.###########.###########.#.#.#.#.###.###.#.#.#.#####.#.###.#####.#.#.###.###.#.###############.#.#######.#####.#.###.#.#
|
||||
#.....#.#.#...#.....#...........#.......#.....#...#.#...#...#.#.#.#...#...#.....#...#.#.#...#.#.....#.......#.....#.#.#...#...#...#.#.#...#.#
|
||||
#####.#.#.###.#.###.###.#.#####.#.#####.###.###.###.#.#.###.#.###.#.#.#.#.#######.#.###.###.#.#.#####.#####.#.#.#.#.###.#.#.###.#.#.#.#.#.#.#
|
||||
#...#.#.#.....#.#.........................................#.#...#...#...#.....#...#.....#...#.#.#...#.#...#.#.#.#.#...........#.#...#...#.#.#
|
||||
#.#.#.#.#####.###.#.###.#.###.#.#.#.#########.#.#.#.#.###.#.###.###.###.#####.#.#########.###.#.###.#.#.#.#.#.#.#####.#.#.#####.#########.#.#
|
||||
#.#...#.#.....#...#.....#.#...#...#.........#.#.....#...#...#...#.....#.....#.#...#.....#.....#.#...#...#.#...#.....#...#.#.....#.......#...#
|
||||
#.#####.#.#####.###.#.#.#.#########.###.#####.#.#.###.###.###.###.#.#######.#.###.#.#.#########.#.#.###.#.#######.#.#####.#.#####.###.###.###
|
||||
#.....#.#.....#.....#.#.#...#.....#...#.....#...#.......#.#...#...#.........#.#.#.#.#.........#...#.....#.....#...#...#.#.#...#.....#...#...#
|
||||
#####.#.###########.#.#.#.#.#.###.###.#####.###.#.###.#.###.#####.#.#.#.#####.#.#.#########.#.#.###.###.#.#.###.#####.#.#.###.#.#######.###.#
|
||||
#.....#...#.......#.#.#...#.#...#.#...#.#...#...#...#.#.#...#.....#.#.#.....#.#.#.........#.#...#.......#...............#.....#.#...#...#...#
|
||||
#.#######.#.#.###.#.#.#.#.#.###.#.#.###.#.###.#.#.#.#.#.#.#####.#.#.###.###.#.#.#########.#.###.#.###.#.###.#.###.#.###.#########.#.#.#.#.###
|
||||
#.#.......#.#...#...#...#.#...#.#.#...#.#.....#...#.#.#.........#.#.......#.#.#...........................#.#...#.#.........#.....#...#.#.#.#
|
||||
#.#.#######.#.#.#####.#.#.#.#.#.#.###.#.#######.#.#.#.#.###########.###.###.#.#.###.#.#########.#######.#.#.###.#.#.#######.#.#####.#####.#.#
|
||||
#.#.#.......#.....#...#.#.#.#...#...............#.#.#.............#...#.#...#.#...#.#.#.......#.........#.......#.#.....#.....#.....#...#.#.#
|
||||
#.#.#.#######.###.#####.#.#.#######.#.#####.###.#.#.#.#.#########.#.#.#.#.###.###.#.#.#.#####.#.#####.#####.###.#.#.###.#############.#.#.#.#
|
||||
#S#...........#.........#.........#.........#.........#.............#.....#.......#.#.......#.......#...........#.....#...............#.....#
|
||||
#############################################################################################################################################
|
||||
70
17/17-1.py
Normal file
70
17/17-1.py
Normal file
@@ -0,0 +1,70 @@
|
||||
#!/usr/bin/env python3
|
||||
# -*- coding: utf-8 -*-
|
||||
from sys import exc_info
|
||||
|
||||
from time import time
|
||||
|
||||
start_time = time()
|
||||
|
||||
ex_input = """Register A: 729
|
||||
Register B: 0
|
||||
Register C: 0
|
||||
Program: 0,1,5,4,3,0
|
||||
"""
|
||||
|
||||
real_input = """Register A: 25358015
|
||||
Register B: 0
|
||||
Register C: 0
|
||||
Program: 2,4,1,1,7,5,0,3,4,7,1,6,5,5,3,0
|
||||
"""
|
||||
|
||||
def read_input(input_var:str)->tuple[int, int, int, list[int]]:
|
||||
inp = input_var.split("\n")
|
||||
a, b, c = int(inp[0].split(':')[1]), int(inp[1].split(':')[1]), int(inp[2].split(':')[1])
|
||||
program = list(map(int, inp[3].split(':')[1].split(",")))
|
||||
return a, b, c, program
|
||||
|
||||
def do(instruction:int, operand:int, point:int):
|
||||
global ra, rb, rc, out
|
||||
if operand in [0, 1, 2, 3]:
|
||||
ope = operand
|
||||
elif operand == 4:
|
||||
ope = ra
|
||||
elif operand == 5:
|
||||
ope = rb
|
||||
elif operand == 6:
|
||||
ope = rc
|
||||
match instruction:
|
||||
case 0:
|
||||
ra = int(ra/(2**ope))
|
||||
case 1:
|
||||
rb = rb ^ operand
|
||||
case 2:
|
||||
rb = ope % 8
|
||||
case 3:
|
||||
if ra != 0:
|
||||
point = ope-2
|
||||
case 4:
|
||||
rb = rb ^ rc
|
||||
case 5:
|
||||
out.append(f"{ope%8}")
|
||||
case 6:
|
||||
rb = int(ra/(2**ope))
|
||||
case 7:
|
||||
rc = int(ra/(2**ope))
|
||||
case _:
|
||||
pass
|
||||
return point
|
||||
|
||||
if __name__ == "__main__":
|
||||
out = []
|
||||
# ra, rb, rc, prog = read_input(ex_input)
|
||||
ra, rb, rc, prog = read_input(real_input)
|
||||
print(ra, rb, rc, prog)
|
||||
pointer = 0
|
||||
while pointer < len(prog):
|
||||
pointer = do(prog[pointer], prog[pointer+1], pointer)
|
||||
pointer += 2
|
||||
print(out)
|
||||
print(",".join(out))
|
||||
print(f'Runtime: {time()-start_time:.5f} s')
|
||||
104
17/17-2.py
Normal file
104
17/17-2.py
Normal file
@@ -0,0 +1,104 @@
|
||||
#!/usr/bin/env python3
|
||||
# -*- coding: utf-8 -*-
|
||||
from copy import deepcopy
|
||||
from time import time
|
||||
|
||||
|
||||
start_time = time()
|
||||
|
||||
ex_p1_input = """Register A: 729
|
||||
Register B: 0
|
||||
Register C: 0
|
||||
Program: 0,1,5,4,3,0
|
||||
"""
|
||||
|
||||
ex_p2_input = """Register A: 2024
|
||||
Register B: 0
|
||||
Register C: 0
|
||||
Program: 0,3,5,4,3,0
|
||||
"""
|
||||
|
||||
real_input = """Register A: 25358015
|
||||
Register B: 0
|
||||
Register C: 0
|
||||
Program: 2,4,1,1,7,5,0,3,4,7,1,6,5,5,3,0
|
||||
"""
|
||||
|
||||
real_erik = """Register A: 25358015
|
||||
Register B: 0
|
||||
Register C: 0
|
||||
Program: 2,4,1,2,7,5,4,5,1,3,5,5,0,3,3,0
|
||||
"""
|
||||
|
||||
def read_input(input_var:str)->list[int]:
|
||||
inp = input_var.split("\n")
|
||||
program = list(map(int, inp[3].split(':')[1].split(",")))
|
||||
return program
|
||||
|
||||
def do(instruction:int, operand:int, point:int):
|
||||
global ra, rb, rc, out
|
||||
if operand in [0, 1, 2, 3]:
|
||||
ope = operand
|
||||
elif operand == 4:
|
||||
ope = ra
|
||||
elif operand == 5:
|
||||
ope = rb
|
||||
elif operand == 6:
|
||||
ope = rc
|
||||
match instruction:
|
||||
case 0:
|
||||
ra = int(ra/(2**ope))
|
||||
case 1:
|
||||
rb = rb ^ operand
|
||||
case 2:
|
||||
rb = ope % 8
|
||||
case 3:
|
||||
if ra != 0:
|
||||
point = ope-2
|
||||
case 4:
|
||||
rb = rb ^ rc
|
||||
case 5:
|
||||
#print(ra,rb,rc,ope,ope%8)
|
||||
out.append(ope%8)
|
||||
case 6:
|
||||
rb = int(ra/(2**ope))
|
||||
case 7:
|
||||
rc = int(ra/(2**ope))
|
||||
case _:
|
||||
pass
|
||||
return point
|
||||
|
||||
if __name__ == "__main__":
|
||||
#prog = read_input(ex_p1_input)
|
||||
prog = read_input(ex_p2_input)
|
||||
#prog = read_input(real_input)
|
||||
#prog = read_input(real_erik)
|
||||
count = 0
|
||||
sol_list = [""]
|
||||
for x in range(2,len(prog)+2,2):
|
||||
new_list = []
|
||||
for i in sol_list:
|
||||
for o1 in range(8):
|
||||
for o2 in range(8):
|
||||
count += 1
|
||||
i_str=f"{i}{o1}{o2}"
|
||||
ra_a = int(i_str, 8)
|
||||
ra = int(i_str, 8)
|
||||
rc, rb = 0, 0
|
||||
out = []
|
||||
pointer = 0
|
||||
while pointer < len(prog):
|
||||
pointer = do(prog[pointer], prog[pointer+1], pointer)
|
||||
pointer += 2
|
||||
# Program: 2,4,1,1,7,5,0,3,4,7,1,6,5,5,3,0
|
||||
if len(out) == x and out[-x:] == prog[-x:]:
|
||||
new_list.append(f"{ra_a:o}")
|
||||
#print(f"Prog: {prog}")
|
||||
print(f"dec:{ra_a}, oct:{ra_a:o}, out:{out}")
|
||||
sol_list = deepcopy(new_list)
|
||||
integer_liste = [int(number, 8) for number in sol_list]
|
||||
print()
|
||||
print(f"Prog: {prog}")
|
||||
print(f"Solution Part2: {min(integer_liste)}")
|
||||
print(f"Checked Numbers: {count}")
|
||||
print(f'Runtime: {time()-start_time:.5f} s')
|
||||
6
17/tt
Normal file
6
17/tt
Normal file
@@ -0,0 +1,6 @@
|
||||
Dez: 56 HEX: 38 OCT:70 BIN:111000
|
||||
Dez: 3622 HEX: E26 OCT:7046 BIN:111000100110
|
||||
Dez: 3606 HEX: E16 OCT:7026 BIN:111000010110
|
||||
Dez: 230818 HEX: 385A2 OCT:702642 BIN:111000010110100010
|
||||
Dez: 14772355 HEX:E16883 OCT:70264203 BIN:111000010110100010000011
|
||||
Dez: 14772362 HEX:E1688A OCT:70264212 BIN:111000010110100010001010
|
||||
80
18/18-1.py
Normal file
80
18/18-1.py
Normal file
@@ -0,0 +1,80 @@
|
||||
#!/usr/bin/env python3
|
||||
# -*- coding: utf-8 -*-
|
||||
|
||||
file = "./input.txt"
|
||||
XY_DIMENSION = 70
|
||||
FIRST_BYTES = 1024
|
||||
|
||||
|
||||
#file = "./ex.txt"
|
||||
#XY_DIMENSION = 6
|
||||
#FIRST_BYTES = 12
|
||||
|
||||
from time import time
|
||||
start_time = time()
|
||||
|
||||
def make_empty_grid(dimension:int)->list[list[str]]:
|
||||
result = []
|
||||
for _ in range(dimension+1):
|
||||
result.append(["." for _ in range(dimension+1)])
|
||||
return result
|
||||
|
||||
def print_grid(f):
|
||||
for r in f:
|
||||
for s in r:
|
||||
if s == 0:
|
||||
print(".", end="")
|
||||
else:
|
||||
print(s, end="")
|
||||
print()
|
||||
|
||||
def fill_grid(gri:list[list[str]], ma:list[list[int]], filler:str)->list[list[str]]:
|
||||
for m in ma:
|
||||
x , y = m[0],m[1]
|
||||
gri[y][x] = filler
|
||||
return gri
|
||||
|
||||
def read_input(input_file:str, ) -> list[list[int]]:
|
||||
out = []
|
||||
f = open(input_file, "r")
|
||||
for line in f:
|
||||
line = line.strip()
|
||||
if line == "":
|
||||
continue
|
||||
else:
|
||||
out.append(list(map(int,line.split(','))))
|
||||
f.close()
|
||||
return out
|
||||
from collections import deque
|
||||
|
||||
def shortest_path(array, start, end):
|
||||
zeilen, spalten = len(array), len(array[0])
|
||||
visited = set()
|
||||
queue = deque([(start, [start])])
|
||||
while queue:
|
||||
(x, y), pfad = queue.popleft()
|
||||
if (x, y) == end:
|
||||
return len(pfad) - 1, pfad
|
||||
for dx, dy in [(0, 1), (1, 0), (0, -1), (-1, 0)]:
|
||||
nx, ny = x + dx, y + dy
|
||||
if 0 <= nx < zeilen and 0 <= ny < spalten and array[nx][ny] == '.' and (nx, ny) not in visited:
|
||||
queue.append(((nx, ny), pfad + [(ny, nx)]))
|
||||
visited.add((nx, ny))
|
||||
|
||||
return -1, [] # Kein Pfad gefunden
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
grid = make_empty_grid(XY_DIMENSION)
|
||||
byte_list = read_input(file)[:FIRST_BYTES]
|
||||
#print_grid(field)
|
||||
#print(read_input(file))
|
||||
fill_grid(grid,byte_list,"#")
|
||||
print_grid(grid)
|
||||
|
||||
sol = shortest_path(grid,(0,0),(XY_DIMENSION,XY_DIMENSION))
|
||||
print(f"Shortest Path Length: {sol[0]}")
|
||||
print_grid(fill_grid(grid,sol[1],"O"))
|
||||
|
||||
|
||||
print(f'Runtime: {time()-start_time:.4f} s')
|
||||
135
18/18-2-anim.py
Normal file
135
18/18-2-anim.py
Normal file
@@ -0,0 +1,135 @@
|
||||
#!/usr/bin/env python3
|
||||
# -*- coding: utf-8 -*-
|
||||
import numpy as np
|
||||
from PIL import Image, ImageDraw, ImageFont
|
||||
import cv2
|
||||
from time import time
|
||||
from copy import deepcopy
|
||||
start_time = time()
|
||||
|
||||
file = "./input.txt"
|
||||
XY_DIMENSION = 70
|
||||
FIRST_BYTES = 1024
|
||||
|
||||
#file = "./ex.txt"
|
||||
#XY_DIMENSION = 6
|
||||
#FIRST_BYTES = 12
|
||||
|
||||
|
||||
out_file_name = "solution_10"
|
||||
GROW_FACTOR = 10
|
||||
|
||||
fourcc = cv2.VideoWriter_fourcc(*'mp4v')
|
||||
fps = 30
|
||||
frame_size = ((XY_DIMENSION+1) * GROW_FACTOR, (XY_DIMENSION + 1) * GROW_FACTOR)
|
||||
out_mp4 = cv2.VideoWriter(f'./{out_file_name}.mp4', fourcc, fps, frame_size)
|
||||
gif_anim=[]
|
||||
|
||||
|
||||
|
||||
def array_to_image(ar):
|
||||
global GROW_FACTOR
|
||||
# Konvertiere das Array in ein NumPy-Array
|
||||
np_array = np.array(ar)
|
||||
# Erstelle ein leeres RGB-Bild
|
||||
height, width = np_array.shape
|
||||
image = Image.new('RGB', (width * GROW_FACTOR, height * GROW_FACTOR))
|
||||
# Fülle das Bild mit Pixeln basierend auf den Array-Werten
|
||||
for y in range(height):
|
||||
for x in range(width):
|
||||
if np_array[y, x] == "#":
|
||||
color = (200, 0, 0)
|
||||
elif np_array[y, x] == "O":
|
||||
color = (50, 200,50)
|
||||
else:
|
||||
color = (0,0,0) # Standardfarbe schwarz
|
||||
for dy in range(GROW_FACTOR):
|
||||
for dx in range(GROW_FACTOR):
|
||||
image.putpixel((x * GROW_FACTOR + dx, y * GROW_FACTOR + dy), color)
|
||||
|
||||
return image
|
||||
|
||||
def add_text_to_image(image, num):
|
||||
draw = ImageDraw.Draw(image)
|
||||
font = ImageFont.truetype("arial.ttf", 20) # Wählen Sie eine Schriftart und Größe
|
||||
draw.text((5,5), f"{num:04d}", fill=(255, 255, 255), font=font) # Weißer Text
|
||||
return image
|
||||
|
||||
def pil_to_cv2(pil_image):
|
||||
return cv2.cvtColor(np.array(pil_image), cv2.COLOR_RGB2BGR)
|
||||
|
||||
|
||||
def make_empty_grid(dimension:int)->list[list[str]]:
|
||||
result = []
|
||||
for _ in range(dimension+1):
|
||||
result.append(["." for _ in range(dimension+1)])
|
||||
return result
|
||||
|
||||
def print_grid(f):
|
||||
for r in f:
|
||||
for s in r:
|
||||
if s == 0:
|
||||
print(".", end="")
|
||||
else:
|
||||
print(s, end="")
|
||||
print()
|
||||
|
||||
def fill_grid(gri:list[list[str]], ma:list[list[int]], filler:str)->list[list[str]]:
|
||||
result = deepcopy(gri)
|
||||
for m in ma:
|
||||
x , y = m[0],m[1]
|
||||
result[y][x] = filler
|
||||
return result
|
||||
|
||||
def read_input(input_file:str, ) -> list[list[int]]:
|
||||
out = []
|
||||
f = open(input_file, "r")
|
||||
for line in f:
|
||||
line = line.strip()
|
||||
if line == "":
|
||||
continue
|
||||
else:
|
||||
out.append(list(map(int,line.split(','))))
|
||||
f.close()
|
||||
return out
|
||||
from collections import deque
|
||||
|
||||
def shortest_path(array, start, end):
|
||||
zeilen, spalten = len(array), len(array[0])
|
||||
visited = set()
|
||||
queue = deque([(start, [start])])
|
||||
while queue:
|
||||
(x, y), pfad = queue.popleft()
|
||||
if (x, y) == end:
|
||||
return len(pfad) - 1, pfad
|
||||
for dx, dy in [(0, 1), (1, 0), (0, -1), (-1, 0)]:
|
||||
nx, ny = x + dx, y + dy
|
||||
if 0 <= nx < zeilen and 0 <= ny < spalten and array[nx][ny] == '.' and (nx, ny) not in visited:
|
||||
queue.append(((nx, ny), pfad + [(ny, nx)]))
|
||||
visited.add((nx, ny))
|
||||
|
||||
return -1, [] # Kein Pfad gefunden
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
grid = make_empty_grid(XY_DIMENSION)
|
||||
corrupted = read_input(file)
|
||||
for i in range(FIRST_BYTES, len(corrupted)):
|
||||
g = fill_grid(grid,corrupted[:i],"#")
|
||||
sp = shortest_path(g,(0,0),(XY_DIMENSION,XY_DIMENSION))
|
||||
g_with_path = fill_grid(g, sp[1], "O")
|
||||
|
||||
img = array_to_image(g_with_path)
|
||||
gif_anim.append(img)
|
||||
cv2_image = pil_to_cv2(img)
|
||||
out_mp4.write(cv2_image)
|
||||
if sp[0] == -1:
|
||||
print(f"First Blocking Field: {corrupted[:i][-1]}")
|
||||
break
|
||||
|
||||
out_mp4.release()
|
||||
gif_anim[0].save(f'./{out_file_name}.gif', save_all=True, append_images=gif_anim[1:],
|
||||
optimize=False, duration=30, loop=0)
|
||||
|
||||
|
||||
print(f'Runtime: {time()-start_time:.4f} s')
|
||||
149
18/18-2-anim2.py
Normal file
149
18/18-2-anim2.py
Normal file
@@ -0,0 +1,149 @@
|
||||
#!/usr/bin/env python3
|
||||
# -*- coding: utf-8 -*-
|
||||
import numpy as np
|
||||
from PIL import Image, ImageDraw, ImageFont
|
||||
import cv2
|
||||
from time import time
|
||||
from copy import deepcopy
|
||||
start_time = time()
|
||||
|
||||
file = "./input.txt"
|
||||
XY_DIMENSION = 70
|
||||
FIRST_BYTES = 1024
|
||||
|
||||
#file = "./ex.txt"
|
||||
#XY_DIMENSION = 6
|
||||
#FIRST_BYTES = 12
|
||||
|
||||
|
||||
out_file_name = "solution_10_2"
|
||||
GROW_FACTOR = 10
|
||||
|
||||
fourcc = cv2.VideoWriter_fourcc(*'mp4v')
|
||||
fps = 30
|
||||
frame_size = ((XY_DIMENSION+1) * GROW_FACTOR, (XY_DIMENSION + 1) * GROW_FACTOR)
|
||||
out_mp4 = cv2.VideoWriter(f'./{out_file_name}.mp4', fourcc, fps, frame_size)
|
||||
gif_anim=[]
|
||||
|
||||
|
||||
|
||||
def array_to_image(ar):
|
||||
global GROW_FACTOR
|
||||
# Konvertiere das Array in ein NumPy-Array
|
||||
np_array = np.array(ar)
|
||||
# Erstelle ein leeres RGB-Bild
|
||||
height, width = np_array.shape
|
||||
image = Image.new('RGB', (width * GROW_FACTOR, height * GROW_FACTOR))
|
||||
# Fülle das Bild mit Pixeln basierend auf den Array-Werten
|
||||
for y in range(height):
|
||||
for x in range(width):
|
||||
if ist_zahl(np_array[y, x]):
|
||||
r = np_array[y,x]
|
||||
color = (135+(int(r)*4), 0, 100)
|
||||
#print(int(r)+100)
|
||||
elif np_array[y, x] == "#":
|
||||
color = (255, 0, 0)
|
||||
elif np_array[y, x] == "O":
|
||||
color = (50, 200,50)
|
||||
else:
|
||||
color = (0,0,0) # Standardfarbe schwarz
|
||||
for dy in range(GROW_FACTOR):
|
||||
for dx in range(GROW_FACTOR):
|
||||
image.putpixel((x * GROW_FACTOR + dx, y * GROW_FACTOR + dy), color)
|
||||
return image
|
||||
|
||||
def ist_zahl(zelle):
|
||||
return np.issubdtype(zelle.dtype, np.number) or (isinstance(zelle.item(), str) and zelle.item().isdigit())
|
||||
|
||||
def add_text_to_image(image, num):
|
||||
draw = ImageDraw.Draw(image)
|
||||
font = ImageFont.truetype("arial.ttf", 20) # Wählen Sie eine Schriftart und Größe
|
||||
draw.text((5,5), f"{num:04d}", fill=(255, 255, 255), font=font) # Weißer Text
|
||||
return image
|
||||
|
||||
def pil_to_cv2(pil_image):
|
||||
return cv2.cvtColor(np.array(pil_image), cv2.COLOR_RGB2BGR)
|
||||
|
||||
|
||||
def make_empty_grid(dimension:int)->list[list[str]]:
|
||||
result = []
|
||||
for _ in range(dimension+1):
|
||||
result.append(["." for _ in range(dimension+1)])
|
||||
return result
|
||||
|
||||
def print_grid(f):
|
||||
for r in f:
|
||||
for s in r:
|
||||
print(s, end="")
|
||||
print()
|
||||
|
||||
def fill_grid(gri:list[list[str]], ma:list[list[int]], filler:str)->list[list[str]]:
|
||||
result = deepcopy(gri)
|
||||
for m in ma:
|
||||
x , y = m[0],m[1]
|
||||
result[y][x] = filler
|
||||
return result
|
||||
|
||||
def fill_grid_2(gri: list[list[str]], ma: list[list[int]], filler: str) -> list[list[str]]:
|
||||
result = deepcopy(gri)
|
||||
# Fülle die ersten Einträge mit dem filler
|
||||
for j, m in enumerate(ma[:-30]):
|
||||
x, y = m[0], m[1]
|
||||
result[y][x] = filler
|
||||
# Fülle die letzten 155 Einträge mit Zahlen von 1 bis 155
|
||||
for j, m in enumerate(ma[-30:], start=1):
|
||||
x, y = m[0], m[1]
|
||||
result[y][x] = str(j)
|
||||
return result
|
||||
|
||||
def read_input(input_file:str, ) -> list[list[int]]:
|
||||
out = []
|
||||
f = open(input_file, "r")
|
||||
for line in f:
|
||||
line = line.strip()
|
||||
if line == "":
|
||||
continue
|
||||
else:
|
||||
out.append(list(map(int,line.split(','))))
|
||||
f.close()
|
||||
return out
|
||||
from collections import deque
|
||||
|
||||
def shortest_path(array, start, end):
|
||||
zeilen, spalten = len(array), len(array[0])
|
||||
visited = set()
|
||||
queue = deque([(start, [start])])
|
||||
while queue:
|
||||
(x, y), pfad = queue.popleft()
|
||||
if (x, y) == end:
|
||||
return len(pfad) - 1, pfad
|
||||
for dx, dy in [(0, 1), (1, 0), (0, -1), (-1, 0)]:
|
||||
nx, ny = x + dx, y + dy
|
||||
if 0 <= nx < zeilen and 0 <= ny < spalten and array[nx][ny] == '.' and (nx, ny) not in visited:
|
||||
queue.append(((nx, ny), pfad + [(ny, nx)]))
|
||||
visited.add((nx, ny))
|
||||
return -1, [] # Kein Pfad gefunden
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
grid = make_empty_grid(XY_DIMENSION)
|
||||
corrupted = read_input(file)
|
||||
for i in range(FIRST_BYTES, len(corrupted)):
|
||||
g = fill_grid_2(grid,corrupted[:i],"#")
|
||||
sp = shortest_path(g,(0,0),(XY_DIMENSION,XY_DIMENSION))
|
||||
g_with_path = fill_grid(g, sp[1], "O")
|
||||
|
||||
img = array_to_image(g_with_path)
|
||||
gif_anim.append(img)
|
||||
cv2_image = pil_to_cv2(img)
|
||||
out_mp4.write(cv2_image)
|
||||
if sp[0] == -1:
|
||||
print(f"First Blocking Field: {corrupted[:i][-1]}")
|
||||
break
|
||||
|
||||
out_mp4.release()
|
||||
gif_anim[0].save(f'./{out_file_name}.gif', save_all=True, append_images=gif_anim[1:],
|
||||
optimize=False, duration=30, loop=0)
|
||||
|
||||
|
||||
print(f'Runtime: {time()-start_time:.4f} s')
|
||||
76
18/18-2.py
Normal file
76
18/18-2.py
Normal file
@@ -0,0 +1,76 @@
|
||||
#!/usr/bin/env python3
|
||||
# -*- coding: utf-8 -*-
|
||||
from copy import deepcopy
|
||||
|
||||
file = "./input.txt"
|
||||
XY_DIMENSION = 70
|
||||
FIRST_BYTES = 1024
|
||||
|
||||
|
||||
#file = "./ex.txt"
|
||||
#XY_DIMENSION = 6
|
||||
#FIRST_BYTES = 12
|
||||
|
||||
from time import time
|
||||
start_time = time()
|
||||
|
||||
def make_empty_grid(dimension:int)->list[list[str]]:
|
||||
result = []
|
||||
for _ in range(dimension+1):
|
||||
result.append(["." for _ in range(dimension+1)])
|
||||
return result
|
||||
|
||||
def print_grid(f):
|
||||
for r in f:
|
||||
for s in r:
|
||||
if s == 0:
|
||||
print(".", end="")
|
||||
else:
|
||||
print(s, end="")
|
||||
print()
|
||||
|
||||
def fill_grid(gri:list[list[str]], ma:list[list[int]], filler:str)->list[list[str]]:
|
||||
result = deepcopy(gri)
|
||||
for m in ma:
|
||||
x , y = m[0],m[1]
|
||||
result[y][x] = filler
|
||||
return result
|
||||
|
||||
def read_input(input_file:str, ) -> list[list[int]]:
|
||||
out = []
|
||||
f = open(input_file, "r")
|
||||
for line in f:
|
||||
line = line.strip()
|
||||
if line == "":
|
||||
continue
|
||||
else:
|
||||
out.append(list(map(int,line.split(','))))
|
||||
f.close()
|
||||
return out
|
||||
from collections import deque
|
||||
|
||||
def shortest_path(array, start, end):
|
||||
zeilen, spalten = len(array), len(array[0])
|
||||
visited = set()
|
||||
queue = deque([(start, [start])])
|
||||
while queue:
|
||||
(x, y), pfad = queue.popleft()
|
||||
if (x, y) == end:
|
||||
return len(pfad) - 1, pfad
|
||||
for dx, dy in [(0, 1), (1, 0), (0, -1), (-1, 0)]:
|
||||
nx, ny = x + dx, y + dy
|
||||
if 0 <= nx < zeilen and 0 <= ny < spalten and array[nx][ny] == '.' and (nx, ny) not in visited:
|
||||
queue.append(((nx, ny), pfad + [(ny, nx)]))
|
||||
visited.add((nx, ny))
|
||||
|
||||
return -1, [] # Kein Pfad gefunden
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
grid = make_empty_grid(XY_DIMENSION)
|
||||
corrupted = read_input(file)
|
||||
for i in range(FIRST_BYTES, len(corrupted)):
|
||||
if shortest_path(fill_grid(grid,corrupted[:i],"#"),(0,0),(XY_DIMENSION,XY_DIMENSION))[0] == -1:
|
||||
print(f"First Blocking Field: {corrupted[:i][-1]}")
|
||||
break
|
||||
print(f'Runtime: {time()-start_time:.4f} s')
|
||||
25
18/ex.txt
Normal file
25
18/ex.txt
Normal file
@@ -0,0 +1,25 @@
|
||||
5,4
|
||||
4,2
|
||||
4,5
|
||||
3,0
|
||||
2,1
|
||||
6,3
|
||||
2,4
|
||||
1,5
|
||||
0,6
|
||||
3,3
|
||||
2,6
|
||||
5,1
|
||||
1,2
|
||||
5,5
|
||||
2,5
|
||||
6,5
|
||||
1,4
|
||||
0,4
|
||||
6,4
|
||||
1,1
|
||||
6,1
|
||||
1,0
|
||||
0,5
|
||||
1,6
|
||||
2,0
|
||||
3450
18/input.txt
Normal file
3450
18/input.txt
Normal file
File diff suppressed because it is too large
Load Diff
BIN
18/solution_10.gif
Normal file
BIN
18/solution_10.gif
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 266 KiB |
BIN
18/solution_10_2.gif
Normal file
BIN
18/solution_10_2.gif
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 34 MiB |
BIN
18/solution_10_2.mp4
Normal file
BIN
18/solution_10_2.mp4
Normal file
Binary file not shown.
48
19/19-1-1.py
Normal file
48
19/19-1-1.py
Normal file
@@ -0,0 +1,48 @@
|
||||
#!/usr/bin/env python3
|
||||
# -*- coding: utf-8 -*-
|
||||
from functools import lru_cache
|
||||
|
||||
file = "./input.txt"
|
||||
#file = "./ex.txt"
|
||||
#file = "./input-e.txt"
|
||||
from time import time
|
||||
start_time = time()
|
||||
|
||||
def read_input(input_file:str, ) -> tuple[list[str], list[str]]:
|
||||
a = []
|
||||
d = []
|
||||
f = open(input_file, "r")
|
||||
for line in f:
|
||||
line = line.strip()
|
||||
if line == "":
|
||||
continue
|
||||
elif "," in line:
|
||||
a = line.replace(" ","").split(",")
|
||||
else:
|
||||
d.append(line)
|
||||
f.close()
|
||||
return a, d
|
||||
|
||||
@lru_cache(maxsize=None)
|
||||
def check_design(txt: str) -> bool:
|
||||
global alphabet
|
||||
if txt == "":
|
||||
return True
|
||||
for substring in alphabet:
|
||||
if txt.startswith(substring):
|
||||
remaining = txt[len(substring):]
|
||||
if check_design(remaining):
|
||||
return True
|
||||
return False
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
alphabet, designs = read_input(file)
|
||||
sol = 0
|
||||
for i, design in enumerate(designs):
|
||||
#print(i, design)
|
||||
if check_design(design):
|
||||
sol += 1
|
||||
print(sol)
|
||||
|
||||
print(f'Runtime: {time()-start_time:.8f} s')
|
||||
58
19/19-1.py
Normal file
58
19/19-1.py
Normal file
@@ -0,0 +1,58 @@
|
||||
#!/usr/bin/env python3
|
||||
# -*- coding: utf-8 -*-
|
||||
|
||||
#file = "./input.txt"
|
||||
#file = "./ex.txt"
|
||||
file = "./input-e.txt"
|
||||
from time import time
|
||||
start_time = time()
|
||||
|
||||
def read_input(input_file:str, ) -> tuple[list[str], list[str]]:
|
||||
a = []
|
||||
d = []
|
||||
f = open(input_file, "r")
|
||||
for line in f:
|
||||
line = line.strip()
|
||||
if line == "":
|
||||
continue
|
||||
elif "," in line:
|
||||
a = line.replace(" ","").split(",")
|
||||
else:
|
||||
d.append(line)
|
||||
f.close()
|
||||
return a, d
|
||||
|
||||
def check_design(txt: str) -> bool:
|
||||
global alphabet
|
||||
memo = {}
|
||||
|
||||
def check(remaining: str) -> bool:
|
||||
if remaining == "":
|
||||
return True
|
||||
|
||||
if remaining in memo:
|
||||
return memo[remaining]
|
||||
|
||||
for substring in alphabet:
|
||||
if remaining.startswith(substring):
|
||||
if check(remaining[len(substring):]):
|
||||
memo[remaining] = True
|
||||
return True
|
||||
|
||||
memo[remaining] = False
|
||||
return False
|
||||
|
||||
return check(txt)
|
||||
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
alphabet, designs = read_input(file)
|
||||
sol = 0
|
||||
for i, design in enumerate(designs):
|
||||
#print(i, design)
|
||||
if check_design(design):
|
||||
sol += 1
|
||||
print(sol)
|
||||
|
||||
print(f'Runtime: {time()-start_time:.8f} s')
|
||||
49
19/19-2.py
Normal file
49
19/19-2.py
Normal file
@@ -0,0 +1,49 @@
|
||||
#!/usr/bin/env python3
|
||||
# -*- coding: utf-8 -*-
|
||||
from functools import lru_cache
|
||||
|
||||
file = "./input.txt"
|
||||
#file = "./ex.txt"
|
||||
#file = "./input-e.txt"
|
||||
from time import time
|
||||
start_time = time()
|
||||
|
||||
def read_input(input_file:str, ) -> tuple[list[str], list[str]]:
|
||||
a = []
|
||||
d = []
|
||||
f = open(input_file, "r")
|
||||
for line in f:
|
||||
line = line.strip()
|
||||
if line == "":
|
||||
continue
|
||||
elif "," in line:
|
||||
a = line.replace(" ","").split(",")
|
||||
else:
|
||||
d.append(line)
|
||||
f.close()
|
||||
return a, d
|
||||
|
||||
@lru_cache(maxsize=None)
|
||||
def count_designs(txt: str) -> int:
|
||||
global alphabet
|
||||
if txt == "":
|
||||
return 1
|
||||
total = 0
|
||||
for substring in alphabet:
|
||||
if txt.startswith(substring):
|
||||
remaining = txt[len(substring):]
|
||||
total += count_designs(remaining)
|
||||
return total
|
||||
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
alphabet, designs = read_input(file)
|
||||
sol = 0
|
||||
for i, design in enumerate(designs):
|
||||
x = count_designs(design)
|
||||
print(i, design, x)
|
||||
sol += x
|
||||
print(sol)
|
||||
|
||||
print(f'Runtime: {time()-start_time:.8f} s')
|
||||
10
19/ex.txt
Normal file
10
19/ex.txt
Normal file
@@ -0,0 +1,10 @@
|
||||
r, wr, b, g, bwu, rb, gb, br
|
||||
|
||||
brwrr
|
||||
bggr
|
||||
gbbr
|
||||
rrbgbr
|
||||
ubwu
|
||||
bwurrg
|
||||
brgr
|
||||
bbrgwb
|
||||
402
19/input-e.txt
Normal file
402
19/input-e.txt
Normal file
@@ -0,0 +1,402 @@
|
||||
bwwww, gwwug, ruw, wrbuwrbw, ugugb, rwwgw, wwb, ubgg, rubbwu, wgbuurbb, wrrbru, gwg, uuwwg, ugrrgr, uugrb, grwb, gwrb, buwrwuw, wrb, ruuggwr, rub, guwwr, gwrur, uug, ugguwru, uwr, rwuug, bwgw, ruu, wrbb, wub, wuwgugg, grgwrww, bgubw, wruuuu, bwg, wu, wbrbgr, bgwg, bgrubu, ggru, bgguww, rubgugrw, grwguu, wbg, ugub, urbwuurr, grb, ug, gbu, gbgwurbw, rrrburr, uggru, rubuwrrw, guwgrb, rbr, uruw, gggur, ugwg, bbwrr, ggbbbru, grbug, uuubww, rruug, ubbgwgr, brb, rbbuwbu, ggbrru, uuwugb, ubbgr, bubg, grbb, rgb, rwur, ubuuu, gwuwb, bubgrgr, wuuu, bwwg, urugg, wubuwubw, wgrb, gwggrgu, rwbu, bbbubgrg, rw, ggug, gwbgwbrb, bgugww, ggurrwg, rbbwuwu, wgw, bwb, bbw, urru, ugg, uwguu, wggw, wgr, urrr, urguwr, bbb, bgwbgub, guw, gu, gurwr, rgw, wbb, wggu, brbbg, wbw, rur, gub, rrbbr, uugruww, rbbrb, bwgrgr, rwrurww, grurg, brur, wbr, rgu, gguwr, bwurb, grguw, wuu, rwu, ubu, wbbwwub, urg, rww, bgg, wrwg, ugr, uru, urwggw, buwur, bbrgbwgr, bggbbgw, bbgu, rurrr, ugww, uurbur, brbw, wgwrbr, wbuuw, gwgu, rbw, gbwugwb, gbw, bwwgwr, wurrgwu, wwbg, rburuu, wrruwg, gg, bbbwugg, g, bg, wwguuu, gruwgu, ggrr, ur, bwwru, rwgub, rgwuu, wur, wuwrugw, uw, bubggbr, ubug, gwbbrw, rubgwg, rwbuub, rgrbugb, rbgb, wwgb, brbgw, uwwr, rbrg, uwrrur, uuwb, wug, bwwgrgb, rg, wuwww, bgrb, uurgw, rrburg, wubg, rwrwur, rwb, wrw, bwrw, wg, wwgrubwg, bugb, uuubguuw, gruu, wggruuu, urwu, wuugb, rrwww, bwrugbrb, wrgg, bru, ggww, wrbrrg, ugbu, rwwrrguu, wrg, buguu, ugbbww, urwur, grr, uuw, rrub, rb, bww, wgwr, ubb, bbbuub, ggbrw, rbwb, ubw, uuwg, wgrrbr, grw, gwu, wuwwgr, rwuw, gbbr, bguur, gwgrrw, bbu, ggg, grg, urbwwrr, bwgbuw, bw, gbrw, wbwrb, rurg, uurg, guugb, uww, brrbggbu, ruww, ru, rwguw, wgwbug, wwu, wgwwbur, bu, rguu, uwwwg, rug, wwg, brg, uwu, ubr, burg, ruug, rwr, uurugu, gr, uwubu, rr, rbwrbw, gw, uwwuu, ruuwb, rbg, wwrw, wruubg, bgwgrwbr, wuru, ggrgr, br, rwuu, grgbgg, urw, uub, rgrbb, wbuwb, wgwbg, ubwu, gwb, uu, rrrr, rru, gwr, uuubu, grgw, gbb, gwug, wbggwu, gggr, wr, wuw, wgg, buw, gbuwrwu, gb, uwb, bgubgb, rggbbbu, rgubgggr, rbgr, ruwr, wwr, grgbrb, ugrubr, ubgu, ugw, ugrr, ubg, ubgb, urb, wgb, wbwrbw, rugrr, ub, gbr, bugrg, ugu, rgrw, rrrrurr, bgbw, wgwg, guu, wrrubu, www, wrbu, bgrguwr, wwur, ubgbgug, wbwu, buu, gbgubrw, b, ggr, rrg, wwwb, wgrrrw, ubgrug, rrr, ugbb, wugubbur, bgwb, buwww, ugb, buub, wbrru, wuwguur, gwrggg, bgb, gru, bwwr, bgr, gbbw, wuruw, gbrgu, uwg, ubrg, ggu, bbwg, ugrbug, bbr, r, ugbwub, ggb, bbg, bggwb, bub, gbg, burbr, brw, wbuu, gugbb, uwubg, gbgwr, bgwwru, rgugb, uubgr, bb, gug, rggb, wugub, wrgu, wrwguug, gur, wru, bgbr, bug, bwu, ubbur, uurugb, ubgug, bgrr, bgbb, uwbrrug, bburur, rgr, brbbrw, rrrrwu, rgg, urwuwr, wwgr, bur, rugwg, bgu, urbg, wwrgbuw, rrgwrbb, uuu, grwgg, bwr, wrbrb, wrr, uwuuur, rrubu, ugwrg, rwuwg, wgu, rwru, rrww, urr, rwg, bgw, rbb, bgbubrg, bwbb, u, wggurggu, bubgw, ggw, gugg, ugrru, wbu, rggrrb, ubrgggwg, bwuu, rurb, wgrrg, brr, rubr
|
||||
|
||||
wbugbugbgrgwubgrrgrubgbwubugrbrrubgwggggubrrrwrbr
|
||||
wbgrbrgbwrrurrrguwbubburbrwgwrbuwrbwgwuwubwurggbrggbr
|
||||
urbrbuwgbgwwwbgbwrugruburguwgwbgrugwrrbwbubgrwgww
|
||||
rrbgwgrwbrbuubbuugrurgbrbrwrbrggurwgwrbuwuwgubuwwrru
|
||||
uburbwruugurrbwbgbggrgrrurrugwuwggggubuwugbgurgugurbbbu
|
||||
wbubwwubrurggrrbbbuuwuwgggbguubwuubbwggrgubwbuggrbrrubg
|
||||
bbwbgggrwrrbwurubbrgugrguwrwwrrguurwwburgruwrrbrrbwgbggw
|
||||
gugrgwgbbwguuwbbrgwrruuuruwgbrurwubggbubbgrugubgbuwwgww
|
||||
bbrbbwgwwwbrgbrrgwgugwbwwrrbbwwgrwrrrrwwgrbguububgwrgww
|
||||
ubuuuwrrwgwwgbguuurrgwrbbuggruurbwuwrubuugrwuuuwbwgubbuwgww
|
||||
uwuuwwwrrruggbbggrgwbbggwgurruwwgrugwrgww
|
||||
ubbbrbbgubugugggugrbwuwbgbbruguburwugrubug
|
||||
rwwruggrwguwguwgguruubrggbgbbubwwrbbgbwbwwbbubbruwb
|
||||
brubrbrurrbugwgrgrruuurrbgguwuwubbggbwgurbbuwugur
|
||||
wwrguwbwuggubgbrgbguburugbbwugrwwwggwwgbrgwrugrwuubgwwrggw
|
||||
uuugwubwgwrbuurbrwuuuubwgbubwbwrgbgrrbbggrwbwbg
|
||||
brgbbrugbwbbwbuugubwrbuggruubrgwwuggugbubbgub
|
||||
urbrwguurgbbrgbwrugggwwgwubbguwrurbwburrwgu
|
||||
uwrbgggguruwubgrruwrguuuubwugwwrgbgubwrwguubuubwugwbw
|
||||
guugwbgwbrgurbrbwwrrubbbuurruuubburgrruwguwwwww
|
||||
wuugwbwbrgbgubgwuwwbggbubrugubrgggwgrrbrrrbuwgbb
|
||||
wgwgwurrrbwbwuuwgbwrggwruuuwbuuuuwrrbrrbbugwuubrwu
|
||||
wrbbgbbgugbbwwurruuruguuwuwbubbgruwurwruggruwbrbbwbwwbu
|
||||
gwbgwbbwwwuubrubguggguwbguuwrubwbrgwwugwbuuwurwrgurub
|
||||
ugubrbubwbruubwugugrrbwbuggbgbrrgbrrgbbbgrguwwbrgww
|
||||
ugbbburwwwbrrbrwbrwwbrwwubrrrwwubwgrrrbbgrwbbub
|
||||
uuuwgbgbuwguururugrbbbwuwurbuubuggbururrgbwuwwrwuuguuugwgww
|
||||
rwrbrgbuggwwbggwggrrwbgggwggurrbwbbubrgbuggbbrrugrbwwuwrrgww
|
||||
brggrbgbruwrggwbbbuwubuwgwbrwgrwrwrwruuwggwrruwgrbru
|
||||
buwugrgrbggwrbuggbubwwugugggbbrggwugbugburgrrbgbuwr
|
||||
urrwwwgwrbgwgbuwrggggrgbburwgwuuguwbwrrbbwwbgbwrwwwwwgrgww
|
||||
uwwbgwbbbggwbbbrgubrrrgbwwrwwbwbuwurubgww
|
||||
bbrrurwwggrbgwggrrggrrgugbubwuwbbwrbrgubgggbgu
|
||||
wbuugbubuwbrugrwgwbrrgggrubrbrwbgrgwgbrwubgrgww
|
||||
ggugbrggrrbrgbbwguuruwurggbbggrbugbgwrbwbugbwwuurwgbbggwub
|
||||
urbwbubwurrgrruubwurbwwrwuwguurrrgbwgbwguwrgbgwwrwrugbbw
|
||||
bbrgwuubwrgubbrrgrwgugbrbuwuwuuurwgwgbgrbubbbruuubgwg
|
||||
wwbwbbbwurgubggugrbwrrbwuugugwbrrwuwbrwbrrrbrwbbbgrrrwgwgww
|
||||
uwwubwgubbwwugrugbwrugwbrwrrwbbgbugruwbwggruguubbrw
|
||||
uuruwbgwbwbrggrbgrugbgwwbbbgugurgrgggurbwrrwurguu
|
||||
brbgrruwguugwbuwubwwbgwgbugbgrubrbbubbwubbuggbrgbrwugbrwwgww
|
||||
brwrbwugubuguuuggrurbwruugguwugwgugwrbrbgwwrbwuurwwuur
|
||||
bbbguugubrugurrrgugggwbrrrgrggbugwwurrgrwuguwgbwrbgwgwg
|
||||
burrrgruugbbugrwgbrwrrgrugwrwrgbrrbgwwbbuubgw
|
||||
gurrgwuubbruwuwgbugbbbrwuwgbwurrurrugurruugrgbbrb
|
||||
buwurgurguguuuurbrrwgwgbgbwubrgrrrgbrbuwggwrurbggurb
|
||||
wbgwgbgrgbwubwgubbbbrggrwwgwuuubbbrbwburgww
|
||||
bgrugwbgbwwwrugrgbbwwrrgurrbwurwurggwbwbbwbruu
|
||||
wbrwggwrwbggwwurwbububbuwbwwuwwurgggwugbbuwgurruwg
|
||||
ububrrrruwrwburrggbgwwbururuwuurugrbrrrwrbgbb
|
||||
gbgrwggrguwurugrrrbbbubwrugrwubuwurwuguggwwrbr
|
||||
wgbguuwbbrrrgruwgugrgrwgrrugbrgrubugubggbrbwwrwwwwguwugu
|
||||
rwuurububuubburbwwbbuubbrgrrbubbwgbwrrguwrrbubrgggwgww
|
||||
rrrburbguwrrgrrbgrggggrbwgrbgrwbbbggugbubrw
|
||||
ggrwgwubbuwrwruwwgwwbbwbgbwggubwgbrrubgww
|
||||
ugwbbwgubbwurwbbrrbubugbgwwbubbbrgbwgrugrbrrbwgww
|
||||
grwwwggbwuwrguugrbgrggbubwbbgguwuguurbwgubwuguuwrggwwr
|
||||
brrwgbuurugrbuwguwuurguwbbwgbwbrwuubruwubwgbgbg
|
||||
ubrgbwruwguurrburgururuburwwrrguurubuugrbbrbggrwbuuuwrrgww
|
||||
rbwgguggbrbgbgwgrgrggbgbuwbgububrruwrbrgww
|
||||
ggrgwuruurgbwururwbbbrbbubgubugwubbbwrurgburg
|
||||
guuwbwgwurbrugggrwwwbrwrbbggwgugwubbubgggu
|
||||
wwggrbwgbgbrwwuwbwurgwbubbggbbgwrrggggrbwgugb
|
||||
burgburgggbgrwbrrrbgwgbwwbubgwwbugubgwgbwwrrwwwrrug
|
||||
ugbbbrwbgruuwbwwggbwbguubrrrbgbbwbbbgburbgww
|
||||
uuburguubgubgggwbwggurgguwbbrgbubwuguururrbwrg
|
||||
gubwuwubrwgugrwwwuwbrgurrwwbrggrbwbggwubgrgruw
|
||||
guwgrbruruwrbwruuwggrwwwrburgrbggbwugbgww
|
||||
urwubuwuruubggwwggwuwwggrbrgburwrbruwrbwrrgww
|
||||
uuruugbuururbguururbgbugguuuuwwgguubwruguwwgww
|
||||
wgrbguguwgwbguwwbwrrwrwgbubrgurrgwwgwruuggwbwubb
|
||||
wburburwbgwrwgwwwrwggrwwurrbrrruugurgubrgg
|
||||
gbguguwwburwgburrgrbgugwgrwrwruwubugbbgugbwggrrrgww
|
||||
uwgwbruwuurgwgrgbuugbgurwruwrbbugggbbuuwrbg
|
||||
ubgbwbrrrbwuruurggugwubruwwgurwgbbggwbbwrrwburbb
|
||||
rgwuuggrurgwwuuuwrruwggrgbwwbuwwbbwurrbggwrwwurrwgww
|
||||
rbgubuwrwuwrrbbuugwwurruugbuwguwugwrgrgbwburrwub
|
||||
rurbrrwugbwgwrrbwbwrrubgwrugbwwuggbubwugwrwbuuggbgrrb
|
||||
grbwwgbrwrurwbwrbgrwrwuwuwburbrwbwugwgwrwgggrbuwb
|
||||
ugurrgguwbbgbgbgggbrgwbrwwwrbubuurbbwwbgrgww
|
||||
gubuugurbrrburwgruuuwbbruwuubuggwwwbrwwwbwwrrggwb
|
||||
ugurrbrgwurgrrwubbgbwwwbgurrruruwrbwgbrbrruuwuwgwwwbgrggbgww
|
||||
bwurwubwuruwggguwugrrrbwrubbgbuguguwggbwubrwurbwbrwbugwbu
|
||||
rwubrbbbuuuwuurrbgbugggwbbgbgwurbuuwbruurguggbuuwrrrubwuug
|
||||
wrgwrrwguggbrwrbuguruwwrbbbwbbwgbwubururubwrwubrw
|
||||
buwguruwgrwrwwrbgbbrrbggbugwrrugrburubgbggrbbwubwbgguuwubgww
|
||||
wwubrbrgwrburbruurgurrgrbrwbrbuwugurbwuubwgwrgbuwu
|
||||
rbwrggwgbrbrrgbrwuwrrrrwurbggwwuwubuugwbugrguubrw
|
||||
uruggbgubbrrgbrbwwguurggbbugugrrggubuugwwu
|
||||
ggbrwgbbggbwgwggbbguurgbgbbbubugbbgrugrgubbu
|
||||
ggbggwbbrgurwrrrgugbgwbgwwwugguguuugrbuwbwbwbrbbgbrbgwur
|
||||
rbwrbugwrwwwrwwugbbrbrubrrgrugrwrwgbuubuwgwuwgrrrbgww
|
||||
wgwwrwgwruwgbbbbwgbbgbwgwrwruwwrwwuuurgrwgww
|
||||
wwgbbuwguuuwbrubbbwrrgbwwrguuggwuubuuwubbruw
|
||||
gbgbbuwbrwwbrurgwbugbwuwurbugbugwrwgwwbwwuwuwbuuuwr
|
||||
gbwubuuwurbuwbwuuguguwbwgbgrbgrgburubwbruuub
|
||||
rwwrgbrrbrbbbrgrwgrgbgwwgrwbbrrguwbwwrgrruugrrgww
|
||||
wrbgbrgrwuwwgwrbrgwbubwuwwguuuwurgbbrwgwrruwgg
|
||||
uwrbgrgruwubggrgrguugrgubbwrbwwbubwgugurrbgwrugbgw
|
||||
bugguuguwbrurrbrggbwwguubrggguuuwgggrbbgrgbrubbrrgrugwwrg
|
||||
bgwrwbuuwuuwrruwgrrwbuwuuruurgrbgurruwruwr
|
||||
urrrrbwrrgbuubrbbgggggubuwbbguuwurwgbrbgww
|
||||
rrbgwubrwbwbuuuguuguubruwrurggwgwgrrgbwbrwurbwbwgrwrgurwwg
|
||||
wrwurgwrgwgwwuurgrgggguwbgrwuwbwbwrgbbbbguugbbrbrruguwgww
|
||||
ubwwbugbwwwrrgrbuwbbwuwubbggruuwrbugruwbrbbbubrw
|
||||
rrbrgggubrbwrrwrwbuubugrwbgwrurbugubwbrubwrbrrbwwbr
|
||||
ubwbgbgubwgrbgubrbrgurrgrwbgrgrgwrugbwuuwgwuguwwugwgwururg
|
||||
gwwugugbgwbgggwggwwuubwwurwbbbrggbuuwgbrrggwbwwbbbgru
|
||||
bgwgbbuuwbrrgrbbuwwwwrwugggrgwrgbubrgbwgrgwgruwuuubgrw
|
||||
gruurgugwubuwbbbrbgrgwbgrgggrrbuwrbuwbruwwwurbbr
|
||||
rgrwuwbwbruwwrrwbgwwrubuwrrwrrbbrrugrubbrgbwwurbrwwgww
|
||||
bggwwrrurwugurgrwwwbrrggrrwgwgwgrbuuubuguw
|
||||
bbgbuugrgwruwgwubbrbuurbruwwwgwbrugrgurwbgwugwwbrb
|
||||
urbbggbrurrrrbrbbuuugwgggbggwugggbwwbrgbbrubw
|
||||
bgguuwrgrwurgbwwubwrggbbggrbrrurwbgwrgguubgurrggrgwbggbg
|
||||
rgbuwrurggubbugwbubrrgwbbbrubuugubbguwurwguuuugbu
|
||||
urwuwbbgrgbwggbrbbbbbrggbwwwgrurguwrgubrgwrbwbgwwwgww
|
||||
bubugwgbwwuwwurrrbububwuwbgbbggwubrbbuwugrwuburgrwgbugwr
|
||||
brwbubwurgwbggguuwurrbugurrugwrbbbwggbgww
|
||||
ruguwbrrrbgbwwuuwwbgrwwugrrbuubgrwburwuggubr
|
||||
rrbugrbrrgwruugrgbrbuggbruguwbwrubbruubrrrgbgrgwgbgbb
|
||||
bugggurrrrrgbuwbggbwgrgrrbwrgrgrgubuwwurbbwrggrwruwg
|
||||
rwrggruurbwguuguwbbrwwgrruguuwrrugbbggwgbbuububur
|
||||
brbggbwwgwbbruubuguguwbruurugwrrgbgbwwgubguwrwuru
|
||||
wgwurwruruburruwwwgbgbbwuuwbwgurrgwurwbbwrrwwu
|
||||
ggubruuuubggrgugubugrgguwwgguwwwuruuggubbuwrru
|
||||
bbbggwrbbgrwuwwbggwrbwbrwrguwgggbwbbrgbuwrrb
|
||||
wrbbgwgugrggbrwwwbguurwrgbrrwbguuugwrbwubbgwwubrr
|
||||
bbgbuwurgbgrrwbuurwbgburgwwbbubwggubrburbrbgwrrbwrbuwgug
|
||||
ruuwrguruburruwwrugbwwrubgrgrruwruurwwwgrgrurr
|
||||
rbwwwwubwrwrurbrrwuwwbgruuurbwbrwgbrbubgwuubwurgww
|
||||
ugrbgubuuwwwrbggrrwbbuubwgwbgwrubwgubwubuwubgwuubwruwu
|
||||
wwwwbbrgbwgrugrgwrgurwwuruubrubgwugwwggrrgg
|
||||
wbwbwbrwuugburwrgbrbrbwgbwbgwwuruurwbrbgwuuwbr
|
||||
uubuurwgbrubbbwbgrrrrwuuwgwggwgwwuggggbuurgguuwgw
|
||||
bbbrbgburggubrgruggggubbbubugbbrgrguurwbugb
|
||||
urrrwbgrburwuwuguwbrubwgbrgrwgrbrbuwggurgguwrgrugurbwgww
|
||||
wuggrrwguwwuruugrrbwwgugurburgugurwgrbwbuuwwrubgwgbwuwu
|
||||
brrrgbrrrwbrwrbgggbbgwgugwruwrwgbbrwwbwrrbgbburgww
|
||||
wbuuwgbguurgbwuuruwbgbwuuuuwbuggbwwurbwubgwb
|
||||
uggrrrgwbrgruwrwgugbggwgrwrbubburugbwuuwrwbgugwwbwrguwrwrgww
|
||||
gbwrrbuguwwwubuuguruurbbwbwbbuugwurwwgbuurbbwugrubrbubbgww
|
||||
bgrrwruwrwbbwgwuwruwwgbbrwgburbrrrrwwwuwrbgrrbrwuubgww
|
||||
ubgrgwrgurbgwgwwugbbbrrwgwruuurrwbubwwugurgwggg
|
||||
grubgrbgwrbbbbbubuwwrwrurrbbrrbububwwwwuuub
|
||||
rbwrburbgbrbrgwwuwwbgubrrguurwugbugbuggubrwwururrburgurgb
|
||||
wrwgurbrwgwgwrwugrgugrwbgbguugbbuwrwrrbwggbbgrgwuu
|
||||
guggwgbgwurbbrrwrwwggrwwgrbubgurgwwwgrgbwwbrwwuwwwrruurr
|
||||
grwubwrrubwwgwbrgbrwwwgbbbgwurrbbrrgurwwuwwubwbgubuubugrrgww
|
||||
urgggugwgwurwwbgbbrwbuggwrggbbbbbwuggbrbrruu
|
||||
rbuuwwwurugubgbgubggbwbwrrrbbbggbgwggggguwwrrrwwr
|
||||
gbwrubwgwrbwwbguwuwbwbgurgbruwrwbrwwrbrggurwuwb
|
||||
uggggwrurguggrbgbgrrurubwggrbgrggwrubbwwbbrbwrgwgbuwrbw
|
||||
ubrwurwuuguuggugrggwwwurgwrgbbubrugbwrrwuguuwruguwbgbr
|
||||
uruwbwuwbggwgwrwugubrwgbbbbuuggrbbrrwrgww
|
||||
wbrrrugbruuwgrrwbbwwbrwugwgbbrwrubwuggbwburgwuwwbrubwubwrgww
|
||||
gbubgrrrbwbgrbgrubrrwugwugubwurwbbrgwrugwgrbrgbrrb
|
||||
ubrgbuwwwgrgwbuggrrbuwwwgbwbwwrwgugrrrgrwguruggbbbrrugwuuu
|
||||
rgrbbwbuwrrubgbbgurbbuuuggrgwrrrrbwgwbwurggwruwgbrbggru
|
||||
grrbuwwuwwruurruuurwguurubwbrrbuwrwguwuwwrwbwbbgbwugbgww
|
||||
wrubgbugbgbubgguggugbuburwgbggggrwgguuuwwb
|
||||
rubwbbgrrwwbbgurbguugrwgrwgwrbugbguwbgrgrgrwwgurg
|
||||
ugrgrurgggbgbgbruwuruwbuubrbggggbbbugrurwgrubwur
|
||||
grbubbubgwgrggrbggwrbuwbwbuurbrgrwrbubwguwubbwuggr
|
||||
buwgurrugbbgwwgggbgwrbrwbugrgwgwbwgwuwgrbuwgwurrwwbguruwr
|
||||
wrrugbgwuwwwubwwgrugbbgwggrgbbwgwwbuuruuuuubguwrgww
|
||||
urubbbrrwgugrgurgwuurubrbbgbwbrrrrbbwbrrbwrwuugbbbrgww
|
||||
gwrwbugrbggubrrbgwggugggrwgubuuwrwwbrgrbgrgurbbwurrggrurb
|
||||
wgbrwwuwwwruuubgrguugrwuwurbrggurbrbgwwbbg
|
||||
wgbuwubuwwuwwwrbburuwggwgbbwwuuwwrwubrrwubwbbbuu
|
||||
wurbggguurgwwwrubbrwgubruguugubrrbggwwurbu
|
||||
ubrrwwuuruwwgbruruuuuwgbgrrgwubbggugbgbwwbu
|
||||
wubbbwwbubwggburuugruwwuwbrggrubgwrrbuwgww
|
||||
wrwggrruwugrguuwggbuwwgrwuubbwbwubrgubgggrbwb
|
||||
rgbbwrbbrwrwgrrrwubwugrgrwwbrwrwuuwubwbgrgrbbbw
|
||||
bgwbuugbwuwbuuwugrurwrbbgrwbbgurwuuurbuwbwrr
|
||||
buurguuwgrrwgugwgbwgwgbrwwwurrgrbrrwgbbbgruruurbbw
|
||||
gurwubgrguurrrggugruurggurggwurwbgrwggwwbgww
|
||||
rwwbgbggrrgwwwbuwgrbuubrgbbugbuwugrbuwbbwgbbrbuwg
|
||||
ggrgrbruwrgwwgbgrggwwbuwwuugbwgugguwrrbbbgbgrbuguu
|
||||
urugrwbuwgbrrrwgrbbwwwubwrrubbbrgwrbwuuwugbur
|
||||
bbuggbbuwguububruwurwurbgrbuubugbbugwbwrrwrrubw
|
||||
ubgrbggrbubuwwbguguurgbwguwwbugwgwwbrwbggwguugwbr
|
||||
ubbbubgrgggbwwwgbbuwbwwwurgrgbrrrbbbubrrbbrwwgbbbgwu
|
||||
uurrwuubwbbuwrrugbgbwwbgwugubwuugwggwgggwrguggruwggrgbwwwr
|
||||
brwbwubruurbugubuwbwrggbgbugrgwuubbwbgwbuwggubrwwgub
|
||||
ugbugrururugrgwubbgwbrwwrwbwggubuuburwurugrgr
|
||||
uwubgwrgwrugububrgrugbgrgugwwggwbgrurbuuuugubww
|
||||
bugwwubuwubwgbbrrwrwwuwugwbbbgwrwwgburbbrubw
|
||||
wburggbbuguwuuwwuuuwbgrggbuggurwbuwuurrwwww
|
||||
guwwubrbrwrwuubuwuuwrrwuwbgbubbgbgbggbbbgurbwrrurgww
|
||||
gwwwrgrwwbgrwrbuurgggrubuguguwwbbgrwggwrbgbggbubrwwwwwr
|
||||
wbubrgwrrgbbbbwurwububuurgbrwggwuwbgugurwwbb
|
||||
rgrurgugurrrgrrrbgurguuguwburrubgrrbwugbrrubuwbgww
|
||||
rruwwuugbgwwrruwuwrubwuggwrwrrrwwgwgwuwbbrrr
|
||||
guwubbguggubuwgwuwbggubrwgwgbwwgwrwgubbwrrggbuggruuruwgww
|
||||
uggbubwbbrrbrrwrgbwrwbgwguurrrggwwgrggrbgurugb
|
||||
uwurbwwbrbrwbbuuuuwrgwgwrbgguwbrgwburbugwrrgggbrw
|
||||
wwbuwwrrrwrgrgbgurggguubburrruuggbrgwbgwbbuuguwbr
|
||||
gwbwwuwbbrgrbgrwwbugwwbubwwbwuwuwurwuurwubrggggu
|
||||
wrrwwguugugwwwwgburgwwgbgrruubuwuuwwgrwbur
|
||||
wrbwbrrwrbbwwrgrugbwbrugrguwuuuwgubwgrgggwwbg
|
||||
gbbrgrgwurubwwwburbggwwggrgrbgubgwwbuwruwwb
|
||||
uwgrguuwggggwgwuubbuwrbbwwbwrguubgbuuubwwwwrugrurgbwg
|
||||
wuugbbbuguuuubguuwwgrrrrwgggbuwrwuruggrwrgu
|
||||
rgwrbwgwrrgguwgwrguugbgwgrrubrwurwbrgbuggwuwr
|
||||
rgbuwrrrbwuwggrbuwwruwwurrwuubwguubgrgrrrurrgrruggrr
|
||||
gbwugrurrbbubuurrurgrggbrbwubruguburguurrwgww
|
||||
ubgwwwwgwgwguuwbgggrbggwbrgbuwruwwgggwgubrrgwguuwugggwggrgww
|
||||
brrbrrbrgurwbgubgbruuurgrwbrgbbbrgruwbuwbrrg
|
||||
gugwuuwbrwwuubugburbuggbrwgrrrwgrrbgrurrug
|
||||
rggbbwbbubbwgwrbrbwwbrbuuuurwubuguwwgrrwgrrwrurbrwwbrbw
|
||||
wugrrggurbburuwwrgrgwrgrbbwwuwgubgggggrgww
|
||||
urbrubuwgwubrwwbggguguwrgrurgbrrgbbuuuuruggrurwgrbubggwgww
|
||||
wgggwwrbbrrgugwwwburruwrrbuwrwruugggrurrbrrbgururg
|
||||
grgwggwgubuubwbwbburrwwgbburbgburubwwrbwbrgrw
|
||||
rbrbubggbbwwwwwbgbbuurbbrgugrgurgbwgwgugurruubbburggbgr
|
||||
uwuwwbubwbgwrwwubwuugrbwugwgurgbwgbubrrwbbbwbwbbrwgrrrubb
|
||||
bubuwgggbwurbwrrwguubrbbguggbrugwwbbgrgwgurbuggbbbwu
|
||||
guguuubwgubbrwbuuugbubggbbbwrrgrrwuuwwbbbwbubbwur
|
||||
ruwgugwbrbrwuwwgwuwubuwubwwuuwrggrgrruubwwgww
|
||||
uwgrbwuguwwrgugwgbgbgrwbrrwguubwugbwbubbugbwg
|
||||
wrwruruwbuwrrbbuuuuggbbgugwrwgbguubguwrwuwbruugwbrggrrbgww
|
||||
uubwwgwrbgwbwuwgbuwuuwguwrwurwwgwgruuubgrurubguwurbbuwb
|
||||
bruuburbubrbrgggrrgwuuuburbrrruugbrurwurubgww
|
||||
ubrwwrrbbgrburbuubgwbbwbgwrubgbwbugbbbrugrrrgbbubugbubgww
|
||||
ugggwwgbwgbbbwgrrbruwgrrgbgrgrggwubwuwugwgwubggb
|
||||
ggwrwuububwgugbgrwrwwurwrgwbbbbwwwwubgww
|
||||
wwggbwgwbuwwwbbwwwwubrurbrgugrgggbbwgwubugbrrrgguguuwb
|
||||
bwurwugbwgbubgbuugrwbrgbwwuwgburubgwrbguwrrwuubuugwwwwbg
|
||||
guwbgbwgurgugrrubgrbbbrgwwwbruwgbrwbwuguuubb
|
||||
wuubbrgggrggbuugrguuwrgrubgggwugruubguuwbgbuwwruruwguggwrw
|
||||
urbrrwuuuuburwwwgrgurbwwwwbbwwwuwubugwuwggrb
|
||||
grgrgwwuuwwrwwrwurubburuuwrgwruuwuuwwwrwrrgbgrbwurugrrgrgww
|
||||
uuwurggbggbuurbburgwwubgwbbgwrbwwuwwgurggguuubwg
|
||||
uubbbrggwggwrbrbbrwrgwgrbbugwuurbbgrwruwrwguwrwubwbbrrgww
|
||||
wbwbugbrbbwuburgurwgrbbguwurwwwguwurwbrurbggwgbbrgr
|
||||
ubwgbgbgrbwburwgrwurwbgbgrgbrwrguwruwgguwwgwbwbgrubg
|
||||
wruububwggruggbggbwggrrwuuubguuwwwgwwurubrgrwbrgww
|
||||
brbgruwgwuuuwwgrwguurruwurbubgwgbwbuwugrgrbuuuwwgbwbwgwwr
|
||||
gggugwbwbggbuurggbwbgbbwrugbrbwrgurbrrubrgwu
|
||||
grgggbrruwgwurwgwrruwgrrwuurrggrrwugugbwugwurrbu
|
||||
brubugubruwbwrwguwrurggrbgguurrwrbwwrwrwbrbrugwgurbgguwuww
|
||||
wgwubuwgwubwubgugwbwurbgwbuwugbbubuguuugugugrubwuggrrgrbgu
|
||||
wwgbrbggugugwwgrbgbwwrwrrruwuugrbugrrrbggwgwuwwwg
|
||||
grwbbguugugrgggwrwuwbwwugurbwbgrbwbgubgwgwugrguw
|
||||
urgrurbbubgrwruwrguugrrwrbrggwwbruwbbwbuuggwrwgugwgww
|
||||
uwuubrbuugwwbgrgbbgubrbrrgbbguugubrrrgwrbbrg
|
||||
urgggbuwbbbwgbrguuwrgbwbwbgrwburuwuwguurbgbbur
|
||||
brbbuuggbwugrgbruuwgrurrbrbugwubwrrwgubgbubgrwbgwrurwurg
|
||||
bwwgrubwgwgrwuruguubwbwrguwwwggbrubbwubrruggg
|
||||
uwgrgrrrggurggrrrrgbgbbbgubbbrgrubuwrrwgrrrrrwgrbwwuruggb
|
||||
gbruuwwubrurugbwrruwbrbbgwgrrgubrrbrurrwbr
|
||||
wrwbubuwbruwgrwgbugwrburrrrrrwwrgrurugrurwrrbrbgwb
|
||||
wbgrwgwrgrgwwwrbrrugbwwgggruruwrgwbwrwbubwgbrrbgru
|
||||
wrbbubgrgwrwwggrwgrbbuuwbwbuggrwurbbrgwwbbbrbgrbguub
|
||||
gbrurwrrbbgbgugbuwrgubggrurwrwrrrgwgwwwuuuwruuwgww
|
||||
bbwuwgbrgurwuwbbwrwuwrwbbubrgurwbrrwuwbbwrgwbwbggrgrwu
|
||||
wggggwbgggwgbwurrgbbwbwrgwuurgurrububgbbbbrgrwruw
|
||||
rgrugbubugwrwrburrwgrrrrrgwububwrruuuugbgwbwwbbgrr
|
||||
wgrruwwugwuruwwbrwruruuwgwbbgrgurgubgrgugwuwbwuburrwrbubwu
|
||||
wuwbbubrgugbgbuggwgurubggrrwrwrwgugurrwrbgubugw
|
||||
rbbrruuurgwrugwubbrrrbwwrwrbgwgwubuurwgrbgrgrbbruwrgwgb
|
||||
wwuwrugugbwrgbwgbgbuwrggruuubgurrubuwrurwwgww
|
||||
brurbgggwrgwurrgwrbggrrbbbwbgbrgbwbuwugwbbgwbwgww
|
||||
wbgbggguwwbuggubuuwurugubrbwrbwurugbrrubrrbwbbbwgu
|
||||
wbgwuurwgubrrgrgbuuuwrrrggrggurwurwrrwrggrrbbr
|
||||
wuwgguuggrgwuwwbgrbwwrbuwrbwbguuwubwggbubgww
|
||||
guwrwrurgwrgguurrrbugwgurwrbwwubgggbugwgww
|
||||
grrrbgbugwwggwugbbrrwurwgrrurbuubrbbbwgburgurbwgwwrbgwubgww
|
||||
ugrrugwbrwbguwbbgrgbugwurgrwbrrbububgrbwgguuwgbuurbb
|
||||
wgugrruugbgbwbrrwgbgwurbwwgwwwggrguubuwgburugugbbbubuuubrw
|
||||
grbbbubgrgwuuwruwwuwgugrwugrwbwguuggwguugggwuwubrwbbgubgww
|
||||
wbubuggwbwguwubbrubrgrwgwugurbuwguuuwbruuuuurbburugw
|
||||
rugwgrbbgurbuuubgwwwgrgbgggggbwrbwgrwurrrugrwugrubrgbrgww
|
||||
burbwuguguubrugwrrwurrwbggruuwwuwubgbrgww
|
||||
urubuugrrbrwwbbrrrbbgrgbgwgrubrgwurbuugwuburrgbubb
|
||||
bbrgrgugrbgbrrububurwrguwbgrbbbrbgbuuugugbwrubrrg
|
||||
bbrwrburuwgrugrrwuwbuugwwbgurrwbrgruurbbgwb
|
||||
wbgwwgubgrrbwbwbbwuwubgbggggububwuuwwururrgrw
|
||||
rguurbrguwrrbbwurwgubuwgwguwrggwwuubbwrgwrrurwugguw
|
||||
gbgbrubuugwuuwbwubrgggwgbwwgwbrrguurwuwuubwwuuwuuuwwrwgbuw
|
||||
uburuurwbrrgurbbwrwuwwwgwgubgbuwuurguwbgwggurbbbbwgww
|
||||
wurrugwbbrruwrbbrbgguuwubburgburrrrbugbbrrrwbrbrgwuu
|
||||
rbwbbuwbwrbrwubgrgugbrbrbgubbgbgwwbuuwbbrgrwggbwu
|
||||
wruuurburwgwwubrwuwrgurrbbrwwwwwbrwwwbbbrggbbubbugbuwbgww
|
||||
ggugwwwbubbwurgurbugrubggggrrugubrwwggrgrbbgbububbwwwg
|
||||
rwbbugbggbgrwgbbwrwwbgrwwwrugbuwuubuuuuwurrruwwwwggwrwuuu
|
||||
wubbuurgrgbwgruubgbugugrwurbrgburubgugrwwrgbubbgww
|
||||
wuuruuwubwguuugrwwrbrrgbrbwbrwgwubuwrrwubuguurwwrwgww
|
||||
rgugbwrgubbgrbrbuwwubgrbbrububruwrbbuggbruububrubgugrw
|
||||
gwuuuwurgbrgwrgguwwgugbbgurrbbbgwrgrggwguwu
|
||||
wwuubrwwrwrbrugbwrbwuruwbrwrugwbbuuwrrrubuugrrwrwwgww
|
||||
bgwgurwgwbbbgrwbbwwgbbgwuwuuuwwrgbubwgubbrgrbrwbgrgww
|
||||
ubggbwrbwbwwbrbbbrwgbgrbrwbbbgwgrrwrrwgww
|
||||
rwubrubgrrrbgwggwwbrugrubuuwbrrbggbuuurgwggwrbwgwuwugrbrb
|
||||
buurgguruuwuubggwrrruuwbbuggrbururrbubrbrbgubrwbbgrrgbu
|
||||
guugubwwbwgugwbrggbbgurgrwwrguwrrurgububbbrbguu
|
||||
rburuwbbugbubbgurrbguwbgrgwbgwbrbwwgbrrugbugruggrgbu
|
||||
bgwubburubruubguugbrgwgbbrrgrrurgrwubuubbrurrrw
|
||||
rugurggbgbgbbbbrwubwgbguwrwgwgwgubwgrggubrrbb
|
||||
wwwrwbrwuguuubrbbubuguwuugggrrgwggbbrrwbbgww
|
||||
uugwuwugwuuugrwuwbwrubugbbrwgrrwwugbrwrrurrurwgrwurururgw
|
||||
rggbgrgrburwurggwwbwwwwugbgbgwwrwgubwbwuwwrgbrw
|
||||
rrgburrgubrbgubbgbgrurburbwuurrgwuururwgbuwrurruwbururu
|
||||
bburburrurwbrwwbwggggrgwugrwrbgggburubgrwbgwwwwwuwrrrbb
|
||||
gwrgrrwwuwbbrubbbwububwbbwwbguuurgwbururwgbgww
|
||||
urgwrwrgbwuwguuurugwrbgbrgurbuwwwbwgwgrwrbwrguu
|
||||
gubgbbbrbwbwwrbbgbrrwrbuggugwbuwbuubbubrwwwbbwbgg
|
||||
rgrwrgrurbuugrrwrrgrrgbbwgwubrgbgbbgugbrubwbw
|
||||
brbbwwgrrbuwubwrbrwbuwwrrgrrwbbwururgguwuubwrggbruuubbb
|
||||
urrwrgbrugrbbbwrrggwugbgggbgbrbrggrugwbrruubruwbbb
|
||||
bbbgwuruggbwrbrbwbrrbgwgwwbbgurguurbrgrrugwuguugwurbuurrg
|
||||
brwgggguwwrgrgugwgrbwguwrggwuuwbguuubrburuu
|
||||
gbgrrurbrrubwwrwggrrbbbugggbrwbwbwwubbubruuwgur
|
||||
rwbrwgbwrurgurwwbburrbuburrbuubrwgwwggww
|
||||
rgbwwbrbrubrurrguwguuwrbbgruugggbgugggubgbwuwu
|
||||
uwubbbwuwbgbuubbwubbrrrubwurwgbgwurrrgrwwwugggbgww
|
||||
ggrwwuurwgwruuuurgugurrwwrgwgubrrgugrbgww
|
||||
wurbwbgwrwrrwubuuguwurgwgrgwguwwuuggwbuggrbwgww
|
||||
rgwwgbwurbrrwrwwuugwwbwwwubbbgrugrubwgguwgwbur
|
||||
rgbgurubuguwburuuuggbburuuurwugbgrbwwuurwwgurggbrrgurrruw
|
||||
uuurgwububbruwwuwwbggugrwrbrwgggwugwbguggrbbgrrrbr
|
||||
bggwgwuuurwuwuwgrwwuwrgwwuwrguwggwuwwrwbbugwbrggbrwgww
|
||||
rbrbbbrrrgwrggbbruwuwurrwurwwwguburwgguwbgwgww
|
||||
urggwgbubuuubugrbrrubwrbgbbbugwrbguugggrwgwubgwbwg
|
||||
ugwbgbgurbgwbgrwrrbwrrbgbwbgurrrubwgbuwwbgwu
|
||||
bgggrgbrwrruwbgbgwbrwggggrrrugbuugubbrwubbwbburbgrur
|
||||
ggbgwgwuuwurwrrwrwbrwgwrurbrubwbbgrrbgggwgg
|
||||
bwggugbwwruwbrbwrrwrbwbuwwbuburwwrrbwwuguuugw
|
||||
rwbuuwuwburbgbuwbwwrbwgwgrgurbwuurrbrrgbbwrruwgrgburbgww
|
||||
gwuwuurwwrbggguwruguwbbwugrrgurruwbuguwugbrwgrgrgrbbrwrbb
|
||||
brrgwurbuwrugubwgurbwubburbwggrburrbbwgwbgu
|
||||
uwgwrrugwwurburbgbrbuubgugrwurrubrwbbbgbbugwbububuwb
|
||||
wbgurrrurubggrurgbbwrbbbbwwurwuwwggrwwrbbrbbuuwgwbwr
|
||||
rgrbwgrburwwwurgguwubrgbbuwrwubggwwgwgrbwgwugbwww
|
||||
wuurgwgrugrurwgurbrgguugubrbwugrwgwbugggbwgbbgwbrrbbbgr
|
||||
brbuwuurwwgwrgwrwwgburrurgwrurwrrbwgrbbwubbgwrugbrubgww
|
||||
rrggwwgbwbuubuwuguwugwguwuggwruwugbrgbrgrrgwgww
|
||||
wwgguggwgbrbrruwbubwgugwggwwwrggrggbubbugbruw
|
||||
ggubrwuwubgrgwrbbwbbubbuwgwugggggrrgugbbggbgwurbwrwwgww
|
||||
rwwrwwwwrubwuurwugrwubrbubwuubuuggrgrwuubrgubgbuuwgbugwgg
|
||||
rwrbburrwrwruubrbbbbwgurwrgggwwuwrbgwgrgrgwwbgww
|
||||
rrgrbuwururuwbruburburguruggbugurgrrrgbbbugwgbuugurwwu
|
||||
uuuwgrbuwbrwwurgwrrurwurbbbuggrwruubgbbrubgrurwguuubgr
|
||||
ubrrgwbrgggbwbuguwubgggurwugugugbbrruwbgbwwrururgggbggwub
|
||||
gubwugrrgggggbwgrwruwrrgbwwuuwgwgbubrwgrrrgwwwww
|
||||
rbrwrwruuwwgbgubgwrgwuuwbuurgurggwbbwrguugrbrwrbrgugwrwgww
|
||||
bgwbrwbwruruwggubuuubububbbbrggubwuwbgugrbrburgwwbwwwww
|
||||
ruubuwrwuubrbrrruwuuwruwwgggbrugrbrrwgwwgugrgrbuwbg
|
||||
rwwbbuubwwgguuubbwrgrbwwbrwwbbwwwbgbwbgwwbrrbww
|
||||
rbwrgwwwgwbbgwbwugrbrwwbgugbwubwbuurggbugguuugwg
|
||||
rrbbuugggwurwwugubburubbbbuggwwgburgwwubbrgww
|
||||
gggguwrguuwbwbrwwbbuwurgggggubrgbgbbrgrbrrrbbubgg
|
||||
ggwubgwuwwgrbggbwgwrwbuguuwbubrrgwubwwbuwuuw
|
||||
rbugbrwuwwbguuwbwggrwrrrgwurbbbuwgugrubgrurbr
|
||||
rwbrugguuuruguubggggbuurburwwrwgwwbwrggbgugbwbgrbu
|
||||
rbrgwubguwuwbubruuwugubrgbwrugbwrgwrruwrrgw
|
||||
buugurrbuuuwgwwggruuuuwwrbbuugwbgwbrbuuggwwgww
|
||||
ugubururrwbugrbuuruwgwbwbuubguwwgbwrwgggggwgggub
|
||||
wugruubwwgrubwguwrgrwbubwbruwwbrgubugbrugurrggwgugbgww
|
||||
rbwgbuwgwrbugubwrgrbbuurwuurbgwgrwguwgwurwrgbrgwgrbwbrurw
|
||||
rruuwguuwurwuwggrbwwuurgrgbbruwwuwwrrwbugub
|
||||
bggbbubuggguwwugggwrgrgggbwwgwrwuburuguwbgrbu
|
||||
bguwgrrwgbggwguwggwwbwrggbugrubwwurrbrwwbuuwrurrrwrw
|
||||
burwwrguwrbrurgruwbwuwwuurwbbrruguguwbwbgrbwbuug
|
||||
wruugrgwbrgubbbbuuuwrgrgburgrgbwgbrugwrwrrrbrurwbg
|
||||
wrbuuwruguurgwbbrgwubbgwwuwrgbbrgwrbubggbwwgub
|
||||
rgrbwwurrwgwgwrrubwugwgwbgrggbrbrbbubwwgbbbuguubwu
|
||||
wwrgbgguwbgbururwwbrwwuwuwuuuurbbgwgggbwbbwubrrrggubwg
|
||||
rbuwgrbubrruguwuggrbuwuuwruuurruuwrrubgbwgg
|
||||
ubbrwuubgrugrguguggrubrgurrrggubruuwbgwgrrburwggbwrrbgbwrgww
|
||||
wwrwrgggurbrwrwbbrbuguwbubgwgruguwgrrgubgggrgwubrgww
|
||||
grwrwubgwuwwgwwwgbrburrgggbbwrwugwwrgubrbrubbggugurg
|
||||
ugrgwggbrwrbbgrbrbuwgbgwrgbrgwwbruuguubwrbubrurwruubwwurwgww
|
||||
rrrrubgwwrwurgbuurrrbrrrbbruwwwwbgurwbugbbrrrbgww
|
||||
wgbuuugggburbwwggwbgugruggwbgbwugruwuwwwwgrwgbwuwr
|
||||
bububuubwgrrwrwrgubruwubbuubwrguggwugbgbgwgww
|
||||
rbgrbbugugwwwwubuugbwrruwbbubwbwwggugrbwgw
|
||||
rguggbwgbuubwbgbuwgbbrbwwurugbbuwwrwgrwuwgbbwguruwrb
|
||||
wbugurbbgwrrbuguggugwgwbwgwrburbwrugbrbrrwwbrrgwwgww
|
||||
bgbrwgbrrggwwwgwrbrbggwurrurbubwrrwgbrwgwugubburbgugbbr
|
||||
bbwrurbwbwugubwgrbbgbbwwbgrbgbwwbggwbruwbgrubbwrww
|
||||
uwurbrwwrruwgwrguwuwuubgwrgbbwgruwggrrgwrwwbbrbgbgbguwrbgr
|
||||
rggrbwrrrbgrbggguwuugbuubruwugbrrugwuuugwubb
|
||||
uugbwbbgwrbbggurgbbbbgwrrwbruurgwgwgbwuubgguuubrwgww
|
||||
gbwbbgrwwgugurgrggrbwwbwwrwgbbggwrbgwwgww
|
||||
wuurbgwgrwbrwwgwwbgbggggrubruuubgbbbruubrwgguurbgww
|
||||
ubburbgurgguuwbruuurwwgburrrbwuwbgruwuburwbwbwrgbrbgww
|
||||
wbrbwgubuwubrrbugbuwrbbwrwbwwrrbwuruuwbuwbwrwburrrb
|
||||
ugguuurburwubugrggburuwuuggwwbbwbrurwuuwbwbbgubw
|
||||
wrbugwggrbwgrrgbwggubgruwgggwggrrgrwwgrgwugbbuw
|
||||
rgbubwuugrwuwuwwrwurgrrubgrbbbbruuwgwuubrgr
|
||||
wwgrwuuwrbrwwbuuuurrruruuuurugrbrwwwrguwrwuggwuwwwburgwbb
|
||||
gwrrggbbggurwubggrurgwwwububggbguurbwwbgurwgrgww
|
||||
uwuurbbbuguubwuggrbwrububgwbgrrbrwbbgugrrwbrwrbrrrrwg
|
||||
guubggrguguwgbwrugurbrugruwrwbgbrwrgwwgurbruguubrbubr
|
||||
wgwbbrggbbggrbwbguubrgguwgwrbbgrruwbrrbbwgggugrgrgr
|
||||
wrgbrrrgwwbbrrgrgurrwbrgrggbrrgwbugrugbrwwbuwgww
|
||||
rbrggrrwgugubrrbrbbgwurbbrgwgubrrwwrwwurrurbwwgbu
|
||||
402
19/input.txt
Normal file
402
19/input.txt
Normal file
@@ -0,0 +1,402 @@
|
||||
wrgrwbug, uurb, rbubr, buggb, uuwwwrb, gg, wgburr, ubg, wrbuw, grrr, rur, ggb, bur, guwggg, rwbr, grurb, bgurguw, ruub, uguugg, bwr, brggb, rwuu, rrgbuw, bgub, wbbb, rgg, ubrgb, wbrgw, rgwwuww, b, buw, grb, rww, grurw, ggwb, rbw, brbw, gb, gwwr, bugwrg, uwbww, ggu, bbbbbbur, gu, ruurw, uwr, gbur, gbgbu, wrwru, urrr, bruu, wbbgrg, gwrwr, brru, buub, wrbb, wrb, urugbur, bgwwr, bwubb, wrbbbbbb, gggbgur, www, rbuuggr, rrruwguu, wgr, r, ggw, wb, gbgr, bwbu, wgwuugug, uuug, grgw, gbbuwrb, ug, gub, wbrbug, wrrgrr, rbuu, rrg, brbu, ugwu, bguw, guww, ugw, wwg, ugrb, ggrw, uug, uww, bbw, bwrw, urr, bwbuw, rbugr, uubbwu, rru, rbb, wbb, wguu, urb, rwbrubb, rrgru, ugg, rgw, gwbb, rbrr, gbwg, wgrb, wbbbbbug, u, bru, uububwwr, wburugg, wrgugg, urgu, uuuwg, grbuwwb, brg, grwubr, wbrww, bugu, wgwrbwu, urrbr, w, wubwu, gbgugw, ggrbwr, ugurrr, ubrgu, bggrb, gugwb, rw, uuwg, wguw, wuru, rugu, ubgru, bgubr, urww, buggg, wwb, gwbu, rgbbbb, burrw, ugbuwr, uwbw, bug, urbwgwbu, gubwuur, wbgrbb, wub, bb, ugbgwr, gwbww, gggbw, bggg, gbwbur, wggg, ruuug, grw, rwg, wguwbr, rggr, wugw, rbwb, ru, wrbur, gug, rbru, buuubwb, gbwgug, ggubu, buwbwr, gru, wuw, wbg, wbr, ubgw, brwugb, rbwugr, rb, wbur, rr, wbwubuwr, wuggrb, bww, ruw, rbu, wrbrr, ubwrrwbb, guu, brb, rgrr, wgg, bgr, ggruug, bgug, ugwug, rwrrb, grbg, bbr, ugrbbrgr, gwbg, wbwgw, wbbrrb, wwgw, rwrg, wrrugr, wg, rgrwwbg, guw, urg, uugbg, wwbw, ubr, rurb, gugg, wgu, rguug, rwb, wrr, ggbwuu, gw, uuwrwu, gbbugr, rwwrwubr, uwwwgg, uur, uuu, wug, gwrrg, gwu, gwurg, bwrugr, bgb, grr, wuuug, bgw, ubwr, bwbugb, rgwrwg, wruwgru, bbu, ugbuwgu, rbr, ugrw, bugub, rwuuw, grbbuwgr, wbu, gwb, guwwurwr, gbbub, wbrg, bgrbw, urggurw, ruu, wuu, wruu, gbwb, bgwug, rurr, ubuwgw, bwugggb, gurgb, rbbwrgru, bbrb, bubu, bbur, rgb, rbrwr, bbb, bwugr, ggr, wwub, ugrwbrw, rugg, rrrwu, wbgrr, wuwrr, rgu, gbb, bwuw, wbuwrrgb, bwwrgu, ururwubr, rrbwwuw, rwrwb, bwruub, wgrrg, brr, ur, uw, bbg, wbwwr, brur, wruwbb, wwr, wwu, uuwb, ggurb, uub, rrb, rbwr, rbbbb, rg, rgubbb, ubbgruwr, wwwgu, bwgbrrw, wbw, gbguu, wgwr, grurbur, wuburuu, rwgrgr, wur, bwb, wgw, rwr, ururb, gur, rrgwww, bw, ubgbru, rbwbgrb, wrbrb, wubw, wgbub, wrg, rrw, brbr, ugu, guuuugb, wurbgwgg, uurbbgw, urw, rurg, ubw, wgbu, rwguu, gbu, ubuuw, wubruru, bwg, wuuuu, wu, wuuu, bwru, uruu, gwr, bgu, wrgr, ggrugbg, bwgu, ggg, wwwgb, rgru, wbgbu, gr, ubu, guubwu, rgwuwug, bwwru, bub, gbuu, guwbwur, gubrurw, bwrbuwr, wrw, rrrrrg, rwu, gubbuu, uru, uwbg, rurru, rrwwbb, ubgb, rgwugg, buu, ggwwbr, uwg, bbwrgu, ww, urbgbbg, uggbrww, gwg, wbrr, rbrb, ruuwgr, guubrg, uwbbb, rbg, bbgru, gbw, rwrrg, ubrwr, ugb, uubgwru, buwbuwu, wbuww, rrbr, rwbw, ggwr, grrwrg, gbrgwu, bbbu, uwub, ubb, gwur, brbruug, gww, wwugbw, rwuggw, bbrbr, rrr, rbgggw, rug, ggrrbr, brrbb, uwu, ruwwr, rgr, br, rgrubgg, ugr, wgb, wwwr, ggrbbb, uu, gubgwgb, rwbgbr, wru, wgww, rub, uuw, rwubrruu, grg, brwguug, guguu, ub, bgg, wuwu, wr, bwbg
|
||||
|
||||
rwuugrgubgwgbrrurggwbugbuuwgbugbuwwwubbwbbw
|
||||
rubgrugwuwburwwrrrwggrrrbbwwwwwuwuggururgrurgwbwwwugwwggur
|
||||
wrgrrgbbgwuwguruurwbgurgubgbwuwwwuburggbwggwrwwggbg
|
||||
uwwgruguubwbbgurubbuwggwuuwrrbwuugubgwuwbbggwggbbrurwu
|
||||
ububrgrburwrrbbbugrubrugrugrwwbwguwggwrrrurwwuuubgwwbbbb
|
||||
gwrwugubugrwgrrrgrwbburgbbrgrbuwwgrggubbugugwuwbww
|
||||
uwgwwrbwwurbrbburubbrubrguwbugbbbbugruurgugwurgwurburrbwrr
|
||||
gggbugbwuuwbubwuwgwuggurwrgbbbuuwuggwbugugwr
|
||||
ruwburwgbuguwbbuuggrwgrgbbugubgrggrbuwgrbrubwguwgubrubggbg
|
||||
bgwgwubrwggwgbuwbuurgugurbburbburuwgwwwbrubrrrgrgbrgwwwrug
|
||||
wbgurwwrrwgwrugwbgwbbrurgurrbgwwwurbwgrubgbg
|
||||
brwwgbguubrgwguwwuuwbwuwgrbrrbrrgubgrgwuwugbg
|
||||
buuwugbuurwugurugubrwburruwgrgwggbubwgwuwbrwguuugb
|
||||
rrwugbwbgggguburuuuuwwrgubugrwwugwbgbggugrrrurugwwugrr
|
||||
ubbgbrwgrrwrwrbuwwbbguguuwgwruwbbwgrgggbrbgwggwbwurwuuub
|
||||
wrbgwwuwbbwbgubrbubrbwwwuwbguwgwguggbgbrburugbg
|
||||
ggwuwwggwwgbgrbrggbguwrwbgguwggbbgrrwbbgwwuwwbwgrwwgbg
|
||||
ggwwuggggbbugggggubruuugbrurwgbrbrwrgbwggrr
|
||||
gggbwuwwbugwurwrbruugwgrbrugrggbgrwgugwruu
|
||||
bggrgrgbrwrruruguuuwwwgurbrrrgwbubbwrrrbggugrbbrgrwg
|
||||
ubrugrrrwwwrbbrwuwuuuwwguurbwrrggguugugubbwwgbg
|
||||
rwrrgrwrguubgrbrbbggbwgruwbbgggwgrgrwbuggubwurwwbgbrubwgbg
|
||||
buguwuuuruwgggwwbggguuwguurrruwwbugugbgbg
|
||||
wguwwwrwwugggbuwubwurrbubwggwwrgggbgguruwbb
|
||||
ggrwbwrugbuwgrbburugwgbgwrbbgrwuwbrwrrrrrbgbrbrwu
|
||||
ggrggbgbrwrbuwgggwgubbgurbuwuwrurwbwrrruugggggurwrbggbg
|
||||
bbbgrggbwrrwubgwrguuruwbwurrbrwrugubwwgugububggwrbb
|
||||
ubwbrurggrwgrwuurgugruuguggwubuwbrrwuwrwrbgurrbrggbwru
|
||||
ubbrggguwguwugurwgubwwbugrgbguuuwbbuubrbrwruburbbguug
|
||||
ruwgbbuggwrrrbrruwrgrruurwgbugbgbubguuwguurwgubuwr
|
||||
uwburgrwuuwwrrrbguurbbuuwrbbggbuggbwugbbuuuuwwggrrr
|
||||
ugbwwgwuwurrbrbbbugwgbrrrrguwuwguwurugbg
|
||||
ggrrwuubrurrbbwubrbrugrggbrwbgruwgbwwuugguwrwubuwrwrbgbg
|
||||
buwgggwgguwrrurrwruuubbwgrgrgbwbgbbwwwugbubgbg
|
||||
wwgggrbuuugubwurbgugrbrwrggwwgruubwrbbuuuwgbg
|
||||
wrrrurruuwgwrbwbbgbrbbwrbrgbruuuwubgubgbg
|
||||
bwgugbrruuwrrwbwwwgbwrwgbrwrguwbggugwbgubgwbu
|
||||
grrrgbggwbgggbbwbbuburrubrguguuurrgwrbwrugrwububgwrrgbg
|
||||
urbggrugbgruguwbwurbugbuwgwwwbuugurwguugrrbwgurbgbg
|
||||
uwwrubrugwrrruwguubuwwruuuwurwuwgbbwbgbgwbuggbgubg
|
||||
rugbrrgwwubgwbgbgwuwwwugwwubbwuwgwuuruguuwubwrbggbggwugbg
|
||||
uubbwgbrwwgbggugbbrguggbwuwbgrbgrgurrurwwuwbrrwggggwgbgb
|
||||
rbuuggguruwrbbgbwbbrbbuuwwgurbrrwbrrubwgbgwgrguurbubbrwrgbg
|
||||
bguuwubrbgurguurgwbuwgbrbubwwgbbwuubwugbwbuuuug
|
||||
rbwwrgrwbugbrrggwbwbwwwrwwggubuwrrgrbwwbggrrrwgwwb
|
||||
ugggwgbbrrwgwgurubbbwgrbbwgguwwggrburgbuuuwuwrrwgwbwggwrb
|
||||
rbwrbgwwrwrugrburwuwbwgruuururbwbbggbbgbgggbg
|
||||
ugwrbwbrbgwggwggwguwwrwgbgwruwurggwwrwbgwgrguubbg
|
||||
guwgbwrgwrurubwbgrwwrgurwbgubbrwbbrwbwwgguwrggwwrwuwr
|
||||
grrbwruggugrgbwuurggugbguuwburgbbrgguggwubg
|
||||
brbrggrgwguwwrgguuuwwurgbrrbwwwwwrbwwwurgrgubruwbwggurgrg
|
||||
bburrurbgwguwuguguwgwruwrggbwubuwwubgwrurwrbrrbbbrgr
|
||||
gruwguwrurwrwgwwgwbggugbbubbbwuwbguwbubrgrbrrgwbu
|
||||
brbbwbbguggwbrurrbrbuwgwuwwgugwwbubruurwuuuggg
|
||||
uwrbggggwwbgrrgbrurgbgugubrrubrgwrrbggrrbbgbrrbgbubggbg
|
||||
wggbgwrwwruurrruugwgurgbrbwwgbbgbubwgbwbgrb
|
||||
wbuuugrbgurbrugrruwwruggubrugrububwwbbwgbwrrbguwugrwuggbg
|
||||
rwurgbgwrbubbwbgrwwruggrbguuwuwugbwurrgurrburg
|
||||
rrggggbgggurwrgubwgbbwwugwguuubwrrwbbugruwrugbugurgwwwbb
|
||||
uuwrrrwruwwubwrbbwwurugurbbuwwurbruwrgwgrguwrwrrwwrgrwbugbg
|
||||
guuwugububrggurgwwugbwrwuubrbugrrbwubrwugbg
|
||||
wgrbwwuwwbgwbuugubwuwbwguggbwuwrgbbwbwwrugr
|
||||
urrrwrwbwuwgwrwgburruggbwuwggrwwbwgbwrwggwbrugggr
|
||||
rgbwubrrwwwubbgwwurbugbrrbggbrugrwgbrugbg
|
||||
ggwbwbubbgruwrrwbgrwrwgwuwgggwrubrwrubgbwwwbbrr
|
||||
rbuwrrwggrgwubbrwwrwrbbbbbburbuwuruwgwgbwrurwgbg
|
||||
uwbrbbrbrbwgggwuguwgugurgrrrwwurrwbuwruurrwgwbrburrrwug
|
||||
urguwrrgbwwwubrbuwrguubggbrrrgbwrbbrgggruuubbgrrgugugwgu
|
||||
rwrbrwurrrrwwgbwbwbwgbgggubbubggguwruuuwbrbguwrwugwr
|
||||
rrwrrwbwwbuwbbwugwbbguuwbwbubgrgubgrrrbgwuuggwrrbbrgb
|
||||
uwrgrrbbbruwgrbbrgwrwuguwrbrggwbbubgruggrgbg
|
||||
uguugugwwubuugrrbwubrrrwrwgbgbbbgwwrbbrbgbg
|
||||
bwwuruuwburbruwwrgbbwruwurgrrrbrbuggubrbbubgbrbgwgrruuubw
|
||||
rrugubuwrggwrgbrrbuurbbwgbguguggggrbuwwgggwburbgbg
|
||||
grwgburuwwwgwwrgwwgwrwgwugubrgrwuubwwuwggrwwrwgur
|
||||
ruwugugbuggwwwgurugrbbrgrubrrrrrwgwwwugbg
|
||||
rruwwrrwrbwugbwwguwurggruuurbbwggggggrwuugbgwg
|
||||
ububuubbggurbuwwwrrgbuurbuggrgbrwwgggwgwwrgrwuwggbguugbw
|
||||
wruwrwggbbuuwgwbuurburuguwwgbrguwgwuuurggbg
|
||||
bwbbgwrbrbgrrbgbguuruwugwuubuguggrbguruwrruuugubgruwggbg
|
||||
gwurgbwrgbgwrwbgbbgugbrwuuwggrggurbbgubrrugubwubrrwrgw
|
||||
urbbuuuuurrbgrbbbbbburrggwrrbwrrgbwwwwwuggwwwwwbuuubuugw
|
||||
gbggrwugbwrbuwrbubuugrbrubbgwgrubbgbwuuurrbrwgrrbwbb
|
||||
rrwurbwrwurwuugbgbgbwbbbuuubgwwgurgwgubwgbg
|
||||
ugrbwwbuuurubbrgbubwgbuuwbgwuwuugggwgbuwugrgubwgrwggbgbg
|
||||
rgbrgbbguruubrgrbwwbbbwubgubgwgrwwgggguwrrbrurbgwrrggw
|
||||
bwbburbgbwgrurgwrrguburrbwwuwrwrrbbubgwruuwwugbg
|
||||
uwrbwwrrbrbbbrrbbbbbburugugbburugggbwuggbgbgwbwwbuuubbgbg
|
||||
rugwgbrwgwuwubwwuwgbrgwggugubwugwrrwgruwbbgrgbg
|
||||
rbrgrguuubgwwwugrrwrbrruuwgrgugubgwbuubwrrwbbbrrwbbgbg
|
||||
rbgruwbggwbwgwgbrwurbwgbguggrwbrbwwuuwggbugguggggrwubrbuw
|
||||
gwbwurrwuwgwgrrbrgbuuwrrgrwwuurrwrrburuwuub
|
||||
wgwugugrwgbrbugbgurrwggbgrubwggrbuuuuwgbg
|
||||
wguggbuguwuwrbwbrwgguwrgbwgbgrwruggurguubgruwbbugwwug
|
||||
gwuwbbgburrrwbgrbwuguwubwuwruggrbuuuwruuwrrg
|
||||
gwrwwrubrruwuwubrggwbrbubbbgrurwwrbgwgrgrbbwwwbgbrwugw
|
||||
ruggruuuwbgbbwwurrwruwrbwbwubuwrbrbgbrwuggurwwwurw
|
||||
rwrwbuugurwwuwwruguubbbwwwwgbrurububrbubwg
|
||||
rrrrbgrwgrwurgwrbbwurbwgwbuguuggwrgbrwrwuuwwrrbgbg
|
||||
ggrwgbgwubwbrrgruuubgwgggwwwrbgbugwrurggrbrg
|
||||
buuwggubguwbgrbbggbwwurbwgwggwwrwurwbwubbbbu
|
||||
ubwgbbwggrgwrrgbrgwwwrwrgguwubrbbrrurgrwuggurgbwwrwur
|
||||
bggrrggrrrbuburwugguubbburgrbgurgurrwbruuwbrrwrwbrgrurw
|
||||
wgrwrgrrwurgwgbruwugbuggbbwrurrgbrrwrwubgurrr
|
||||
wwgwurubbbrrrurubwbbrubwrruwrbbwwwgbbbrburubuu
|
||||
uguwwuguguwrwwuuuggbgrugubrggwurrrruwubbbgbrg
|
||||
gubuwgwwgruububwwrrwbrbrwubbwrgwgrrgrwgbg
|
||||
gwwwugwbwwugrwbwbrubuwwbrrwuwwgbrurbrwbrbbrwguwrrwwbbug
|
||||
gbbrwwuwgrbuuuuuwbwbbbuuwrrrgggguwwwwwbgwwubgbg
|
||||
wrbbbbugbuurwuuggggbrrurggrrgwggwgwgguuggbrrrgguuwurbrwrbw
|
||||
rgrbuuuuuwrgwbbrugbuugububbwwwgbubuwbrurbuwwwrr
|
||||
uuubrwbwbrgwubgbgwrruuuurugrgbwgbrrggruggrwuwwbrwgbg
|
||||
gwgugubbwrrwgrburguwbgbbwggugbugwwruwwbgwwrwgubwruwb
|
||||
wrwwgbwuwbbrwrrbbuurbbwrbubwrbwwugwrgbrubbgr
|
||||
wgrgwbrrugwuwuurwrbgurbrrrbubuubwgrrruwurbrrgbug
|
||||
bbrurgrgwwubgbbrwrruwbuuwgrbrrrrruwubbwgwgggbgruuggbg
|
||||
brbrgburbrburugururrrrruwwbuurbwgrruuwwgbbuwwuugwwgwgbgrgg
|
||||
uubrurrrubrgrwwwwwububggrggbuggurbbwrbuwbburbugrgwb
|
||||
rrbbrbbwubrggbgrwbwgwgwugwgwgbbbwurwrgggrurgwurwbrrgrgbw
|
||||
wwgbuuwruguuwwbwruuwggbbgwwguuurrwwbrurruuguubub
|
||||
ggwbrggwuwwuwbbguguuggrugwbggugggrrrburguburbwbwrguwgw
|
||||
buruubbruwrwbwgruwwuwrbuuwugrbrrrwgugrgggbruguwubbrurwb
|
||||
wwrubbwggrwbuwrrurbbrrwurugbbwgrbwgubrrwwgwrgbg
|
||||
rbguuwugrgruwbbbwruuurrgggrwwruggruuuurwuwrbgwggg
|
||||
gbrrubbwurgwrwgubuubruwrbugbrwugwugbgbwgrggwgbbuubgwrb
|
||||
bubwrwwgurrurubwbubrwuwuggwgrgwrrbwgwbwrrgrrbb
|
||||
rrubuwbbruuggburwuugwwuubuwwuwurbgwgggwrwrgr
|
||||
grgggubrgwbwwgggbwrwwrwgrguuwubgwuurgbrurgwgbg
|
||||
brrbgrbwwuwrwuwwuwwgwrgugwgwugbgguwbbgurrgrwwuwgwubrbb
|
||||
wrbbwgwgwwurbrrgguwbgwwwwbwwwrwwguggbuugugggubwubrug
|
||||
rbbgubgwwruubgguwbwruubugruwuwbgwuugwgbg
|
||||
wwgbuwuuuuugbrugrubgguuwrbgwruggrugbbbguggrburgubwub
|
||||
buwugbwwrbgbbuugbgwwwuwgugbbubwugwbrrgubggwbrgrbbbrurwuwbu
|
||||
bwruggrbwgggbugrgurrwurbrgbbgbbwgrwwrgruuwbbbgbuwrgbwuguggbg
|
||||
wrruwrwwguwrgrggggwburbuubrrwwbruwgrwbbruwgwwggruwwgbgubg
|
||||
bbbbrguruwrbruuubrwrwurbbbwwbguwwwgrrwgwbgbg
|
||||
gbwurggbgwbbwruuggggruwurbbubwbrburgwbrbuuuubgbwgggw
|
||||
rwbrbwgwwubrrrurrrubwbuwubgruguwgrwbggrwwrwubruugrbrggbg
|
||||
ruurwgubuugwwggrrgrrwbgrbgwuburgugbwgrgurrgw
|
||||
rrrrubbwbggrgrrbrrwbrbgrgrbgububgrbrbwbubuwrwbwugrgr
|
||||
rbgwruruuuwrgwwwurrguurubrbburubbbggwwwrbgruwbgbg
|
||||
ugwugurgwuuuuwguwgbugwgwggbgugrurwuwuurgwrgbgbbwuwuggbg
|
||||
bwbrggwrbwbbubrbwwbbbgbrubwwrwbbrwubrruurwbbruugbugubwurgw
|
||||
urggrbgwruurwrguuugrgwubgrbuwgwruwwwbugwuwg
|
||||
bbuggwubwbggwwbgggwbbgbgbguuurbuwrgggbgbg
|
||||
gwgugrwgrugrwrbrbgwuubrbbuurrgwwgbbruuwbwbuw
|
||||
grgugwuwbgguwwwwrrwguurwgwruwgububbrbrggbg
|
||||
uubugugwbrgububgrgbrwrwbrggbgrbbwrgrububwww
|
||||
bgwurbwwgrwbwgrwwuguuwrrwrwruruggwgwgwbbbgbugbgbbbgbg
|
||||
rbwrrggrguurgugwbwuurwwruwugburwrbruuugbuggrbbguu
|
||||
wgrwgwgbbrgbwuwgbgrwrbbwwbgwrrwgwuuuugruuwwguguww
|
||||
rugwwbwgwwbuwugrbwrbuwrwuuuggurbwruwguuuwruwwrgrbgbrubgugb
|
||||
grbwrbbwwubgwbrbbbuurwuugbrwbwbgubbubrwbbwgwgbwwbbuu
|
||||
rrugbrgrwwrwubrrrggrbrbruugwruuwrwrrwrggruwr
|
||||
bburubrwuubwuwgubwbuubwbuubrwwggugbrrrurrbgbgbbbubbbwwr
|
||||
buuurwwbuubgrruuurrwwwgwwwgwgwbgubwbrrbgwurbubwuruguubgg
|
||||
rbwbrwwubrwururwubrbbgubrrbwwugbuurruwguugrwbbg
|
||||
ubwwrbrruwwrwubgwrruwggbgwbggugururrugrrwwwuw
|
||||
rbrwwwbwwgwguwgrgwurgrwububbrgwwuwugbuuuuggbgrbwwrgugur
|
||||
bgwrbrrwrgrgrrbrwwugrrbubbrgwrwrrrguwwrbggrrw
|
||||
uwwwrbwbrugrrbubugbbgwbwuubbrrgwrbbbbbbbrgbrwbrbuu
|
||||
grgrbwugurggbwgwgbbgbbbrgbwgubrwbrgrrrrbwgrubwg
|
||||
ugrbbuwbgwugbrwwuurrwwbbugruubwgbgwgrbwgbwu
|
||||
uuwbgbugwrbuggwbbbugbgbwgrgbwguwbrbwrurwwuubggubrugrrr
|
||||
grgggugbgububgwbgrgwgwbrrgruwrbubgrgrburwwrrug
|
||||
gruwggbbugbgwwbbruwurbbrbrwwbrrwrrruwbwwggbgburggub
|
||||
rgbbrrbrwuurubrwwgrguuwburrbbwruwbwrgrggbg
|
||||
ubrwrwuubwgrruuurgrbgwwwrgrggwruuurrrwbrrrrbb
|
||||
ggrbbbbuugrgbguurrgrgwgwburrrgwbgubggrwurwguwwgwrwbwrbruug
|
||||
grrwrwwuugrggwbbwwwwurwbwbbbbgwgwrwburrugbbg
|
||||
bwbgrurrwwgurwrwurgwwwbbwgrurwburbuwwuuggrgbrubrgwurbubu
|
||||
urbrrwwbwwbwgbuwruuurrrbwbwrrrwgwrbuuwurbbuugr
|
||||
uubrbgbubbrrubwrguggbubuwrgwgrggurguuwbrwgwgwwugwbbww
|
||||
brgbwrbrwwwbrugguuwwwbgbgbgrurwuubbbgwgrugbg
|
||||
ubbggrrububwbuuwbuwwggrurrugbguwwrgbbgbwwbbg
|
||||
uubguburggrgggurwrwgbuggrbwuuwwgbburbgbbwuugrwgwrggruuubr
|
||||
bbbgggruubuuwbruguubgwbrbgwgbwruwbrwbwwwggwwwbur
|
||||
rbrruburrugrrggurugbuuubuggrbbuwgrbwrwrrbwgburgggwwwuubr
|
||||
urbrrbwgbgrrgrwwrrbwuuruwubwrbrwrwwruugruu
|
||||
bbgrguuuwwrwbrugbwwugggwbbbbbugbrwrbwwgwrrwwrubwugrbgwgwrw
|
||||
wbguggrrrwrrbwrbruwbgggwwbgurgrbuwwgwgururbrurubggrwwbuuwu
|
||||
wrubrrwggrgggwgrgrbbgwbuwrbwwrugwwwwbwburgbgguruubb
|
||||
urbugrgbgrbbuwbgbwbuwbwwgwbbrrgggwgrgbgwwrbubrgwbrwr
|
||||
wurgwrrbbbwrburgbgrubgurugbwgrgburrwwbgwugurwuuuguwrbgrugbg
|
||||
gbgubuuwgwrurbgrwuuurwbbwggrrwubrruuburugrbuuguuguuugugbg
|
||||
gbrrbrbuurguwbuwrrgbrrbbgwgwggwbuwgrgrwbbwgb
|
||||
bbrugrwgrwburbrbburrurgrbggwrbrwrbgwrrrgbrwrgwgugbggwr
|
||||
wrguwbgbbrubuwwwurgurrurbwbwrrbbggbbgwrrwbuuwww
|
||||
guuubgrwrwurgbrubbguubrgggwwbwwurggbrwuuwuwwbrwuwbburbwww
|
||||
uwrubwgwuugbbbwburgbuubwbuwbwwbggwbbbgwwrbbru
|
||||
rbuwgwwgbrgggrgrwwuurrwggwuwwbrbggwbggbrgbbg
|
||||
wgwwugbrwurguwuwubugbwgbwurbuwwguubrbbbrgubwgrbrr
|
||||
gbrburgrruwubwwuggggugrbgbbubbgwuwbuguwrbbrbubgwugbwrr
|
||||
bgbbrrbuuwgbubrwwrgbgrwwwubrrrrrrbwuurbgwubbgruwrbwgbg
|
||||
grwrrwwuwwguwgrugwwwrbgbuuugubrwwgrbwwgrbrru
|
||||
grwwwrbgggbwggrbgbwwrwwwbgbbrgbwuuruwbbugbgbuuuubwbgwgbg
|
||||
bgbgwrrwugbrbwuggurruurrwuurggrrrbwbwbubwwwbgugggbugwrwgbg
|
||||
urgrbugrgwguwgwbgbbwbrgwbbwggbuurbrbwwgwwuwwuuwurbwwwrgbg
|
||||
bgugrbubgwubwuggrrrugwgbgwrgggbwbuwbggrrubbugbg
|
||||
guurubwrbggwbrubuuggubrugrrbbwuggwuggggubguububbbbgbwuwr
|
||||
bggwrwwrbwggwgwuruwwbububbwgurwurubruwwuguwugrurwwubwrub
|
||||
wbwurrrgrgrrwuubbwugrrwububbwwrwgwwwbuwuwrgubrgguwrb
|
||||
wrgrurgbbrwbugwgwwrbugbrrggggrrwrrrrrbruurbggggbg
|
||||
gwbwuurbgrubrbrugbubbubbwuurbbrwbrwrwubggwubgbburwbbbrwwbg
|
||||
wbuwgwgurgubbbuurwgrgwgubwgwwugugwrbuwuuwgbg
|
||||
ggwgrbubuwggbgwbwbrwuugwgrgbrgbggwrububwgwuwuwbgubbgbg
|
||||
gguwrbbgbgurbggwwgbugguurubruwrgwrguurgbg
|
||||
rbbggbrbuggrgruwgwwrguguuwgbuwrwrbuwgwbwwuw
|
||||
uuwbgrwwubwwwguburgbrwwubggwrgwbrrruwguubu
|
||||
uubguwwurwrwwrgwrbwgurgubrwgwwrurrgwbbuuwrbubbbwu
|
||||
buwbwuwbbwbbbbwugbuwwuuwrrgwbwugbwwuguwrwggrubwwuwggrg
|
||||
wbwwrwwwururbbrugbgrbbwuuuuurwrgwrrbgrgubuugrrwwrgbwruub
|
||||
gwrwwgugbggwbrgbwbrbgggurrrwbbuuwrbwrwgrguuwbrruguwrgbg
|
||||
gggwurgwwuubgruggugbubbguwbgrguwbwwrubggguruwrrbugrgbg
|
||||
ubwggggguguuwuruwwruuugguwrggrrurbrgrbgbg
|
||||
rwuuuwgbggruurrwwgwbrrggwbwbrugrugrbrbggbbwbrgwubggbwb
|
||||
uwugwuurwbrguuwbbgbrbwuwgwrruuububwwrrgrubwwbrgwrggbgbubbr
|
||||
wggrbuuuuwuuwgbrbbubbuugrbbgbbwbrbuwguruwbrwrwgrgrrurgbg
|
||||
rggrrwgguguwwgbgwbbrgbubuwgrurguugguurgwwwwgrgbg
|
||||
wubgbbbuwrubuuruggbwwrrwrggrbrgburbrbuwgbuwwgbg
|
||||
ugwrubgwwgwbuwgwurwuwrrwbgbrrbwrwrbggbbgwgwbrrggbg
|
||||
grgwruuwwrugurrbbuwbwubrbrwbrbbrbguugrrrgbwgrrggugw
|
||||
ggrgggbwrgbuuurugurbwurwrrrgwuburrbggwwbubwgbg
|
||||
wgggruugrggurwgubruwbbuwbwruuwgbrugrbggrgbrbrugugbg
|
||||
wrrrwgggrrrbrwrbrgwrgwrurgrgggwbgwrbbbrgugwwgwguu
|
||||
rbgggwruwugugwrugburuwgrubbrrgubgwbbrgwbgggbbwgguwgbrw
|
||||
buwwbugwuuwgubuuwbbgugrwbwggrgbruguugwgwwwwrruwbg
|
||||
uwwrwrbgbrrrwgbgugwurgwrbrwgurburrbuwgruuwurbbugbwwrrrbrgbg
|
||||
bgururwbgwubwwbrrurgugurbuubwggrrrguubugwbwgbg
|
||||
uwuwbbwrgwubrbuwwrwbubwggwwrgwubgrbwuwbguwg
|
||||
grruurwrrubrubbruurgrgrbwbgbwgurbbruwgbbruubrgrwu
|
||||
wuwrrrwubggubbwgbwbbbrbwbgwrrgbrrgubrguuruwgrbgw
|
||||
rwbrugugubwbbwbwgrgwuubrbbwuwwuggrwwgugugubr
|
||||
wugubwbgwwuguwrgrggwwgbrwgubgurwbrubgwrruwgruwwgbgbg
|
||||
wugugubuurwbrgrbrwuuubruuuurgurbuwbwuuwbrrww
|
||||
uwwrwrrwuugggwbrwrwggrbubbuuwbwwwwbruwuwwrgbgbg
|
||||
burrwugbwrgbuwrugrbbbgubwuggbgrwbwubrugrbu
|
||||
gbuubrubrwwwgrugrgugrguuwwrwwruurbwgwbuuurbbuuwubrb
|
||||
bbbgrbbbubrwuurgggrbwruruubrurbwwwruuuuwggrgbru
|
||||
ruwwwbwggwbwugugrurgwbubwrubgggrubwrururrwuwuuu
|
||||
wrgwuwgwrwwuwgbgbuuruwurrrgggwwubwbgbrgbg
|
||||
uwrrrggrbwbuubbbrrgbrguwbwwuguwrubwgwgwrbwurwuugwgbb
|
||||
ugwrrggbgbruggbggugbbbuwruubrugbgrrwbwrwbwrrbgu
|
||||
rurwugugrurwgwgrwgbuburguguuwuurbgbugguwugurrurgbg
|
||||
wggbwrgrgwuwggbuurbbgugurbwubrugrbburgugrbrggwb
|
||||
gbugbbgbuwbrrubwgrwwbwgrrbbuurbgrguwguuubwb
|
||||
wrbbrwwuguurrwbrbwgurbuwrugubgwbgbgbubbggbwr
|
||||
rgwrggbwubgubruurbugugugurrbrwggrgwbgbwrgrgru
|
||||
rbububggrrbbbubbuwgrwuurbburubbbwguuwubwwburrrwu
|
||||
uurrruubwggggrrbruuuwgbgrbbbwrbrguwgbwgwwrwbr
|
||||
bubwgrguwrurrwwurrgwrbwbwggrgwggwruwgrrguwbggbbbguurwbrbru
|
||||
ggrugubwuwrwggwbubguugrwgubggbbwgugbwwgbguwbuururrwurgg
|
||||
ubrrrbuubugururuugggruwbbwurggwwwruggbwwwuu
|
||||
ruurrbwrrurwrubbwwgrrgbgururgwbrruwgrwwwugwbuwgug
|
||||
wrrggurwubrgrrwburggrbbuwgrrgbuwbggrguwuwgwrwrrgwrurbbgbg
|
||||
wrwbwbuurgugrugbwwbguuwwgwbuggrwuurwwugbg
|
||||
rbrbrbwggbbwwbbbbbuggwbbubuguwwuugrgbrruugggbbwbwwrwgbg
|
||||
rwrwuwrwgurgugbbrrwwwugrbbwbrgbugbbgbrurrgbg
|
||||
buuubwrgwwbrrwbwuwrubruggbwrbruwggrgrgwggrwggugwbbgguw
|
||||
urggwbugguugubguwruwrbbgbgbrggurrubuwrgbg
|
||||
wgbwggwbrwgbgruuguururrbbrgrwgwbwubgrrwguwgwuwuububgbg
|
||||
gwwwbgurgbwrgwbuugurwbuurrrwrgrggggbwubwwgbg
|
||||
bgbuwbgwubgbwgwrruubrrwwrrruwuggrgbrrubbbwugwbwrbgwgrbuu
|
||||
ururubwbugbuwrgrwgburrwuurgwugrgbbgguwgguruwwbuuwgrwbrrbb
|
||||
rgurgruuwwwuubbbbwrrrwwrrrrgrburrguruwgggwwwugbg
|
||||
bgrbwwuuggrbwgwbwbwubuwrbuurwugbbbubrruubrgbg
|
||||
uubugurrgbrguuruwurrwgbuuuwwuwbrrubgbgwugwgwbgbwubwwgr
|
||||
gbgwugwwrgwgwuwwurrggbrugrwrgugugbbbwggbg
|
||||
rbwuggbwguruggbggugrubwrubwwgrggbgguburuubbrrururwubrgggbg
|
||||
bgrwuurubggwrrguguwubbguwgrwgbgrurwugrwgww
|
||||
rrwuububrbbwgbwrrugbwbwuwugruwugbuwrbwgwrgw
|
||||
bbggbguwbbbuwugbguuuwgbrguwwgwwbbruburgbbbbrurrwburuwggbg
|
||||
bgurwgrurbwwurwrgggwrgbubugwuwbbbrgruuugrrrruggbrggbg
|
||||
wrgwubrwwrrbubwuruurbbgbuwgwgurwgwggubrwrwbruuuwrug
|
||||
ggrbuggbbbwrubwgwubrbrbburbgbgwrbwgwgrgggrbrwrgugruubrbb
|
||||
rbrbbruwuugrrbgrububrgrggrurbrbrwbgwbrbwuguwgrwwwub
|
||||
wgrrbgugwurrubbwrwgbuggrrurbgrrbwwuuwurwggbbwwruugru
|
||||
brwuuwwbrrrbggbuwgbbgwrugurwuwbwgubbrgrgwgbbbgrugbg
|
||||
uguwuburgbrggrrbubgurwgrbgrwuwuubrbrwrwruwwwbwgwrbg
|
||||
rbbubuwbubbbbrwubbwrbugwrwubbwrbbgugbgwrbwuwuwgwrw
|
||||
uuuubwbrubwwbrbuwbrgugwubrrurbgugugrbrbbrwggrwggrur
|
||||
gguuugwwbwrbrgwurwwurruwbgwurgrgrbrgbwubggrwgbg
|
||||
gggwrugrbwwugwgwuugugwbugbwwggugguwguugwwuwrbrgbbrbbrwurgbg
|
||||
ubbuugbgbubwbuwwgrbgrrgbbwbbwrrgbugugwugwgggbg
|
||||
guburbrrbrwubbgguguurrwuubrbrwrgbrbguwwbrrrb
|
||||
bwubgbwwrwbwbgbubggwwwbgbgurruugwuruwugbugwugurbugrgbwwbgbg
|
||||
uubrgrwwrrgrrbubrrbwggggrwruwuurrbbrwrgbwrugwbwgbg
|
||||
uubbggbrwugwgbbgbrbrgbrggruwrubbwwwuurgububuwbrrurubbugbg
|
||||
wwgwgwgwggrwruuwugbbrbwwgbgwugbgwwbgbuwbubuuguwwgruwu
|
||||
wrrbruruugbugrwurbwrrwuwuguurgrbugrrgbwurrggugbg
|
||||
gurrrwruwwruuwrgrbgwbbrurgwwwwwrgrrwrubwgggbgwbburrbguww
|
||||
wwrwrubgrrwurbgbbbubrgrwbwrbrgbuwrubuuggbg
|
||||
grbwgwgrbrbrwwbruwgrubgubuwrrrrgbbrugbubrwguuubbbrwgbg
|
||||
brwuwwwrgggrgubruguurbwbrrrwbwrgggbbggwrgugbbbgurbggrwurwg
|
||||
wrbbrwrggbbguugwugwgrrguwugubbbwgwwuggggbubuwwbwgguwwrrwbu
|
||||
gbgwbrwrbgwbwbwwgwgbuwbuwbgbrbrbgbbbrggbg
|
||||
bububbwrwgubgwwggbruggbbrwgbbubwbwwbwbgbwwwwwwwbrurwrr
|
||||
rrgbgrbbubrbwwbgrrggbgrgwubgbugurwbgurgwwbuguwwgbg
|
||||
bbbggburbwwwwugwuubrwbgwbwbgruwbrwubrrrggrrwrwwwrrgwbgbg
|
||||
wwwurgbbuwgbgrurgbbgwguuuuuwwwrubugrwuwwwbrwwbggrggbg
|
||||
urrrubwburgrbwgburgbbgrgrwrggrrbgubwugbg
|
||||
rguwrwgguwuggwrrwurwbubbuwrbwrrrgwrugrrubburrrbbrbgbwgbwgbg
|
||||
buwurrbgwuruwbuuggbwbggbruggurguuugrrbgbg
|
||||
guwuubgrbwrwwbuuwuugbbbrwbuubuurugrwubrguuurwuuwrrbuwrgbg
|
||||
bbubgggwuugwrugbubbguwwrgubwrrgburgwgurugbbbgubwrgbg
|
||||
ruruwgurggguwrugubgrwrrrwggwugugbwgbgwrgbbuuuwrw
|
||||
rgruuwugwugugbgwwwguruuguuwurururbrbbuwrwurgwubgbg
|
||||
ggwgguuugwwwrbuuuurbbbwwwruwubgbgrgurbwugwubuwwwggg
|
||||
gburgwuwrbbrwgwwgbgbwurrwbgbwbwrgbgwrrbrgwwgrrwrgggruugrgbg
|
||||
wbbguuwuurrugbwuwuubwbbuuwgbrgbwwbgwururwb
|
||||
gbwwwgbbggwwgbwurrgrbwrrbubwwgwbgwwrwwbwggwbrwgbg
|
||||
wwgbwwuubwuwrbugwrrugbguwbbwgrwbrwbggwgbgrgb
|
||||
rbbgguubbwwbubgbwgugugwuburwrwgwwuwurrbrbuwurrgggbgrbbwrg
|
||||
urwgrwrbrgggrbuugbbruwubbgrwrgurbwwrbgwbrwrgbbgubbbr
|
||||
bubuwwwwrubburgwgwwubwuwbubruwubrwwgggrgbubwuwubwuwuurgrub
|
||||
wbbgrurrwbuwrgbbbrrguwwurwrwrrrwwwrbubwguguubbruwbrurrgwrgbg
|
||||
uwubwwggrurbrwguubrrwgrwugrugwbubwbbrbuubggbg
|
||||
bgwuwruugwwwwbbwbrugurwguwugwrbuguburbbgrgbrburwwrugu
|
||||
urugrwwgwggguwgbrbwrrwrggrwuuguruwurgbuubrggbwgbgrruuu
|
||||
wurggrrurubwbuwwgbgwbrbuwrwuurrbrrbrrwwwrgbg
|
||||
wwbubrgbbugruguuuruggrwrwgburwwwrbwbrubruwwubgwwbwgr
|
||||
wrrrrggrubuuuuuurggbwwgwbgwubbgwwbrrbbbgrbgbwubwbugbg
|
||||
wbgrrgrbwwbugbbbbgbgrugbrbugwuwubuuwgwuubwgbgwuwgbrrww
|
||||
bwgrrbggbgwrwugwruurwbwugwugwrurrwbrrguwrwwb
|
||||
gbgurggugggubwwgwgbubggrgguubwbururgwbgbubbbwr
|
||||
gbuubwgugubwwgwguuggwbgwbrwgbrrggbwwbgbg
|
||||
wwwgrbrwuuuwgwwgugbbrgbgbbwgbgbrwguwwgrrububgwwgbbbbbb
|
||||
uruwggrbrrwuruburrbwrwwwgwuwwwwuurwgwugrbwwuubuwg
|
||||
rgwugrbruurgrrwbguruwwgubbrwrwbgubgbuuubuugbggwrg
|
||||
brgwgruubuuuuggwuwuggrwgrbgbbwwuwwrgurgwwwu
|
||||
bgrrgurrgwbbrrrwuugugubwgugrruuwwuwrwbwbgb
|
||||
gburggbrugbbbubwwwruwurgwubbbubrburgbuurgbggbgb
|
||||
bbgwbbbwrbuwurgbuuurbwgbbgguubuwgbguggbwbwrguwgrug
|
||||
wuguwwwubwrrbbwuuwbgbwguwbgbuwubgbubbgrbwubwrburgwg
|
||||
wrwrgwurbgwwurubrbwgrgugwwbrrwbwwwugrrrwwbrbruggur
|
||||
uwgurrubgburrguuuubuuuuggwrwgwrbbruggrrwggbgubg
|
||||
wgrwggrwrwwwwbbgbuuurrrbggbgugurrrrgrurggg
|
||||
ubwgwbgburrbguuguwruubrbggrbggbbwuwubrgggb
|
||||
rwguwrurburbwwubuggbbbubrugrbbbbgwggwrrrwrrgubgwwgww
|
||||
ggguurrrgburgrbgggbwuubgrruguwwugrggrwrbgugrbbbrgrgu
|
||||
bbrrburrbbbrrruurgburgbwrbuwuubbugwwuubwbrugw
|
||||
brbwwwuugbggwurgbwrwrrwurrurwwgggurwwuububbwbwugbuubrr
|
||||
grwwuuwuwbgrrwgbrwrwbbgggrguurgwgbuubwbgrgruwbubwurbgwggbg
|
||||
gbubgbwbururrbwrrbuurwrburrgrgrgwwrrurrrrbgbg
|
||||
guurbguugrgbbugwbbwbbuwwbruuuuruwgburuuruwggbgrwrbrwg
|
||||
wwgrbbuwbuwuubrrbwwrbrgugububrwggrugbwrrurugbugrwgbrgubbub
|
||||
ubwwrgugrurbbbbwurwrubuwrwgwwurbuubuwbgwuwubwubgwuuuwuwwbgbg
|
||||
wgwgbgrwgrgrubuurrwrgrwwwbgbubbwwbrgbgwwrrwurbwrgwwgbg
|
||||
rrubwubbgggrwrguguguwggwguwrwrgwwggrgubrwbrbwwugwr
|
||||
gbrrrwuggbgwugurubrgbwrgrbwubbgbuwbggbgrwbrrbbrwggbug
|
||||
grbrbrbbwgruurbbrgbrwgurbubuuwruurbwurbgbwwwbuwugrg
|
||||
brbbrubbuguubwgugwururwgbwubguurgwbrbbggwurrgrwubb
|
||||
wbgwgbwgbbggrwwbubwurbuwgwwbuwbrrwwgrwrrgbuuuguwwbubwugbg
|
||||
urbgbbuubgburwgrubguggbbwwggburgrbuuurgrbuuub
|
||||
grbggbwwuggwrbbgrwuwbrguwwwbwrbbbgrwrguubrgrbrwggbbrurgbg
|
||||
rrbwwgbwwrrbrgwbwururrwgrwggbwrbruubrrgurwurggrgubgggubw
|
||||
bgbrrrgwrbuurruuuububwgwuuguggrrbbwbggurrgbgbrgrrwggbbgb
|
||||
ugbbbwuwbrwgbwbggubwwuuwwrgrgwrburgbwbbwbuubbrwgrrgwr
|
||||
buubrbbbrwgwuurwggggubgrggbrwrbgbbbbbwrruuuggbg
|
||||
ubuggbwgbrwrgguguggwurrwrrwubwguurwbwgwbrwrubggubbw
|
||||
bububuurbgrwrrwrbrurruguwubrbrggrwrrwgwurwbguu
|
||||
rubbwrwrwrrgrubwwgbruguburbrbwwrguggrbbwubugrrgwuwgrggbg
|
||||
uwrrruugwgwbwugbrwrbrrburubggbrubbgbguwruwbwrwubgwggwbbugbg
|
||||
gwugrguuwwbbgubbrgguruwwwbguuuuwgurwuwugubbgbg
|
||||
wurrwubuubuwuwbuurrgugwuggbgwrrwbgbwbwguugggrwwgugb
|
||||
wgwgbwwuggruguruuubgbwurrwbbbwwbrugwbgggbg
|
||||
wrwubrubruuubrrgwugbbrguwugrbgwruwburbwuwbrgrubbrwubrrbub
|
||||
wrwuwubruggugrruwbrgbbbgbgbuuurwbwrwgwbuwuugwbbuwwwrbggw
|
||||
rruwbuuwbrbwrgrggwbuurrugruububbwgwbgwggubgubbgwgubgbg
|
||||
buwwgrgwurgbgrbgbgbbrrggbggguwuwgurbwubbbrwbwwuwbu
|
||||
wwbrggrgurwruubbuwwurgbrbbrbuugwbrbwburbgugb
|
||||
bgbgwugwrbburbrwwwgwuwgurwruguwgruuguwgruwbgbwugwb
|
||||
uwwgwuwgggwbrwggbrbbguwrgrbrggugwrbgbugugwrwurrbubb
|
||||
rgbrgrrrwrgrwuwbrrurugurbgbwwwgbuwbrbuugwgrrbwbrgbugbg
|
||||
gwrwgbgrrgbbbbggrrwugbwrwggurbrwrwwbwggubgr
|
||||
bwbwrbrubwrwuwrrbuwbrguwrgbbuggbubrbugugbrbbwrgrurrgbg
|
||||
uuwbwrgubbguubbbguuwugurrurwwgubrbgwgbwrrrrwwbwuuuuruwgbg
|
||||
rbwrgbgbrbuugrwguguuwwuwubbrgggbgwrwrrwgwubww
|
||||
bwwrbwrbbwruubuwrgrbgbwwwuwgurrurrwrguburubuwgbg
|
||||
bgbrrbbrwbuwwgubrwubrugurwguwgugwbwwrubwbbubrgbwrrbwbuwrrgbg
|
||||
bggbruggbwgrwugurbwwubuuuwgbgwruburgbrrwbwugbg
|
||||
rwguwwrguwrggggwrgwrgwwwbwgrggwrubuuubwuuggwwugrbwburrw
|
||||
uwrgbgbbgbbwurugrwwgburgubrwuuwbbwwwbrrrggugrruwugugbwg
|
||||
uuwwbgruuguwgbbrrbubwubbgubbgggbgrwuuwrrgggru
|
||||
ggbugwurwguwwgrbbgwrurgrbbgrwrguwwrwwurguwgrbrwguugwbrrgrg
|
||||
bwrwugburgbbbrbwuugggrrgwrubrrrgbwrrbrwurrrwbb
|
||||
wbwbgrrrrrbbwbbrguguwgururgurrwgwgguwburggggburgwguu
|
||||
uuurgrbgwwrwwwbrurgbggubrrgwwwgbwgbuuwbbbwwurrbwbgbg
|
||||
brubbguwgrugbrbugwrwwbguuugwrwrrwbrrgwbwwwbgwwubwbuwwurrb
|
||||
wbrwbbrurgwguubwrwrwbbuwwgubruwrrgbrugrwwrbubwgbbu
|
||||
guwgggburrwwbwgwggbrgbwrrrrubbggbuurguwrbbgrbwwbg
|
||||
bwuwguuwwugrbgwgwubbguurubbbbbwrwggbggwurrugbb
|
||||
brwgurwbwrrgbguwbubrwgrbrgwwbbuwwrburgbg
|
||||
ubuuwgwgruugrurgububrgwubbuuwbwruwbgbgrwurbugbg
|
||||
wuubwwugrwwbgbbubbguwgruwrbgwguurgbrubgguwu
|
||||
gbwrwggrrrwwgurwurwwruwbuburrgurrwwurrbbgbg
|
||||
rbwbrruwwwwwgbgbburrrrbwurwbugbrgwwgwrwwurbuggr
|
||||
ugwggugubuuuwuwgubggrwgrugwrwubgwgbbugrwgbg
|
||||
rwbggrbruubbbwgrwuwbrwrwbgwrbbwrbrwgggugubgbwugwgugugbruub
|
||||
gwrbgrrbbburwgwwbrurbwbwwuguwrwrbgurburwbbrbgugwrbu
|
||||
97
20/20-1.py
Executable file
97
20/20-1.py
Executable file
@@ -0,0 +1,97 @@
|
||||
#!/usr/bin/env python3
|
||||
# -*- coding: utf-8 -*-
|
||||
from collections import defaultdict
|
||||
|
||||
file = "./input.txt"
|
||||
cheat_time = 100
|
||||
#file = "./ex.txt"
|
||||
#cheat_time = 25
|
||||
|
||||
from time import time
|
||||
from copy import deepcopy
|
||||
import heapq
|
||||
start_time = time()
|
||||
|
||||
def print_grid(f):
|
||||
for r in f:
|
||||
for s in r:
|
||||
print(s, end="")
|
||||
print()
|
||||
|
||||
def fill_grid(gri:list[list[str]], ma:list[tuple[int,int]], filler:str)->list[list[str]]:
|
||||
result = deepcopy(gri)
|
||||
for m in ma:
|
||||
x , y = m[0],m[1]
|
||||
result[y][x] = filler
|
||||
return result
|
||||
|
||||
|
||||
def read_input(input_file:str, ) -> list[list[str]]:
|
||||
result_grid = []
|
||||
f = open(input_file, "r")
|
||||
for line in f:
|
||||
line = line.strip()
|
||||
if line == "":
|
||||
continue
|
||||
else:
|
||||
temp = []
|
||||
for b in line:
|
||||
temp.append(b)
|
||||
result_grid.append(temp)
|
||||
f.close()
|
||||
return result_grid
|
||||
|
||||
def find_start_end(maze:list[list[str]])->tuple[tuple[int,int],tuple[int,int]]:
|
||||
rows, cols = len(maze), len(maze[0])
|
||||
for r in range(rows):
|
||||
for c in range(cols):
|
||||
if maze[r][c] == 'S':
|
||||
start_point = (r, c)
|
||||
elif maze[r][c] == 'E':
|
||||
end_point = (r, c)
|
||||
return start_point, end_point
|
||||
|
||||
def shortest_path(maze,start,end):
|
||||
rows, cols = len(maze), len(maze[0])
|
||||
# Dijkstra-Algorithmus
|
||||
queue = [(0, start, [])]
|
||||
visited = set()
|
||||
while queue:
|
||||
distance, current, path = heapq.heappop(queue)
|
||||
if current == end:
|
||||
# return distance, path + [current]
|
||||
return distance, [(y, x) for x, y in path + [current]]
|
||||
if current in visited:
|
||||
continue
|
||||
visited.add(current)
|
||||
for dx, dy in [(0, 1), (1, 0), (0, -1), (-1, 0)]:
|
||||
nx, ny = current[0] + dx, current[1] + dy
|
||||
if 0 <= nx < rows and 0 <= ny < cols and maze[nx][ny] != '#':
|
||||
heapq.heappush(queue, (distance + 1, (nx, ny), path + [current]))
|
||||
return None, []
|
||||
|
||||
if __name__ == "__main__":
|
||||
grid = read_input(file)
|
||||
p_start, p_end = find_start_end(grid)
|
||||
sol = shortest_path(grid, p_start, p_end)
|
||||
full_path_len = sol[0]
|
||||
#print(sol)
|
||||
#print(f"Shortest Path Length: {sol[0]}")
|
||||
#print_grid(fill_grid(grid,sol[1],"O"))
|
||||
counts = defaultdict(int)
|
||||
for i in range(1,len(grid)-1):
|
||||
for j in range(1,len(grid[0])-1):
|
||||
if grid[i][j] == "#":
|
||||
t_grid = deepcopy(grid)
|
||||
t_grid[i][j] = "."
|
||||
t_sol = shortest_path(t_grid, p_start, p_end)
|
||||
if t_sol and t_sol[0] < sol[0]:
|
||||
counts[abs(t_sol[0]-sol[0])] += 1
|
||||
|
||||
p1_solution = 0
|
||||
print(counts)
|
||||
for key in counts.keys():
|
||||
if key >= cheat_time:
|
||||
p1_solution += counts[key]
|
||||
print(f"Solution Part 1: {p1_solution}")
|
||||
print(f'Runtime: {time()-start_time:.4f} s')
|
||||
96
20/20-11.py
Executable file
96
20/20-11.py
Executable file
@@ -0,0 +1,96 @@
|
||||
#!/usr/bin/env python3
|
||||
# -*- coding: utf-8 -*-
|
||||
from collections import defaultdict
|
||||
|
||||
file = "./input.txt"
|
||||
cheat_time = 100
|
||||
#file = "./ex.txt"
|
||||
#cheat_time = 25
|
||||
|
||||
from time import time
|
||||
from copy import deepcopy
|
||||
import heapq
|
||||
start_time = time()
|
||||
|
||||
def print_grid(f):
|
||||
for r in f:
|
||||
for s in r:
|
||||
print(s, end="")
|
||||
print()
|
||||
|
||||
def fill_grid(gri:list[list[str]], ma:list[tuple[int,int]], filler:str)->list[list[str]]:
|
||||
result = deepcopy(gri)
|
||||
for m in ma:
|
||||
x , y = m[0],m[1]
|
||||
result[y][x] = filler
|
||||
return result
|
||||
|
||||
|
||||
def read_input(input_file:str, ) -> list[list[str]]:
|
||||
result_grid = []
|
||||
f = open(input_file, "r")
|
||||
for line in f:
|
||||
line = line.strip()
|
||||
if line == "":
|
||||
continue
|
||||
else:
|
||||
temp = []
|
||||
for b in line:
|
||||
temp.append(b)
|
||||
result_grid.append(temp)
|
||||
f.close()
|
||||
return result_grid
|
||||
|
||||
def find_start_end(maze:list[list[str]])->tuple[tuple[int,int],tuple[int,int]]:
|
||||
rows, cols = len(maze), len(maze[0])
|
||||
for r in range(rows):
|
||||
for c in range(cols):
|
||||
if maze[r][c] == 'S':
|
||||
start_point = (r, c)
|
||||
elif maze[r][c] == 'E':
|
||||
end_point = (r, c)
|
||||
return start_point, end_point
|
||||
|
||||
def shortest_path(maze,start,end):
|
||||
rows, cols = len(maze), len(maze[0])
|
||||
# Dijkstra-Algorithmus
|
||||
queue = [(0, start, [])]
|
||||
visited = set()
|
||||
while queue:
|
||||
distance, current, path = heapq.heappop(queue)
|
||||
if current == end:
|
||||
# return distance, path + [current]
|
||||
return distance, [(y, x) for x, y in path + [current]]
|
||||
if current in visited:
|
||||
continue
|
||||
visited.add(current)
|
||||
for dx, dy in [(0, 1), (1, 0), (0, -1), (-1, 0)]:
|
||||
nx, ny = current[0] + dx, current[1] + dy
|
||||
if 0 <= nx < rows and 0 <= ny < cols and maze[nx][ny] != '#':
|
||||
heapq.heappush(queue, (distance + 1, (nx, ny), path + [current]))
|
||||
return None, []
|
||||
|
||||
if __name__ == "__main__":
|
||||
grid = read_input(file)
|
||||
p_start, p_end = find_start_end(grid)
|
||||
sol = shortest_path(grid, p_start, p_end)
|
||||
full_path_len = sol[0]
|
||||
#print(sol)
|
||||
#print(f"Shortest Path Length: {sol[0]}")
|
||||
#print_grid(fill_grid(grid,sol[1],"O"))
|
||||
counts = defaultdict(int)
|
||||
for i in range(1,len(grid)-1):
|
||||
for j in range(1,len(grid[0])-1):
|
||||
if grid[i][j] == "#":
|
||||
grid[i][j] = "."
|
||||
t_sol = shortest_path(grid, p_start, p_end)
|
||||
if t_sol and t_sol[0] < sol[0]:
|
||||
counts[abs(t_sol[0]-sol[0])] += 1
|
||||
grid[i][j] = "#"
|
||||
p1_solution = 0
|
||||
print(counts)
|
||||
for key in counts.keys():
|
||||
if key >= cheat_time:
|
||||
p1_solution += counts[key]
|
||||
print(f"Solution Part 1: {p1_solution}")
|
||||
print(f'Runtime: {time()-start_time:.4f} s')
|
||||
15
20/ex.txt
Normal file
15
20/ex.txt
Normal file
@@ -0,0 +1,15 @@
|
||||
###############
|
||||
#...#...#.....#
|
||||
#.#.#.#.#.###.#
|
||||
#S#...#.#.#...#
|
||||
#######.#.#.###
|
||||
#######.#.#...#
|
||||
#######.#.###.#
|
||||
###..E#...#...#
|
||||
###.#######.###
|
||||
#...###...#...#
|
||||
#.#####.#.###.#
|
||||
#.#...#.#.#...#
|
||||
#.#.#.#.#.#.###
|
||||
#...#...#...###
|
||||
###############
|
||||
141
20/input.txt
Normal file
141
20/input.txt
Normal file
@@ -0,0 +1,141 @@
|
||||
#############################################################################################################################################
|
||||
#.....#.....#.......#.......#...#.....###...#######...#.........#...#...###...###.....#.....#...#...#...#...#...................#.......#...#
|
||||
#.###.#.###.#.#####.#.#####.#.#.#.###.###.#.#######.#.#.#######.#.#.#.#.###.#.###.###.#.###.#.#.#.#.#.#.#.#.#.#################.#.#####.#.#.#
|
||||
#...#.#...#.#.#.....#.....#.#.#.#.#...#...#...###...#.#.......#...#.#.#.....#...#...#.#.#...#.#.#.#...#.#.#.#.........#.........#.....#...#.#
|
||||
###.#.###.#.#.#.#########.#.#.#.#.#.###.#####.###.###.#######.#####.#.#########.###.#.#.#.###.#.#.#####.#.#.#########.#.#############.#####.#
|
||||
#...#.....#...#.....###...#.#.#...#...#.....#.#...#...#.......#...#.#...#.......#...#.#.#.###.#.#.#.....#.#.###...#...#.......#...###.#.....#
|
||||
#.#################.###.###.#.#######.#####.#.#.###.###.#######.#.#.###.#.#######.###.#.#.###.#.#.#.#####.#.###.#.#.#########.#.#.###.#.#####
|
||||
#.............#...#...#...#.#.#.......#...#.#.#.#...###.....#...#...#...#.#...#...#...#.#.....#.#.#.#...#.#.#...#.#.#.........#.#.....#.#...#
|
||||
#############.#.#.###.###.#.#.#.#######.#.#.#.#.#.#########.#.#######.###.#.#.#.###.###.#######.#.#.#.#.#.#.#.###.#.#.#########.#######.#.#.#
|
||||
###...###.....#.#...#...#.#.#.#.#.....#.#.#.#.#.#...###...#.#.......#...#.#.#.#.#...###.......#.#.#.#.#.#.#.#...#.#.#.#...#...#.......#...#.#
|
||||
###.#.###.#####.###.###.#.#.#.#.#.###.#.#.#.#.#.###.###.#.#.#######.###.#.#.#.#.#.###########.#.#.#.#.#.#.#.###.#.#.#.#.#.#.#.#######.#####.#
|
||||
#...#...#.......###...#...#...#...#...#.#...#.#...#.#...#.#.#.......#...#.#.#...#...#...#...#.#...#...#...#.#...#...#...#.#.#.#.....#...#...#
|
||||
#.#####.#############.#############.###.#####.###.#.#.###.#.#.#######.###.#.#######.#.#.#.#.#.#############.#.###########.#.#.#.###.###.#.###
|
||||
#.....#.#...#...#...#.....#.........###.#...#...#.#.#...#.#.#.###...#.#...#.#.......#.#.#.#.#.#...........#...#.....#.....#.#.#.#...#...#...#
|
||||
#####.#.#.#.#.#.#.#.#####.#.###########.#.#.###.#.#.###.#.#.#.###.#.#.#.###.#.#######.#.#.#.#.#.#########.#####.###.#.#####.#.#.#.###.#####.#
|
||||
#.....#...#...#...#.#...#.#.#...###...#...#...#...#...#.#...#...#.#.#.#...#.#...#...#.#.#.#.#...#...###...#.....###...#.....#.#.#.#...#.....#
|
||||
#.#################.#.#.#.#.#.#.###.#.#######.#######.#.#######.#.#.#.###.#.###.#.#.#.#.#.#.#####.#.###.###.###########.#####.#.#.#.###.#####
|
||||
#.................#.#.#.#.#.#.#...#.#.###...#.....#...#.....#...#.#...#...#.#...#.#.#.#.#.#.###...#...#.#...#...#.......#.....#.#.#.#...#...#
|
||||
#################.#.#.#.#.#.#.###.#.#.###.#.#####.#.#######.#.###.#####.###.#.###.#.#.#.#.#.###.#####.#.#.###.#.#.#######.#####.#.#.#.###.#.#
|
||||
#.......#...#.....#...#.#.#.#.#...#.#.#...#.###...#.###.....#...#...#...###.#.....#.#.#...#...#.....#.#.#.###.#...#...#...###...#.#.#.#...#.#
|
||||
#.#####.#.#.#.#########.#.#.#.#.###.#.#.###.###.###.###.#######.###.#.#####.#######.#.#######.#####.#.#.#.###.#####.#.#.#####.###.#.#.#.###.#
|
||||
#.#...#...#...#...#...#...#...#...#.#.#...#...#...#...#.....#...#...#.#...#.#.......#.....#...#...#.#...#.....#.....#...#...#...#.#.#...#...#
|
||||
#.#.#.#########.#.#.#.###########.#.#.###.###.###.###.#####.#.###.###.#.#.#.#.###########.#.###.#.#.###########.#########.#.###.#.#.#####.###
|
||||
#...#...........#...#...........#...#...#...#...#.#...#...#.#...#...#...#.#.#.###...###...#...#.#.#.....#.......###...#...#.....#...#...#...#
|
||||
###############################.#######.###.###.#.#.###.#.#.###.###.#####.#.#.###.#.###.#####.#.#.#####.#.#########.#.#.#############.#.###.#
|
||||
###.............###...#...###...#.......#...#...#.#.....#.#...#...#.#.....#.#.#...#.#...#...#.#.#.....#.#.#...#...#.#...#...#...#...#.#...#.#
|
||||
###.###########.###.#.#.#.###.###.#######.###.###.#######.###.###.#.#.#####.#.#.###.#.###.#.#.#.#####.#.#.#.#.#.#.#.#####.#.#.#.#.#.#.###.#.#
|
||||
#...#...#...#...#...#...#...#...#.......#...#...#.......#.....#...#.#.#...#.#.#.#...#.#...#.#.#.....#...#.#.#...#...#.....#.#.#...#...#...#.#
|
||||
#.###.#.#.#.#.###.#########.###.#######.###.###.#######.#######.###.#.#.#.#.#.#.#.###.#.###.#.#####.#####.#.#########.#####.#.#########.###.#
|
||||
#.....#...#.#.#...#.......#...#.#.......###.#...#.....#.......#.###.#...#.#.#...#...#...#...#...###.....#...#...#...#...###...#.......#...#.#
|
||||
###########.#.#.###.#####.###.#.#.#########.#.###.###.#######.#.###.#####.#.#######.#####.#####.#######.#####.#.#.#.###.#######.#####.###.#.#
|
||||
#...#...#...#...#...#...#.#...#.#...#...#...#...#...#.#...#...#...#.#.....#.......#...#...#.....#.....#.#.....#...#...#...#...#.#.....###...#
|
||||
#.#.#.#.#.#######.###.#.#.#.###.###.#.#.#.#####.###.#.#.#.#.#####.#.#.###########.###.#.###.#####.###.#.#.###########.###.#.#.#.#.###########
|
||||
#.#.#.#.#.........#...#...#.....#...#.#.#...#...###.#.#.#.#.....#.#.#.#...###...#.#...#...#.#...#...#.#.#...........#...#...#...#.......#...#
|
||||
#.#.#.#.###########.#############.###.#.###.#.#####.#.#.#.#####.#.#.#.#.#.###.#.#.#.#####.#.#.#.###.#.#.###########.###.###############.#.#.#
|
||||
#.#...#.#...#...###.#...........#.#...#...#.#...#...#...#.#...#.#.#.#.#.#...#.#.#.#.#.....#.#.#...#.#.#.#...#.......###.................#.#.#
|
||||
#.#####.#.#.#.#.###.#.#########.#.#.#####.#.###.#.#######.#.#.#.#.#.#.#.###.#.#.#.#.#.#####.#.###.#.#.#.#.#.#.###########################.#.#
|
||||
#.#...#...#...#.#...#.#.........#...#...#...#...#.....#...#.#...#.#.#.#...#...#...#.#...#...#.###...#.#.#.#...#.....#...#...#...#...#...#.#.#
|
||||
#.#.#.#########.#.###.#.#############.#.#####.#######.#.###.#####.#.#.###.#########.###.#.###.#######.#.#.#####.###.#.#.#.#.#.#.#.#.#.#.#.#.#
|
||||
#.#.#.........#.#.#...#.......#.......#.....#.#...#...#...#.....#.#.#.#...#.........#...#...#.#.......#.#.....#.#...#.#...#...#...#...#...#.#
|
||||
#.#.#########.#.#.#.#########.#.###########.#.#.#.#.#####.#####.#.#.#.#.###.#########.#####.#.#.#######.#####.#.#.###.#####################.#
|
||||
#...###...#...#...#.#.....#...#.#.........#.#...#.#.#####...#...#.#.#...###...#.....#.....#...#.........#...#.#.#.....#...#...#.............#
|
||||
#######.#.#.#######.#.###.#.###.#.#######.#.#####.#.#######.#.###.#.#########.#.###.#####.###############.#.#.#.#######.#.#.#.#.#############
|
||||
#.......#...#.....#.#...#.#.....#.......#.#.....#.#...#.....#.#...#.###.......#.#...#...#.###...#.........#...#.#.......#...#...#...###.....#
|
||||
#.###########.###.#.###.#.#############.#.#####.#.###.#.#####.#.###.###.#######.#.###.#.#.###.#.#.#############.#.###############.#.###.###.#
|
||||
#...........#...#.#.#...#.#.............#...#...#...#.#.#.....#...#...#...#...#.#...#.#.#.....#.#.............#.#...........#.....#...#...#.#
|
||||
###########.###.#.#.#.###.#.###############.#.#####.#.#.#.#######.###.###.#.#.#.###.#.#.#######.#############.#.###########.#.#######.###.#.#
|
||||
###...#.....#...#...#...#.#...#...........#...#...#...#.#.###.....#...###...#.#.#...#.#.#.....#.###...........#.#...........#.#.......#...#.#
|
||||
###.#.#.#####.#########.#.###.#.#########.#####.#.#####.#.###.#####.#########.#.#.###.#.#.###.#.###.###########.#.###########.#.#######.###.#
|
||||
#...#...#.....#...#.....#.....#.#.......#...###.#.....#.#.#...#...#.#.........#.#...#.#.#...#.#.#...#...........#...#...#...#.#...#...#.#...#
|
||||
#.#######.#####.#.#.###########.#.#####.###.###.#####.#.#.#.###.#.#.#.#########.###.#.#.###.#.#.#.###.#############.#.#.#.#.#.###.#.#.#.#.###
|
||||
#.......#.#.....#...#...#.....#.#...###.....#...#.....#...#.#...#.#.#.....#...#.#...#.#.#...#...#...#.#.........#...#.#...#.#.#...#.#...#...#
|
||||
#######.#.#.#########.#.#.###.#.###.#########.###.#########.#.###.#.#####.#.#.#.#.###.#.#.#########.#.#.#######.#.###.#####.#.#.###.#######.#
|
||||
#.......#.#.........#.#...###...###...........#...###...###...#...#...#...#.#...#...#.#.#.....#...#...#.......#.#.....#...#...#...#...#...#.#
|
||||
#.#######.#########.#.#########################.#####.#.#######.#####.#.###.#######.#.#.#####.#.#.###########.#.#######.#.#######.###.#.#.#.#
|
||||
#.......#.###...#...#...#...#...###...#...#...#.....#.#.......#.#...#.#...#.......#...#.#...#.#.#.............#...#.....#...#...#.....#.#.#.#
|
||||
#######.#.###.#.#.#####.#.#.#.#.###.#.#.#.#.#.#####.#.#######.#.#.#.#.###.#######.#####.#.#.#.#.#################.#.#######.#.#.#######.#.#.#
|
||||
#.....#.#.#...#.#.......#.#.#.#.....#...#...#.#...#...#.......#.#.#...###...#...#.#.....#.#...#.................#.#.#...###...#...#...#.#.#.#
|
||||
#.###.#.#.#.###.#########.#.#.###############.#.#.#####.#######.#.#########.#.#.#.#.#####.#####################.#.#.#.#.#########.#.#.#.#.#.#
|
||||
#...#.#...#...#...........#...#.....#.......#...#...#...#...###.#.....#.....#.#...#.......#...#.................#...#.#.#...#...#...#...#...#
|
||||
###.#.#######.#################.###.#.#####.#######.#.###.#.###.#####.#.#####.#############.#.#.#####################.#.#.#.#.#.#############
|
||||
#...#.###...#.............#...#.###...#...#.....#...#.....#...#...#...#.#...#...#...#.......#.#.................#.....#...#.#.#.............#
|
||||
#.###.###.#.#############.#.#.#.#######.#.#####.#.###########.###.#.###.#.#.###.#.#.#.#######.#################.#.#########.#.#############.#
|
||||
#...#.#...#.....#.........#.#...#.......#.......#.#...#...#...###.#...#.#.#...#...#.#...#...#.#.................#...#.......#.#.............#
|
||||
###.#.#.#######.#.#########.#####.###############.#.#.#.#.#.#####.###.#.#.###.#####.###.#.#.#.#.###################.#.#######.#.#############
|
||||
#...#.#.......#.#...........#...#.............###...#.#.#.#.....#...#.#.#.###.....#.###...#.#...#.....#.........#...#.........#...#.........#
|
||||
#.###.#######.#.#############.#.#############.#######.#.#.#####.###.#.#.#.#######.#.#######.#####.###.#.#######.#.###############.#.#######.#
|
||||
#...#.........#...#...........#.........#...#.......#...#.......#...#.#.#.#.......#.#...###.#...#.###...#.....#...#.....#...#...#...#...#...#
|
||||
###.#############.#.###################.#.#.#######.#############.###.#.#.#.#######.#.#.###.#.#.#.#######.###.#####.###.#.#.#.#.#####.#.#.###
|
||||
#...#...........#.#...................#...#.........#######S..###.....#...#.....#...#.#.....#.#.#.#.......###.....#...#...#...#.......#.#...#
|
||||
#.###.#########.#.###################.#######################.#################.#.###.#######.#.#.#.#############.###.#################.###.#
|
||||
#.....#.........#.....................#################.....#...#...#...#...###...###...#...#.#...#.......#.....#...#...#.........#...#...#.#
|
||||
#######.###############################################.###.###.#.#.#.#.#.#.###########.#.#.#.###########.#.###.###.###.#.#######.#.#.###.#.#
|
||||
###...#.............#..............E#################...###...#.#.#...#...#.#...........#.#...###.........#.#...###...#...#.....#...#.###...#
|
||||
###.#.#############.#.###############################.#######.#.#.#########.#.###########.#######.#########.#.#######.#####.###.#####.#######
|
||||
#...#...........###...#.........................#####.......#...#.....#...#.#.............###...#.....#.....#.#.....#.......###.....#.......#
|
||||
#.#############.#######.#######################.###########.#########.#.#.#.#################.#.#####.#.#####.#.###.###############.#######.#
|
||||
#...#.....#...#...#...#.......................#.#...#.....#...#.....#.#.#...#...........#.....#.....#...#.....#...#...........#...#.........#
|
||||
###.#.###.#.#.###.#.#.#######################.#.#.#.#.###.###.#.###.#.#.#####.#########.#.#########.#####.#######.###########.#.#.###########
|
||||
#...#.#...#.#...#.#.#...#.....#...#...........#.#.#...###.....#...#...#.#...#.........#.#.....#...#.......#.....#.#.........#...#...........#
|
||||
#.###.#.###.###.#.#.###.#.###.#.#.#.###########.#.###############.#####.#.#.#########.#.#####.#.#.#########.###.#.#.#######.###############.#
|
||||
#.....#.....###.#.#...#.#...#...#...#...#...#...#.#.......#...###.....#.#.#...#...#...#.#...#...#...........#...#.#.......#.#.....#.........#
|
||||
###############.#.###.#.###.#########.#.#.#.#.###.#.#####.#.#.#######.#.#.###.#.#.#.###.#.#.#################.###.#######.#.#.###.#.#########
|
||||
#.....#.....#...#.....#.....#.......#.#.#.#.#.....#.....#...#.#...###.#.#.#...#.#.#...#...#.###...#...#.....#.....#...#...#...###.#.......###
|
||||
#.###.#.###.#.###############.#####.#.#.#.#.###########.#####.#.#.###.#.#.#.###.#.###.#####.###.#.#.#.#.###.#######.#.#.#########.#######.###
|
||||
#...#.#...#...#.............#.....#...#...#...#.....###...#...#.#...#.#.#.#.#...#.###.....#...#.#...#.#...#...#.....#.#.....#...#.......#...#
|
||||
###.#.###.#####.###########.#####.###########.#.###.#####.#.###.###.#.#.#.#.#.###.#######.###.#.#####.###.###.#.#####.#####.#.#.#######.###.#
|
||||
#...#...#...#...#...........#.....#...........#.#...#...#.#...#.#...#.#.#.#...#...#...###...#...#...#...#...#.#...###.......#.#.......#.....#
|
||||
#.#####.###.#.###.###########.#####.###########.#.###.#.#.###.#.#.###.#.#.#####.###.#.#####.#####.#.###.###.#.###.###########.#######.#######
|
||||
#.....#.....#...#...#...#...#...###.#...#.......#...#.#.#...#.#.#.#...#.#.....#...#.#.....#.......#...#.....#...#...###...###.#.......#.....#
|
||||
#####.#########.###.#.#.#.#.###.###.#.#.#.#########.#.#.###.#.#.#.#.###.#####.###.#.#####.###########.#########.###.###.#.###.#.#######.###.#
|
||||
#.....#.....#...###...#...#...#.#...#.#...#.........#.#.....#...#...#...#.....#...#.#.....#.....#.....#.......#...#.....#.....#.......#.#...#
|
||||
#.#####.###.#.###############.#.#.###.#####.#########.###############.###.#####.###.#.#####.###.#.#####.#####.###.###################.#.#.###
|
||||
#.......#...#.#...#...........#.#.....#...#.#...#...#.......#.....#...###.....#...#.#.....#...#.#.......#.....###...#.................#.#...#
|
||||
#########.###.#.#.#.###########.#######.#.#.#.#.#.#.#######.#.###.#.#########.###.#.#####.###.#.#########.#########.#.#################.###.#
|
||||
#.........#...#.#.#.......#...#...#.....#.#...#...#.#.......#.#...#.###.....#.#...#.....#.#...#.....#...#...###...#.#...................#...#
|
||||
#.#########.###.#.#######.#.#.###.#.#####.#########.#.#######.#.###.###.###.#.#.#######.#.#.#######.#.#.###.###.#.#.#####################.###
|
||||
#...........#...#.......#...#.....#.....#.#...#...#.#.........#...#...#...#.#.#.....###.#...#.......#.#.....#...#.#...#.....#...#...#...#...#
|
||||
#############.#########.###############.#.#.#.#.#.#.#############.###.###.#.#.#####.###.#####.#######.#######.###.###.#.###.#.#.#.#.#.#.###.#
|
||||
#...........#.........#...#.....###.....#...#...#...#...###...###...#...#.#.#.....#...#.....#.###...#.........#...###...###...#...#...#...#.#
|
||||
#.#########.#########.###.#.###.###.#################.#.###.#.#####.###.#.#.#####.###.#####.#.###.#.###########.#########################.#.#
|
||||
#.#.....#...#...#...#.#...#...#.....#.....#...#...#...#.#...#.....#...#...#...###...#.#.....#...#.#.#...#.......#...#...#...........#.....#.#
|
||||
#.#.###.#.###.#.#.#.#.#.#####.#######.###.#.#.#.#.#.###.#.#######.###.#######.#####.#.#.#######.#.#.#.#.#.#######.#.#.#.#.#########.#.#####.#
|
||||
#...#...#.....#...#...#.......#.....#.#...#.#.#.#.#...#.#...#.....###.#.......#...#.#.#.....#...#.#.#.#.#.........#...#...#.........#.....#.#
|
||||
#####.#########################.###.#.#.###.#.#.#.###.#.###.#.#######.#.#######.#.#.#.#####.#.###.#.#.#.###################.#############.#.#
|
||||
#...#.................#...#...#...#.#.#...#.#.#.#.#...#.#...#.....#...#...#...#.#.#.#.#...#.#...#.#...#.#...#...#...#...#...#...........#.#.#
|
||||
#.#.#################.#.#.#.#.###.#.#.###.#.#.#.#.#.###.#.#######.#.#####.#.#.#.#.#.#.#.#.#.###.#.#####.#.#.#.#.#.#.#.#.#.###.#########.#.#.#
|
||||
#.#...................#.#...#.#...#.#.#...#.#...#...#...#.#...#...#.....#.#.#.#.#.#.#.#.#...#...#.....#.#.#...#...#.#.#...###.#.........#.#.#
|
||||
#.#####################.#####.#.###.#.#.###.#########.###.#.#.#.#######.#.#.#.#.#.#.#.#.#####.#######.#.#.#########.#.#######.#.#########.#.#
|
||||
#...#...#.......#.....#.###...#.#...#.#...#.........#...#.#.#...#.......#.#.#.#.#.#.#.#...#...#...#...#.#.....#.....#.......#.#.#...#...#...#
|
||||
###.#.#.#.#####.#.###.#.###.###.#.###.###.#########.###.#.#.#####.#######.#.#.#.#.#.#.###.#.###.#.#.###.#####.#.###########.#.#.#.#.#.#.#####
|
||||
#...#.#...#.....#.#...#.#...#...#...#.#...#...#...#.#...#.#.#...#...#.....#.#.#.#.#.#...#.#.#...#.#.###.#.....#.#.........#...#...#...#.....#
|
||||
#.###.#####.#####.#.###.#.###.#####.#.#.###.#.#.#.#.#.###.#.#.#.###.#.#####.#.#.#.#.###.#.#.#.###.#.###.#.#####.#.#######.#################.#
|
||||
#.#...#.....#...#.#.#...#...#.#...#...#.#...#.#.#.#.#...#.#...#.#...#...#...#.#.#.#.###.#.#.#.#...#...#.#.....#.#...#...#.....#...#.........#
|
||||
#.#.###.#####.#.#.#.#.#####.#.#.#.#####.#.###.#.#.#.###.#.#####.#.#####.#.###.#.#.#.###.#.#.#.#.#####.#.#####.#.###.#.#.#####.#.#.#.#########
|
||||
#.#...#.......#.#.#...#...#.#.#.#.###...#...#...#.#...#.#.#.....#...###...###.#.#.#...#.#.#.#.#...#...#.#.....#...#...#...###...#.#...#...###
|
||||
#.###.#########.#.#####.#.#.#.#.#.###.#####.#####.###.#.#.#.#######.#########.#.#.###.#.#.#.#.###.#.###.#.#######.#######.#######.###.#.#.###
|
||||
#.....#.........#.#.....#...#...#...#...#...#...#.....#.#.#...#...#.........#.#.#.#...#.#.#...###.#...#.#.......#...#...#.......#...#.#.#...#
|
||||
#######.#########.#.###############.###.#.###.#.#######.#.###.#.#.#########.#.#.#.#.###.#.#######.###.#.#######.###.#.#.#######.###.#.#.###.#
|
||||
###...#.......#...#.............#...#...#...#.#.........#...#.#.#.#...#.....#...#.#...#.#.#.......#...#.#.......###.#.#.#.......#...#...#...#
|
||||
###.#.#######.#.###############.#.###.#####.#.#############.#.#.#.#.#.#.#########.###.#.#.#.#######.###.#.#########.#.#.#.#######.#######.###
|
||||
#...#.........#.###.............#...#...#...#.#.......#.....#...#.#.#...#.......#.#...#.#.#.......#.###...###.......#.#.#.......#...#...#...#
|
||||
#.#############.###.###############.###.#.###.#.#####.#.#########.#.#####.#####.#.#.###.#.#######.#.#########.#######.#.#######.###.#.#.###.#
|
||||
#...#.........#.#...#...#...#...#...#...#...#...#...#.#.###...#...#.......#...#.#.#...#...#.......#.....#...#.....#...#.#.....#...#.#.#.#...#
|
||||
###.#.#######.#.#.###.#.#.#.#.#.#.###.#####.#####.#.#.#.###.#.#.###########.#.#.#.###.#####.###########.#.#.#####.#.###.#.###.###.#.#.#.#.###
|
||||
###.#.#.......#.#.#...#...#.#.#...###.#.....###...#...#...#.#...#...#...#...#...#...#.....#.#...#.....#...#...#...#.#...#...#...#.#.#.#.#...#
|
||||
###.#.#.#######.#.#.#######.#.#######.#.#######.#########.#.#####.#.#.#.#.#########.#####.#.#.#.#.###.#######.#.###.#.#####.###.#.#.#.#.###.#
|
||||
#...#.#.......#.#.#.....#...#.#.......#.......#.......#...#.....#.#.#.#.#.........#.#.....#...#.#.#...#.....#.#.#...#...#...###.#.#...#...#.#
|
||||
#.###.#######.#.#.#####.#.###.#.#############.#######.#.#######.#.#.#.#.#########.#.#.#########.#.#.###.###.#.#.#.#####.#.#####.#.#######.#.#
|
||||
#...#...#.....#.#.#.....#.#...#.#.....#.....#.###.....#.#.......#.#...#...#...#...#.#.......#...#.#...#...#.#.#.#.#.....#.....#...#.......#.#
|
||||
###.###.#.#####.#.#.#####.#.###.#.###.#.###.#.###.#####.#.#######.#######.#.#.#.###.#######.#.###.###.###.#.#.#.#.#.#########.#####.#######.#
|
||||
###.....#.....#.#...#.....#.###...#...#...#...#...#...#.#...#...#.......#...#.#.###.#...#...#.#...#...#...#...#.#.#...#.....#.....#.......#.#
|
||||
#############.#.#####.#####.#######.#####.#####.###.#.#.###.#.#.#######.#####.#.###.#.#.#.###.#.###.###.#######.#.###.#.###.#####.#######.#.#
|
||||
#.............#.###...#...#.#...###...#...#.....#...#.#.#...#.#.#...#...#...#.#...#...#...#...#...#...#.......#.#.###.#.#...#.....#...###.#.#
|
||||
#.#############.###.###.#.#.#.#.#####.#.###.#####.###.#.#.###.#.#.#.#.###.#.#.###.#########.#####.###.#######.#.#.###.#.#.###.#####.#.###.#.#
|
||||
#...#...#.....#.#...#...#.#.#.#.......#...#.#...#...#...#...#.#...#.#.....#.#...#.......#...#.....###...#.....#...#...#.#...#.......#...#.#.#
|
||||
###.#.#.#.###.#.#.###.###.#.#.###########.#.#.#.###.#######.#.#####.#######.###.#######.#.###.#########.#.#########.###.###.###########.#.#.#
|
||||
#...#.#.#.#...#.#...#.#...#.#.#...#.....#.#.#.#.#...#.......#.....#.#...#...#...#...#...#...#.....#.....#.........#.#...###...#.....#...#.#.#
|
||||
#.###.#.#.#.###.###.#.#.###.#.#.#.#.###.#.#.#.#.#.###.###########.#.#.#.#.###.###.#.#.#####.#####.#.#############.#.#.#######.#.###.#.###.#.#
|
||||
#.....#...#.....###...#.....#...#...###...#...#...###.............#...#...###.....#...#####.......#...............#...#######...###...###...#
|
||||
#############################################################################################################################################
|
||||
69
24/24-01.py
Normal file
69
24/24-01.py
Normal file
@@ -0,0 +1,69 @@
|
||||
#!/usr/bin/env python3
|
||||
# -*- coding: utf-8 -*-
|
||||
|
||||
from time import time
|
||||
from copy import deepcopy
|
||||
import re
|
||||
|
||||
start_time = time()
|
||||
|
||||
file = "./input.txt"
|
||||
# file = "./ex-small.txt"
|
||||
# file = "./ex-big.txt"
|
||||
|
||||
|
||||
def read_and_parse(input_file: str) -> tuple[dict[str:int], list[tuple[str, str, str, str]]]:
|
||||
result_dict = {}
|
||||
with open(input_file, 'r') as d:
|
||||
datei = d.read()
|
||||
pat_dict = r'(.+)\: +(\d)'
|
||||
pat_list = r'(.+) +(.+) +(.+) +\-\> +(.+)'
|
||||
match_d = re.findall(pat_dict, datei)
|
||||
# print(match_d)
|
||||
for d in match_d:
|
||||
result_dict[d[0]] = int(d[1])
|
||||
match_l = re.findall(pat_list, datei)
|
||||
# print(match_l)
|
||||
return result_dict, match_l
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
in_dict, in_list = read_and_parse(file)
|
||||
var_found = True
|
||||
while var_found:
|
||||
var_found = False
|
||||
temp = []
|
||||
for e in in_list:
|
||||
if e[0] in in_dict and e[2] in in_dict:
|
||||
var_found = True
|
||||
if e[1] == "AND":
|
||||
if in_dict[e[0]] == 1 and in_dict[e[2]] == 1:
|
||||
in_dict[e[3]] = 1
|
||||
else:
|
||||
in_dict[e[3]] = 0
|
||||
elif e[1] == "OR":
|
||||
if in_dict[e[0]] == 1 or in_dict[e[2]] == 1:
|
||||
in_dict[e[3]] = 1
|
||||
else:
|
||||
in_dict[e[3]] = 0
|
||||
elif e[1] == "XOR":
|
||||
if in_dict[e[0]] != in_dict[e[2]]:
|
||||
in_dict[e[3]] = 1
|
||||
else:
|
||||
in_dict[e[3]] = 0
|
||||
else:
|
||||
temp.append(e)
|
||||
in_list = deepcopy(temp)
|
||||
|
||||
print()
|
||||
print(in_dict)
|
||||
print(in_list)
|
||||
|
||||
z_keys = sorted([key for key in in_dict if key.startswith("z")], reverse=True)
|
||||
print(z_keys)
|
||||
sol = ""
|
||||
for z in z_keys:
|
||||
sol += str(in_dict[z])
|
||||
print(sol)
|
||||
print(f'Solution Part1: {int(sol, 2)}')
|
||||
print(f'Runtime: {time() - start_time:.2f} s')
|
||||
47
24/ex-big.txt
Normal file
47
24/ex-big.txt
Normal file
@@ -0,0 +1,47 @@
|
||||
x00: 1
|
||||
x01: 0
|
||||
x02: 1
|
||||
x03: 1
|
||||
x04: 0
|
||||
y00: 1
|
||||
y01: 1
|
||||
y02: 1
|
||||
y03: 1
|
||||
y04: 1
|
||||
|
||||
ntg XOR fgs -> mjb
|
||||
y02 OR x01 -> tnw
|
||||
kwq OR kpj -> z05
|
||||
x00 OR x03 -> fst
|
||||
tgd XOR rvg -> z01
|
||||
vdt OR tnw -> bfw
|
||||
bfw AND frj -> z10
|
||||
ffh OR nrd -> bqk
|
||||
y00 AND y03 -> djm
|
||||
y03 OR y00 -> psh
|
||||
bqk OR frj -> z08
|
||||
tnw OR fst -> frj
|
||||
gnj AND tgd -> z11
|
||||
bfw XOR mjb -> z00
|
||||
x03 OR x00 -> vdt
|
||||
gnj AND wpb -> z02
|
||||
x04 AND y00 -> kjc
|
||||
djm OR pbm -> qhw
|
||||
nrd AND vdt -> hwm
|
||||
kjc AND fst -> rvg
|
||||
y04 OR y02 -> fgs
|
||||
y01 AND x02 -> pbm
|
||||
ntg OR kjc -> kwq
|
||||
psh XOR fgs -> tgd
|
||||
qhw XOR tgd -> z09
|
||||
pbm OR djm -> kpj
|
||||
x03 XOR y03 -> ffh
|
||||
x00 XOR y04 -> ntg
|
||||
bfw OR bqk -> z06
|
||||
nrd XOR fgs -> wpb
|
||||
frj XOR qhw -> z04
|
||||
bqk OR frj -> z07
|
||||
y03 OR x01 -> nrd
|
||||
hwm AND bqk -> z03
|
||||
tgd XOR rvg -> z12
|
||||
tnw OR pbm -> gnj
|
||||
10
24/ex-small.txt
Normal file
10
24/ex-small.txt
Normal file
@@ -0,0 +1,10 @@
|
||||
x00: 1
|
||||
x01: 1
|
||||
x02: 1
|
||||
y00: 0
|
||||
y01: 1
|
||||
y02: 0
|
||||
|
||||
x00 AND y00 -> z00
|
||||
x01 XOR y01 -> z01
|
||||
x02 OR y02 -> z02
|
||||
313
24/input.txt
Normal file
313
24/input.txt
Normal file
@@ -0,0 +1,313 @@
|
||||
x00: 1
|
||||
x01: 1
|
||||
x02: 1
|
||||
x03: 1
|
||||
x04: 0
|
||||
x05: 1
|
||||
x06: 0
|
||||
x07: 1
|
||||
x08: 0
|
||||
x09: 1
|
||||
x10: 1
|
||||
x11: 1
|
||||
x12: 1
|
||||
x13: 1
|
||||
x14: 0
|
||||
x15: 1
|
||||
x16: 1
|
||||
x17: 0
|
||||
x18: 0
|
||||
x19: 1
|
||||
x20: 1
|
||||
x21: 0
|
||||
x22: 1
|
||||
x23: 1
|
||||
x24: 0
|
||||
x25: 0
|
||||
x26: 0
|
||||
x27: 0
|
||||
x28: 1
|
||||
x29: 1
|
||||
x30: 1
|
||||
x31: 0
|
||||
x32: 1
|
||||
x33: 0
|
||||
x34: 1
|
||||
x35: 1
|
||||
x36: 1
|
||||
x37: 0
|
||||
x38: 1
|
||||
x39: 1
|
||||
x40: 0
|
||||
x41: 0
|
||||
x42: 0
|
||||
x43: 1
|
||||
x44: 1
|
||||
y00: 1
|
||||
y01: 1
|
||||
y02: 1
|
||||
y03: 1
|
||||
y04: 1
|
||||
y05: 0
|
||||
y06: 0
|
||||
y07: 0
|
||||
y08: 0
|
||||
y09: 0
|
||||
y10: 1
|
||||
y11: 0
|
||||
y12: 0
|
||||
y13: 1
|
||||
y14: 0
|
||||
y15: 1
|
||||
y16: 0
|
||||
y17: 1
|
||||
y18: 1
|
||||
y19: 0
|
||||
y20: 1
|
||||
y21: 0
|
||||
y22: 0
|
||||
y23: 0
|
||||
y24: 1
|
||||
y25: 0
|
||||
y26: 0
|
||||
y27: 0
|
||||
y28: 1
|
||||
y29: 1
|
||||
y30: 0
|
||||
y31: 1
|
||||
y32: 0
|
||||
y33: 0
|
||||
y34: 0
|
||||
y35: 0
|
||||
y36: 1
|
||||
y37: 1
|
||||
y38: 0
|
||||
y39: 0
|
||||
y40: 1
|
||||
y41: 1
|
||||
y42: 1
|
||||
y43: 1
|
||||
y44: 1
|
||||
|
||||
kgv OR rdq -> stt
|
||||
y00 AND x00 -> pjf
|
||||
y13 XOR x13 -> wqh
|
||||
y21 AND x21 -> ccs
|
||||
wws AND cds -> kgv
|
||||
x09 AND y09 -> sgj
|
||||
x14 XOR y14 -> tnm
|
||||
msn OR ssj -> vfb
|
||||
cwt AND wfd -> wjk
|
||||
y41 XOR x41 -> fsh
|
||||
jhn AND hjd -> nfk
|
||||
kvg OR sgj -> z09
|
||||
trk OR trs -> nvk
|
||||
jnf XOR wgh -> cwt
|
||||
bkg AND tgw -> vrw
|
||||
dvr OR wtv -> dwg
|
||||
vch AND css -> cjn
|
||||
wmf AND mdn -> qnn
|
||||
gbv AND pth -> hns
|
||||
jgb AND qbm -> jdb
|
||||
x05 XOR y05 -> wcq
|
||||
gtv OR pjr -> crc
|
||||
y23 XOR x23 -> vph
|
||||
jwq AND fqf -> tgv
|
||||
y38 XOR x38 -> ghm
|
||||
dgc OR ntm -> hrs
|
||||
y22 XOR x22 -> tgw
|
||||
stt AND wcr -> krw
|
||||
gvt AND kns -> nmv
|
||||
y03 AND x03 -> scc
|
||||
x42 XOR y42 -> vcf
|
||||
jbj OR rrc -> cvn
|
||||
pth XOR gbv -> z17
|
||||
hpb OR scc -> ngk
|
||||
mvf XOR hrs -> z29
|
||||
x17 XOR y17 -> gbv
|
||||
y22 AND x22 -> kkq
|
||||
y37 XOR x37 -> vcr
|
||||
sqq XOR fgt -> z36
|
||||
wcq AND knc -> gnw
|
||||
krw OR hbj -> nkt
|
||||
hpm OR mrw -> knc
|
||||
vts OR hsk -> vfw
|
||||
y19 AND x19 -> sjt
|
||||
qbm XOR jgb -> z21
|
||||
x28 AND y28 -> ntm
|
||||
bwv XOR wsh -> z12
|
||||
y43 XOR x43 -> cch
|
||||
vfb XOR fpt -> z03
|
||||
qkc OR sqw -> hjd
|
||||
vqr OR ndj -> fqf
|
||||
mcf AND cch -> kcq
|
||||
qjb XOR kjr -> z35
|
||||
y44 AND x44 -> mgv
|
||||
vfw AND mqt -> ndj
|
||||
x34 XOR y34 -> jwk
|
||||
jnf AND wgh -> kvg
|
||||
x41 AND y41 -> dqw
|
||||
x02 AND y02 -> msn
|
||||
vfb AND fpt -> hpb
|
||||
swb AND qvq -> gtv
|
||||
vnq XOR wqh -> z13
|
||||
trn XOR pgk -> z06
|
||||
cvn XOR gmp -> z30
|
||||
vfw XOR mqt -> z07
|
||||
ctf XOR tnm -> z14
|
||||
hwb OR wmb -> ctf
|
||||
ghm XOR hjg -> z38
|
||||
wkt OR qjj -> tgj
|
||||
kcq OR dcc -> cpw
|
||||
x06 XOR y06 -> pgk
|
||||
cjn OR jmv -> jgb
|
||||
y00 XOR x00 -> z00
|
||||
mdn XOR wmf -> z39
|
||||
y36 AND x36 -> gst
|
||||
tgw XOR bkg -> z22
|
||||
tgv OR cfk -> wgh
|
||||
y25 XOR x25 -> ktd
|
||||
wdj AND fvw -> dvr
|
||||
kbk OR wpm -> sgn
|
||||
x44 XOR y44 -> dph
|
||||
wsh AND bwv -> tnr
|
||||
y24 XOR x24 -> skp
|
||||
y30 XOR x30 -> gmp
|
||||
y05 AND x05 -> z05
|
||||
x11 AND y11 -> rsw
|
||||
qnn OR rrn -> fvw
|
||||
x34 AND y34 -> hgg
|
||||
wcs OR rpr -> fgt
|
||||
x07 AND y07 -> vqr
|
||||
fvw XOR wdj -> z40
|
||||
y29 AND x29 -> rrc
|
||||
fsh XOR dwg -> z41
|
||||
cpw XOR dph -> z44
|
||||
y32 XOR x32 -> hbg
|
||||
pjf AND fcg -> vms
|
||||
cwt XOR wfd -> z10
|
||||
x27 AND y27 -> hbj
|
||||
y04 AND x04 -> mrw
|
||||
vcf XOR btn -> z42
|
||||
vnq AND wqh -> wmb
|
||||
x43 AND y43 -> dcc
|
||||
vrw OR kkq -> jjr
|
||||
cds XOR wws -> z26
|
||||
x39 XOR y39 -> wmf
|
||||
y29 XOR x29 -> mvf
|
||||
rfn OR pmm -> mhh
|
||||
y35 XOR x35 -> qjb
|
||||
ngk XOR vvf -> z04
|
||||
kht OR gfk -> cds
|
||||
bgb OR tnr -> vnq
|
||||
kns XOR gvt -> z33
|
||||
sjt OR pbd -> vch
|
||||
hvp OR nfk -> pth
|
||||
x38 AND y38 -> dtt
|
||||
y18 AND x18 -> pjr
|
||||
x07 XOR y07 -> mqt
|
||||
gst OR bmm -> nwb
|
||||
y21 XOR x21 -> qbm
|
||||
jwk AND gfr -> cph
|
||||
nvk XOR brp -> z31
|
||||
x17 AND y17 -> nkr
|
||||
sqt OR nqs -> kns
|
||||
qbs OR vht -> sfw
|
||||
brp AND nvk -> rfn
|
||||
hrs AND mvf -> jbj
|
||||
x12 AND y12 -> bgb
|
||||
y36 XOR x36 -> sqq
|
||||
jdb OR ccs -> bkg
|
||||
x04 XOR y04 -> vvf
|
||||
y19 XOR x19 -> vmj
|
||||
vms OR vpb -> kmq
|
||||
y35 AND x35 -> wcs
|
||||
vph AND jjr -> qbs
|
||||
fgt AND sqq -> bmm
|
||||
vcf AND btn -> fbb
|
||||
wjk OR ktk -> kmn
|
||||
x08 AND y08 -> cfk
|
||||
y01 XOR x01 -> fcg
|
||||
y23 AND x23 -> vht
|
||||
kgm AND nkt -> dgc
|
||||
swb XOR qvq -> z18
|
||||
x09 XOR y09 -> jnf
|
||||
cch XOR mcf -> z43
|
||||
sgn XOR smv -> z15
|
||||
y40 XOR x40 -> wdj
|
||||
gnw OR gdd -> trn
|
||||
dgn OR pqt -> hjg
|
||||
y30 AND x30 -> trs
|
||||
ngk AND vvf -> hpm
|
||||
y12 XOR x12 -> bwv
|
||||
kmn XOR dmk -> z11
|
||||
y20 AND x20 -> css
|
||||
stt XOR wcr -> z27
|
||||
vph XOR jjr -> z23
|
||||
nmv OR wjj -> gfr
|
||||
x02 XOR y02 -> jdc
|
||||
y28 XOR x28 -> kgm
|
||||
gfr XOR jwk -> z34
|
||||
x16 AND y16 -> hvp
|
||||
gkb OR mgv -> z45
|
||||
mhh AND hbg -> sqt
|
||||
fqf XOR jwq -> z08
|
||||
x13 AND y13 -> hwb
|
||||
vmj AND crc -> pbd
|
||||
dwg AND fsh -> brb
|
||||
sfw AND skp -> qjj
|
||||
knc XOR wcq -> gdd
|
||||
x31 XOR y31 -> brp
|
||||
fcg XOR pjf -> z01
|
||||
dqw OR brb -> btn
|
||||
cvn AND gmp -> trk
|
||||
y16 XOR x16 -> jhn
|
||||
y27 XOR x27 -> wcr
|
||||
x33 XOR y33 -> gvt
|
||||
y08 XOR x08 -> jwq
|
||||
trn AND pgk -> hsk
|
||||
nkt XOR kgm -> z28
|
||||
y15 AND x15 -> sqw
|
||||
crc XOR vmj -> z19
|
||||
hbg XOR mhh -> z32
|
||||
smv AND sgn -> qkc
|
||||
vcr XOR nwb -> pqt
|
||||
x14 AND y14 -> kbk
|
||||
jhn XOR hjd -> z16
|
||||
x10 AND y10 -> ktk
|
||||
kmq AND jdc -> ssj
|
||||
y15 XOR x15 -> smv
|
||||
sqd OR dtt -> mdn
|
||||
x24 AND y24 -> wkt
|
||||
hgg OR cph -> kjr
|
||||
ktd XOR tgj -> z25
|
||||
ctf AND tnm -> wpm
|
||||
x40 AND y40 -> wtv
|
||||
x10 XOR y10 -> wfd
|
||||
y33 AND x33 -> wjj
|
||||
x39 AND y39 -> rrn
|
||||
y03 XOR x03 -> fpt
|
||||
x31 AND y31 -> pmm
|
||||
y32 AND x32 -> nqs
|
||||
x11 XOR y11 -> dmk
|
||||
y18 XOR x18 -> qvq
|
||||
x37 AND y37 -> dgn
|
||||
skq OR rsw -> wsh
|
||||
vch XOR css -> z20
|
||||
kmn AND dmk -> skq
|
||||
ghm AND hjg -> sqd
|
||||
kjr AND qjb -> rpr
|
||||
y01 AND x01 -> vpb
|
||||
cpw AND dph -> gkb
|
||||
y26 AND x26 -> rdq
|
||||
tgj AND ktd -> kht
|
||||
x26 XOR y26 -> wws
|
||||
sfw XOR skp -> z24
|
||||
y42 AND x42 -> thc
|
||||
nkr OR hns -> swb
|
||||
y20 XOR x20 -> jmv
|
||||
vcr AND nwb -> z37
|
||||
fbb OR thc -> mcf
|
||||
x06 AND y06 -> vts
|
||||
jdc XOR kmq -> z02
|
||||
y25 AND x25 -> gfk
|
||||
Reference in New Issue
Block a user