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) " "

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
