Una optimización común para ahorrar espacio en binarios es fusionar literales de cadena donde un literal es el sufijo de otro. Por ejemplo, un binario con los literales de cadena
a: foobar
b: bar
c: barbaz
d: foobarbaz
e: baz
podría contener el siguiente grupo literal de cadenas (que #
representa el \0
-terminador):
foobar#foobarbaz#
con los símbolos a
, b
, c
, y d
que tiene los siguientes valores relativos al principio de la cadena de la piscina:
a: 0
b: 3
c: 10
d: 7
e: 13
En esta tarea, debe calcular el tamaño mínimo de un grupo de cadenas para un conjunto determinado de cadenas de entrada.
Entrada
La entrada es una serie de hasta 999 cadenas, cada una de las cuales comprende hasta 80 caracteres ASCII (sin incluir la nueva línea) en el rango de 32 a 127 inclusive y luego un solo carácter de nueva línea.
Salida
Encuentre la cadena más corta de manera que cada una de las cadenas de entrada (incluidas las nuevas líneas de terminación) sean subcadenas de esa cadena. La salida será la longitud de esa cadena más corta. No envíe la cadena, solo su longitud.
Puntuación
Este desafío es el código de golf, se aplican las lagunas estándar. La solución con la menor longitud en octetos gana.
Ejemplos
Entrada:
foobar bar barbaz foobarbaz baz
cadena más corta, que
#
representa nueva línea:foobar#foobarbaz#
longitud: 17
Entrada:
foobar foobaz foobarbaz barbaz
cadena más corta, que
#
representa nueva línea:foobar#foobaz#foobarbaz#
longitud: 24
Respuestas:
Pyth,
2018 bytesDemostración.
{
puede eliminarse si no se permiten duplicados.Explicación:
fuente
CJam, 22 bytes
Pruébalo en línea.
Cómo funciona
fuente
pitón 2, 132
Solo para comenzar una carrera:
Funciona:
fuente
Haskell,
10185 bytesUna función sin nombre. Ejemplo de uso:
Cómo funciona: dividir la cadena de entrada en las nuevas líneas. Eliminar duplicados de la lista de palabras
l
. Mantenga una palabrax
de la lista restante si no está en la lista de todas las colas de las palabras del
. Únete a aquellosx
con nuevas líneas intermedias (¡y al final!) En una sola cadena y cuenta su longitud.fuente