Na teoria da informação, um "código de prefixo" é um dicionário em que nenhuma das chaves é o prefixo de outra. Em outras palavras, isso significa que nenhuma das seqüências começa com nenhuma das outras.
Por exemplo, {"9", "55"}
é um código de prefixo, mas {"5", "9", "55"}
não é.
A maior vantagem disso é que o texto codificado pode ser gravado sem separador entre eles e ainda será decifrável de maneira única. Isso aparece em algoritmos de compactação, como a codificação de Huffman , que sempre gera o código de prefixo ideal.
Sua tarefa é simples: dada uma lista de cadeias, determine se é ou não um código de prefixo válido.
Sua entrada:
Será uma lista de strings em qualquer formato razoável .
Contém apenas seqüências ASCII imprimíveis.
Não conterá nenhuma sequência vazia.
Sua saída será um valor truthy / falsey : Truthy, se for um código de prefixo válido, e falsey, se não for.
Aqui estão alguns casos de teste verdadeiros:
["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"]
Aqui estão alguns casos de teste falsos:
["4", "42"]
["1", "2", "3", "34"]
["This", "test", "case", "is", "false", "t"]
["He", "said", "Hello"]
["0", "00", "00001"]
["Duplicate", "Duplicate", "Keys", "Keys"]
Isso é código-golfe, então as brechas padrão se aplicam e a resposta mais curta em bytes vence.
001
seria singularmente decifrável? Pode ser um 00, 1
ou outro 0, 11
.
0, 00, 1, 11
todas as chaves, esse não é um código de prefixo, porque 0 é um prefixo de 00 e 1 é um prefixo de 11. Um código de prefixo é o local em que nenhuma das chaves começa com outra chave. Por exemplo, se suas chaves forem, 0, 10, 11
esse é um código prefixo e decifrável exclusivamente. 001
não é uma mensagem válida, mas 0011
ou 0010
são exclusivamente decifráveis.