Compare commits

...

15 Commits

Author SHA1 Message Date
2fffa5ff00 24-1 finished 2024-12-25 10:43:39 +01:00
1756e53efc 24 anfang 2024-12-24 15:17:04 +01:00
27083bf502 20-11 2024-12-20 15:19:06 +01:00
12155f7fe8 20-11 2024-12-20 15:13:10 +01:00
0af82b0d8b 20-1 2024-12-20 13:40:37 +01:00
6064f85200 19-2 2024-12-19 14:34:40 +01:00
efd89d58f9 19-1 2024-12-19 13:20:46 +01:00
904f7f7c27 17-2-anim 2024-12-18 19:48:26 +01:00
0af1538d7f 18-2 2024-12-18 12:41:21 +01:00
11ca505c83 17-2 2024-12-17 22:03:10 +01:00
8995e45bfc 17-2 2024-12-17 21:31:47 +01:00
71629c5523 17 2024-12-17 15:43:54 +01:00
0a36d9db83 16-ki 2024-12-16 11:56:47 +01:00
28c35f5375 15 part1 bigger anim 2024-12-15 19:41:23 +01:00
659572734a 15 part1 2024-12-15 15:45:49 +01:00
40 changed files with 6582 additions and 0 deletions

151
15/15-1-with-anim.py Normal file
View 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
View 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
View 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
View 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
View File

@@ -0,0 +1,9 @@
#######
#...#.#
#.....#
#..OO@#
#..O..#
#.....#
#######
<vv<<^^<<^^

10
15/ex_s.txt Normal file
View File

@@ -0,0 +1,10 @@
########
#..O.O.#
##@.O..#
#...O..#
#.#.O..#
#...O..#
#......#
########
<^^>>>vv<v>>v<<

71
15/input.txt Normal file
View 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

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 MiB

BIN
15/solution_p1.gif Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 648 KiB

BIN
15/solution_p1.mp4 Normal file

Binary file not shown.

38
16/16-1-ki.py Normal file
View 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
View File

@@ -0,0 +1,15 @@
###############
#.......#....E#
#.#.###.#.###.#
#.....#.#...#.#
#.###.#####.#.#
#.#.#.......#.#
#.#.#####.###.#
#...........#.#
###.#.#####.#.#
#...#.....#.#.#
#.#.#.###.#.#.#
#.....#...#.#.#
#.###.#.#.#.#.#
#S..#.....#...#
###############

17
16/ex2.txt Normal file
View File

@@ -0,0 +1,17 @@
#################
#...#...#...#..E#
#.#.#.#.#.#.#.#.#
#.#.#.#...#...#.#
#.#.#.#.###.#.#.#
#...#.#.#.....#.#
#.#.#.#.#.#####.#
#.#...#.#.#.....#
#.#.#####.#.###.#
#.#.#.......#...#
#.#.###.#####.###
#.#.#...#.....#.#
#.#.#.#####.###.#
#.#.#.........#.#
#.#.#.#########.#
#S#.............#
#################

141
16/input.txt Normal file
View File

@@ -0,0 +1,141 @@
#############################################################################################################################################
#.#.....#.........#...#.......#.......#.......#.................#...#...#.........#...#.........#.....#.....#.......#.......#...#.......#..E#
#.#.###.#.###.#####.#.#.#####.#.#.###.#.###.###.#####.#.#######.#.###.#.#.###.#.#.#.#.#.#####.#.#.###.#.#.###.#.#####.#.###.###.#.###.#.#.#.#
#.....#.#...#.......................#...#...#.....#...#.#.....#.......#...#...#.#...#...........#...#...#.....#.#.....#...#.....#...#.#.....#
#.#####.###.#.#.#####.#####.###.###.#########.#####.#####.###.#.#.#.#######.###.#####.#.###.#.#####.#######.###.#.#######.#######.###.#####.#
#.#...#.#...#...#...#.....#.#.#...#...........#...#.#.....#...#.#.#...#.......#.#.....#...#.#...#...#...#.....#...#.#...#.........#...#.....#
#.#.#.#.#.###.#.###.###.###.#.#.#.#############.#.#.#.#####.###.#.###.#.#####.#.#########.#.###.#.###.#.#.###.#####.#.#.###########.###.#.#.#
#...#...#.....#...#...#.....#...#.....#.....#...#.#.#.#...#...#.#.#...#.#.....#.............#...#.#.#.#...#.......#...#...#.........#...#...#
###.###.#####.#.#.#.#.#########.###.#.###.#.#.###.#.#.#.#####.#.#.#.###.#.###.###############.#.#.#.#.#####.#####.###.#.###.###########.#####
#...#...#...#...#...#.#.#...........#.......#.#.....#.#.....#.#...#.#...#.#.....#...........................#.......#.#...#...#.......#.....#
#.###.###.#.#.#.#####.#.#.###.#.#########.#.#.#######.#####.#.#.#.#.#.###.#####.###.#######.#####.#.###.#.#########.###.#.###.#.#####.#####.#
#.#...#...#.........#.#...#...#.#.......#...#.......#.#.....#...#.#.#.#.#.........................#.#...#.......#.#...#.#...#.#...#.#...#...#
#.#.#######.#.#.#####.#####.###.#.#.#####.#######.#.#.#.###.###.###.#.#.###.#.###.#.#.###.#.#.#####.#.#########.#.###.#.#.###.###.#.###.###.#
#.#.......#...#.....#.....#.#.....#.#.....#...#.#...#.#.#...#...#...#.....#.#.......#.#.....#...#.....#...................#...#...#...#...#.#
#.#######.#####.###.#####.#.###.###.#.###.#.#.#.#.###.#.#.###.###.###.#####.#.#######.#.#######.#.#####.#########.#.#.###.#.###.###.#.###.#.#
#.#...#...#...#.#.#.....#.#...#...#.........#...#...#...#...#.....#...#.....#.#...#...#.#.....#.#.....#.........#.#.#.#...#.........#.#...#.#
#.#.###.###.#.#.#.###.#.#.###.###.#########.###.###.#######.#######.#.#.#######.#.#.###.#.#.###.#####.#########.#.#.#.#.###############.###.#
#.#.........#.#...#...#...#...#.....#.......#...#.#.......#.#...#.....#...#.....#...#...#.#.....#...#...#.....#.#.....#.................#...#
#.###########.#####.#.###.#.#######.#.#######.###.#######.#.###.#.#######.#.#########.###.#######.#####.#.###.#.#.#######.#.#.#########.#####
#.#...#.....#...#...#.#...#.....#...#.#.....#.#.....#...#...#...#.#.......#.#.......#...#...#.#.........#...#...#...#.....#.#...#.#.....#...#
#.#.#.#####.###.#.###.#.#######.#.###.###.###.###.#.###.#.###.###.#.#.#.###.#.#####.#######.#.#.#####.###.#.#######.#.#.#.#####.#.#.#####.#.#
#...#.#.....#.#.#...#.#.#.......#.#.....#...#.....#.#.......#.#...#.#...#...#...#.#...#.....#...#...#.#...#.....#...#.#.#.......#...#...#.#.#
#####.#.###.#.#.#.#.#.#.#.#######.###.#.#.#.#######.#.#####.#.#.###.#.###.#.###.#.###.#.#########.#.###.###.#####.###.#.###.#####.###.###.#.#
#...............#.#.#.#...#.....#.....#.#.#...#...#.#...#.#.....#...#...#.#.#.......#.#...#.......#.....#.....#...#...#...#.#.......#...#.#.#
#.#.#.#.#.###.#.#.#.#####.#.#.#.###.###.#.###.#.#.#.###.#.#.#####.#######.###.#######.#.#.#.###############.#.#.#########.#.#.#####.###.#.#.#
#.......#.#.#.#.#.....#...#.#.#...#.#...#...#.#.#.#.....#.#.......#.....#...#...#...#.#...#.#.#.....#.......#.#.#.....#...#.#.#...#.....#.#.#
#.#######.#.#.#.###.#.#.#.#.#.#####.#.#####.#.#.#.#######.#####.#.#.###.###.#.###.#.#.#.###.#.#.#.#.###.###.#.#.###.#.#.###.#.#.#.#####.#.#.#
#...#.....#...#...#.....#...#.......#...#...#...#...#...#.......#...#...#.#...#...#...#.#...#...#.#.....#...#.#.#...#...#...#...#.....#.#.#.#
#.#.###.#######.#.#.#.#.###############.#.#######.#.#.###.###########.#.#.#####.#####.#.###.#.###.#.#######.#.#.#.#####.#.#.#.#######.###.#.#
#.#...#...#...........#...#.#...........#.....#...#.#.#...#...#.........#.#.....#.#...#.....#...#...#.....#...#.#.#.....#...............#.#.#
#####.#.#.#.#############.#.#.#####.#.###.#####.###.#.#.###.###.#.#####.#.#.#####.#.#############.#.#.###.#####.#.#####.#######.#######.#.#.#
#.....#.#.#...#...........#...#...#...#...#.....#.....#...#.....#.#.......#.....#.#...#...#.....#.#.#...#.#...#.#.#...........#.......#...#.#
#.#####.#.###.#.###############.#.#.#######.#.###########.#.#####.#.###########.#.###.#.#.###.#.#.#####.#.#.#.#.#.#.#.#.#####.#.#####.#####.#
#.......#...#.#...#.....#.......#...#.......#.#...........#.#...#.#...#.........#...#...#.....#...#...#.#.#.#.#.#...#.#.......#...#.....#.#.#
#.#.###.#.###.###.###.#.#.#############.#####.#.#.###########.#.#.#.###.#########.###.#############.#.#.#.#.#.#.#.###.###########.#.###.#.#.#
#.#.....#.....#...#...#.#.....#...#.....#...#.#.....#.........#.#.#.#...#...#...#.....#...#...#...#.#...#...#...#...#.......#.....#.#.....#.#
#.###########.#.###.###.###.#.#.#.#.#.#####.#.#####.#.#####.###.#.#.#.###.#.#.#.#######.#.#.#.#.#.#.###############.#######.#.#####.#####.#.#
#...........#.#.....#.....#.#.#.#.#.#.#...#.......#.#.#...#.#...#.#.#.....#...#.#...#...#...#...#...#.#.............#.....#...#...#...#...#.#
#.#########.#########.###.#.#.#.###.#.#.#.#.#######.#.###.#.#.###.#.###########.#.#.#.###############.#.###############.#.#######.###.#.###.#
#.#.......#.#.........#...#.#.#.....#.#.#...#...#...#...#.#.#...#.#...#.#.....#...#...#...#.......#.....#.........#.....#.#.........#.#.....#
#.#.#####.#.#.###.###.#.#####.#.###.#.#.#.#.#.#.#.#####.#.#.###.#.###.#.#.###.#########.#.#.#####.#.#####.#######.#.#.###.#.#####.###.###.#.#
#.........#...#.#.#...#.#.....#.......#.#.#.#.#.#.....#...#.....#.#.#.#.#.#.........#...#...#...#...#.....#...#...#.#...#...#...#.#...#...#.#
###.#######.###.#.#.###.#.#####.#######.#.###.#.#####.#######.#.#.#.#.#.#.#.#######.#.#.###.###.#####.#######.#.###.###.#.###.#.###.###.###.#
#...#.....#...#.#.#.#...#...#.#.........#.#...#.....#...#.....#.#.#.#.#...#.#.....#.#.#...#.....#.#...#.....#...#.....#.#.#...#.....#...#.#.#
#.###.###.###.#.#.#.#.#####.#.#.#######.#.#.#.#.#######.#.#####.#.#.#.#####.###.#.#.#.###.#####.#.#.#.#.###.#.###.###.#.#.#.#######.#.###.#.#
#...#.#.#...#...#.#.#.#.....#...#.....#.#.....#.......#.#.#...#...#.#.......#...#.#...#.#.....#.#...#...#.#.........#.#.#.#.#.#.............#
###.#.#.###.###.#.###.#.#####.###.###.#.#########.#.#.#.#.#.#.#####.#########.###.#####.#####.#.#####.###.#.#######.###.#.#.#.#.#.#.#.###.#.#
#...#.#.#...#.#.#.......#...#.#.......#...#.....#...#.#...#.#.................#...........#...#.#...#.#...#...#...#.....#.#.#.......#...#...#
#####.#.#.###.#.#########.#.#.#.###.#######.###.#.###.#####.#########.#################.###.###.#.#.#.###.###.#.#.#########.#.###.#.###.###.#
#.......#...#...#.........#.#.#.#.....#.....#...#...#.......#.........#...#.....#...#...#...#...#.#.#.....#...#.#...........#.#.#.#...#...#.#
#.#########.#.###.#########.#.#.#####.#.#####.###############.#######.#.#.#.###.###.#.###.###.###.#.#####.#.###.###.#########.#.#.###.###.###
#.#...#.....#...#...#.#.....#.#...#.#...#.............#.....#.....#...#.#.#...#...#.#...#...#.....#...#...#.#...#...#...#...#...#.#...#.#...#
#.#.#.#.#####.#.###.#.#.#####.###.#.#####.###########.#.###.#####.#####.#.###.###.#.#.#####.#########.#.###.#.###.###.#.#.#####.#.#.###.###.#
#.#.#.#.........#.....#.#.....#...#.....#.#.#.......#...#.#.#...#.......#...#.#...#...#...#.......#.......#.#.#...#...#.#.......#.......#.#.#
#.###.###.###.#.#.###.#.###.###.#.#####.#.#.#.#.###.#####.#.#.#.###.#####.###.#.#####.#.#.#######.###.#####.#.#.###.###.###############.#.#.#
#...#.#.......#.#...#.....#.#...#.#...#.....#.#...#.....#.#...#...#...#...#...#.....#...#.......#...#.......#.#.#...#.....#...........#...#.#
###.#.#.#.###.#.###.#####.###.#####.#.#######.###.#####.#.#######.#####.###.#.#####.###.#.#####.###.#######.#.###.#######.#.#.#######.#####.#
#.#.#.#...#...#.#.#...#.....#.#.....#.#...#...#.......#.#.......#.....#.....#.....#.....#...#.....#...#.....#...#.......#.....#...#.#.....#.#
#.#.#.###.#.#.#.#.###.###.#.#.#.#####.#.#.#.###.###.###.#.#####.#####.#.#####.#.#.###.###.#.#.###.#.#.#.###.###.#####.#.#.#####.#.#.#####.#.#
#...................#.....#...#.....#...#.....#.#...#...#.#...#.....#.#...#...#.#.#...#...#...#.....#...#...........#.#.#.#.....#...........#
#.###.#.#.###.#####.#####.#.#######.#########.#.#####.###.#.#.#####.#.###.#####.#.###.#.#.#########.#####.###########.#.#.#.#####.#.#.#####.#
#.#.#...#.........#...#...#.#.......#.....#.....#.....#...#.#.#...#.....#.......#.#...#.#.#.......#.......#.......#...#.#.#...#.#.#.#.....#.#
#.#.#.#.#.###.###.#####.#####.#######.###.#.###.#.#####.###.#.#.#.#####.#########.#.#.#.###.#####.#.#####.#.#####.#.###.#.###.#.#.#.#####.#.#
#.#...#.......#...#...#.......#.......#.#.#.....#.#.....#...#...#.....#.....#.....#.#.#.....#.....#.#.........#...........#.#.#.#.#.....#...#
#.#.###.#.###.#.###.#.#########.#######.#.#.#####.#######.###########.#####.#####.#.#########.#####.#.#######.###########.#.#.#.#.###.#.###.#
#.#...#.#.....#.....#.........#.#.......#.#.....#.#.....#.......#...#.....#.....#.#.......#...#...#.#.......#...#...#...#.#.#.#.#...#.#.#...#
#.###.#.#.#.#.###.#######.#.###.#.#####.#.#####.#.#.###.#.#.###.#.###.###.#####.#.#.#.###.#.###.#.#########.###.#.#.#.#.#.#.#.#.###.#.###.###
#...#.#.#...........#.....#.#...#.#.#...#.....#.#...#...#.#.#.#.#.#.....#.#...#.#...#...#.#.....#.........#.#...#.#...#.#...#...#.#.#.....#.#
###.#.#.#.###.###.#.#.#######.###.#.#.#.#####.#.#####.#.#.#.#.#.#.#.###.#.#.###.#.#.###.#.#############.###.#.###.#####.#######.#.#.#.#####.#
#.................#.#.....#...#...#.#.......#.#.#.....#.#...#.#.#.#.#.#.#.#...#.#.#...#.....#.....#...#...#.#...#...#...#...#...#.#.#.......#
#.#.###.#.###.#.#########.#.###.#.#.#######.#.###.###########.#.#.#.#.#.#.###.#.#.###.###.#.#.###.#.#.###.#.###.#.###.###.#.#.###.#.#.###.#.#
#.#...#.#.#...#.#.........#.#...#.#.........#.....#...#...#...#.#.#.#.#.#.#...#.#.#.....#.#...#.#...#...#...#.#.#.#...#.......#...#.#.....#.#
#.###.#.#.#.#.#.#.#####.#.#.#.###.###.#.#########.#.#.#.#.#.#.#.#.#.#.###.#.#.#.#.#####.#.#.###.#######.#####.#.#.#.###.#######.#.#.#######.#
#...#.#...#.#.........#...#.#.#.#...#...#.....#...#.#...#...#.....#.#.....#...#.#...#...#...#.....#.....#.....#...#.....#.....#.#.#.#.......#
#.###.#.#.#.###.#####.#.###.#.#.###.###.#.###.#.###.###########.#.#.#.#.###.###.###.#######.#.#####.#####.#.#####.#######.###.#.#.#.#.#.#####
#.#...#...#.#.#...#...#...#.#.....#...#...#...#...#...............#.....#...#...#...........#.#...#...#.#.#...........#.#...#...#.#.#.......#
#.#.#####.#.#.###.#.#####.#.#.#####.#.###########.###.#######.###.#########.#.###############.#.#.###.#.#.#########.#.#.#.#.###.###.###.###.#
#...#.....#.#.....#.....#.#.#.#...#.#.............#...#...#...#.#.#.........#.........#.........#...#.#...........#.#.#.....#...#...#.....#.#
#.#####.#.#.###.#######.###.###.#.###############.#.###.#.#.#.#.#.#.#.###############.###########.###.#.#####.#####.#.#####.#####.###.#.###.#
#.#.....#.#...#...#...#...#.....#.....#.........#.#...#.#...#...#...#.#.............#...#.............#.#...#.....#.#.......#...#.#.#.#...#.#
#.#.#####.#.#.###.#.#.###.###########.#.#######.#####.#.#####.###.#.#.#.###########.###.#.#####.###.#####.#.#.###.#.#########.#.#.#.#.#.#.#.#
#...#...........#.#.#.#.#...........#...#...#.#.......#.#.#.......#.#...#.........#.....#.....#...#...#...#...#.#...#.........#.#.#.#.#.#...#
#####.#.#.#.###.#.#.#.#.#.#.###.###.#####.#.#.#########.#.#.#######.###.#####.###.###########.###.###.#.#######.#.###.#########.#.#.#.#.#####
#.............#...#.#...#...#.#.#...#.....#...#.........#.........#...#.....#...#...#...#...#...#.#.....#.....#.#.#...#.......#...#.#...#...#
#.#.#####.#.###.###.#########.#.#.#####.#######.###.#############.###.###.#.#####.#.#.#.#.#.###.#.#####.#.###.#.#.#.###.#.#######.#.###.###.#
#.#.#.....#.#...#.............#.#.#...#...#.......#.....#.......#.#.#.....#.......#.#.#...#.#...#.#...#.#.....#...#.#...#.#.....#.....#.#...#
#.###.###.#.#.###.#.###.#.#####.#.#.#.###.#.###########.#.#####.#.#.#############.#.#.#####.#.###.#.#.###.#.###.###.#.###.#.###.#.#.###.#.#.#
#...#.#.#.#...#.....#...#.#.....#...#.#...#.#...#.....#.#...#...#...#.....#.......#.....#.#...#...#.#.....#...#...#.#.#...#.#.#...#...#...#.#
###.#.#.#.#.#########.###.#.#########.#.#.#.###.#.###.#.###.#.#####.#.###.#.###.###.###.#.#####.###.#########.#####.#.#####.#.###.###.#.#.#.#
#...#...#.#.#.......#.#.......#.....#.#.#.#...#.#...#.....#.#...#.....#...#...#.....#...#.#.........#.......#.....#.#.#.....#.....#.#...#...#
#.###.###.#.###.###.#.#.#####.#.###.#.#.#.###.#.###.#######.###.#############.#######.###.#.#########.#####.#####.#.#.#.#####.###.#.#.#.#.###
#...#.#...#...#...#...#.#...#.#...#.....#.#.#.#...#.......#...#...........#...#.......#...#.#...#.........#.....#.....#.......#.....#.#.#.#.#
#.#.#.#.#####.###.#####.#.#.#.###########.#.#.###.#######.###.#######.###.#.#########.#.###.#.#.#.#########.#.#######.###.#.#####.#.#.#.#.#.#
#.#...#.....#...#...#.....#.#.......#...#...#...#.......#.....#.......#...#.......#...#.....#.#.#...#.......#.......#.....#.....#...#.....#.#
#.#######.#####.#.#.#######.#######.#.#.#######.#.#####.#############.#.#########.#.#.#####.#.#.###.#.#########.#.###.###.#.###.#.#####.#.#.#
#.#.....#.#...#.#.#.#...#...#.....#...#.#.......#.#.....#.............#.........#.#...#...#...#...#.#...#.......#...#.#...#.#...#.......#...#
#.###.###.#.#.#.#.#.#.#.#####.###.#####.#.#######.#####.#####.#.#.#.#.#######.###.#.###.#.###.#.#.#.###.#.###.#.###.#.#.#.#.#.#########.#.#.#
#...#...#.#.#.#.#.#...#...#...#.#...#...#...#.#...#...#.#.....#...#.#.#.#.....#...#...#.#.......#.#...#.#...#.#.....#.#.#...#.......#.#.....#
###.###.#.#.#.#.#.#######.#.###.#.###.#####.#.#.#.#.#.#.#.#####.###.#.#.#.#.###.###.#.#.#########.###.#.###.#.#.#.###.#####.#######.#.###.#.#
#.#...#.#...#...#.#.....#...........#.....#.....#...#.#.#.#.#...#...#...#.#.#...#...#.......#.....#...#...#.#...#...#.....#.#.#.....#.....#.#
#.#.#.#.#####.###.#####.###########.###.###.#.###.#.#.#.#.#.#.#####.###.#.###.###.###########.#########.#.#.#######.#####.#.#.#.#####.#####.#
#...#.#...#.....#...#.....#.....#.....#.#...#.#.#...#.#.............#...#.....#.#.....#.#.....#.........#.#.#.....#.......#...#.#.....#.....#
#.#.#.#.###.###.###.#.#####.###.#.###.#.#.###.#.#####.#####.###################.#####.#.#.#####.#######.###.#.#.###############.#.###.#.#####
#.#.#.#...#...#.#.....#...#...#...#...#...#.......#...#.....#.#...........#.........#.#.#.#.....#.......#...#.#...............#.#.#...#.#...#
#.#.#.###.###.#.#.#####.#.###.#####.###############.###.###.#.#.#.#####.###.#######.#.#.#.###.#######.###.#########.#########.#.#.#.###.###.#
#.#.#...#.....#...#.....#.....#...#.......#.......#.#.........#.#.........#.#.....#...#.#...#...#...#.#.#.......#...#.......#...#.#...#.#...#
#.#####.#.#####.###.#.#########.#########.#.#####.#.#.#####.#.#.###.#####.#.#.#.#.#####.###.#.#.#.#.#.#.#.#.#.#.#.###.###########.###.#.#.#.#
#.#.....#.#...#...#...#.#...#...........#.#.....#...#...#...#.#...#.....#...#.#.#.......#...#.#...#.#...#.#.#...#...#.#.........#.#.#.#...#.#
#.#.#######.#.###.###.#.#.#.#.#######.#.#.#####.#######.#.###.###.#####.#######.#######.#.###.#####.#.###.#.#.#.###.#.#.#######.#.#.#.#####.#
#...#.......#.#.....#.#...#.#.#.#...#.#.#.....#.....#.#...#...#.#...............#...#...#.#.#...#...#.#.....#.....#.#...#.....#...#.#.....#.#
#.#####.#####.#####.#.#.#.#.#.#.#.#.#.#.#####.#.###.#.#.###.###.#####.#########.#.#.#####.#.#.#.#.###.#.###.#####.#.#.###.#.#.#####.###.###.#
#.......#...#...#...#.#...#.#.#.#.#.#.#...#...#...#.#.....#...#.#...#.......#.....#...#...#.....#...#.#...#.....#.#.#.....#.#.....#...#.#...#
#########.#.###.#####.#.###.#.#.#.#.#.#####.#######.#.###.###.#.#.#.#.#.###.#.###.###.#.###.#######.#.###.#####.#.#.#######.#####.#.#.#.#.###
#...#.....#...#...#...#.#.#.....#.#...#...........#.#...#...#...#.#...#.#...#.#.....#.#.#.#.#.....#.#.....#.....#.#...#...........#.#.#.....#
#.#.#.#####.#.###.#.###.#.#.#####.###.#.#.###.#.#.#.###.#.###.###.#####.###.#.#.#.###.#.#.#.###.#.#.###.#.#.#.###.###.#######.#.#.#.#.#.###.#
#.#.#.#...#.#...#.#.#.#.#...#.....#...#.....#.#.#.#...#.#...#.#...#...#...#.#.#.#...#.#.#...#...#.#...#.#.#...#.#...#.#.......#.....#.#...#.#
#.###.#.###.#####.#.#.#.###.#.#############.#.#.#.###.###.#.#.#.#####.###.#.#.#.###.#.#.#.###.#.#####.#.#.#.#.#.###.#.#.#####.#######.###.#.#
#.....#...#.#...#...#.#.#...#...#...#...#...#...#...#...#.#...#.......#...#...#...#...#.#.#...#.#...#.#.#.#.#.#...#.#...#...#.....#...#...#.#
#.#######.#.#.#.#####.#.#.#.###.#.#.#.#.#.###.#####.###.###########.###.#########.#####.#.#.###.#.#.#.###.###.#.#.#.#.###.#.#####.#####.###.#
#.........#...#.......#.#.#...#...#.#.#...#.....#.....#.....#...#...#...#.......#.......#...#.....#.#...#.....#.#.#.#.#...#.......#...#.....#
#####.#######.###.###.#.#.###.#####.#.#####.###.#####.#####.#.#.#.###.###.#####.#############.#####.#.#.#######.###.#.###.#####.#.#.#.#####.#
#...#.#.....#...#...#.#.#.#...#...#.#.....#...#.....#.......#.#...#...#.......#.#...........#...#.#.#.#.......#.....#...#.....#.#...#.....#.#
#.#.#.#.###.#######.###.#.#####.#.#.#####.#.#######.#######.#.#####.###.#####.###.#####.###.###.#.#.#####.###.#.#######.#####.#.#######.#.#.#
#.#...#.#...#.....#.#...#.......#.#.......#.#.....#.....#...#.#...#.#.....#...#.........#...#...#.#.......#...#.....#.........#...#...#.#.#.#
#.#####.#.###.###.#.#.###########.###########.#.#.#.#.###.###.#.#.#.#####.#.###.#####.#.#.###.###.#.###############.#.#######.#####.#.###.#.#
#.....#.#.#...#.....#...........#.......#.....#...#.#...#...#.#.#.#...#...#.....#...#.#.#...#.#.....#.......#.....#.#.#...#...#...#.#.#...#.#
#####.#.#.###.#.###.###.#.#####.#.#####.###.###.###.#.#.###.#.###.#.#.#.#.#######.#.###.###.#.#.#####.#####.#.#.#.#.###.#.#.###.#.#.#.#.#.#.#
#...#.#.#.....#.#.........................................#.#...#...#...#.....#...#.....#...#.#.#...#.#...#.#.#.#.#...........#.#...#...#.#.#
#.#.#.#.#####.###.#.###.#.###.#.#.#.#########.#.#.#.#.###.#.###.###.###.#####.#.#########.###.#.###.#.#.#.#.#.#.#####.#.#.#####.#########.#.#
#.#...#.#.....#...#.....#.#...#...#.........#.#.....#...#...#...#.....#.....#.#...#.....#.....#.#...#...#.#...#.....#...#.#.....#.......#...#
#.#####.#.#####.###.#.#.#.#########.###.#####.#.#.###.###.###.###.#.#######.#.###.#.#.#########.#.#.###.#.#######.#.#####.#.#####.###.###.###
#.....#.#.....#.....#.#.#...#.....#...#.....#...#.......#.#...#...#.........#.#.#.#.#.........#...#.....#.....#...#...#.#.#...#.....#...#...#
#####.#.###########.#.#.#.#.#.###.###.#####.###.#.###.#.###.#####.#.#.#.#####.#.#.#########.#.#.###.###.#.#.###.#####.#.#.###.#.#######.###.#
#.....#...#.......#.#.#...#.#...#.#...#.#...#...#...#.#.#...#.....#.#.#.....#.#.#.........#.#...#.......#...............#.....#.#...#...#...#
#.#######.#.#.###.#.#.#.#.#.###.#.#.###.#.###.#.#.#.#.#.#.#####.#.#.###.###.#.#.#########.#.###.#.###.#.###.#.###.#.###.#########.#.#.#.#.###
#.#.......#.#...#...#...#.#...#.#.#...#.#.....#...#.#.#.........#.#.......#.#.#...........................#.#...#.#.........#.....#...#.#.#.#
#.#.#######.#.#.#####.#.#.#.#.#.#.###.#.#######.#.#.#.#.###########.###.###.#.#.###.#.#########.#######.#.#.###.#.#.#######.#.#####.#####.#.#
#.#.#.......#.....#...#.#.#.#...#...............#.#.#.............#...#.#...#.#...#.#.#.......#.........#.......#.#.....#.....#.....#...#.#.#
#.#.#.#######.###.#####.#.#.#######.#.#####.###.#.#.#.#.#########.#.#.#.#.###.###.#.#.#.#####.#.#####.#####.###.#.#.###.#############.#.#.#.#
#S#...........#.........#.........#.........#.........#.............#.....#.......#.#.......#.......#...........#.....#...............#.....#
#############################################################################################################################################

70
17/17-1.py Normal file
View 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
View 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
View 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
View 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
View 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
View 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
View 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
View 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

File diff suppressed because it is too large Load Diff

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 34 MiB

BIN
18/solution_10_2.mp4 Normal file

Binary file not shown.

48
19/19-1-1.py Normal file
View 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
View 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
View 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
View 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
View 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
View 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
View 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
View 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
View File

@@ -0,0 +1,15 @@
###############
#...#...#.....#
#.#.#.#.#.###.#
#S#...#.#.#...#
#######.#.#.###
#######.#.#...#
#######.#.###.#
###..E#...#...#
###.#######.###
#...###...#...#
#.#####.#.###.#
#.#...#.#.#...#
#.#.#.#.#.#.###
#...#...#...###
###############

141
20/input.txt Normal file
View File

@@ -0,0 +1,141 @@
#############################################################################################################################################
#.....#.....#.......#.......#...#.....###...#######...#.........#...#...###...###.....#.....#...#...#...#...#...................#.......#...#
#.###.#.###.#.#####.#.#####.#.#.#.###.###.#.#######.#.#.#######.#.#.#.#.###.#.###.###.#.###.#.#.#.#.#.#.#.#.#.#################.#.#####.#.#.#
#...#.#...#.#.#.....#.....#.#.#.#.#...#...#...###...#.#.......#...#.#.#.....#...#...#.#.#...#.#.#.#...#.#.#.#.........#.........#.....#...#.#
###.#.###.#.#.#.#########.#.#.#.#.#.###.#####.###.###.#######.#####.#.#########.###.#.#.#.###.#.#.#####.#.#.#########.#.#############.#####.#
#...#.....#...#.....###...#.#.#...#...#.....#.#...#...#.......#...#.#...#.......#...#.#.#.###.#.#.#.....#.#.###...#...#.......#...###.#.....#
#.#################.###.###.#.#######.#####.#.#.###.###.#######.#.#.###.#.#######.###.#.#.###.#.#.#.#####.#.###.#.#.#########.#.#.###.#.#####
#.............#...#...#...#.#.#.......#...#.#.#.#...###.....#...#...#...#.#...#...#...#.#.....#.#.#.#...#.#.#...#.#.#.........#.#.....#.#...#
#############.#.#.###.###.#.#.#.#######.#.#.#.#.#.#########.#.#######.###.#.#.#.###.###.#######.#.#.#.#.#.#.#.###.#.#.#########.#######.#.#.#
###...###.....#.#...#...#.#.#.#.#.....#.#.#.#.#.#...###...#.#.......#...#.#.#.#.#...###.......#.#.#.#.#.#.#.#...#.#.#.#...#...#.......#...#.#
###.#.###.#####.###.###.#.#.#.#.#.###.#.#.#.#.#.###.###.#.#.#######.###.#.#.#.#.#.###########.#.#.#.#.#.#.#.###.#.#.#.#.#.#.#.#######.#####.#
#...#...#.......###...#...#...#...#...#.#...#.#...#.#...#.#.#.......#...#.#.#...#...#...#...#.#...#...#...#.#...#...#...#.#.#.#.....#...#...#
#.#####.#############.#############.###.#####.###.#.#.###.#.#.#######.###.#.#######.#.#.#.#.#.#############.#.###########.#.#.#.###.###.#.###
#.....#.#...#...#...#.....#.........###.#...#...#.#.#...#.#.#.###...#.#...#.#.......#.#.#.#.#.#...........#...#.....#.....#.#.#.#...#...#...#
#####.#.#.#.#.#.#.#.#####.#.###########.#.#.###.#.#.###.#.#.#.###.#.#.#.###.#.#######.#.#.#.#.#.#########.#####.###.#.#####.#.#.#.###.#####.#
#.....#...#...#...#.#...#.#.#...###...#...#...#...#...#.#...#...#.#.#.#...#.#...#...#.#.#.#.#...#...###...#.....###...#.....#.#.#.#...#.....#
#.#################.#.#.#.#.#.#.###.#.#######.#######.#.#######.#.#.#.###.#.###.#.#.#.#.#.#.#####.#.###.###.###########.#####.#.#.#.###.#####
#.................#.#.#.#.#.#.#...#.#.###...#.....#...#.....#...#.#...#...#.#...#.#.#.#.#.#.###...#...#.#...#...#.......#.....#.#.#.#...#...#
#################.#.#.#.#.#.#.###.#.#.###.#.#####.#.#######.#.###.#####.###.#.###.#.#.#.#.#.###.#####.#.#.###.#.#.#######.#####.#.#.#.###.#.#
#.......#...#.....#...#.#.#.#.#...#.#.#...#.###...#.###.....#...#...#...###.#.....#.#.#...#...#.....#.#.#.###.#...#...#...###...#.#.#.#...#.#
#.#####.#.#.#.#########.#.#.#.#.###.#.#.###.###.###.###.#######.###.#.#####.#######.#.#######.#####.#.#.#.###.#####.#.#.#####.###.#.#.#.###.#
#.#...#...#...#...#...#...#...#...#.#.#...#...#...#...#.....#...#...#.#...#.#.......#.....#...#...#.#...#.....#.....#...#...#...#.#.#...#...#
#.#.#.#########.#.#.#.###########.#.#.###.###.###.###.#####.#.###.###.#.#.#.#.###########.#.###.#.#.###########.#########.#.###.#.#.#####.###
#...#...........#...#...........#...#...#...#...#.#...#...#.#...#...#...#.#.#.###...###...#...#.#.#.....#.......###...#...#.....#...#...#...#
###############################.#######.###.###.#.#.###.#.#.###.###.#####.#.#.###.#.###.#####.#.#.#####.#.#########.#.#.#############.#.###.#
###.............###...#...###...#.......#...#...#.#.....#.#...#...#.#.....#.#.#...#.#...#...#.#.#.....#.#.#...#...#.#...#...#...#...#.#...#.#
###.###########.###.#.#.#.###.###.#######.###.###.#######.###.###.#.#.#####.#.#.###.#.###.#.#.#.#####.#.#.#.#.#.#.#.#####.#.#.#.#.#.#.###.#.#
#...#...#...#...#...#...#...#...#.......#...#...#.......#.....#...#.#.#...#.#.#.#...#.#...#.#.#.....#...#.#.#...#...#.....#.#.#...#...#...#.#
#.###.#.#.#.#.###.#########.###.#######.###.###.#######.#######.###.#.#.#.#.#.#.#.###.#.###.#.#####.#####.#.#########.#####.#.#########.###.#
#.....#...#.#.#...#.......#...#.#.......###.#...#.....#.......#.###.#...#.#.#...#...#...#...#...###.....#...#...#...#...###...#.......#...#.#
###########.#.#.###.#####.###.#.#.#########.#.###.###.#######.#.###.#####.#.#######.#####.#####.#######.#####.#.#.#.###.#######.#####.###.#.#
#...#...#...#...#...#...#.#...#.#...#...#...#...#...#.#...#...#...#.#.....#.......#...#...#.....#.....#.#.....#...#...#...#...#.#.....###...#
#.#.#.#.#.#######.###.#.#.#.###.###.#.#.#.#####.###.#.#.#.#.#####.#.#.###########.###.#.###.#####.###.#.#.###########.###.#.#.#.#.###########
#.#.#.#.#.........#...#...#.....#...#.#.#...#...###.#.#.#.#.....#.#.#.#...###...#.#...#...#.#...#...#.#.#...........#...#...#...#.......#...#
#.#.#.#.###########.#############.###.#.###.#.#####.#.#.#.#####.#.#.#.#.#.###.#.#.#.#####.#.#.#.###.#.#.###########.###.###############.#.#.#
#.#...#.#...#...###.#...........#.#...#...#.#...#...#...#.#...#.#.#.#.#.#...#.#.#.#.#.....#.#.#...#.#.#.#...#.......###.................#.#.#
#.#####.#.#.#.#.###.#.#########.#.#.#####.#.###.#.#######.#.#.#.#.#.#.#.###.#.#.#.#.#.#####.#.###.#.#.#.#.#.#.###########################.#.#
#.#...#...#...#.#...#.#.........#...#...#...#...#.....#...#.#...#.#.#.#...#...#...#.#...#...#.###...#.#.#.#...#.....#...#...#...#...#...#.#.#
#.#.#.#########.#.###.#.#############.#.#####.#######.#.###.#####.#.#.###.#########.###.#.###.#######.#.#.#####.###.#.#.#.#.#.#.#.#.#.#.#.#.#
#.#.#.........#.#.#...#.......#.......#.....#.#...#...#...#.....#.#.#.#...#.........#...#...#.#.......#.#.....#.#...#.#...#...#...#...#...#.#
#.#.#########.#.#.#.#########.#.###########.#.#.#.#.#####.#####.#.#.#.#.###.#########.#####.#.#.#######.#####.#.#.###.#####################.#
#...###...#...#...#.#.....#...#.#.........#.#...#.#.#####...#...#.#.#...###...#.....#.....#...#.........#...#.#.#.....#...#...#.............#
#######.#.#.#######.#.###.#.###.#.#######.#.#####.#.#######.#.###.#.#########.#.###.#####.###############.#.#.#.#######.#.#.#.#.#############
#.......#...#.....#.#...#.#.....#.......#.#.....#.#...#.....#.#...#.###.......#.#...#...#.###...#.........#...#.#.......#...#...#...###.....#
#.###########.###.#.###.#.#############.#.#####.#.###.#.#####.#.###.###.#######.#.###.#.#.###.#.#.#############.#.###############.#.###.###.#
#...........#...#.#.#...#.#.............#...#...#...#.#.#.....#...#...#...#...#.#...#.#.#.....#.#.............#.#...........#.....#...#...#.#
###########.###.#.#.#.###.#.###############.#.#####.#.#.#.#######.###.###.#.#.#.###.#.#.#######.#############.#.###########.#.#######.###.#.#
###...#.....#...#...#...#.#...#...........#...#...#...#.#.###.....#...###...#.#.#...#.#.#.....#.###...........#.#...........#.#.......#...#.#
###.#.#.#####.#########.#.###.#.#########.#####.#.#####.#.###.#####.#########.#.#.###.#.#.###.#.###.###########.#.###########.#.#######.###.#
#...#...#.....#...#.....#.....#.#.......#...###.#.....#.#.#...#...#.#.........#.#...#.#.#...#.#.#...#...........#...#...#...#.#...#...#.#...#
#.#######.#####.#.#.###########.#.#####.###.###.#####.#.#.#.###.#.#.#.#########.###.#.#.###.#.#.#.###.#############.#.#.#.#.#.###.#.#.#.#.###
#.......#.#.....#...#...#.....#.#...###.....#...#.....#...#.#...#.#.#.....#...#.#...#.#.#...#...#...#.#.........#...#.#...#.#.#...#.#...#...#
#######.#.#.#########.#.#.###.#.###.#########.###.#########.#.###.#.#####.#.#.#.#.###.#.#.#########.#.#.#######.#.###.#####.#.#.###.#######.#
#.......#.#.........#.#...###...###...........#...###...###...#...#...#...#.#...#...#.#.#.....#...#...#.......#.#.....#...#...#...#...#...#.#
#.#######.#########.#.#########################.#####.#.#######.#####.#.###.#######.#.#.#####.#.#.###########.#.#######.#.#######.###.#.#.#.#
#.......#.###...#...#...#...#...###...#...#...#.....#.#.......#.#...#.#...#.......#...#.#...#.#.#.............#...#.....#...#...#.....#.#.#.#
#######.#.###.#.#.#####.#.#.#.#.###.#.#.#.#.#.#####.#.#######.#.#.#.#.###.#######.#####.#.#.#.#.#################.#.#######.#.#.#######.#.#.#
#.....#.#.#...#.#.......#.#.#.#.....#...#...#.#...#...#.......#.#.#...###...#...#.#.....#.#...#.................#.#.#...###...#...#...#.#.#.#
#.###.#.#.#.###.#########.#.#.###############.#.#.#####.#######.#.#########.#.#.#.#.#####.#####################.#.#.#.#.#########.#.#.#.#.#.#
#...#.#...#...#...........#...#.....#.......#...#...#...#...###.#.....#.....#.#...#.......#...#.................#...#.#.#...#...#...#...#...#
###.#.#######.#################.###.#.#####.#######.#.###.#.###.#####.#.#####.#############.#.#.#####################.#.#.#.#.#.#############
#...#.###...#.............#...#.###...#...#.....#...#.....#...#...#...#.#...#...#...#.......#.#.................#.....#...#.#.#.............#
#.###.###.#.#############.#.#.#.#######.#.#####.#.###########.###.#.###.#.#.###.#.#.#.#######.#################.#.#########.#.#############.#
#...#.#...#.....#.........#.#...#.......#.......#.#...#...#...###.#...#.#.#...#...#.#...#...#.#.................#...#.......#.#.............#
###.#.#.#######.#.#########.#####.###############.#.#.#.#.#.#####.###.#.#.###.#####.###.#.#.#.#.###################.#.#######.#.#############
#...#.#.......#.#...........#...#.............###...#.#.#.#.....#...#.#.#.###.....#.###...#.#...#.....#.........#...#.........#...#.........#
#.###.#######.#.#############.#.#############.#######.#.#.#####.###.#.#.#.#######.#.#######.#####.###.#.#######.#.###############.#.#######.#
#...#.........#...#...........#.........#...#.......#...#.......#...#.#.#.#.......#.#...###.#...#.###...#.....#...#.....#...#...#...#...#...#
###.#############.#.###################.#.#.#######.#############.###.#.#.#.#######.#.#.###.#.#.#.#######.###.#####.###.#.#.#.#.#####.#.#.###
#...#...........#.#...................#...#.........#######S..###.....#...#.....#...#.#.....#.#.#.#.......###.....#...#...#...#.......#.#...#
#.###.#########.#.###################.#######################.#################.#.###.#######.#.#.#.#############.###.#################.###.#
#.....#.........#.....................#################.....#...#...#...#...###...###...#...#.#...#.......#.....#...#...#.........#...#...#.#
#######.###############################################.###.###.#.#.#.#.#.#.###########.#.#.#.###########.#.###.###.###.#.#######.#.#.###.#.#
###...#.............#..............E#################...###...#.#.#...#...#.#...........#.#...###.........#.#...###...#...#.....#...#.###...#
###.#.#############.#.###############################.#######.#.#.#########.#.###########.#######.#########.#.#######.#####.###.#####.#######
#...#...........###...#.........................#####.......#...#.....#...#.#.............###...#.....#.....#.#.....#.......###.....#.......#
#.#############.#######.#######################.###########.#########.#.#.#.#################.#.#####.#.#####.#.###.###############.#######.#
#...#.....#...#...#...#.......................#.#...#.....#...#.....#.#.#...#...........#.....#.....#...#.....#...#...........#...#.........#
###.#.###.#.#.###.#.#.#######################.#.#.#.#.###.###.#.###.#.#.#####.#########.#.#########.#####.#######.###########.#.#.###########
#...#.#...#.#...#.#.#...#.....#...#...........#.#.#...###.....#...#...#.#...#.........#.#.....#...#.......#.....#.#.........#...#...........#
#.###.#.###.###.#.#.###.#.###.#.#.#.###########.#.###############.#####.#.#.#########.#.#####.#.#.#########.###.#.#.#######.###############.#
#.....#.....###.#.#...#.#...#...#...#...#...#...#.#.......#...###.....#.#.#...#...#...#.#...#...#...........#...#.#.......#.#.....#.........#
###############.#.###.#.###.#########.#.#.#.#.###.#.#####.#.#.#######.#.#.###.#.#.#.###.#.#.#################.###.#######.#.#.###.#.#########
#.....#.....#...#.....#.....#.......#.#.#.#.#.....#.....#...#.#...###.#.#.#...#.#.#...#...#.###...#...#.....#.....#...#...#...###.#.......###
#.###.#.###.#.###############.#####.#.#.#.#.###########.#####.#.#.###.#.#.#.###.#.###.#####.###.#.#.#.#.###.#######.#.#.#########.#######.###
#...#.#...#...#.............#.....#...#...#...#.....###...#...#.#...#.#.#.#.#...#.###.....#...#.#...#.#...#...#.....#.#.....#...#.......#...#
###.#.###.#####.###########.#####.###########.#.###.#####.#.###.###.#.#.#.#.#.###.#######.###.#.#####.###.###.#.#####.#####.#.#.#######.###.#
#...#...#...#...#...........#.....#...........#.#...#...#.#...#.#...#.#.#.#...#...#...###...#...#...#...#...#.#...###.......#.#.......#.....#
#.#####.###.#.###.###########.#####.###########.#.###.#.#.###.#.#.###.#.#.#####.###.#.#####.#####.#.###.###.#.###.###########.#######.#######
#.....#.....#...#...#...#...#...###.#...#.......#...#.#.#...#.#.#.#...#.#.....#...#.#.....#.......#...#.....#...#...###...###.#.......#.....#
#####.#########.###.#.#.#.#.###.###.#.#.#.#########.#.#.###.#.#.#.#.###.#####.###.#.#####.###########.#########.###.###.#.###.#.#######.###.#
#.....#.....#...###...#...#...#.#...#.#...#.........#.#.....#...#...#...#.....#...#.#.....#.....#.....#.......#...#.....#.....#.......#.#...#
#.#####.###.#.###############.#.#.###.#####.#########.###############.###.#####.###.#.#####.###.#.#####.#####.###.###################.#.#.###
#.......#...#.#...#...........#.#.....#...#.#...#...#.......#.....#...###.....#...#.#.....#...#.#.......#.....###...#.................#.#...#
#########.###.#.#.#.###########.#######.#.#.#.#.#.#.#######.#.###.#.#########.###.#.#####.###.#.#########.#########.#.#################.###.#
#.........#...#.#.#.......#...#...#.....#.#...#...#.#.......#.#...#.###.....#.#...#.....#.#...#.....#...#...###...#.#...................#...#
#.#########.###.#.#######.#.#.###.#.#####.#########.#.#######.#.###.###.###.#.#.#######.#.#.#######.#.#.###.###.#.#.#####################.###
#...........#...#.......#...#.....#.....#.#...#...#.#.........#...#...#...#.#.#.....###.#...#.......#.#.....#...#.#...#.....#...#...#...#...#
#############.#########.###############.#.#.#.#.#.#.#############.###.###.#.#.#####.###.#####.#######.#######.###.###.#.###.#.#.#.#.#.#.###.#
#...........#.........#...#.....###.....#...#...#...#...###...###...#...#.#.#.....#...#.....#.###...#.........#...###...###...#...#...#...#.#
#.#########.#########.###.#.###.###.#################.#.###.#.#####.###.#.#.#####.###.#####.#.###.#.###########.#########################.#.#
#.#.....#...#...#...#.#...#...#.....#.....#...#...#...#.#...#.....#...#...#...###...#.#.....#...#.#.#...#.......#...#...#...........#.....#.#
#.#.###.#.###.#.#.#.#.#.#####.#######.###.#.#.#.#.#.###.#.#######.###.#######.#####.#.#.#######.#.#.#.#.#.#######.#.#.#.#.#########.#.#####.#
#...#...#.....#...#...#.......#.....#.#...#.#.#.#.#...#.#...#.....###.#.......#...#.#.#.....#...#.#.#.#.#.........#...#...#.........#.....#.#
#####.#########################.###.#.#.###.#.#.#.###.#.###.#.#######.#.#######.#.#.#.#####.#.###.#.#.#.###################.#############.#.#
#...#.................#...#...#...#.#.#...#.#.#.#.#...#.#...#.....#...#...#...#.#.#.#.#...#.#...#.#...#.#...#...#...#...#...#...........#.#.#
#.#.#################.#.#.#.#.###.#.#.###.#.#.#.#.#.###.#.#######.#.#####.#.#.#.#.#.#.#.#.#.###.#.#####.#.#.#.#.#.#.#.#.#.###.#########.#.#.#
#.#...................#.#...#.#...#.#.#...#.#...#...#...#.#...#...#.....#.#.#.#.#.#.#.#.#...#...#.....#.#.#...#...#.#.#...###.#.........#.#.#
#.#####################.#####.#.###.#.#.###.#########.###.#.#.#.#######.#.#.#.#.#.#.#.#.#####.#######.#.#.#########.#.#######.#.#########.#.#
#...#...#.......#.....#.###...#.#...#.#...#.........#...#.#.#...#.......#.#.#.#.#.#.#.#...#...#...#...#.#.....#.....#.......#.#.#...#...#...#
###.#.#.#.#####.#.###.#.###.###.#.###.###.#########.###.#.#.#####.#######.#.#.#.#.#.#.###.#.###.#.#.###.#####.#.###########.#.#.#.#.#.#.#####
#...#.#...#.....#.#...#.#...#...#...#.#...#...#...#.#...#.#.#...#...#.....#.#.#.#.#.#...#.#.#...#.#.###.#.....#.#.........#...#...#...#.....#
#.###.#####.#####.#.###.#.###.#####.#.#.###.#.#.#.#.#.###.#.#.#.###.#.#####.#.#.#.#.###.#.#.#.###.#.###.#.#####.#.#######.#################.#
#.#...#.....#...#.#.#...#...#.#...#...#.#...#.#.#.#.#...#.#...#.#...#...#...#.#.#.#.###.#.#.#.#...#...#.#.....#.#...#...#.....#...#.........#
#.#.###.#####.#.#.#.#.#####.#.#.#.#####.#.###.#.#.#.###.#.#####.#.#####.#.###.#.#.#.###.#.#.#.#.#####.#.#####.#.###.#.#.#####.#.#.#.#########
#.#...#.......#.#.#...#...#.#.#.#.###...#...#...#.#...#.#.#.....#...###...###.#.#.#...#.#.#.#.#...#...#.#.....#...#...#...###...#.#...#...###
#.###.#########.#.#####.#.#.#.#.#.###.#####.#####.###.#.#.#.#######.#########.#.#.###.#.#.#.#.###.#.###.#.#######.#######.#######.###.#.#.###
#.....#.........#.#.....#...#...#...#...#...#...#.....#.#.#...#...#.........#.#.#.#...#.#.#...###.#...#.#.......#...#...#.......#...#.#.#...#
#######.#########.#.###############.###.#.###.#.#######.#.###.#.#.#########.#.#.#.#.###.#.#######.###.#.#######.###.#.#.#######.###.#.#.###.#
###...#.......#...#.............#...#...#...#.#.........#...#.#.#.#...#.....#...#.#...#.#.#.......#...#.#.......###.#.#.#.......#...#...#...#
###.#.#######.#.###############.#.###.#####.#.#############.#.#.#.#.#.#.#########.###.#.#.#.#######.###.#.#########.#.#.#.#######.#######.###
#...#.........#.###.............#...#...#...#.#.......#.....#...#.#.#...#.......#.#...#.#.#.......#.###...###.......#.#.#.......#...#...#...#
#.#############.###.###############.###.#.###.#.#####.#.#########.#.#####.#####.#.#.###.#.#######.#.#########.#######.#.#######.###.#.#.###.#
#...#.........#.#...#...#...#...#...#...#...#...#...#.#.###...#...#.......#...#.#.#...#...#.......#.....#...#.....#...#.#.....#...#.#.#.#...#
###.#.#######.#.#.###.#.#.#.#.#.#.###.#####.#####.#.#.#.###.#.#.###########.#.#.#.###.#####.###########.#.#.#####.#.###.#.###.###.#.#.#.#.###
###.#.#.......#.#.#...#...#.#.#...###.#.....###...#...#...#.#...#...#...#...#...#...#.....#.#...#.....#...#...#...#.#...#...#...#.#.#.#.#...#
###.#.#.#######.#.#.#######.#.#######.#.#######.#########.#.#####.#.#.#.#.#########.#####.#.#.#.#.###.#######.#.###.#.#####.###.#.#.#.#.###.#
#...#.#.......#.#.#.....#...#.#.......#.......#.......#...#.....#.#.#.#.#.........#.#.....#...#.#.#...#.....#.#.#...#...#...###.#.#...#...#.#
#.###.#######.#.#.#####.#.###.#.#############.#######.#.#######.#.#.#.#.#########.#.#.#########.#.#.###.###.#.#.#.#####.#.#####.#.#######.#.#
#...#...#.....#.#.#.....#.#...#.#.....#.....#.###.....#.#.......#.#...#...#...#...#.#.......#...#.#...#...#.#.#.#.#.....#.....#...#.......#.#
###.###.#.#####.#.#.#####.#.###.#.###.#.###.#.###.#####.#.#######.#######.#.#.#.###.#######.#.###.###.###.#.#.#.#.#.#########.#####.#######.#
###.....#.....#.#...#.....#.###...#...#...#...#...#...#.#...#...#.......#...#.#.###.#...#...#.#...#...#...#...#.#.#...#.....#.....#.......#.#
#############.#.#####.#####.#######.#####.#####.###.#.#.###.#.#.#######.#####.#.###.#.#.#.###.#.###.###.#######.#.###.#.###.#####.#######.#.#
#.............#.###...#...#.#...###...#...#.....#...#.#.#...#.#.#...#...#...#.#...#...#...#...#...#...#.......#.#.###.#.#...#.....#...###.#.#
#.#############.###.###.#.#.#.#.#####.#.###.#####.###.#.#.###.#.#.#.#.###.#.#.###.#########.#####.###.#######.#.#.###.#.#.###.#####.#.###.#.#
#...#...#.....#.#...#...#.#.#.#.......#...#.#...#...#...#...#.#...#.#.....#.#...#.......#...#.....###...#.....#...#...#.#...#.......#...#.#.#
###.#.#.#.###.#.#.###.###.#.#.###########.#.#.#.###.#######.#.#####.#######.###.#######.#.###.#########.#.#########.###.###.###########.#.#.#
#...#.#.#.#...#.#...#.#...#.#.#...#.....#.#.#.#.#...#.......#.....#.#...#...#...#...#...#...#.....#.....#.........#.#...###...#.....#...#.#.#
#.###.#.#.#.###.###.#.#.###.#.#.#.#.###.#.#.#.#.#.###.###########.#.#.#.#.###.###.#.#.#####.#####.#.#############.#.#.#######.#.###.#.###.#.#
#.....#...#.....###...#.....#...#...###...#...#...###.............#...#...###.....#...#####.......#...............#...#######...###...###...#
#############################################################################################################################################

69
24/24-01.py Normal file
View 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
View 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
View 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
View 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