@@ -5,10 +5,10 @@ import Data.Sequences (max, pad)
5
5
import Data.Coordinates (Coordinates , next )
6
6
import Data.Array as Array
7
7
import Control.Alternative (guard )
8
- import Data.Array (elem , filter , foldl , length , snoc , singleton , (..))
8
+ import Data.Array (filter , foldl , length , snoc , singleton , (..))
9
9
import Data.Array.NonEmpty (cons' )
10
10
import Data.String (joinWith )
11
- import Data.Maybe (Maybe , isJust )
11
+ import Data.Maybe (Maybe , fromMaybe , isJust )
12
12
13
13
newtype Matrix a
14
14
= Matrix (Array (Array a ))
@@ -34,6 +34,9 @@ index (Matrix rows) { x, y } = do
34
34
row <- Array .index rows y
35
35
Array .index row x
36
36
37
+ elem :: ∀ a . Matrix a -> a -> Coordinates -> a
38
+ elem m d x = fromMaybe d $ index m x
39
+
37
40
contains :: ∀ a . Matrix a -> Coordinates -> Boolean
38
41
contains m x = isJust $ index m x
39
42
@@ -45,7 +48,7 @@ points m = do
45
48
pure { x, y }
46
49
47
50
steps :: ∀ a . Matrix a -> Array Coordinates -> Array (Array Coordinates )
48
- steps m arr = snoc arr <$> (filter (\x -> contains m x && not elem x arr) $ next arr)
51
+ steps m arr = snoc arr <$> (filter (\x -> contains m x && not Array . elem x arr) $ next arr)
49
52
50
53
paths :: ∀ a . Matrix a -> Int -> Array (Array Coordinates )
51
54
paths m n
0 commit comments