day10.lib package

Submodules

day10.lib.direction module

direction Enum.

class day10.lib.direction.Direction(value, names=None, *, module=None, qualname=None, type=None, start=1, boundary=None)[source]

Bases: Enum

Cardinal (NSEW) direction Enum.

EAST = 3
NORTH = 1
SOUTH = 2
WEST = 4
opposite() Direction[source]

Return opposite direction.

e.g. E``<->``W and N``<->``S

Raises:

AssertionError – if direction is invalid

Returns:

opposite direction.

Return type:

Direction

day10.lib.pipebounds module

PipeBounds class.

class day10.lib.pipebounds.PipeBounds(value, names=None, *, module=None, qualname=None, type=None, start=1, boundary=None)[source]

Bases: Enum

Whether this tile is a pipe, inside, outside or currently unknown.

INSIDE = 0
OUTSIDE = 1
PIPE = 3
UNKNOWN = 2

day10.lib.pipes module

Pipe class.

class day10.lib.pipes.Pipe(row: int, col: int, character: str, font: int = 1, is_loop: bool = False, pipe_bounds: PipeBounds = PipeBounds.UNKNOWN)[source]

Bases: object

The location and character representing the pipe.

PIPE_DIRECTION: ClassVar[dict[str, list[Direction]]] = {'-': [Direction.WEST, Direction.EAST], '.': [], '7': [Direction.WEST, Direction.SOUTH], 'F': [Direction.SOUTH, Direction.EAST], 'J': [Direction.NORTH, Direction.WEST], 'L': [Direction.NORTH, Direction.EAST], '|': [Direction.NORTH, Direction.SOUTH]}
character: str
col: int
font: int = 1
is_loop: bool = False
is_start: bool
next_direction(prev_direction: Direction | None = None) Direction[source]

Determine next direction based on where we came from.

next_position(prev_direction: Direction | None) tuple[Direction, Position][source]

Calculate the next position.

Return where we came from if we move to next tile, and the new position

Parameters:

prev_direction (Direction | None) – Where we came from

Returns:

Next direction and position.

Return type:

tuple[Direction, Position]

pipe_bounds: PipeBounds = 2
property position: Position

Our current position.

row: int
class day10.lib.pipes.PipeMap(pipes: list[list[Pipe]])[source]

Bases: object

A 2d array of pipes.

get_pipe(position: Position) Pipe[source]

Returns a pipe given its position.

get_pipe_safe(position: Position) Pipe | None[source]

Gets a pipe or returns None if position is out of map.

height: int
is_in_map(position: Position) bool[source]

Returns whether a position is in the map.

pipes: list[list[Pipe]]
width: int

day10.lib.position module

Position class.

class day10.lib.position.Position(row: int, col: int)[source]

Bases: object

Simple 2d coordinate.

col: int
next_position(direction: Direction) Position[source]

Determine next position based on direction.

row: int

Module contents

library modules for day10.