Sfida
Scrivi un programma che comprime e decomprime il testo ASCII senza perdita di dati. Dovrebbe essere specializzato a lavorare bene con i palindromi, compresi i palindromi insensibili alle maiuscole e ai segni di punteggiatura. Vince la migliore compressione con la fonte più piccola.
punteggio
total_bytes_saved / sqrt(program_size)
- Il punteggio più alto vince
total_bytes_saved
è il numero di byte più piccolo delle stringhe compresse rispetto agli originali, totale tra i casi di test di seguito. program_size
è la dimensione in byte del codice sorgente di entrambi i programmi di compressione e decompressione. Il codice condiviso tra i due deve essere contato una sola volta.
Ad esempio, se ci sono 10 casi di test e un programma da 100 byte ha salvato 5 byte su 7 casi di test, 10 ciascuno su 2 di essi, ma l'ultimo caso di test era più lungo di 2 byte, la soluzione avrebbe ottenuto un punteggio di 5,3. ( (7 * 5 + 10 * 2 - 2) / sqrt(100) = 5.3
)
Casi test
tacocat
toohottohoot
todderasesareddot
amanaplanacanalpanama
wasitacaroracatisaw?
Bob
IManAmRegalAGermanAmI
DogeeseseeGod
A Santa at NASA
Go hang a salami! I'm a lasagna hog.
Regole
- Si applicano scappatoie standard.
- La compressione deve funzionare su tutte le stringhe di testo ASCII stampabili (byte 32-126, inclusi), non solo sui palindromi. Tuttavia, non è necessario risparmiare spazio per alcun input.
- L'output può essere qualsiasi sequenza di byte o caratteri, indipendentemente dalla sua implementazione o rappresentazione interna (stringhe, elenchi e array sono tutti fair game, per esempio). Se si codifica in UTF-8, contare i byte, non i caratteri. Le stringhe larghe (ad esempio UTF-16 o UTF-32) non sono consentite a meno che gli unici punti di codice eventualmente utilizzati non siano compresi tra 0 e 255.
- I comandi incorporati di compressione / decompressione non sono consentiti.
Per il nostro divertimento, pubblica le stringhe compresse con il tuo codice sorgente.
AGGIORNAMENTO 1: Il punteggio è cambiato da total_bytes_saved / program_size
a total_bytes_saved / sqrt(program_size)
per dare più peso a una migliore compressione e meno peso a golf aggressivo. Regola i tuoi punteggi di conseguenza.
AGGIORNAMENTO 2: fisso wasitacaroraratisaw?
per esserewasitacaroracatisaw?
[32-126]
?
1000 *
parte sia davvero necessaria, e no, non credo che renderà il punteggio più "soddisfacente";)
wasitacaroraratisaw?
è un controesempio a quello