Files
newt/aoc2023/Aoc.newt

50 lines
1.0 KiB
Agda
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
module Aoc
import Prelude
-- `by` is the first argument for use in `map`
nums' : String String List Int
nums' by s = map stringToInt $ filter (_/=_ "") $ split (trim s) by
nums : String List Int
nums s = map stringToInt $ filter (_/=_ "") $ split (trim s) " "
isDigit : Char -> Bool
isDigit '0' = True
isDigit '1' = True
isDigit '2' = True
isDigit '3' = True
isDigit '4' = True
isDigit '5' = True
isDigit '6' = True
isDigit '7' = True
isDigit '8' = True
isDigit '9' = True
isDigit _ = False
indexOf? : a. {{Eq a}} a List a Maybe Nat
indexOf? {a} z xs = go Z z xs
where
go : Nat a List a Maybe Nat
go ix z Nil = Nothing
go ix z (x :: xs) =
if z == x then Just ix else go (S ix) z xs
-- TODO move to Aoc library
Point : U
Point = Int × Int
instance Add Point where
(a,b) + (c,d) = (a + c, b + d)
instance Sub Point where
(a,b) - (c,d) = (a - c, b - d)
-- instance Ord Point where
-- (a,b) < (c,d) = a < c || a == c && b < d
-- instance Eq Point where
-- (a,b) == (c,d) = a == c && b == d