CS153/hw6/hw5programs/sp22_tests/tries.oat
jmug ee01a8f5b2 Change hw6 to an unsolved version.
Signed-off-by: jmug <u.g.a.mariano@gmail.com>
2025-01-24 23:10:01 -08:00

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;
}