60 lines
1.4 KiB
Elm
60 lines
1.4 KiB
Elm
import Html exposing (div, p, text)
|
|
|
|
|
|
type alias Block = (Char, Char)
|
|
|
|
|
|
writtenWithBlock : Char -> Block -> Bool
|
|
writtenWithBlock letter (firstLetter, secondLetter) =
|
|
letter == firstLetter || letter == secondLetter
|
|
|
|
|
|
canMakeWord : List Block -> String -> Bool
|
|
canMakeWord blocks word =
|
|
let
|
|
checkWord w examinedBlocks blocksToExamine =
|
|
case (String.uncons w, blocksToExamine) of
|
|
(Nothing, _) -> True
|
|
(Just _, []) -> False
|
|
(Just (firstLetter, restOfWord), firstBlock::restOfBlocks) ->
|
|
if writtenWithBlock firstLetter firstBlock
|
|
then checkWord restOfWord [] (examinedBlocks ++ restOfBlocks)
|
|
else checkWord w (firstBlock::examinedBlocks) restOfBlocks
|
|
in
|
|
checkWord (String.toUpper word) [] blocks
|
|
|
|
|
|
exampleBlocks =
|
|
[ ('B', 'O')
|
|
, ('X', 'K')
|
|
, ('D', 'Q')
|
|
, ('C', 'P')
|
|
, ('N', 'A')
|
|
, ('G', 'T')
|
|
, ('R', 'E')
|
|
, ('T', 'G')
|
|
, ('Q', 'D')
|
|
, ('F', 'S')
|
|
, ('J', 'W')
|
|
, ('H', 'U')
|
|
, ('V', 'I')
|
|
, ('A', 'N')
|
|
, ('O', 'B')
|
|
, ('E', 'R')
|
|
, ('F', 'S')
|
|
, ('L', 'Y')
|
|
, ('P', 'C')
|
|
, ('Z', 'M')
|
|
]
|
|
|
|
|
|
exampleWords =
|
|
["", "A", "bark", "BoOK", "TrEAT", "COmMoN", "Squad", "conFUsE"]
|
|
|
|
|
|
main =
|
|
let resultStr (word, canBeWritten) = "\"" ++ word ++ "\"" ++ ": " ++ if canBeWritten then "True" else "False" in
|
|
List.map (\ word -> (word, canMakeWord exampleBlocks word) |> resultStr) exampleWords
|
|
|> List.map (\result -> p [] [ text result ])
|
|
|> div []
|