2024-09-09 15:57:58 +01:00
|
|
|
structure BuildExistsStringSet =
|
|
|
|
|
struct
|
|
|
|
|
fun helpExists (pos, trie, acc) =
|
|
|
|
|
if pos = Vector.length WordsList.words then
|
|
|
|
|
acc
|
|
|
|
|
else
|
|
|
|
|
let
|
|
|
|
|
val word = Vector.sub (WordsList.words, pos)
|
|
|
|
|
val newAcc = StringSet.exists (word, trie)
|
|
|
|
|
val acc = newAcc orelse acc
|
|
|
|
|
in
|
|
|
|
|
helpExists (pos + 1, trie, acc)
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
fun exists trie = helpExists (0, trie, true)
|
|
|
|
|
|
|
|
|
|
fun main () =
|
|
|
|
|
let
|
|
|
|
|
val endTrie =
|
|
|
|
|
Vector.foldl StringSet.insert StringSet.empty WordsList.words
|
|
|
|
|
|
|
|
|
|
val startTime = Time.now ()
|
|
|
|
|
val wordsExist = exists endTrie
|
|
|
|
|
val finishTime = Time.now ()
|
|
|
|
|
|
|
|
|
|
val searchDuration = Time.- (finishTime, startTime)
|
2024-09-11 13:19:41 +01:00
|
|
|
val searchDuration = Time.toMilliseconds searchDuration
|
|
|
|
|
val searchDuration = LargeInt.toString searchDuration ^ "\n"
|
2024-09-09 15:57:58 +01:00
|
|
|
in
|
|
|
|
|
print searchDuration
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
val _ = BuildExistsStringSet.main ()
|