summaryrefslogtreecommitdiff
path: root/2021/11.hs
blob: cf23cec60ba56ae4f2d04b3b22d761db9817254a (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
{-# OPTIONS -Wno-type-defaults #-}
module Main where

import qualified Data.Array as A
import Data.List
import Data.Maybe

import Input


stencil8 :: (a -> [a] -> b) -> a -> A.Array (Int, Int) a -> A.Array (Int, Int) b
stencil8 f def arr =
    A.listArray (A.bounds arr)
      [f (arr A.! (y, x))
         [get (yi, xi)
         | yi <- [y-1 .. y+1]
         , xi <- [x-1 .. x+1]
         , xi /= 0 || yi /= 0]
      | y <- [y1..y2], x <- [x1..x2]]
  where
    get (y, x) | y1 <= y, y <= y2, x1 <= x, x <= x2 = arr A.! (y, x)
               | otherwise = def
    ((y1, x1), (y2, x2)) = A.bounds arr

step1 :: A.Array (Int, Int) Int -> A.Array (Int, Int) Int
step1 = stencil _ 0

main :: IO ()
main = do
    inp <- getInput 11
    return ()