Compare commits

...

11 Commits

Author SHA1 Message Date
Stefan Harmuth
97d51cb00c day25 the solution is easier to calculate once you have the loop count 2020-12-25 07:45:40 +01:00
Stefan Harmuth
d630a568b7 day25 bruteforce, but calculating one loop is enough 2020-12-25 07:39:08 +01:00
Stefan Harmuth
a9452f5231 day25 bruteforce 2020-12-25 07:29:41 +01:00
Stefan Harmuth
7b6c3bfa2a Merge remote-tracking branch 'origin/master' 2020-12-24 07:05:31 +01:00
Stefan Harmuth
92841964b2 day24 2020-12-24 07:05:26 +01:00
Stefan Harmuth
153f4f79b6 TIL: python has 1000 delimiters 2020-12-23 13:51:59 +01:00
Stefan Harmuth
3a396c8c47 day23: correct naming 2020-12-23 12:54:10 +01:00
Stefan Harmuth
d82dcaa421 day23: don't need left 2020-12-23 11:41:36 +01:00
Stefan Harmuth
5f0fb357bd day23: a bit of cleanup 2020-12-23 07:56:09 +01:00
Stefan Harmuth
3dca21452a Merge remote-tracking branch 'origin/master' 2020-12-23 07:21:06 +01:00
Stefan Harmuth
4283467970 day13: after no longer understanding, what I did there, rewrote p2 with added comments to make it understandable in the future (same solution, just with some added dict-spice instead of lists) 2020-12-22 13:15:43 +01:00
8 changed files with 700 additions and 43 deletions

View File

@ -20,17 +20,27 @@ def part1(test_mode=False):
def part2(test_mode=False):
my_input = aoclib.getInputAsArraySplit(day=DAY, split_char=",", test=test_mode)
bus_ids = {-i: int(v) for i, v in enumerate(my_input[1]) if v != 'x'}
lowest_common_multiple = math.lcm(*bus_ids.values())
base_multipliers = [lowest_common_multiple // interval for interval in bus_ids.values()]
modular_multiplicative_inverses = [
pow(base_multiplier, -1, interval)
for base_multiplier, interval
in zip(base_multipliers, bus_ids.values())
]
bus_ids = {i: int(v) for i, v in enumerate(my_input[1]) if v != 'x'}
# utilizing the Chinese Remainder Theorem we are searching for x = i (mod bus_ids[i]) for all i
# watch https://www.youtube.com/watch?v=ru7mWZJlRQg for an easy explanation
# finding the "left" part of each (mod x) part
base_multiplier = {i: math.prod(bus_ids.values()) // v for i, v in bus_ids.items()}
# finding the "right" part of each (mod x) part utilizing the Extended Euclidean Algorithm
# s. Python documentation on pow(x, -1, y)
ext_multiplier = {i: pow(base_multiplier[i], -1, bus_ids[i]) for i in bus_ids}
# sum all multiplications together and add our offset
# EEA gives us base_multiplier[i] * x == 1(one!) (mod bus_ids[i])
# but we need base_multiplier[i] * x == i (mod bus_ids[i])
answer = sum(i * base_multiplier[i] * ext_multiplier[i] for i in bus_ids)
# and shrink it down
# for the -answer see pythons behaviour when calculating the mod of negative numbers with positive divisor
# also: http://python-history.blogspot.com/2010/08/why-pythons-integer-division-floors.html
lowest_common_multiple = math.lcm(*bus_ids.values())
answer = -answer % lowest_common_multiple
return answer
return sum(
offset * multiplier * mmi
for offset, multiplier, mmi
in zip(bus_ids.keys(), base_multipliers, modular_multiplicative_inverses)
) % lowest_common_multiple

View File

@ -6,64 +6,51 @@ TEST_SOLUTION_PART2 = 149245887792
class Cup:
def __init__(self, label, left=None, right=None):
def __init__(self, label, right=None):
self.label = label
self.left = left
self.right = right
def buildDoubleLinkedListDict(cup_list):
def buildLinkedListDict(cup_list):
cups = {}
left_cup = None
first_cup = None
last_cup = None
for cup in cup_list:
thisCup = Cup(cup, left_cup, None)
thisCup = Cup(cup, None)
if first_cup is None:
first_cup = thisCup
else:
last_cup.right = thisCup
left_cup.right = thisCup
left_cup = thisCup
last_cup = thisCup
cups[cup] = thisCup
first_cup.left = last_cup
last_cup.right = first_cup
thisCup.right = first_cup
return cups, first_cup
def play(cups, current_cup):
def play(cups, current_cup, max_label):
first_pickup = current_cup.right
first_after_pickup = current_cup.right.right.right.right
current_cup.right = first_after_pickup
first_after_pickup.left = current_cup
pickup_cups = [first_pickup.label, first_pickup.right.label, first_pickup.right.right.label]
destination_label = current_cup.label - 1 if current_cup.label > 1 else max_label
while destination_label in [first_pickup.label, first_pickup.right.label, first_pickup.right.right.label]:
destination_label = destination_label - 1 if destination_label > 1 else max_label
current_label = current_cup.label - 1 if current_cup.label > 1 else max(cups.keys())
while current_label in pickup_cups:
current_label -= 1
if current_label == 0:
current_label = max(cups.keys())
desination_cup = cups[current_label]
desination_right = desination_cup.right
desination_cup = cups[destination_label]
first_pickup.right.right.right = desination_cup.right
desination_cup.right = first_pickup
first_pickup.left = desination_cup
desination_right.left = first_pickup.right.right
first_pickup.right.right.right = desination_right
return cups, current_cup.right
def part1(test_mode=False):
my_input = aoclib.getInputAs2DArray(day=DAY, return_type=int, test=test_mode)
cups, current_cup = buildDoubleLinkedListDict(my_input[0])
cups, current_cup = buildLinkedListDict(my_input[0])
for round in range(100):
cups, current_cup = play(cups, current_cup)
for _ in range(100):
cups, current_cup = play(cups, current_cup, 9)
answer = ""
add_cup = cups[1]
@ -76,9 +63,9 @@ def part1(test_mode=False):
def part2(test_mode=False):
my_input = aoclib.getInputAs2DArray(day=DAY, return_type=int, test=test_mode)
cups, current_cup = buildDoubleLinkedListDict(my_input[0] + list(range(max(my_input[0]) + 1, 1000001)))
cups, current_cup = buildLinkedListDict(my_input[0] + list(range(max(my_input[0]) + 1, 1_000_001)))
for round in range(10000000):
cups, current_cup = play(cups, current_cup)
for _ in range(10_000_000):
cups, current_cup = play(cups, current_cup, 1_000_000)
return cups[1].right.label * cups[1].right.right.label

68
day24.py Normal file
View File

@ -0,0 +1,68 @@
import aoclib
DAY = 24
TEST_SOLUTION_PART1 = 10
TEST_SOLUTION_PART2 = 2208
def getTileGrid(from_input):
grid = {}
for line in from_input:
x = 0
y = 0
while len(line) > 0:
if line[0] == 'e':
x += 1
line = line[1:]
elif line[0] == 'w':
x -= 1
line = line[1:]
elif line[0] == 'n':
y -= 1
if line[1] == 'e':
x += 1
line = line[2:]
elif line[0] == 's':
y += 1
if line[1] == 'w':
x -= 1
line = line[2:]
if (x, y) in grid:
del grid[(x, y)]
else:
grid[(x, y)] = True
return grid
def part1(test_mode=False):
my_input = aoclib.getInputAsArray(day=DAY, test=test_mode)
grid = getTileGrid(my_input)
return len(grid)
def part2(test_mode=False):
my_input = aoclib.getInputAsArray(day=DAY, test=test_mode)
grid = getTileGrid(my_input)
for i in range(100):
black_neighbour_count = {}
for coord in grid:
x, y = coord
for nCoord in [(x-1, y), (x-1, y+1), (x, y-1), (x, y+1), (x+1, y-1), (x+1, y)]:
black_neighbour_count[nCoord] = black_neighbour_count.get(nCoord, 0) + 1
for nCoord, nCount in black_neighbour_count.items():
if nCoord in grid and nCount > 2:
del grid[nCoord]
elif nCoord not in grid and nCount == 2:
grid[nCoord] = True
for coord in grid.copy():
if coord not in black_neighbour_count:
del grid[coord]
return len(grid)

33
day25.py Normal file
View File

@ -0,0 +1,33 @@
import aoclib
DAY = 25
TEST_SOLUTION_PART1 = 14897079
TEST_SOLUTION_PART2 = 0
def transform(key, subject_number, loop_size=1):
for _ in range(loop_size):
key = key * subject_number % 20201227
return key
def part1(test_mode=False):
my_input = aoclib.getInputAsArray(day=DAY, return_type=int, test=test_mode)
loop_card = 1
public_key_card = 1
while pow(7, loop_card, 20201227) != my_input[0]:
loop_card += 1
public_key_card = transform(public_key_card, 7)
public_key_door = my_input[1]
# as we start with a key of 1, it's just a matter of
# multiplying public_key_door with itself loop_card times ....
return pow(public_key_door, loop_card, 20201227)
def part2(test_mode=False):
# there is no part2 for day 25
return 0

535
inputs/24 Normal file
View File

@ -0,0 +1,535 @@
swsenenwneswnewseswwseswnwsweeswnw
esweeeeneeeneeeweeeenenenee
ewewsewswnewnwnewwwwsew
nwnwnwnwnenwwnwsenwnwnwnwnwnwnw
nwswseswneswseswswneswswseneseswswsenwswse
swswswneswswswswwneseswwswsw
newnwwnwnenenenenwsweenenwnenwnenese
senwsewseneneseneenenwwneneeswnewsw
eeeeneweeeseeeeeenewneswe
wnwswwewwwsewnwnwwnwnwwwnwnwnww
nenwnwnwnesenwwnwnwwneswnwnenesweneenwnw
nwwnwwwwenwwswnwwwwwewsesew
swnwswwswswewswseswnwne
wswnewswnwwwwenewsewwwwneswe
nwnwnenenewneneneneneenenesenwneswneswse
nwewsenwnwneseswwwwwwswwswwwwe
nesenwseneswseswnwneseseseseseswnwse
wnesweseswenwnenwnweseeseseeswnwse
swswnenenenenewneneeeneneeneneenenene
seseseseeweseeesee
wwwwwwwwwnewnwwwswww
sesenwesenwseeseseseewswneseseesesw
wnewwwsewnwwnwnwewnwswnwwwwnwe
nwnwnenwnwneneenewswnwnenwswnwnesenwsw
eeswwneeneneeneeneeeeesw
seneenesewneeneswwnenenweeenenewwe
seswseswsenwswswseswswswswenwswsesesw
nwnwnenwnenwnenwnwnwnenwswnenwwwnwese
wnwwwwwnwwwnwwnwnwseneenwnwnww
ewnwnwnwnwnwnenwnwnwnenenwsenenwnwnene
neneweeeeneeneesweseswswneseswse
seswseeneswswswseseewsewnwswswwnwne
swwneneneweseswnenwneeneneeeeeeee
swwwwwwwwwwwwswswwswswnesew
eewenwseeeeeweeeeneeese
neneneneneeneswneeenee
sewnwnwwswnwseenwwnenenwwnw
swsweswswswswsewseneseswswsesweswnwsw
nenewewwwwwwwwwnewwswsesewww
enwsweneseseeesese
swneseseseneeseesenwwseneswseseseseew
nwswswneeeewneseenwnwnesewwswnwesw
nenenwneenwneneneneneneneneneswenewne
nwneneseeenwnwnwneneneswneswwnenwnwnenw
neseenenwneeneneneeeeneene
sesesewseseseswneseesesesesenewseswsese
senwnewseneneeeneeeeeenesenwnene
eeweneneeenweeeseesweeeee
esesenwswnwseewseswseeeseswenenwse
neeneeeseswseeesweneeseeesweee
swweswnwneswswwswswneswswswswswsw
wwswwwnwnwnenewnwenwswnwsesenwnwe
neseneenwneeeeeneneeeewneeene
swsenwsesesweswsewswswswsenwneseswsesw
wewwwwwnwwwwwnwwwnw
swseweeenwswneseseesenese
senwsesesesesesesewseesewe
sewnwnwnweswnwnwsenwnwnwnwsenwnwnwnwnw
swswswswswswswswswseswswswswswswwswnesw
wswnwnwsewwnwewwewwnesewwne
enenenwnewnenwnenenwwneswneseswnenwsenwnw
seseseswswseswsewnwsewswswseeseeswse
nwseswnweswnwneseweswsesweseseswne
seseswwnwswneneseneneseeseesenwswnwww
wswswwwwswwneswseswnwswswsew
senwnwwnwnwesewswnewswwsenwwnwnwwnw
swsewneswswswswwswswwswswswsw
eneseeeswneswneeseesenwewsenwewnwnw
neneneeeneweneneeswe
neeeseeenwnweewswnewneseneenenee
senewesesenweseseeesewsesesesesesee
eseeeseseseenwseeneseseeewse
nwnwseseenwenwnenwwswnwnwnwwnwnwnwnwnw
senewweseeenwsesesenesewsesesesee
enenenwswnenewswenwnwneenwwnwswnenene
eswseseneswsenwswseseseswsesesewsenwsesee
wnwneswneseneneneneeneneswenenenenewne
seswneewsenesesewnwwswnesewswesenwne
eswwesenwwenwnwnweseseeeeeese
neeneswneeswnenesenwnwneswnenwneneswsene
swswneseseswswswswwewnwsenwesweneswnwe
nwenwwwnwnwnenwnenwnwnwnwnwsweneswe
seseneneeseseeeeswsenwwwesesenwe
sweswseswwnwsesesewseseseseswseneswnene
seswseseseseseswwseswsenesesesesesesese
sesesenwswswseswswsw
senwseeeeseseeseseseenwewswesee
wwsenwewwnewwswwwwwswwwwwne
nwnwnwneswnwnwnwsenwwwnwwnwnwnwenwse
swwwswswswwwsewnenwswwswwswseww
enweenesesesenewnwnwwswswswseseese
swnenenenenenenenwnenesenewnenwnenenwnene
enenesweeeeseneeneeeneeneeew
wnweseeswnwwenwnenwnwnwwenwnwsenwwnw
neswswswseswswswwswnesw
neswseeneseswsewseseswseseswswwswswse
seeneswsesenweeeseeseswsewenesee
wewewwnenesewsenwwnenwnwseswsww
nwnwsesewnwseeeswnwnwseewseenw
nwwwwwnwwnwnwwwwnwsenwwwwsew
eenwneseeeneeneenenwseeeeeee
nwenwnwnenwswnwneesenwwwnwnwnwsenwnw
swswswswseswswswswwseswswswswswswswswne
swwwwwwwwwwnwwewwwnwwww
esweeeeeeneeenwnwenesw
eeenweeeseese
wwwnewwsewewwwwwwwwww
seseseeseseesesenwesewseeseseseswnesese
senwnwwneswwswwnenwwwewnwnwwnww
swnwsesewneenwenwseenwneeseeseewsw
eneeneneneneneneswsewswsenenenwnenenenw
wneesweseswswwsewswnweswswewswswse
neseneneeewneneenewnenenenenenenenene
wswnesewwsenewswswswswneswswswsweesw
swswsesenwseswsewseswneseseseswsesw
seswwswwwseswswswswswweswneswswnewsww
neneesenewewnenwneneneswnwweswswnese
swswswwwswswswswswwneswswwwswseww
neenenenenenenenenenwsewneneneneswnenene
eneeeeseenenwwesenesweeseeesw
swswswswswswwswnwswswwswseswswswsw
eneseseseswsesesewsesesesesenwseseswenese
nenesweenenenewneneeeneswnweenene
eneswsenwseenwenwene
swsewnenwenwwwwseseseswnwwne
seeseseseseseseswsewsesesenwseseseewse
swenewswnenwswsweswneswswswse
wnwwnwwwswwwwnwsenenwnwwwnwwww
eswswwswswnwswswwwswswsewsweeswww
nwwnwenwnwnwwnwsewnwwwnwnenwnwnwnwnw
seswwseeswswseenwneseswnewwswseswsw
enewwwswesewwnenwseswseweenwnwnew
swseswseesenwseseseseseseseswseswwsee
neneneneneneneneneneneenwnewneswe
wnwswswnewnwnwwwsenewweeswnwnenww
swenweenweeneswneeeeneneee
nesweswswseeswswsenwswsewwseneneswse
nwneswewnwnenwnwnenesenenenwnwnwneswnene
wenwswnwnwnwnwnenwnwnwenenwnwnwnwnwnwnwne
seseneesewnwnwneenwseeswswsesewnese
swnewswnwswnwnwnwwenwnwseewnwnenenww
seesesewenwneeeenwnesenenwsweseswnwsw
swnenenwnwnwnenenwnwnwnwswnenenenenwnwse
ewewnwwswesewsweswnweswswnwnwwnesw
neseneewwswwwwnwwwewwwwwsww
enwnwnwwswnesewwnwnwsewswnw
sewwwwwsweswnwswswnwwwwewsesw
neneneseweneenenwesewnenenenenenese
eeeenweeeeswseewnweewneswnew
wnwnenwnweneneswnenwenenenwnesenwne
eseseseseswsenwseseswsesesesesesesesese
eseeseeseeesesenwwseene
nenwnwnwnewnwnesenwnwsenwnwneneseesw
ewwnwnewnwwnwnwnwnwnwswswswwwnwenw
senwwneeneeeneneneenewneswenwnene
nwnenwnenwewenwnenewseeeenwswswwswe
wwewwwwnwwnwwwnw
eeeeeeseseeeeeeeeeew
wnwneeeseeneeneeneeneweseeenesw
nwwnwsweswwwseww
swswwswneswseswswswseswswseswsesweswwsw
newneneeneseenenenenenenenenenenewwne
nesewwwwswwnwwwnwwwneewwwsee
enwseseseseeseseseeeseesese
seeseseseseseeseseswneseswseseesesesenwse
nwseeseeesesewswseswwsenwseswneseesw
wneseenwnenwenwneeneneneneneeseesee
nwneesenwsweeneneneeseeneesenwww
nenenwswnwswnwnwnwnwnwnenwnenenwnenwnwnwnw
nwnwnwenwnwnwnwnwnwnwnwnewnenwnwswnwnw
wwwwnwwnwwnwewnwnwnwwnwwwswnw
neewneenewseneneeneneneneneneneene
neneneneneneneneneneswnenwnenenwnesenwnene
eeeeeeeseeeeeeeneeweee
ewwsweswsweseswswswswnwnwewnwnesw
weswswseseenweneesenenwnwnwneswswse
nwswswseswwswswswswwwswsww
seswseswwseseswswswneseswseswswswneseswswsw
eneeneewnenwneeseeneneeneneneseeee
eenwnweswenwenenwswswneeeewese
nenenenesweneswneswnenwne
enweseeseeneesweswnwsee
swnesesenenwwswnwsesenweneenenweswwew
nenwnwnwnwnwnwnwnwnwwnwnesenwswnwenwnw
nwwnenwnwnwswnwswsenwnwenwnwswnwenwnwe
swweeenwneswnwnwwswsewwswswseneew
esewnwseenwseseenweseseseesesesenwse
enweseeeeseseeneeseeeseweee
eeseeeeseseseeeewneeeseeeswe
swswwwnewswwswwswwswwswsw
eewseeenwsweenweneesewnweew
wswswsenweswnwsenwnwswswwneseweneww
nenewswnenesenenenenenwnwnenewneenenene
nwnwnwnwnwenenwnwnwwnwnwnw
sweweesweseeeswnweenwseneeenwee
ewesesenweseenwseseseeseneseeeswe
eneenenewnenenenenesenenene
eeeesesweeewseseeeneesewenesew
wswwwswswswwswswnwsweswswwswnewseswsw
swswswseswswswswswswswswswseseseswswenw
neenenwenenweseweneenesenwswneswnwswne
seswwwwwwwwwwwwwwwwnesenewne
swswswswswsweswswseswswswswswswseenwnwswsw
eneeeseeseseeseeseewseseseseee
swneswswwnewewswswsewwswwswnewse
wnwnwwwswwnwwewwwwwseewnewsw
senweeneeseeewenwsew
nwnwnwnwseswnwnwnwnwenwnwenwnwnwnwwwwsw
eeseneeeswewenwneeseeeeeee
wnwenwwnwnwnwnwe
wswwswswwwwwwsewswwneswswswsww
nwnwnwnwnenwnwnenenesw
nenewwnwnwswnwesenwneseneenenwneewne
nwneneswnwnenenwnwwsenwnenwnenenwnenenw
swwwwswswnenwsweswenwswseneswwswnese
eeeeewneweeeeswsewesweenwene
seswsewnwwnenwwsesenesewnwweeswswnwse
senweeseseswnewseseswsenesese
nwsenwnwnwnwnwnwenwnwnwnwwnwwwnwww
wseseseseseswswswswneswse
nwneneswnenenenenwnenwne
esenwseeswseseseseseseswsesenesenwswse
seswswswswnenwswenewenwneswseswwswswswse
sweswwwnwswwswwnweswww
swwswsewswwswwswwswswwnewneww
swseneswwnwweswswseswseeswwneswswswew
eseseseesesesenweeseseseweeseswese
swswnwnwnweswswswswswswswee
swseneswsesenesweewwseneswseswswnwnw
sewseeseseseeeseseesesesenese
seswnesesesesesesewseseseswsesesesesese
seseseseswseswseseseseswsesewseswsenese
enwnenwenwnenwnwswsenwnwswne
enenewnenwneneneneneneneewnenenenene
nwwsweneswwswwsewswwswwswwenwswsw
swsewseseneswswswseseswseeswseswsesese
neneseewneseneneneeneneenwnenewe
wwnwwwewswewwwwwwwswwswww
eeswneneneneneneneeneneneswswnenenwnw
nwnwnenenwnwsenwnwnenenwnenw
eeseseseesenwseseeesesesewseseseseesw
wewwwswwwswwwwwwswnwsewwnw
nwwnwnwwwnwnwewnwnwwnwswswnwwnwe
nenwnenwnwnenwnwnwswnwnwwnwnesenwnweswnenw
wwneweenenwswnesesewnewswswwwse
seswswsesesesewswseseseseseseneseswsese
swswseswseseswseswseneeswswseswsesewse
eneneenweeewnwesenenwseswseewwe
swenenweeeneeeneewseeswenwee
enesenewwwswseseswsese
eswneseweneneeneneeenweneneeee
eseseeseseeweswswenwneeeeneewne
wnwwneenwwwwsenwwwwnwwwwww
nwnweseenweewneswesweeeeeneew
swswswwnewswwswseneswwwswwwswsww
nenwswnwnwnwenwnwnwnenenwnwnenwnwnwnene
nwnwwwwnwnwwnwnewnwnwnwnwsenwwww
wswnwwseswwswwswwnwwewswsewswew
wneeweneneneseneswnewnenesesenenwnee
sesesesenwseswseswsesesesenwsewseneesese
swseswsenwsweseswsewswsweswse
nesesesweewwsweswseseswnwnwnwswsee
nenwnenwnwnenenwneswseseenw
sesenwswsenenwseswnew
sewseseseseeseseseseseesesesesenwseseswse
sewwenwnwnwwnenwnewswnwwwwnwwwnww
nwnenesewnwnwnwnwnwnenwsenwnwnwnwnwnwnwnw
nenwseneswnweseseswneweswnesenweewne
sesenwseseseewseseewseneseesesesesw
wwnwwnwnwwseswwnwenwnwwwnwnwewww
seseswsenwseswswseswwneseswsese
sweeswnenenenwneneenweeeneeeeene
seseseseswneswseswseswsenwseseseswsese
enenenenenenwnwnwnwnenesenenwnwneswnwnene
swwsweswwswwwswswswsw
wwswwnwsewswwnenwwwwwnwenwnww
eenwnwseseseseeeeeeeeeweeswswe
nwsenwnwnwnwnwnwnwnwnenwnwnenwwne
swwswswsweswswswswwesweseswswswswsww
seseesenwseweseeeseseewseseswsese
nwseeeesweeeeeseeweeenweeee
seeswneseseseseseswsesesesesesesesenw
eswenewsenwwneeeneeneeneenenee
wswenwnwenwwnenwwswesewseneweewsw
sweswenwswnwswswnwnwwnweenenwnwe
nwenweeswswwww
nwneneneswnwnenenenwnwneneswnwnwnesenenene
swseeesweeewsesenwweseenweenee
nenwneswneswneneenesenesewnwnesenewnenene
sewsesesesesesesenwseseeseneseewwsese
seswswswswwswwneswwswswswswwswwwnw
eeesenweeewseweeeswweneswnenw
eeeeeneeeweseeweeeeeeee
seswnesesewwseseeenesenewseswwnesw
eeeeeeseeewseeeeeneseeee
nwwwnwenwwswwnwenwwsenesenwwnw
wwwwwwwwwsenwwnwwnwwnwwwsew
seswswswseswseseswswswseswnwesenwseswsesw
eneeneeneneeeeweneneneseweneee
swwwwewswnwswewnwswwswwswwwswsw
eswneseeneneewneswseeweeeneenwnenw
swswnwwwseswnwnesewseswwnwswsenwswe
swswswwsewnwwwewswwneswsewwwnw
nwnwwnwnwwnwnwsenwnwnwnwnwnwseenwnwnwnw
seseseewsesesesesesenenewsesesesesesesese
nesenenenenenwnwwnwnenwnenenewneneneene
wesesesenweseseseswseseswsenwswsesewse
eseeswseeeswenweeseseeeneeee
neswwnwwwwnwwwewwnwswwenwww
nwswnwnenwnwnwnwnwnwnweswne
nwwwsenwnwnwwnwsenenwswnenwwnwnewwse
seenwseeenwweseeeweesweeeese
swswsweswswswneswswseswswwwswswswswneswne
ewwwswwwwswwwwnwwwwwswww
seswsenwseseseswsesesese
neneeswewnenwswneneseswenwseewenene
swnwnwenenenwnwnwnwseenwnwsenenwnwwnw
nwneswneneneneneneseneneswnenenwnenw
nwnwnwnwnwnwsewnwnwseenwnwnwnenwnwswnww
seswseseswseseswneswneswswseswswseswswsese
wnwnwnwnwnwnwnwnenwnwnwnwnwnwsesenwnwnwnw
seseseeesesewsenenwseweeseesesee
nwnenwwweseswnwwwnewwswseneseww
swnwseseseesesesesesewseneseseseseswsesw
seseseseesewneseseseneseeeseseeswsese
nwnwwnwnenwewwnwneseswwwwnwww
esesesesewseseseseseeseesenwsesesese
eswswnwswswneswswswseweseseswswswswne
swneenenenenenwnenenenenenwnenwnesenene
nwwswnwswswnwnenweeenenesenwwsenesw
eeeeeeeeeenweeeeenwswswee
nwnenenenwswnenenwnenenenw
nwwwnwnwenwnwnwsenwwwnwwnwwnwnwnwnw
ewneweseeseseseseese
nwnenwnwnwnewsesenwnw
nenenwnewnwnwnenwsenwswneenese
wnwwwwwnwwwwnewsewwwnwwswwnenw
enweseeeeseseeeee
wesweseneswsewnewwneewenenenwnwse
eseeswseeseeseseseseeseenweeee
wnwnweweswsesenweseseseseseswewsese
eeeneeseeenwseeeneenwseweeee
esenwseswseswswseswseseseswseseseswswse
wwseswnewwwswewwwswnewwwew
eeeneeeeeeenweeseenweeswee
sesenwneewswweneswnewsenenwenwswnw
nwnwneseenenewewnenewswneesenenene
swweswswwswswwnwwwswswwwswnwwesww
swnenenenwneneenwnwnwnenesweswnwnenenwnw
nenwnwwewwnwnwnwsewswneenwswswnwnw
nwwwsewwnwnewnesewwwwnwnwnwnww
wswwnwsenwswnweswweswswwwwenenw
neswswswneseswwswwwsewswwswnwnwneesw
newewwswwswwewwwwwwwwseswne
neenenweesweneneeneneneneneneneenese
eseseseeswseweenweseseeesesesesee
swseswseswswswseswseswswswnwsw
nenenenenenesewneewsenenenenenenenenene
eeswneseenweseeeeeeseewsewseee
nwewswswwswswwswswwswswswswswswnwse
nwnwnwnwnwnenwnwnwnenwswnwnwnw
eeeseeeeeeweenweseseseeese
swswwwswnewsewswwwnwswswsenwswsesw
seseswsesewsenesenesenw
seseswswseneswswswneswseswswnwsesesesesese
nwnwwnwnwnwenwnwnwnwnwnwnwnwnwnwnwnw
neeneseeneneneneeneenewneneneswnenew
nwsenwnwnwnwwnwsenwnwnwnwnwenwnwnw
swswswnwswswswswneswneswswswswewseswnwsw
seswneswswswswswswswseswswswswswswenwsw
wwwwnewnewnewswwswwswwwseswww
swenweswseswseneseswswsesewsese
ewswseswwsewsweswwswwswsenenenesene
swwnwnwnwseneseenenenwneswwwwwseswse
nesweneneeseneneneneneenenenenenwnwnenee
enwnwwwnwnwnwnwnwnwnwnenwsenwnwwwnwnw
wwwwwswwwwwnwwwewwnew
nenenesenenwnwswenwnwnenenwneneneneeswne
eeneeneneesweeneneneneeeeewene
eeseseenwnwsesesenwesenwesesesewese
neeeeswswneeeeeeenweeene
seseesewnesewseseeseseswseneseswnwsene
sesesewseeeneeseeseseseseeseeese
wswwnwwnewsewnwnwnwesewwnwnesene
eseeneenenewnenenwseesenwnwnesewnene
eseeneeswnwneesesewwneswewwneesw
neneswseneenwnenenenewneneneneneneseneene
sesesweseswsesesewseswsesewsesweswse
sewsesesesesewseseseneseeseneesesese
swwwenwwnwswnwnwneswwwnenwsewnwww
swwswswseseswswnwseswswswswsweseswsesw
senwenwnewweneneswswnwswwsenwenwenwnw
nenwnenenenenenenenenwneneneneneneenwwsw
wwnwwsewsewswnewsenwneesw
nenwnwseswnwnwenwesewnwneeswswnwnwswnw
nenwswnenenenenweneseneewseeneewswene
esenwwsenenenewnwnwswnwnwnwwwwnwnwnww
sesenweeeseseeeseseeseeeseswese
neneneneneenenenewsenenenenenenenenene
eeeseeeesweneneneeeeeenenwe
eswwwwnwneewwswwnwwneswwseswswwsw
wseseeeesesesesenweeneseseseseeee
esesesenweeeeeweeeswenwne
wwwwswneenwsww
seseswseneswswswseswseswswsewswswswseese
weseswseeeneseseewnweseesesesee
swswswswswswswswneswswsw
swwswswswswswswswwswswenwwswww
nweneneneeeneneeneeseneneneneene
swwswwwneneswswwswwswwseswnewswsw
eeeewenwweeeesweeeee
wnwseeewswswwwswsewwswnewnenew
ewseneeswswneswenweswnwwwwneswwe
eswseswnenwswseswwseseesesesenesesesw
senweeseseesesesesesw
nwsesesewsewnweweseseeseswsesesw
sewwwseseswswneenewenenwsenwseww
nwnenwnwneswswsenweswneneneenenenenene
eswnweeeeneeseneeeswenweneenw
wsenwnwwnwnwnwnwnwnwnwnwwnw
nwnwenesewenwnwnwwwnwwnwnwwnwew
nwsenwnenwnesenwnwnwnww
wnewneswnwwsesenwwweweseneneww
swseseseneeseswsewse
nenwsenwnwsenenwwnwwnwnenwnesenwnwnwnw
neswswswswnweewnenwswswswswswswseswswne
nwseseseseseeeseseseeeeseeeswsese
wnwnwnwwwenwsewnwnwwnwnwwnwnwnenw
wwwwwnwwewnwww
nwswswswswswswswswswswswswswneswseswneswsw
nenesweneneeneneneneneeneneenenee
swswswswswswwseswwswwswsweswswswnwwsw
nwwewswwnwwwwnewwnw
eeewenweeeseneeeseeeeeeeswe
swswenweswseseswneswswswsewsesesenenww
eeseeeeeeneswseseseeeweeeee
eeeseseeeeeeeeseenwenenweswesw
neswseswswseseseswsesw
sesenwwseneesewseneseseewneswswneswne
senenwswswwwsewwsenenwwenwewnew
neeseeweeeneeenenweeseeeee
nwswwswswswseswwswswswnewswswwswsesw
swneeneneeneswnwsesesesewnwesewsesesw
swswenwneneewneswwswswesesewsesw
nwnwsenenwnenwsenwnwnenwneneeswwnenewnwnw
swsenenewswswsewwnewwwnwsewswwsw
swenenenwseseneweenene
wswwswneswsewswswswswswswsw
wsenwsenwwwsewwnwswwnenwwnwnwnwew
nesweweeswwseseseseeeeneenwew
wseseneswnwswseseswseswswsenwwswswswesw
wwnwnwnewswenweswenwnwenwnwswnww
seswneswswseswwseswswseneswswnweswswswsesw
swwwnewswwswswwwwwsww
enwswswneeneneeneneneeneee
swswwswswswswswswswneswswswswswsw
sweseneswwseeeneeenwnenweswnenwne
eseeeeweneeseesewseswnewe
enwesweseenwseseeeesweeeenese
eswsweesenwenweeeeseeeeeenwee
eeeesenweseeeeeesweeseeee
wwseenenwnwwnwnwwwwnwswsenwwnwenw
sesenwseseseeseseswseswseswseswnwsenwsese
eeeeneeneswnenwee
seswneseswseswnwswswesesewseswswswswsenwse
nwnwwnwwenwnwnwnw
eenenenwneneeswneeneneseneneenenene
seeseseseswseseesesene
seseseswseseswnwswswwseswsweseswsesesenw
nenenenenenesenenwnenenenenenesenenenewnenw
nwenwnenenwnwenwswnwnwnwnwnwnwneneswsw
nwneswswnenenwnwnenwnenwnenwnwswnenwnwnw
eneneneeeeneeeweneeneenene
enenenenwnenenesenenenenewneenenenene
seseseseseswsesesesesesesesesesewnenesese
nwnwenwwnwenwwwenwnwnwnwwwnwwsw
eeseeesweeeseeeseeeeewnwenee
sweneneeneeeeneeewneneeneneenw
nenewnwneseseneneenwwswneneenenwwse
nwswwwwneswsewwswwneweweswnwsew
swswnwswswsweswsesw
nwwnwnwnenwnwnwswnwnwwnwnwnwnwwnwwew
swwwwwswswwwwneswwswsewwwwsw
seswsenenenewewnenenwnenewenenenenesee
wwnwwewnwnwenwwnwnwwnwswwwsww
wswswswswswswneswswseswswswswswswwswsw
sweseeeeeeeeenwneneeeenweee
eneneneeneneneswnenenenewenenenenwnesw
swseeesewsenwswsesesw
eeneneenenwneeneweswsweneneeene
swseseseseseseseseseeeenwswseesesesenese
eneweeneeneneseenenenewseeeneenew
eeswswseenenwnewe
ewenwwsesesesenwnwwesenenwnesesew
wwwwnwwwwnwenwwwnwwwwsenww
swnwsesewnenwsesesesene
sewnenenenwneenewsenwnenewneeesesw
swswswswswswswswseswnwswsww
seswswsenwwswseswnesweseseswswseseesenwse
eswswwswswnwseswswswswswsweswswswswsw
nwnweswwnesenwnwnwnweswnwnwnw
eswnewwswesewwwnwewwesenwnwwsww
eswnwneneneeeeswnesewnesweeeee
ewswwnwnwnwwwnwnw
eeneneeeneneneeenweneesweswnese
seswseseseswseneseseswweseseswswswseswsw
nwnwnwnwnenwwwenwenwnwnwesenwwnwnw
sewwnwwenwswnwnww
wseneseswseseswswenwseseswswswswswwse
seseeneseweneneswnwseenwswnenenenwnene
nenewswnwseseneeneneneseneneneewnenw
eneeeneeneeeeneeneweese
wwewwswwwwwwswswwww
seswseseseseseswseseneseswnesesesesese
neneswseswnwwseswswswwswswsweswnwwswe
newwswswswswwswswneeswnewswsewese
eseeeseeseeeeeseewe
enenewnenesesenewnwswsenesenenwneneneesw
neeseeeeesesweseseseeseseenweese
nweswswswswswseeneswwsewswswswswswe
wwwwwwsenwwwnwwenewwwnwwsww
swsesewnwswswswneweswswseeswswneswsew
swseswswswswswswswnesweeswswswsenwswswnw
eeeneseeneweneeeweeeneeneenee
nwnwnwnwnwenwnwnwnwswnwenwnwnwnewnwswswnw
nwwnenwwenwnwwwsenwnwnwswnwwneww
senewswswnenenenwneeneneneneneeenenenene
eeseseeseesesenweseeseeseewse
neswnesenenwswnenwswnenwswnwneswswnewseee
senwnwnenenwnwnwnenenwnwnenwnwnenene
wwnwwwwwwwwsenewnwww
nwnwnwnwwnwnenwnenwnwneneenwswenwnwse
wwwwnwsewswswwswenwswwswswwwww
nwwwwnwwswenwwwnwenwnwnwnwswnww
nenwesenwewneneseeseenwenewnenee

20
inputs/24_test Normal file
View File

@ -0,0 +1,20 @@
sesenwnenenewseeswwswswwnenewsewsw
neeenesenwnwwswnenewnwwsewnenwseswesw
seswneswswsenwwnwse
nwnwneseeswswnenewneswwnewseswneseene
swweswneswnenwsewnwneneseenw
eesenwseswswnenwswnwnwsewwnwsene
sewnenenenesenwsewnenwwwse
wenwwweseeeweswwwnwwe
wsweesenenewnwwnwsenewsenwwsesesenwne
neeswseenwwswnwswswnw
nenwswwsewswnenenewsenwsenwnesesenew
enewnwewneswsewnwswenweswnenwsenwsw
sweneswneswneneenwnewenewwneswswnese
swwesenesewenwneswnwwneseswwne
enesenwswwswneneswsenwnewswseenwsese
wnwnesenesenenwwnenwsewesewsesesew
nenewswnwewswnenesenwnesewesw
eneswnwswnwsenenwnwnwwseeswneewsenese
neswnwewnwnwseenwseesewsenwsweewe
wseweeenwnesenwwwswnew

2
inputs/25 Normal file
View File

@ -0,0 +1,2 @@
8335663
8614349

2
inputs/25_test Normal file
View File

@ -0,0 +1,2 @@
5764801
17807724