0 | module Years.Y2015.Day1
8 | trackFloor : (start : Integer) -> (xs : List Char) -> Integer
9 | trackFloor start [] = start
10 | trackFloor start ('(' :: xs) = trackFloor (start + 1) xs
11 | trackFloor start (')' :: xs) = trackFloor (start - 1) xs
12 | trackFloor start (x :: xs) = trackFloor start xs
14 | findBasement : (position : Nat) -> (currentFloor : Integer) -> (xs : List Char)
16 | findBasement position currentFloor [] = position
17 | findBasement position currentFloor ('(' :: xs) =
18 | findBasement (position + 1) (currentFloor + 1) xs
19 | findBasement position currentFloor (')' :: xs) =
20 | if currentFloor <= 0
22 | else findBasement (position + 1) (currentFloor - 1) xs
23 | findBasement position currentFloor (x :: xs) =
24 | findBasement (position + 1) currentFloor xs
26 | part1 : Eff (PartEff String) (Integer, ())
28 | input <- map unpack $
askAt "input"
29 | let output = trackFloor 0 input
32 | part2 : () -> Eff (PartEff String) Nat
34 | input <- map unpack $
askAt "input"
35 | pure $
findBasement 1 0 input
39 | day1 = Both 1 part1 part2