75 lines
No EOL
1.8 KiB
Text
75 lines
No EOL
1.8 KiB
Text
struct Node {
|
|
Node?[] children;
|
|
bool is_word
|
|
}
|
|
|
|
void add_word (Node trie, string word) {
|
|
var curr = trie;
|
|
|
|
var str = array_of_string(word);
|
|
var len = length(str);
|
|
|
|
for (var i = 0; i < len; i = i + 1; ) {
|
|
var letter_num = str[i] - 97;
|
|
if? (Node child = curr.children[letter_num]) {
|
|
child.is_word = true;
|
|
curr = child;
|
|
} else {
|
|
curr.children[letter_num] = new Node{children = new Node?[26]; is_word = (i == len - 1)};
|
|
if? (Node child_node = curr.children[letter_num]) {
|
|
curr = child_node;
|
|
}
|
|
}
|
|
}
|
|
return;
|
|
}
|
|
|
|
bool find_word (Node trie, string word) {
|
|
var curr = trie;
|
|
|
|
var str = array_of_string(word);
|
|
var len = length(str);
|
|
|
|
for (var i = 0; i < len; i = i + 1; ) {
|
|
var letter_num = str[i] - 97;
|
|
if? (Node child = curr.children[letter_num]) {
|
|
if (i == len - 1 & child.is_word) {
|
|
return true;
|
|
}
|
|
curr = child;
|
|
} else {
|
|
return false;
|
|
}
|
|
}
|
|
|
|
return false;
|
|
}
|
|
|
|
int program (int argc, string[] argv) {
|
|
var trie = new Node{children = new Node?[26]; is_word = false };
|
|
|
|
add_word(trie, "steve");
|
|
add_word(trie, "bear");
|
|
add_word(trie, "bea");
|
|
add_word(trie, "bell");
|
|
add_word(trie, "bid");
|
|
add_word(trie, "gary");
|
|
add_word(trie, "min");
|
|
add_word(trie, "meek");
|
|
add_word(trie, "tin");
|
|
add_word(trie, "buy");
|
|
add_word(trie, "sell");
|
|
add_word(trie, "stock");
|
|
add_word(trie, "stop");
|
|
|
|
var word_exists1 = find_word(trie, "gary");
|
|
var word_exists2 = find_word(trie, "bea");
|
|
var word_exists3 = find_word(trie, "steve");
|
|
var word_dne = find_word(trie, "ste");
|
|
|
|
if (word_exists1 & word_exists2 & word_exists3 & !word_dne) {
|
|
return 1;
|
|
}
|
|
|
|
return 0;
|
|
} |