En teoría de la información, un "código de prefijo" es un diccionario donde ninguna de las claves es prefijo de otra. En otras palabras, esto significa que ninguna de las cadenas comienza con ninguna de las otras.
Por ejemplo, {"9", "55"}
es un código de prefijo, pero {"5", "9", "55"}
no lo es.
La mayor ventaja de esto es que el texto codificado se puede escribir sin separador entre ellos, y seguirá siendo descifrable de forma única. Esto se muestra en algoritmos de compresión como la codificación Huffman , que siempre genera el código de prefijo óptimo.
Su tarea es simple: dada una lista de cadenas, determine si es o no un código de prefijo válido.
Tu aportación:
Será una lista de cadenas en cualquier formato razonable .
Solo contendrá cadenas ASCII imprimibles.
No contendrá cadenas vacías.
Su salida será un valor verdadero / falso : Verdad si es un código de prefijo válido, y falso si no lo es.
Aquí hay algunos casos de prueba verdaderos:
["Hello", "World"]
["Code", "Golf", "Is", "Cool"]
["1", "2", "3", "4", "5"]
["This", "test", "case", "is", "true"]
["111", "010", "000", "1101", "1010", "1000", "0111", "0010", "1011",
"0110", "11001", "00110", "10011", "11000", "00111", "10010"]
Aquí hay algunos casos de prueba falsos:
["4", "42"]
["1", "2", "3", "34"]
["This", "test", "case", "is", "false", "t"]
["He", "said", "Hello"]
["0", "00", "00001"]
["Duplicate", "Duplicate", "Keys", "Keys"]
Este es el código de golf, por lo que se aplican las lagunas estándar y gana la respuesta más corta en bytes.
001
ser singularmente descifrable? Podría ser cualquiera 00, 1
o 0, 11
.
0, 00, 1, 11
todas como claves, este no es un código de prefijo porque 0 es un prefijo de 00 y 1 es un prefijo de 11. Un código de prefijo es donde ninguna de las claves comienza con otra clave. Entonces, por ejemplo, si sus claves son 0, 10, 11
este es un código de prefijo y descifrable de manera única. 001
no es un mensaje válido, pero 0011
o 0010
son únicamente descifrables.