AoC 2020: day24

Signed-off-by: Ettore Dreucci <ettore.dreucci@gmail.com>
This commit is contained in:
2020-12-24 12:30:45 +01:00
parent f53ca84cba
commit 83f73e4439
3 changed files with 538 additions and 0 deletions

406
2020-python/inputs/day_24 Normal file
View File

@@ -0,0 +1,406 @@
neneeenenesweneswneesewenenwneew
eswswenweeseneseswwsenewsenw
seeweswwneswnwwwenwwwwwnenwwsesw
swsweseseseswswsenwswseswswsese
eseseseswsenweseseneseswnwneeewww
sweeeeeenweseenesweee
nwnwsewenwwnwnwsenwwnwseswnwnw
swswswwwswweswswswswswenenesesewwwe
swnwenenesenwsewswswseeeswnwwnewwsese
senwweewnwweswnenwwsw
ewneswswsweenwwnwsenwswnewsenwnwsw
nenenwwneenwnwnwwnesewsenenwnwnenwnw
nwnwwsenwwnwnwnwnwwnwnwewwnw
wnwnwnwnwseswwnwnwesewsenwnwnwnwnenew
seswewwneweswnwnwswwsw
neswesenenenewwswnenwnenenenwnenenenese
nwwswsenwnenwnesenwnwsenwnwnwwnwsenenwse
senwswwswwnweswswneswswwswnweswseswew
neeeeswnweswseeeeeneeeeenwwnene
nwnewnwnwnwswnewwsewnwwseenenwnww
eeseeeeeswneenwewee
neseseseeenwwseseeseneswnenwsewswse
wswswnwnwwswswneswwweeswswswwww
swnwnwneswswseswseswswswswswnwseswsesenesw
swneesenwnwnwwnwnwnenwnwnwnwnewnwsese
wswswswewnewnewsenewnwswseswswwse
swenwnwnwnenwnenwnwswnenenwswwnenwsenw
ewnenwnwweenwneesewnwwwwnwswse
eeewnweneneeesweesweeeneeee
nenwnwnwnwswwnwsewnwswswenwweswenw
senenenenenenwneneewnenenene
neneeneswnesewneneneeneneeenenenwe
nwswenwseswnwswenwnwnewnwneww
wnewwwweswwsww
seseswsewesesenesesewseewseseenenwe
neneseswnesenewwenenwneneneneneenew
swswswswwsweswseswsewwneswswswswneswswsw
sesenesesesenwsesesesenwsewnw
nenenenenenewnwswnwnenwsenesenwneswwne
swwnewweewwwwnwswnewwweswew
swnwwswesenewwwswwswwweseswswnesw
weeseseseneseseewwseseseseseseesese
nwenenenwwnenenenenwneneneseswnenwenesw
nwsewswswwswsweswnwwwnwswswsew
nwewnwwwewnwwnwnwwnwswwnwwsewnw
eesesesesesesewseseewneseesesesesenw
nwwenwweswnwswenwnw
sewseswswneneswnwenwneeswwnwwesenw
eseswwnwnwwenewneswnwsweenwseswne
wsewwswnwnwewnewswwwwswseswnew
eswnenwnwnenwswnenwnwnwnenwnwnwnenwsewne
neneewswnenenenenene
nwseeseseesesesesesesese
eenweneeeswswseeseeneesese
sewneeneneswseeewnwswsenewswenwwenw
nwwwweswnenwsenwwswnwwnwwwnwwnew
nwewwneswnwwwnwswswsesweswswwseww
neseswseweseeswsenwsesesesesw
nwswswseswswseeswswseswnewneseswswwsw
eweseeswseeeeseneenwenweeee
nesewwwwneeseweswwseneeseseswseswsw
nwswnwnewnewneeenwneeswwnwse
swwnwsesewneneeneenwseswseswnww
nwnwnwnwsenwnwnwnwnwnwnwnw
wwnewnwsesewwwwwwnwseewsenenew
swswswswenwswseswsweeswnwswswswswswswswnw
nwnwseeswnwnwswnenwwnwnewnwnwwnwnw
wnenenesesenwnwwnwsenenesewnewnenee
senwswnwnwwenenwnenwnenesewswenewnene
neseseeseneswswswswswwwswswnwswwsenesw
neswwsesenwnwnwneswseseseseswnesenwsese
eeweesenesweenweeneenwneeswse
wwnewswsenwnwsesenwswseneeswswseswnese
wnwsewnwnwnenwnwnwnwwnwnwwww
wwswswewwwwwwswwwwnewnwnenw
eeneseswswnewneneneenenenenenenenew
wswwnwswwswneneneswnwnwnwswseneneswsenene
nwswswewswsewswsewswsenweswswneswnwsw
wwwwesewnwnewwwnewwwwsese
nwnesenwnwnwnwswswnwwswwnwnwwwwneeenw
swseseswenwswswnwswwnenesenesesesesesese
nesewswswswsewswswnwswwswwswsw
wnwwwnwnwnwnwsewsenwsewwwwwww
wwwwwwwwswwswwwewwnw
swseseseseeswsesesenwseseswseswwsenwse
sweeeseeswnwenwneeenwneswenwneee
nwswseswswswswwsweswnesesweswswswseswse
nwnwenwnwnwnwnwswnwwnwnwwnenw
wseewnwnwnwenewnenenesenewnenwnenwne
nwsweswswswswswswswswsw
swswwswwswswswswnenewenwewweswnw
nwseeswnwnwseseseswneseswseseseenewsw
wseswseseesenweeeseeeewnwenene
newnenenwswnwnenenwneneseneneneenenesenw
wnwnwswseenwnwnwnwenwwwnwnenwnwswne
esesesesewneseswswsewswseswswneswsesesw
wsewwwnewswwnenenwnwwnwwnwnwwwsew
wsenwenwnwnwewwsesenwwwwnwnwnwnew
nwnwnenesenenenwnenewnenenwneneswswnene
eseneneewneneneeneeneneee
nenenenwnwseswswnwwnwnwwesenwsenewswne
neenwnwnenenwnwnwwnwnenwnwnwwnwswsenw
swwwswwswswwnwwwnenwseswswwseswsenw
nwsewneswnwesweeswnwwwnweswnwne
neswsewswseswseswswswneswseswneseseswsww
wsewwwnwnenwnwewwseenwwwwswnw
neseseswseswwswswswnenwsesewswswswswsw
swwsweswneseswswwswswswswweswwsw
nenwneneswneeneenene
eneweneseneeneeswswswenenesenenew
swseeseswswesenwsesenwswnwnwseeesenwswsw
nenenwnenwwwnenenweneneneseneswnenenene
neneenenwswswseswwwnweswnenesesewnewse
neneseneneseneenenenewswneeenenewnene
swsweesenesenenenwnwnwswsweneseenww
swnewwnwsewseswewsewsesenwneewnww
enenewnenenenwnenenenw
seseesesewwseseseseseswswseesesenese
eeenwneeeewneneeeeewswneneee
eswnwenweesenwseeswsweenwsenwnwesw
eesweeeneneeneeeeewnweeewe
seswswseseswswswsene
newswnewswwwneswwwse
neeswnenwewnwnesewsweneeswnwenesww
eswwwwwwswnesewwwnewwnwwww
ewsesenwseswsesenwsesesewesenwsenenese
nenwnewswneneneneeeneneseneneneenee
wwseseeeenwnwweseneewnweeeewsw
nwneswnwnwnwwwnwseenwnwnwenenwnw
swswswswswneswenwwweswswsw
swenwwwnwnewswnenwneswnwesweswwe
neswseenwseseeenwsesesew
seseeesesenwnwseeseseseswnesese
sweeeseseenwseeweesee
swneswsweswnewwswseswswsw
nwwwewsewwwwwwwwewswswnewsw
nenenewneswsenenenenesenenenenenenenwneenw
sewwwnesewswwnwwwwswewswwswew
swswseswnwnwswswswswswswnwseswenwseswswsw
nwnwnwnwnwnwnwnwnenwnwsenw
nenwwewnwwsewnewwnwsewwwewseswe
seseseswweewnwneneseseseesewsesesw
swswesenewswswswwewswsesweswsw
seseneneswwsewneeenwenenwseenwsee
nenwenwwneewnwneswnwnenwseswnwenwnwnw
sweswswswseswswswseseswseswwnesesesenw
nweeesweeeeneseeseeenwenwwe
sweewneneeeseeewswneeenwneenene
swsewseseenwsenesewseseseswswseswnese
wwwswseseswwnwwnwnenenwwswnwsenesene
seswswswseeseswseseseswnwsenwseswswsesene
nenwesenwswneneseeewsesesweeseeswse
nwseswswnwseeswnwswsenwnwnenwnenwnwnenwnw
neswnenwweesenwneswwneneswnwenenesw
nwneswnesesenwswenwsesewewsweewsw
neseeenenenewnenenweswew
eenweesweewneneseneeswee
weesenwsweenenenwswenenwneswenee
nwswswsweseswwsweswswswswnwswswswswsw
esweweseeeeseneeenweeeeee
swneswswswwswnenwewswenwswswwnew
eesweswnwseeeeeeeeneseeenwsee
senwwswnwnwnwnwnwnenwnwnwnwnwwnenenwnese
swwseeswswnwnenesewnenwsenweeeene
enenwnesenenenenwnenewneneneewswswwne
nwwneseseeseeseeseseeseseeseswnwsese
sewwswsewnwwswnwnwnewenweneswesw
eneeneeneeneewneeeeeeenwsesw
wwenwwnesenwnwnwwww
nwneneswnesenenenenwnwnenenenwnene
sweneseseswewnwswwneneneneseneesenwnw
nwewenwnwwwnwnenwsesenwnenesenwnwwwnw
nwenwnwswsenwnwnwnenwnwnwnwnwwesenenw
swswwnewweweswswnwswsenesewwwnww
nenewneswnenenweenenenwswsenene
swswswwswswswswswswswswswne
eeswswenwswneenwenweseenwnweeese
swnwnwnwwwsewnwnenwwwnww
wswwwenenwwwweswseswnwswweswsw
enewneneweseeswswenewnenwwnesene
swsenesweswswswswwswswswseseseswwsw
nwwseswnwsenwsenenwwnwnwneewwwwww
wwsesesenwnwnenesenwenenwswneneenesw
seseneweseeswseseneeseseesenwesese
nwnwwswwwweenwwnwwswsewwneww
eneneneeneswnenweneswenewneeseenenew
eseewneesenewesenwsewewwwsee
nwnwnwenenenwenwnwnwsenwnwnwswnewnenwne
neseeeesewneseseweeseseswseseesese
newwnwswwewneswseewsesweswneswwse
seseseseseeseenwseeenwsesesesese
eseswnesewseswswswsenwwswseswneswsee
eeseseseneeeeeseeeseeew
nwesweeneenwnwseneeeneeeneneneswse
swswswswseseswnwneswswseswsewse
senwnweswwnwwnwweseenwswsenwnwwse
wneneneenenesenewnwswswenwnene
eswseswneseseneseseeeeeewsenenwnew
sewseeeeenwseese
sesenwnwseseseswseseswswswseesenesesesenwse
nwwneewseswneeeneneneseenenwewneese
wwwswwnewwneswwwwwsewwwsw
seswwwwneswneswwneswswswswswseww
eewneenwsweseseweeeeneneneneesw
swswsewswswwswswnewwswsww
nwnwwswnenwwnwnenwswnwnwwsenwseeswwnw
swswsenwnewseeswseseneneswsewnwsesesenwsw
senwnwnwnwswneswnwenwnwwnesweswswnwnenw
neenenewswnwswnwsewwewswsenwnwwsw
senwnewnewnwwnwwnwseseswwnw
seeseseeneswneeswnenwwswswwswnwswwe
seswenweeneeneneneeneneneee
nwwnwwenwwwwwwwnw
swswswswwswwswwswsenenwsewnewneswswne
newswnwnwswnwenwwnenwnwnwwwwsewnwnw
eneewenweeeweeseenwseneeeswse
seseseswenwseseweseseenwnee
wnwwnenwswnwnwweeeswsw
senesesenwswseseseenwseswseswswseswsesw
seseseseseseseseseseseseenwsese
seenwnwnwswsewweeweseeneesewswene
wwwseswsesenwnwnenenwse
nwwewnwnwwneswnwwnwnwnwwnwewswne
neewneneseneneswnene
wswwswnwwwswwwewswswsww
wswwneswwswnwwnwnewseswsewswenwsw
ewnwwwwswwnwesweswswwsw
wswnwnwwnenwnewwsesewwseenewswenew
wswwnenwwswnenenwnenenenenweswseseswe
nesesenwswsweeswewwswneeneeeee
nwswwwnewwwwwwneewnwsewsewsew
nwwweswwswwwnwneswnwswenwnwneew
nwnwswnwswenenenwnwwnwnenwnenenweew
neswnwneseeneneenewswwnwnweseneene
nwswswwwwseeswnwswwsweswwnwseswww
neneseneswsesewenwseswneneswnenwwenew
neneneeneneneseneeneseneww
sweenenwenweeenesweeeenwesee
seseseseseseneesesesesesesesew
senesweewneeswenwseswseseeeesee
nesesenwwswnwnwwnewsenenwswnwnenwsee
neseewnwenenwwnewnenwnwsenwnwswswnwnw
eswnenenwswnewsweseswseewsesenwsee
enweeswenwewsweeeneenweeseesee
senwswswwswwswswwswswswswseswswswneswne
sweswwnwewseneeeenenewenweee
newnenwnwswwseseseesenwsese
enweeswseenwneeenenesweeneswenewsw
nwnwnwnwnwswenwnwnwnwnwnweswnwnwnwnwnw
nenenenweneswnesenwneswneneneneeneese
seseeenwswnweeeewswseeeswwnwsenw
esenwsewseseesewneseeseseseeeenese
seewnwsesesenwesesesesewneeeseee
eneseneewneneseweeneneeeneeee
nwwnwenwswsenwnwnwnwnwwnwswwnwnwnwnew
wnewwwwwwnwwwswnwww
wnwenwsenwswnwnwnwwnenwnwnw
eeneneswnwwneneswnwneeeneneneneewne
wsewnwwwwewwwwwwwsenwwnwwe
wwwseeseswsewsewewneswnwsewnenenw
seseneswsewneswswseswseswswswseneswsesesw
nwnwnwsenenweeneneeneswswneswneseeesw
eswseswwnwswseswswswswneenwswseswsese
eenewseneeeseneneeswwneeeenenee
nweeeeseeeseeseeswenwnenweswee
swswwneneneswenenwsenenenenenwnenwnwe
nwenwnwnwseswnwnwnwnwnwnwsenwnwnwnwnwnwnw
eswnwnweswsweseseswwswswnwseneswnenwswe
wnesewneswwneswwwwnwwwwsese
nwnenwnenenenenenenwneswnenwnenw
neswenenwswneneswnwee
wwnwwwwewwnwswnesewww
esenwnwswenenwnewswneswwenwswwnwswnww
swswwswnenwwswswnwseswswswwswswewsesw
nenwsenewnwswswneeswnwnenwnwnweenwnwne
neswwnwwwnwwwnenenwnwswwnwsenwnww
neneeneswenenenenenenee
swseweseneeeswwnenwswnwnwe
eewswweneweeneneeenenenenenenene
nwnwneneneneseneseswnenwnenwnwnenwnenene
enwnwenenwswswswnwsenwswswseswseenwe
eneneneneeeswneneenenenene
enwnenwwwsenwwwswneswnwwenwewww
neneneswnenewneneneeenwnenwnesewnene
seswsenwsesesenwewseswseseseseswsesenenwse
neneenewsesewneweeewseseenwneeene
nwwswwwsesenwwwsenewwnwnew
seseenesesesesesesesewesesee
nwwnwswswswseswwswseneswswswswswswswswe
wswwnwnwnwnwnwnwwnwnenwnwenwnwenwnw
seseswseneeswneswnewwswwwnwneesenene
nenwnwnwnenwnwnwnenwsenwnwnwnw
eswwwwwsewwnewswswwwswswneswww
esenwnwnweeewswneneswnwswnwswnenwnwnene
nenweseenwneenenwseeeneseene
newnwwsenwnwenwwwnwsewswnwnwenwww
newenenenenenenwenwswswswsene
nwsweswnwwnwewewwwenwwwwwnwwnw
sewnwsewwnwsenenwwww
swswnenwnwnewneswnewnweswsweswenwsenwse
wsweseeswnwseenewseneenee
eeeeeseeswnweeeenwseseewsese
sesesesenewsesesewesesesenwseseseene
sesewswseswsewseseseswweseeseseenese
esenwswwseseseseesesesenweseseseswe
nwnenenwnenwnwnenenesw
nwnenweneenwnenwnwnwswnenwneneswnenwnw
sewswswswswswnwswneeseswswswsw
swwswswswwwwneswneswwswswswnweswsw
neseswswesesewswwswswseswswnwseswnenese
nwswnwneewneweeseeseewewneneew
swseenenwwsenwnwnewneenwwewnwswe
swsweseswswswwwwswswswnewswsw
swnwwneneswswnwewwnwsenwenwnenwee
ewswseseneesewseneswsenwswseseswsese
eneeneeseswenwsewneeweenwnwese
swnwswswseswswswseseeswnwswswsweswnwsww
wwnwnwswnwsewwnwwnwwnwwnwsenwnee
eeseeeswneseneseeweneweseee
senesenwsesenwwsesesesesesesesesesesese
nwnewesewneswneeeeneeneeswnesenene
wesenwseswsweweenwnenwwnesese
nenwnwneeswneneeneneneswneneswneneenwnee
nwnwwsenwwnwnwwnwsenwnwenwnwnwwnwne
nwnwsenwnwsenwnwnwnenwnwwnesenwnwenwne
sewswweneesenenwneseswseswnweeeene
nwswnwnwnwnwwsenwnwwnwnwenwnwesenwnw
wwwwwwnenwwwwnesewwwse
swnenenenenenenwneneswnwneesenwnenewne
neneneswneneeneneneene
wswneseswswnewwnewswwwwwwwswsww
neeneseewnenwnwneseewneenenwwnenesww
enwseswseesesewnesweeeeneswsesenese
nwnwswnenenenwnwnwnenene
wswswswneswneswwswswsweseswswseswseswsw
sewseseesesweseneseseseseseswnwwsw
swseswswwnesenewnwwnweenweswwsenw
seseseswswseseseeseesesesesenwnwsesese
nenewnenwneswnwnese
seseneswseswswseseswswseswnwwswse
nwneeeeseseneseseeseeeeeeeeww
nwnwneenwswswnenwnenwnenwwneneenenwnwnw
nwnwenwnwnwsenwnwenwnwwnwnwnwswnwnwnw
wwnwwenesesewwwnewsesewnewwwe
wnwnwwwewnwseswwwwwnewnwswnwe
nwwwwswnesewwsewsenewnwnwsewnwnww
nweeeenwseeeseee
eneenewnwenewnwsesenewewswenenese
eswwsweswseswnwsenewnenwswseswwww
neswnesenenenwnenwenenwnwneneswneswnwne
enwseswnwnweesewnwseeseseeseseseseesw
wenwwwswnewswsesewwnwwnwnenewnw
nwwseseswswewwswwsewneswnenwnwesww
swnwnwnwswenenwnwnwnwsewenenenwnenesw
weneswwswswnwsweeesenenwsenwwwsw
eeseesenesesewnweseeenesweeeeew
eseweseseseesenwwsesenese
eneneneneneneneneeenenenenenwsw
esenwnweswenenwnwswnwwnewneenewnww
eeneneneeeeswneneenwsew
seweeseesenewswsenwewwneeeeee
newnwnwenwwnenesenewsenewswnweese
neswwwswswswneww
seswseswseneswseswswnewneswswswswsenenw
eneeneeeenwswneneeswnweenwseneswnene
neswseeswseseswswsewsese
wnewwswwneswswwenewswswwwswwnene
newswseswnwnwnwnenwnwnwnwnwnesenwne
neewswseswswnwswswseneswswswswswseswsesw
nwwneenwwwwsenwwseswenwnwswwnenw
wwwenwwnwnwwnwnwnwe
esesewsesesesesesenwsenwesenwswswswee
nwsesesenweseswseseseseswsesewseseenwse
newnwnwnenwswswwwnwwwnwwnwwnenwsw
swsewsenwseseseswwseseneesweswswsese
neeenweseeeeneswneeeeweee
nwenwnwnwnenwwnwnenenwnw
wwsewwenewwwwwwwsewwwnww
neneenesweneeneenwnenwneneseseeee
eswseneseseseeeeeeeseenwsewsese
nenenwswneeswnesenenewwnenenenwenwsese
nwwwwwewwswwswwnewwwwseeww
swswswswswswswseseswneeswswseneswwswwsww
nwneneswneeswenwseenweeneneewwwnee
swswswswneswwneseswwseswswswsw
swswseswneswwwswswwswsw
nwenweseesweeeeneeseeswseeesw
swswswsweswswnewwswwwswswwwnwswse
sewneseseswsesesesesewseseswnwseneswse
enenweeswsweswenwnwe
nenenwnwnenwnenwwnwswnwnenwsenenwne
neswseneswswnwwweneswnwseswswneewnese
nenweswsweeneeneswnweeneswneswee
wsenwseseseseeseseseseseseeseneswnese
swnenwwnwnwenwnwswnwnesenesesewnwnenenw
sweneeenenwenenenweeenenwsweeeswe
sewewnesesewnenwsesesesweseswswsesesw
neswswnenwneseseneneneneneneneswnenwnene
newnewweewwwnwseswwseswwewswww
senwseseseswswnesenweseswsewswsesesewsw
senenenenenenwnwnwsewnwnwenwnwnwwnene
nwnwenenwnwwneneswneneneneenwnwnwnese
seseseseseseswwneswseswesewswseswnwse
nenwnwnenwenenweswneneswweenwneneswnwnw
swnwseswewnewnesesesesesesesee
seswnenwwwewseneswswsenweneswnenenwe

View File

@@ -0,0 +1,131 @@
"""AOC 2020 Day 24"""
import pathlib
import time
import re
import operator
import itertools
TEST_INPUT = """sesenwnenenewseeswwswswwnenewsewsw
neeenesenwnwwswnenewnwwsewnenwseswesw
seswneswswsenwwnwse
nwnwneseeswswnenewneswwnewseswneseene
swweswneswnenwsewnwneneseenw
eesenwseswswnenwswnwnwsewwnwsene
sewnenenenesenwsewnenwwwse
wenwwweseeeweswwwnwwe
wsweesenenewnwwnwsenewsenwwsesesenwne
neeswseenwwswnwswswnw
nenwswwsewswnenenewsenwsenwnesesenew
enewnwewneswsewnwswenweswnenwsenwsw
sweneswneswneneenwnewenewwneswswnese
swwesenesewenwneswnwwneseswwne
enesenwswwswneneswsenwnewswseenwsese
wnwnesenesenenwwnenwsewesewsesesew
nenewswnwewswnenesenwnesewesw
eneswnwswnwsenenwnwnwwseeswneewsenese
neswnwewnwnwseenwseesewsenwsweewe
wseweeenwnesenwwwswnew"""
STEPMAP = {
'e': (1, 0),
'se': (1, 1),
'sw': (0, 1),
'w': (-1, 0),
'nw': (-1, -1),
'ne': (0, -1)
}
def read_input(input_path: str) -> str:
"""take input file path and return a str with the file's content"""
with open(input_path, 'r') as input_file:
input_data = input_file.read().strip()
return input_data
def extract(input_data: str) -> set:
"""take input data and return the appropriate data structure"""
rexp_steps = re.compile(r'e|se|sw|w|nw|ne')
tiles_steps = [rexp_steps.findall(line) for line in input_data.split('\n')]
black_tiles = set()
for steps in tiles_steps:
dst_tile = find_dst_tile(steps)
if dst_tile in black_tiles:
black_tiles.remove(dst_tile)
else:
black_tiles.add(dst_tile)
return black_tiles
def find_dst_tile(steps: list) -> tuple:
"""calculate the destination tile based on the steps"""
x_dst, y_dst = 0, 0
for step in steps:
d_x, d_y = STEPMAP[step]
x_dst += d_x
y_dst += d_y
return x_dst, y_dst
def count_black_neighbors(tiles: set, x_tile: int, y_tile: int) -> int:
"""return the number of black adjacent tile of a given one"""
return sum((x_tile+d_x, y_tile+d_y) in tiles for d_x, d_y in STEPMAP.values())
def calculate_floor_bounds(tiles: set) -> tuple:
"""return the floor boundaries"""
min_x = min(map(operator.itemgetter(0), tiles)) - 1
min_y = min(map(operator.itemgetter(1), tiles)) - 1
max_x = max(map(operator.itemgetter(0), tiles)) + 2
max_y = max(map(operator.itemgetter(1), tiles)) + 2
return range(min_x, max_x), range(min_y, max_y)
def flip_tiles(tiles: set) -> set:
"""calculate the new daily floor"""
new_floor = set()
for tile in itertools.product(*calculate_floor_bounds(tiles)):
black_neighbors = count_black_neighbors(tiles, *tile)
if tile in tiles and not (black_neighbors == 0 or black_neighbors > 2):
new_floor.add(tile)
elif tile not in tiles and black_neighbors == 2:
new_floor.add(tile)
return new_floor
def part1(entries: set) -> int:
"""part1 solver"""
return len(entries)
def part2(entries: list) -> int:
"""part2 solver"""
for _ in range(100):
entries = flip_tiles(entries)
return len(entries)
def test_input_day_24():
"""pytest testing function"""
entries = extract(TEST_INPUT)
assert part1(entries) == 10
assert part2(entries) == 2208
def test_bench_day_24(benchmark):
"""pytest-benchmark function"""
benchmark(main)
def main():
"""main function"""
input_path = str(pathlib.Path(__file__).resolve().parent.parent) + "/inputs/" + str(pathlib.Path(__file__).stem)
start_time = time.time()
input_data = read_input(input_path)
entries = extract(input_data)
print("Part 1: %s" % part1(entries))
print("Part 2: %s" % part2(entries))
end_time = time.time()
print("Execution time: %f" % (end_time-start_time))
if __name__ == "__main__":
main()

View File

@@ -33,3 +33,4 @@
| [Day 21](https://adventofcode.com/2020/day/21) | [2.177ms](./2020-python/solutions/day_21.py) | [1.578ms](./2020-python/solutions/day_21.py) |
| [Day 22](https://adventofcode.com/2020/day/22) | [1.516s](./2020-python/solutions/day_22.py) | [1.353s](./2020-python/solutions/day_22.py) |
| [Day 23](https://adventofcode.com/2020/day/23) | [14.754s](./2020-python/solutions/day_23.py) | [3.572s](./2020-python/solutions/day_23.py) |
| [Day 24](https://adventofcode.com/2020/day/24) | [1.097s](./2020-python/solutions/day_24.py) | [457.262ms](./2020-python/solutions/day_24.py) |