前書き
基数ツリー、圧縮トライまたは圧縮プレフィックスツリーとして知られているが、文字列の集合を記憶するツリー状のデータ構造です。ツリーのエッジは空でない文字列でラベル付けされ、各ノードは終端または非終端です。ツリーに含まれる文字列は、ルートからターミナルノードまでのすべてのパスのラベルです。ツリーは、次の条件で定義される通常の形式である必要があります。
- すべての非終端非ルートノードには、少なくとも2つの子があります。
- すべてのノードで、すべての発信エッジの最初の文字が異なります。
たとえば、次のセットは非終端ノードと終端ノード["test", "testing", "tested", "team", "teams", "technical", "sick", "silly"]
を(N)
表す基数ツリーです(T)
。
-(N)-te-(N)-st-(T)-ing-(T)
| | |
| | +-ed-(T)
| |
| +-am-(T)-s-(T)
| |
| +-chnical-(T)
|
+-si-(N)-ck-(T)
|
+-lly-(T)
この課題では、入力として文字列を指定して、木の高さを計算します。
入力
入力は、小文字のASCII文字列の空でないリストです。重複は含まれませんが、どのような順序でもかまいません。空の文字列が含まれる場合があります。入力は適切な形式で取得できます。
出力
出力は、対応する基数ツリー内の最長のルートからリーフへのパスの長さで、含まれるノードの数で測定されます。
上記の例では、パスに対応する正しい出力は4です。
(N)-te-(N)-st-(T)-ing-(T)
(N)-te-(N)-st-(T)-ed-(T)
(N)-te-(N)-am-(T)-s-(T)
4つのノードを含みます。
さらなる例
基数ツリーの例をいくつか示します。
[""]
-(T)
["","fuller"]
-(T)-fuller-(T)
["","full","fuller"]
-(T)-full-(T)-er-(T)
["full","fuller"]
-(N)-full-(T)-er-(T)
["full","filler"]
-(N)-f-(N)-ull-(T)
|
+-iller-(T)
ルールとスコアリング
完全なプログラムまたは関数を作成できます。これはコードゴルフなので、バイト数が最も少ないものが優先されます。
必要な組み込みまたはライブラリを使用できimport
ますが、バイト数にはすべてのsなどを含めることを忘れないでください。サードパーティライブラリ(言語の標準インストールに含まれていないライブラリ)は許可されますが、ヘッダーに個別にリストする必要があります(例:Python + pytrie0.2、60バイト)。
テストケース
[""] -> 1
["fuller"] -> 2
["","fuller"] -> 2
["","full","fuller"] -> 3
["full","fuller"] -> 3
["full","filler"] -> 3
["full","filler","filter"] -> 4
["full","filler","fi","filter"] -> 5
["test","testing","tested","team","teams","technical","sick","silly"] -> 4
["a","aaaa","aabbaa","aabbaab","abaaa","aab","aabbb","aabba"] -> 8
["dbdbaca","ab","a","caaabaaa","adbbabdb","dbdbdbaca","dbbadbacaba","db"] -> 4
["db","dbbdbb","dbaa","cabcacaa","","acaabcacab","b","abaaaca","bacaaaaa"] -> 3
["aabaabdbb","bacaabadbbdb","abb","aabaa","ab","bcadbb","adbbcaaadbbb","caaa","bbdbcacadbab","dbbdbdb"] -> 4
["bbcaaabbbabbcadbbacadbbdbdb","b","bbbbaaaaaababa","ca","bb","bdbbacadbbdbbdbbababaacaca","abbaabbabcabaaa","bbbacacacabcacacabaaabb","bbcaaaab","bbbbcaacaadbcaaa","babbabcadbdbacacabbcacab","abcabbbaacadbcadb","bbcabbcadbcacaacaadbadbcaadb","dbbbdbbdbacaabbacabcadbdbacaca","bbaabdbdb","cabcadbbbadbadbbaadbcaca","adbadbadbdbcacadbdbbcaadbcaca","abaabbcab","aaabcaabcaab","bacacabcacaacadbadbb"] -> 6