46 lines
1.5 KiB
AppleScript
46 lines
1.5 KiB
AppleScript
on canMakeWordWithBlocks(theString, theBlocks)
|
|
set stringLen to (count theString)
|
|
copy theBlocks to theBlocks
|
|
script o
|
|
on cmw(c, theBlocks)
|
|
set i to 1
|
|
repeat until (i > (count theBlocks))
|
|
if (character c of theString is in item i of theBlocks) then
|
|
if (c = stringLen) then return true
|
|
set item i of theBlocks to missing value
|
|
set theBlocks to text of theBlocks
|
|
if (cmw(c + 1, theBlocks)) then return true
|
|
end if
|
|
set i to i + 1
|
|
end repeat
|
|
|
|
return false
|
|
end cmw
|
|
end script
|
|
|
|
ignoring case -- Make the default case insensitivity explicit.
|
|
return ((theString = "") or (o's cmw(1, theBlocks)))
|
|
end ignoring
|
|
end canMakeWordWithBlocks
|
|
|
|
on join(lst, delim)
|
|
set astid to AppleScript's text item delimiters
|
|
set AppleScript's text item delimiters to delim
|
|
set txt to lst as text
|
|
set AppleScript's text item delimiters to astid
|
|
return txt
|
|
end join
|
|
|
|
on task()
|
|
set blocks to {"BO", "XK", "DQ", "CP", "NA", "GT", "RE", "TG", "QD", "FS", ¬
|
|
"JW", "HU", "VI", "AN", "OB", "ER", "FS", "LY", "PC", "ZM"}
|
|
set output to {}
|
|
repeat with testWord in {"a", "bark", "book", "treat", "common", "squad", "confuse"}
|
|
set end of output to "Can make “" & testWord & "”: " & ¬
|
|
canMakeWordWithBlocks(testWord's contents, blocks)
|
|
end repeat
|
|
return join(output, linefeed)
|
|
end task
|
|
|
|
task()
|