Files
newt/aoc2025/Aoc.newt
2025-12-09 09:06:50 -08:00

43 lines
985 B
Agda
Raw Blame History

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
min : a. {{Ord a}} a a a
min x y = if x < y then x else y
max : a. {{Ord a}} a a a
max a b = if a < b then b else a
nums : String List Int
nums s = map stringToInt $ filter (_/=_ "") $ split (trim s) " "
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