aoc2024/lib/grid.py

36 lines
859 B
Python
Raw Normal View History

from typing import Any
from typing import Optional
"""
same convention as SVG
W
(0,0) x
H
y
grid G store list of rows
to get G(x,y), must first extract row y and then col y => G[y][x]
"""
def grid_geom(G:list[list[Any]]) -> tuple[int,int]:
H = len(G)
W = len(G[0])
return W, H
def in_grid(G:list[list[Any]], x:int, y:int) -> bool:
W, H = grid_geom(G)
return x>=0 and x<W and y>=0 and y<H
def get_in_grid(G:list[list[Any]], x:int, y:int) -> Optional[Any]:
if in_grid(G, x,y):
return G[y][x]
UP = (0,-1) ; RIGHT = (1,0) ; DOWN = (0,1) ; LEFT = (-1,0)
MOVE4 = [ UP, RIGHT, DOWN, LEFT ]
DIAG4 = [(1,1),(-1,-1),(1,-1),(-1,1)]
MOVE8 = MOVE4 + DIAG4