This commit is contained in:
2023-12-10 16:21:01 +01:00
parent cb79c63bb2
commit b2eadb440e
5 changed files with 142 additions and 0 deletions

35
day10/Part1.hs Normal file
View File

@@ -0,0 +1,35 @@
module Part1 where
import Commons
import Data.Array ((!))
getDistanceToStart :: (Int, Int) -> Direction -> Grid -> Int
getDistanceToStart (y, x) South grid =
case grid ! (y, x) of
Pipe (North, South) -> 1 + getDistanceToStart (y + 1, x) South grid
Pipe (North, East) -> 1 + getDistanceToStart (y, x + 1) East grid
Pipe (North, West) -> 1 + getDistanceToStart (y, x - 1) West grid
Start -> 0
getDistanceToStart (y, x) West grid =
case grid ! (y, x) of
Pipe (East, West) -> 1 + getDistanceToStart (y, x - 1) West grid
Pipe (North, East) -> 1 + getDistanceToStart (y - 1, x) North grid
Pipe (South, East) -> 1 + getDistanceToStart (y + 1, x) South grid
Start -> 0
getDistanceToStart (y, x) North grid =
case grid ! (y, x) of
Pipe (North, South) -> 1 + getDistanceToStart (y - 1, x) North grid
Pipe (South, East) -> 1 + getDistanceToStart (y, x + 1) East grid
Pipe (South, West) -> 1 + getDistanceToStart (y, x - 1) West grid
Start -> 0
getDistanceToStart (y, x) East grid =
case grid ! (y, x) of
Pipe (East, West) -> 1 + getDistanceToStart (y, x + 1) East grid
Pipe (North, West) -> 1 + getDistanceToStart (y - 1, x) North grid
Pipe (South, West) -> 1 + getDistanceToStart (y + 1, x) South grid
Start -> 0
getCycleLength :: Grid -> Int
getCycleLength grid = let (dir, startCoords) = getStartDirection (getStartCoordinates grid) grid
in 1 + getDistanceToStart startCoords dir grid