Slide 14
Slide 14 text
fill : Int -> Int -> a -> Array2 a -> Array2 a
fill x y to arr2 =
let
neighbors x y =
[ ( x - 1, y ), ( x, y - 1), ( x + 1, y ), ( x, y + 1 ) ]
fillRegion a ( x, y ) ( visited, arr2 ) =
case get x y arr2 of
Nothing ->
( visited, arr2 )
Just c ->
if Set.member ( x, y ) visited then
( visited, arr2 )
else if c == a then
List.foldl
(fillRegion a)
( Set.insert ( x, y ) visited, set x y to arr2 )
(neighbors x y)
else
( Set.insert ( x, y ) visited, arr2 )
start a =
Tuple.second <| fillRegion a ( x, y ) ( Set.empty, arr2 )
in
get x y arr2
|> Maybe.map start
|> Maybe.withDefault arr2
http://shuheikagawa.com/pixelm 14