Desafío
Escriba un programa que comprima y descomprima el texto ASCII sin pérdidas. Debe estar especializado para trabajar bien con palíndromos, incluidos los palíndromos que no distinguen entre mayúsculas y minúsculas y signos de puntuación. La mejor compresión con la fuente más pequeña gana.
Puntuación
total_bytes_saved / sqrt(program_size)
- Mayor puntaje gana
total_bytes_saved
es cuántos bytes son más pequeñas las cadenas comprimidas que los originales, total en los casos de prueba a continuación. program_size
es el tamaño en bytes del código fuente de los programas de compresión y descompresión. El código compartido entre los dos solo debe contarse una vez.
Por ejemplo, si hay 10 casos de prueba y un programa de 100 bytes guardó 5 bytes en 7 casos de prueba, 10 cada uno en 2 de ellos, pero el último caso de prueba fue 2 bytes más largo, la solución obtendría 5,3. ( (7 * 5 + 10 * 2 - 2) / sqrt(100) = 5.3
)
Casos de prueba
tacocat
toohottohoot
todderasesareddot
amanaplanacanalpanama
wasitacaroracatisaw?
Bob
IManAmRegalAGermanAmI
DogeeseseeGod
A Santa at NASA
Go hang a salami! I'm a lasagna hog.
Reglas
- Se aplican lagunas estándar.
- La compresión debe funcionar en todas las cadenas de texto ASCII imprimibles (bytes 32-126, inclusive), no solo palíndromos. Sin embargo, en realidad no tiene que ahorrar espacio para ninguna entrada.
- La salida puede ser cualquier secuencia de bytes o caracteres, independientemente de su implementación o representación interna (las cadenas, las listas y las matrices son juegos justos, por ejemplo). Si codifica para UTF-8, cuente bytes, no caracteres. Las cadenas anchas (por ejemplo, UTF-16 o UTF-32) no están permitidas a menos que los únicos puntos de código posiblemente utilizados estén entre 0 y 255.
- La compresión / descompresión incorporada no está permitida.
En aras de nuestro propio disfrute, publique las cadenas comprimidas con su código fuente.
ACTUALIZACIÓN 1: La puntuación cambió de total_bytes_saved / program_size
a total_bytes_saved / sqrt(program_size)
para dar más peso a una mejor compresión y menos peso al golf agresivo. Ajuste sus puntajes en consecuencia.
ACTUALIZACIÓN 2: arreglado wasitacaroraratisaw?
para serwasitacaroracatisaw?
[32-126]
?
1000 *
parte sea realmente necesaria, y no, no creo que haga que el puntaje se sienta más "satisfactorio";)
wasitacaroraratisaw?
es un contraejemplo para eso