Skip to content

Commit 91b5b5b

Browse files
committed
Add Matrix.elem with a default
1 parent d9e4f69 commit 91b5b5b

File tree

2 files changed

+12
-10
lines changed

2 files changed

+12
-10
lines changed

src/Data/Matrix.purs

+6-3
Original file line numberDiff line numberDiff line change
@@ -5,10 +5,10 @@ import Data.Sequences (max, pad)
55
import Data.Coordinates (Coordinates, next)
66
import Data.Array as Array
77
import Control.Alternative (guard)
8-
import Data.Array (elem, filter, foldl, length, snoc, singleton, (..))
8+
import Data.Array (filter, foldl, length, snoc, singleton, (..))
99
import Data.Array.NonEmpty (cons')
1010
import Data.String (joinWith)
11-
import Data.Maybe (Maybe, isJust)
11+
import Data.Maybe (Maybe, fromMaybe, isJust)
1212

1313
newtype Matrix a
1414
= Matrix (Array (Array a))
@@ -34,6 +34,9 @@ index (Matrix rows) { x, y } = do
3434
row <- Array.index rows y
3535
Array.index row x
3636

37+
elem :: a. Matrix a -> a -> Coordinates -> a
38+
elem m d x = fromMaybe d $ index m x
39+
3740
contains :: a. Matrix a -> Coordinates -> Boolean
3841
contains m x = isJust $ index m x
3942

@@ -45,7 +48,7 @@ points m = do
4548
pure { x, y }
4649

4750
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)
4952

5053
paths :: a. Matrix a -> Int -> Array (Array Coordinates)
5154
paths m n

src/Data/Word.purs

+6-7
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,9 @@ module Data.Word where
22

33
import Prelude
44
import Data.Coordinates (Coordinates)
5-
import Data.Matrix (Matrix, paths, index)
5+
import Data.Matrix (Matrix, paths, elem)
66
import Data.Array ((..))
7-
import Data.String (joinWith)
8-
import Data.Maybe (fromMaybe)
7+
import Data.Foldable (fold)
98
import Control.Alternative (guard)
109

1110
foreign import isWord :: String -> Boolean
@@ -19,7 +18,7 @@ boggle :: Matrix String -> Int -> Array Word
1918
boggle m n = do
2019
x <- 3 .. n
2120
path <- paths m x
22-
guard <<< isWord $ join path
23-
pure { path, word: join path }
24-
where
25-
join path = joinWith "" $ (\x -> fromMaybe "" $ index m x) <$> path
21+
let
22+
word = fold $ elem m "" <$> path
23+
guard $ isWord word
24+
pure { path, word }

0 commit comments

Comments
 (0)