expeditaet
Version:
Advent of Code Solutions
36 lines (30 loc) • 1 kB
text/typescript
import {
Direction,
GridGraphNode,
type GridGraph,
type Weighter,
} from '@alexaegis/advent-of-code-lib';
const pipeConnectorMap: Record<string, Direction[]> = {
'|': [Direction.NORTH, Direction.SOUTH],
'-': [Direction.WEST, Direction.EAST],
L: [Direction.NORTH, Direction.EAST],
J: [Direction.NORTH, Direction.WEST],
'7': [Direction.SOUTH, Direction.WEST],
F: [Direction.SOUTH, Direction.EAST],
'.': [],
S: [Direction.NORTH, Direction.EAST, Direction.SOUTH, Direction.WEST],
};
export const weighter: Weighter<string, Direction, GridGraphNode> = (a, b, dir) => {
if (a.value === '.' && b.value === '.') {
return 1;
}
const aConnectors = pipeConnectorMap[a.value.toString()];
const bConnectors = pipeConnectorMap[b.value.toString()];
const connection =
(aConnectors?.includes(dir) && bConnectors?.includes(dir.reverse())) ?? false;
return connection ? 1 : Number.POSITIVE_INFINITY;
};
export const parse = (input: string): GridGraph =>
input.toGridGraph({
weighter,
});