UNPKG

expeditaet

Version:
59 lines (53 loc) 1.48 kB
import { split } from '@alexaegis/advent-of-code-lib'; import { Vec2 } from '@alexaegis/advent-of-code-lib/model'; export enum TileColor { BLACK = 1, WHITE = 0, } export type HexagonalDirection = 'e' | 'se' | 'sw' | 'w' | 'nw' | 'ne'; export const hexagonalAxialDirections: Record<HexagonalDirection, Vec2> = { e: new Vec2(1, 0), w: new Vec2(-1, 0), ne: new Vec2(1, -1), sw: new Vec2(-1, 1), se: new Vec2(0, 1), nw: new Vec2(0, -1), }; export const invertedHexagonalDirections: Record<HexagonalDirection, HexagonalDirection> = { e: 'w', w: 'e', sw: 'ne', ne: 'sw', se: 'nw', nw: 'se', }; export const parse = (input: string): HexagonalDirection[][] => { const instructions: HexagonalDirection[][] = []; for (const line of split(input)) { const neighbours: HexagonalDirection[] = []; let chomp = line; while (chomp.length > 0) { if (chomp.startsWith('se')) { neighbours.push('se'); chomp = chomp.slice(2); } else if (chomp.startsWith('sw')) { neighbours.push('sw'); chomp = chomp.slice(2); } else if (chomp.startsWith('nw')) { neighbours.push('nw'); chomp = chomp.slice(2); } else if (chomp.startsWith('ne')) { neighbours.push('ne'); chomp = chomp.slice(2); } else if (chomp.startsWith('w')) { neighbours.push('w'); chomp = chomp.slice(1); } else if (chomp.startsWith('e')) { neighbours.push('e'); chomp = chomp.slice(1); } } instructions.push(neighbours); } return instructions; };