Introducción
Un árbol radix , también conocido como trie comprimido o árbol de prefijos comprimido, es una estructura de datos similar a un árbol para almacenar un conjunto de cadenas. Los bordes del árbol están etiquetados por cadenas no vacías, y cada nodo es terminal o no terminal. Las cadenas que contiene el árbol son exactamente las etiquetas de todas las rutas desde la raíz hasta un nodo terminal. El árbol debe estar en la forma normal definida por las siguientes condiciones:
- Todos los nodos no raíz no terminales tienen al menos dos hijos.
- Para cada nodo, todos los bordes salientes tienen primeros caracteres diferentes.
Por ejemplo, aquí está el árbol de la raíz que contiene el conjunto ["test", "testing", "tested", "team", "teams", "technical", "sick", "silly"]
, con la (N)
representación de un nodo no terminal y (T)
un nodo terminal:
-(N)-te-(N)-st-(T)-ing-(T)
| | |
| | +-ed-(T)
| |
| +-am-(T)-s-(T)
| |
| +-chnical-(T)
|
+-si-(N)-ck-(T)
|
+-lly-(T)
En este desafío, su tarea es calcular la altura del árbol, dadas las cadenas como entrada.
Entrada
Su entrada es una lista no vacía de cadenas de letras minúsculas ASCII. No contendrá duplicados, pero puede estar en cualquier orden. Puede contener la cadena vacía. Puede tomar la entrada en cualquier formato razonable.
Salida
Su salida será la longitud de la ruta de raíz a hoja más larga en el árbol de raíz correspondiente, medida en el número de nodos que contiene.
En el ejemplo anterior, la salida correcta es 4, correspondiente a las rutas
(N)-te-(N)-st-(T)-ing-(T)
(N)-te-(N)-st-(T)-ed-(T)
(N)-te-(N)-am-(T)-s-(T)
que contienen 4 nodos.
Ejemplos adicionales
Aquí hay un par de ejemplos más de árboles radix:
[""]
-(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)
Reglas y puntaje
Puede escribir un programa completo o una función. Este es el código de golf, por lo que gana el conteo de bytes más bajo.
Puede utilizar cualquier biblioteca o biblioteca incorporada que desee, pero recuerde incluir todos import
los correos electrónicos, etc., en su recuento de bytes. Las bibliotecas de terceros, aquellas que no están incluidas en la instalación estándar de su idioma, están permitidas, pero deben aparecer en el encabezado por separado, por ejemplo, Python + pytrie0.2, 60 bytes .
Casos de prueba
[""] -> 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