Wyzwanie
Napisz program, który bezstratnie kompresuje i dekompresuje tekst ASCII. Powinien specjalizować się w pracy z palindromami, w tym palindromami bez rozróżniania wielkości liter i interpunkcji. Najlepsza kompresja z najmniejszym źródłem wygrywa.
Punktacja
total_bytes_saved / sqrt(program_size)
- Najwyższy wynik wygrywa
total_bytes_saved
jest liczbą bajtów mniejszych skompresowanych ciągów niż oryginałów, łącznie w poniższych przypadkach testowych. program_size
to rozmiar w bajtach kodu źródłowego programów kompresujących i dekompresujących. Kod dzielony między nimi musi być policzony tylko raz.
Na przykład, jeśli istnieje 10 przypadków testowych, a program 100-bajtowy zapisał 5 bajtów na 7 przypadków testowych, po 10 na 2 z nich, ale ostatni przypadek testowy był o 2 bajty dłuższy, rozwiązanie uzyskałoby wynik 5,3. ( (7 * 5 + 10 * 2 - 2) / sqrt(100) = 5.3
)
Przypadki testowe
tacocat
toohottohoot
todderasesareddot
amanaplanacanalpanama
wasitacaroracatisaw?
Bob
IManAmRegalAGermanAmI
DogeeseseeGod
A Santa at NASA
Go hang a salami! I'm a lasagna hog.
Zasady
- Obowiązują standardowe luki.
- Kompresja musi działać na wszystkich drukowanych ciągach tekstowych ASCII (bajty 32-126 włącznie), a nie tylko na palindromach. Jednak tak naprawdę nie musi oszczędzać miejsca na żadne dane wejściowe.
- Wyjściem może być dowolna sekwencja bajtów lub znaków, niezależnie od ich implementacji lub wewnętrznej reprezentacji (ciągi, listy i tablice są na przykład fair game). Jeśli kodujesz do UTF-8, licz bajty, a nie znaki. Szerokie ciągi znaków (np. UTF-16 lub UTF-32) są niedozwolone, chyba że jedynymi możliwymi zastosowanymi punktami kodowymi są między 0 a 255.
- Wbudowane kompresje / dekompresje są niedozwolone.
Ze względu na naszą przyjemność publikuj skompresowane ciągi wraz z kodem źródłowym.
AKTUALIZACJA 1: Punktacja została zmieniona z total_bytes_saved / program_size
na total_bytes_saved / sqrt(program_size)
, aby zwiększyć wagę do lepszej kompresji, a mniej do agresywnego golfa. Dostosuj odpowiednio swoje wyniki.
AKTUALIZACJA 2: ustalona wasitacaroraratisaw?
nawasitacaroracatisaw?
[32-126]
jest
1000 *
część była naprawdę potrzebna, i nie, nie sądzę, że sprawi, że wynik będzie bardziej „satysfakcjonujący”;)
wasitacaroraratisaw?
to kontrprzykład