Cod sursa(job #2535542)

Utilizator TeodorCotetCotet Teodor TeodorCotet Data 31 ianuarie 2020 23:32:50
Problema Trie Scor 5
Compilator py Status done
Runda Arhiva educationala Marime 1.31 kb

import string

def add(trie, w):
    if len(w) == 0:
        trie['count'] += 1
    else:
        if w[0] not in trie:
            trie[w[0]] = {'count': 0}
        add(trie[w[0]], w[1:])

def delete(trie, w):
    if len(w) == 1:
        trie[w[0]]['count'] -= 1
        if trie[w[0]]['count'] == 0 and len(trie[w[0]]) == 1:
            del trie[w[0]]
    else:
        delete(trie[w[0]], w[1:])
        if len(trie[w[0]]) == 1 and trie[w[0]]['count'] == 0:
            del trie[w[0]]

def count(trie, w):
    if len(w) == 1:
        return trie[w[0]]['count'] if w[0] in trie  else 0
    else:
        return count(trie[w[0]], w[1:]) if w[0] in trie else 0 

def common_prefix(trie, w):
    if w[0] in trie:
        return w[0] + common_prefix(trie[w[0]], w[1:])
    else:
        return ''

if __name__ == "__main__":
    trie = {'count': 0}
    with open('trie.in', 'rt') as fin, open('trie.out', 'wt') as fout:
        for line in fin:
            t, w = line.split()
            t = int(t)
            if t == 0:
                add(trie, w)
            elif t == 1:
                delete(trie, w)
            elif t == 2:
                cnt = count(trie, w)
                fout.write('{}\n'.format(cnt))
            elif t == 3:
                pref = common_prefix(trie, w)
                fout.write('{}\n'.format(len(pref)))