Desafio
Escreva um programa que comprima e descompacte o texto ASCII sem perdas. Deve ser especializado para funcionar bem com palíndromos, incluindo palíndromos que não diferenciam maiúsculas de minúsculas e que não pontuam pontuação. A melhor compactação com a menor fonte ganha.
Pontuação
total_bytes_saved / sqrt(program_size)
- Maior pontuação ganha
total_bytes_saved
é quantos bytes menores as seqüências compactadas são do que os originais, total nos casos de teste abaixo. program_size
é o tamanho em bytes do código-fonte dos programas de compactação e descompactação. O código compartilhado entre os dois precisa ser contado apenas uma vez.
Por exemplo, se houver 10 casos de teste e um programa de 100 bytes salvou 5 bytes em 7 casos de teste, 10 cada em 2 deles, mas o último caso de teste tiver 2 bytes mais, a solução terá 5,3. ( (7 * 5 + 10 * 2 - 2) / sqrt(100) = 5.3
)
Casos de teste
tacocat
toohottohoot
todderasesareddot
amanaplanacanalpanama
wasitacaroracatisaw?
Bob
IManAmRegalAGermanAmI
DogeeseseeGod
A Santa at NASA
Go hang a salami! I'm a lasagna hog.
Regras
- Aplicam-se brechas padrão.
- A compactação deve funcionar em todas as seqüências de texto imprimíveis ASCII (bytes 32-126, inclusive), não apenas nos palíndromos. Na verdade, ele não precisa economizar espaço para nenhuma entrada.
- A saída pode ser qualquer sequência de bytes ou caracteres, independentemente de sua implementação ou representação interna (seqüências de caracteres, listas e matrizes são jogos justos, por exemplo). Se estiver codificando para UTF-8, conte bytes, não caracteres. Cadeias de caracteres largas (por exemplo, UTF-16 ou UTF-32) não são permitidas, a menos que os únicos pontos de código possivelmente usados estejam entre 0 e 255.
- Os componentes de compactação / descompactação não são permitidos.
Para nosso próprio prazer, publique as strings compactadas com seu código-fonte.
ATUALIZAÇÃO 1: A pontuação mudou de total_bytes_saved / program_size
para total_bytes_saved / sqrt(program_size)
para dar mais peso à melhor compressão e menos peso ao golfe agressivo. Ajuste sua pontuação de acordo.
ATUALIZAÇÃO 2: corrigida wasitacaroraratisaw?
para serwasitacaroracatisaw?
[32-126]
?
1000 *
parte é realmente necessária, e não, eu não acho que isso fará com que a pontuação pareça mais "satisfatória";)
wasitacaroraratisaw?
é um contraexemplo disso