Day 10
This commit is contained in:
35
day10/Part1.hs
Normal file
35
day10/Part1.hs
Normal 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
|
||||
Reference in New Issue
Block a user