main :: IO ()
main = do
  input <- map (concat . repeat) . lines <$> readFile "input"
  print $ day3 input (3,1)
  let slopes = [(1,1),(3,1),(5,1),(7,1),(1,2)]
  print $ product $ map (day3 input) slopes

type Slope = ((Int, Int), Int)

day3 :: [String] -> (Int,Int) -> Int
day3 input slope = a
  where
    (_, a) = day3rec (input, 0) (slope,0)

day3rec :: ([String], Int) -> Slope -> ([String], Int)
day3rec (t:ts, acc) ((x, y), l) =
  day3rec
    ( drop y (t : ts)
    , if t !! (l * x) == '.'
        then acc
        else succ acc)
    ((x, y), succ l)
day3rec x _ = x
