mirror of
https://github.com/Noettore/AdventOfCode.git
synced 2025-10-15 03:36:39 +02:00
AoC 2020: day24, refactored for performance
Signed-off-by: Ettore Dreucci <ettore.dreucci@gmail.com>
This commit is contained in:
@@ -2,6 +2,7 @@
|
|||||||
|
|
||||||
import pathlib
|
import pathlib
|
||||||
import time
|
import time
|
||||||
|
import cProfile
|
||||||
import re
|
import re
|
||||||
import operator
|
import operator
|
||||||
import itertools
|
import itertools
|
||||||
@@ -70,16 +71,30 @@ def find_dst_tile(steps: list) -> tuple:
|
|||||||
|
|
||||||
def count_black_neighbors(tiles: set, x_tile: int, y_tile: int) -> int:
|
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 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())
|
black_neighbors = 0
|
||||||
|
for d_x, d_y in STEPMAP.values():
|
||||||
|
if (x_tile+d_x, y_tile+d_y) in tiles:
|
||||||
|
black_neighbors += 1
|
||||||
|
return black_neighbors
|
||||||
|
|
||||||
def calculate_floor_bounds(tiles: set) -> tuple:
|
def calculate_floor_bounds(tiles: set) -> tuple:
|
||||||
"""return the floor boundaries"""
|
"""return the floor boundaries"""
|
||||||
min_x = min(map(operator.itemgetter(0), tiles)) - 1
|
min_x = float('Inf')
|
||||||
min_y = min(map(operator.itemgetter(1), tiles)) - 1
|
max_x = float('-Inf')
|
||||||
max_x = max(map(operator.itemgetter(0), tiles)) + 2
|
min_y = float('Inf')
|
||||||
max_y = max(map(operator.itemgetter(1), tiles)) + 2
|
max_y = float('-Inf')
|
||||||
|
|
||||||
return range(min_x, max_x), range(min_y, max_y)
|
for x_tile, y_tile in tiles:
|
||||||
|
if x_tile < min_x:
|
||||||
|
min_x = x_tile
|
||||||
|
elif x_tile > max_x:
|
||||||
|
max_x = x_tile
|
||||||
|
if y_tile < min_y:
|
||||||
|
min_y = y_tile
|
||||||
|
elif y_tile > max_y:
|
||||||
|
max_y = y_tile
|
||||||
|
|
||||||
|
return range(min_x-1, max_x+2), range(min_y-1, max_y+2)
|
||||||
|
|
||||||
def flip_tiles(tiles: set) -> set:
|
def flip_tiles(tiles: set) -> set:
|
||||||
"""calculate the new daily floor"""
|
"""calculate the new daily floor"""
|
||||||
|
@@ -33,4 +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 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 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 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) |
|
| [Day 24](https://adventofcode.com/2020/day/24) | [753.985ms](./2020-python/solutions/day_24.py) | [357.455ms](./2020-python/solutions/day_24.py) |
|
||||||
|
Reference in New Issue
Block a user