Twoim zadaniem dzisiaj jest wynalezienie kompresora tekstu.
Zadanie
Napisz dwie funkcje:
Paker jest funkcją, która przyjmuje ciąg znaków ASCII (U, U + 0000 + 007F) i wysyła unikodowego (U + 0000 U + 10FFFF) zawierający najmniejszą liczbę znaków możliwe.
Unpacker to funkcja, która akceptuje zakodowany ciąg Unicode i wyprowadza dokładnie oryginalny ciąg ASCII.
Wkład
Jedynym autoryzowanym wejściem jest ciąg ASCII (dla pakującego) i spakowany ciąg Unicode (dla rozpakowacza). Bez wkładu użytkownika, bez połączenia z Internetem, bez użycia systemu plików.
Twoje funkcje mogą mieć dostęp do tej listy angielskich słów . Możesz użyć tej listy jako lokalnego pliku txt lub skopiować jej zawartość do kodu źródłowego jako ciąg lub tablicę ciągów .
W swoich funkcjach nie można zakodować na stałe poniższych fragmentów.
Wydajność
Jedynym autoryzowanym wyjściem dla obu funkcji jest ciąg.
Dane wyjściowe rozpakowywacza muszą zawierać dokładnie takie same znaki, jak dane wejściowe pakowacza.
Twoje dane wejściowe i wyjściowe mogą korzystać z dowolnego kodowania znaków obsługującego wszystkie znaki Unicode (UTF-8/16/32, GB18030, ...), ponieważ wynik będzie zależał tylko od liczby znaków Unicode na wyjściu. Proszę jednak dokładnie określić, jakiego kodowania używasz.
Aby policzyć liczbę znaków Unicode w danych wyjściowych, możesz użyć tego narzędzia: http://mothereff.in/byte-counter
Punktacja
Wpis musi umożliwiać pakowanie i rozpakowywanie 10 następujących fragmentów tekstu (które wziąłem na tym forum).
Twój wynik będzie sumą rozmiarów 10 spakowanych ciągów znaków (w znakach Unicode) + rozmiaru twoich dwóch funkcji (również w znakach Unicode)
Nie licz rozmiaru słownika, jeśli go używasz.
Podaj we wpisach „wynik” każdego fragmentu i jego zapakowanej wersji.
Najniższy wynik wygrywa.
Dane
Oto fragmenty do zakodowania w celu obliczenia wyniku:
Tekst piosenki 1: Rick Roll (1870b): Nie jesteśmy obcy w kodowaniu golfa, znasz zasady i ja też
Nie jesteśmy obcymi ludźmi do kochania Znasz zasady i ja też Myślę o pełnym zaangażowaniu Nie dostałbyś tego od żadnego innego faceta Chcę ci tylko powiedzieć, jak się czuję Muszę cię zrozumieć Nigdy się nie poddawaj Nigdy cię nie zawiodę Nigdy nie będę biegał i cię opuszczał Nigdy nie sprawię, że będziesz płakać Nigdy się nie pożegnam Nigdy nie kłamię i nie skrzywdzę cię Znamy się od tak dawna Twoje serce boli, ale Jesteś zbyt nieśmiały, żeby to powiedzieć Wewnątrz oboje wiemy, co się dzieje Znamy tę grę i zagramy w nią A jeśli zapytasz mnie, jak się czuję Nie mów mi, że jesteś zbyt ślepy, żeby to zobaczyć Nigdy się nie poddawaj Nigdy cię nie zawiodę Nigdy nie będę biegał i cię opuszczał Nigdy nie sprawię, że będziesz płakać Nigdy się nie pożegnam Nigdy nie kłamię i nie skrzywdzę cię Nigdy się nie poddawaj Nigdy cię nie zawiodę Nigdy nie będę biegał i cię opuszczał Nigdy nie sprawię, że będziesz płakać Nigdy się nie pożegnam Nigdy nie kłamię i nie skrzywdzę cię (Ooh, poddaj się) (Ooh, poddaj się) (Ooh) Nigdy nie dam, nigdy nie dam (Poddaj się) (Ooh) Nigdy nie dam, nigdy nie dam (Poddaj się) Znamy się od tak dawna Twoje serce boli, ale Jesteś zbyt nieśmiały, żeby to powiedzieć Wewnątrz oboje wiemy, co się dzieje Znamy tę grę i zagramy w nią Chcę ci tylko powiedzieć, jak się czuję Muszę cię zrozumieć Nigdy się nie poddawaj Nigdy cię nie zawiodę Nigdy nie będę biegał i cię opuszczał Nigdy nie sprawię, że będziesz płakać Nigdy się nie pożegnam Nigdy nie kłamię i nie skrzywdzę cię Nigdy się nie poddawaj Nigdy cię nie zawiodę Nigdy nie będę biegał i cię opuszczał Nigdy nie sprawię, że będziesz płakać Nigdy się nie pożegnam Nigdy nie kłamię i nie skrzywdzę cię Nigdy się nie poddawaj Nigdy cię nie zawiodę Nigdy nie będę biegał i cię opuszczał Nigdy nie sprawię, że będziesz płakać Nigdy się nie pożegnam Nigdy nie kłamię i nie skrzywdzę cię
2: The Golfer (412b): Gra w golfa ASCII-art
„\. . |> 18 >>
\. „. |
O >>. „o |
\. |
/ \. |
/ /. ” |
jgs ↑ ^^^^^^^^^^
3: liczba diamentów (233b): wydrukuj ten diament
1
121
12321
1234321
123454321
12345654321
1234567654321
123456787654321
12345678987654321
123456787654321
1234567654321
12345654321
123454321
1234321
12321
121
1
4: alfabet cztery razy (107b): Wydrukuj alfabet cztery razy
ABCDEFGHIJKLMNOPQRSTU VWXYZ qwertyuiopasdfghjklzxcvbnm pyfgcrlaoeuidhtnsqjkxbmwvz zyxwvutsrqponmlkjihgfedcba
5: Tekst Old McDonald's (203b): Funkcja Old MacDonald
Stary MacDonald miał farmę, EIEIO, A na tej farmie miał krowę, EIEIO, Z muczeniem tutaj i muczeniem tutaj, Tutaj muczenie, muczenie, wszędzie muczenie muczenie, Stary MacDonald miał farmę, EIEIO!
6: Rock around the clock lyrics (144b): Rock Around the Clock
1, 2, 3 godzina, 4 godzina rock, 5, 6, 7 godzina, 8 godzina rock, 9, 10, 11 godzina, 12 godzina rock, Będziemy dziś kołysać się przez całą dobę.
7: Hello World (296b): Powiedz światu „Hello” w sztuce ASCII
_ _ _ _ _ _ _ _
| | | | ___ | | | ___ __ _____ _ __ | | __ | | |
| | _ | | / _ \ | | / _ \ \ \ / \ / / _ \ | „__ | | / _` | |
| _ | __ / | | (_) | \ VV / (_) | | | | (_ | | _ |
| _ | | _ | \ ___ | _ | _ | \ ___ () \ _ / \ _ / \ ___ / | _ | | _ | \ __, _ (_)
| /
8: Irlandzkie błogosławieństwo (210b): Stare irlandzkie błogosławieństwo
Niech droga wzniesie się, by cię poznać Niech wiatr będzie zawsze na twoich plecach Niech słońce świeci ciepło na twoją twarz Deszcze padają na twoje pola I dopóki się nie spotkamy Niech Bóg trzyma cię w zagłębieniu swojej ręki
9: Tekst piosenki old lady (1208b): There Was an Old Lady
Była starsza pani, która połknęła muchę. Nie wiem, dlaczego połknęła tę muchę, Może umrze. Była starsza pani, która połknęła pająka, Kręciło się to w niej i igrało. Połknęła pająka, aby złapać muchę, Nie wiem, dlaczego połknęła tę muchę, Może umrze. Była starsza dama, która połknęła ptaka, Jak absurdalne jest połykanie ptaka. Połknęła ptaka, aby złapać pająka, Połknęła pająka, aby złapać muchę, Nie wiem, dlaczego połknęła tę muchę, Może umrze. Była starsza pani, która połknęła kota, Wyobraź sobie, że połkniesz kota. Połknęła kota, aby złapać ptaka, Połknęła ptaka, aby złapać pająka, Połknęła pająka, aby złapać muchę, Nie wiem, dlaczego połknęła tę muchę, Może umrze. Była starsza pani, która połknęła psa, Co za świnia do połknięcia psa. Połknęła psa, aby złapać kota, Połknęła kota, aby złapać ptaka, Połknęła ptaka, aby złapać pająka, Połknęła pająka, aby złapać muchę, Nie wiem, dlaczego połknęła tę muchę, Może umrze. Była starsza pani, która połknęła konia, Oczywiście umarła.
10: adres gettysburg (1452b): Jak losowy jest adres Gettysburg
Cztery dziesiątki i siedem lat temu nasi ojcowie zrodzili na tym kontynencie nowy naród, poczęty w wolności i poświęcony twierdzeniu, że wszyscy ludzie są równi. Teraz jesteśmy zaangażowani w wielką wojnę domową, sprawdzając, czy ten naród lub jakikolwiek naród tak pomyślany i oddany może przetrwać długo. Spotkaliśmy się na wielkim polu bitwy tej wojny. Przybyliśmy, aby poświęcić część tego pola, jako ostateczne miejsce spoczynku dla tych, którzy tutaj oddali życie, aby ten naród mógł żyć. Zasadniczo i słusznie powinniśmy to zrobić. Ale w szerszym znaczeniu nie możemy poświęcić, nie możemy poświęcić, nie możemy poświęcić tej ziemi. Odważni ludzie, żywi i martwi, którzy tu walczyli, poświęcili ją, znacznie ponad naszą słabą moc dodawania lub niszczenia. Świat niewiele zauważy, ani długo nie zapamięta tego, co tu mówimy, ale nigdy nie zapomni, co tutaj zrobili. To my, żywi, powinniśmy poświęcić się tutaj niedokończonemu dziełu, które walczyli tutaj tak szlachetnie. Raczej jesteśmy tutaj, aby poświęcić się wielkiemu zadaniu, które przed nami stoi - że od tych czcigodnych umarłych poświęcamy się temu celowi, dla którego oddali ostatnią miarę oddania - że tutaj bardzo postanawiamy, że ci umarli nie będą umarli na próżno - aby naród ten, pod Bogiem, narodził się na nowo w wolności - i aby lud rządził ludem, bo lud nie zginie z ziemi.
Łącznie (nieskompresowane): 6135 znaków / bajtów.
Baw się dobrze!
private static final String RICK_ROLL_RETURN = "We're no strangers to love...