def test_when_not_found_should_return_none(): trie = Trie() trie.add(test_str_1) trie.add(test_str_2) trie.add(test_str_3) testNode = trie.find_node(test_str_not_found) assert testNode == None
def test_when_inserting_all_nodes_a_node_should_have_len_2(): trie = Trie() trie.add(test_str_1) trie.add(test_str_2) trie.add(test_str_3) trie.add(test_str_4) trie.add(test_str_5) trie.add(test_str_6) a_node = trie.find_node('a') assert len(a_node.children) == 2
def count_health(genes_data, firstIndex, lastIndex, stream): total_health = 0 genes_count_cache = Trie() for i in range(firstIndex, lastIndex + 1): gene = genes_data.genes[i] health = genes_data.health[i] gene_count_cache_node = genes_count_cache.find_node(gene) if gene_count_cache_node == None: prefix_array = genes_data.prefix_arrays[i] appear_positions = kmp(gene, stream, prefix_array) gene_count_cache_node = genes_count_cache.add(gene) gene_count_cache_node.value = len(appear_positions) total_health += gene_count_cache_node.value * health return total_health
def test_when_empty_string_should_return_root(): trie = Trie() testNode = trie.find_node('') assert not testNode == None
if __name__ == '__main__': n = int(raw_input()) genes = raw_input().rstrip().split() health = map(int, raw_input().rstrip().split()) s = int(raw_input()) genes_prefix_cache_trie = Trie() prefix_arrays = [None for g in genes] # calculate the prefix arrays by using a trie as cache for i in range(len(genes)): gene = genes[i] cache_trie_node = genes_prefix_cache_trie.find_node(gene) if cache_trie_node != None: prefix_arrays[i] = cache_trie_node.value else: prefix_arrays[i] = kmp_initialize_suffix_prefix_array(gene) cache_trie_node = genes_prefix_cache_trie.add(gene) cache_trie_node.value = prefix_arrays[i] genes_data = GenesData(genes, health, prefix_arrays) min = 10000000000000000 max = 0 for s_itr in xrange(s): firstLastd = raw_input().split()