En théorie de l'information, un "code de préfixe" est un dictionnaire dans lequel aucune des clés n'est un préfixe d'un autre. En d'autres termes, cela signifie qu'aucune des chaînes ne commence par aucune des autres.
Par exemple, {"9", "55"}
est un code de préfixe, mais {"5", "9", "55"}
n'est pas.
Le principal avantage de ceci est que le texte encodé peut être écrit sans séparateur entre eux et qu'il sera toujours déchiffrable de manière unique. Cela apparaît dans des algorithmes de compression tels que le codage de Huffman , qui génère toujours le code de préfixe optimal.
Votre tâche est simple: à partir d’une liste de chaînes, déterminez s’il s’agit ou non d’un code de préfixe valide.
Votre contribution:
Sera une liste de chaînes dans un format raisonnable .
Ne contiendra que des chaînes ASCII imprimables.
Ne contiendra aucune chaîne vide.
Votre sortie sera une valeur de vérité / falsey : vérité si c'est un code de préfixe valide, et falsey si ce n'est pas le cas.
Voici quelques cas de test réels:
["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"]
Voici quelques cas de test faux:
["4", "42"]
["1", "2", "3", "34"]
["This", "test", "case", "is", "false", "t"]
["He", "said", "Hello"]
["0", "00", "00001"]
["Duplicate", "Duplicate", "Keys", "Keys"]
C'est du code-golf, donc les échappatoires standard s'appliquent, et la réponse la plus courte en octets est gagnante.
001
être uniquement déchiffrable? Ce pourrait être l'un 00, 1
ou l' autre 0, 11
.
0, 00, 1, 11
toutes les clés, il ne s'agit pas d'un préfixe-code, car 0 correspond au préfixe 00 et 1 au préfixe 11. Un code de préfixe indique qu'aucune des clés ne commence par une autre clé. Ainsi, par exemple, si vos clés sont, 0, 10, 11
il s’agit d’un code de préfixe et uniquement déchiffrable. 001
n'est pas un message valide, mais 0011
ou 0010
sont uniquement déchiffrable.