Uma otimização comum para economizar espaço nos binários é mesclar literais de cadeia de caracteres em que um literal é o sufixo de outro. Por exemplo, um binário com a string literal
a: foobar
b: bar
c: barbaz
d: foobarbaz
e: baz
pode conter o seguinte conjunto literal de cadeias ( #
representando o \0
-terminator):
foobar#foobarbaz#
com os símbolos a
, b
, c
e d
ter os seguintes valores relativos ao início da piscina string:
a: 0
b: 3
c: 10
d: 7
e: 13
Nesta tarefa, você deve calcular o tamanho mínimo de um conjunto de cadeias para um determinado conjunto de cadeias de entrada.
Entrada
A entrada é uma série de até 999 strings, cada uma compreendendo até 80 caracteres ASCII (sem incluir a nova linha) no intervalo de 32 a 127 inclusive e, em seguida, um único caractere de nova linha.
Resultado
Encontre a cadeia mais curta, de modo que cada uma das cadeias de entrada (incluindo as novas linhas finais) sejam substrings dessa cadeia. A saída deve ser o comprimento dessa corda mais curta. Não produza a string, apenas seu comprimento.
Pontuação
Esse desafio é o código de golfe, são aplicadas brechas padrão. A solução com o menor comprimento em octetos vence.
Exemplos
Entrada:
foobar bar barbaz foobarbaz baz
sequência mais curta,
#
representando nova linha:foobar#foobarbaz#
comprimento: 17
Entrada:
foobar foobaz foobarbaz barbaz
sequência mais curta,
#
representando nova linha:foobar#foobaz#foobarbaz#
comprimento: 24
Respostas:
Pitão,
2018 bytesDemonstração.
{
pode ser removido se duplicatas não forem permitidas.Explicação:
fonte
CJam, 22 bytes
Experimente online.
Como funciona
fonte
python 2, 132
Apenas para começar uma corrida:
Funciona:
fonte
Haskell,
10185 bytesUma função sem nome. Exemplo de uso:
Como funciona: divida a string de entrada nas novas linhas. Remova duplicatas da lista de palavras
l
. Mantenha uma palavrax
da lista restante, se não estiver na lista de todas as caudas das palavras del
. Junte aquelesx
com novas linhas no meio (e no final!) A uma única sequência e conte o comprimento.fonte