Wyzwanie:
Twoim wyzwaniem (jeśli zdecydujesz się je zaakceptować) jest skompresowanie i rozpakowanie 5 MB „ Kompletnych dzieł Williama Szekspira ”, które można znaleźć tutaj: http://www.gutenberg.org/cache/epub/100/pg100.txt
(MD5: a810f89e9f8e213aebd06b9f8c5157d8
)
Zasady:
- Państwo musi wziąć wejście za pośrednictwem
STDIN
i poprzez wyjścieSTDOUT
... - ... i musisz podać identyczny wynik dekompresji na wejściu.
- (To znaczy, że musisz być w stanie
cat inpt.txt | ./cmprss | ./dcmpress | md5
uzyskać taki sam MD5 jak powyżej.) - (Wszystko za pośrednictwem
STDERR
należy odrzucić.)
- (To znaczy, że musisz być w stanie
Państwo musi użyć mniej niż 2048 znaków na kodzie źródłowym całkowitej.- (To nie code-golf. Teraz nie jest liczony w oparciu o długości kodu źródłowego. To
jestwłaśnie zasada, aby utrzymać wszystko skończone). (Weź podzieloną długość całego kodu źródłowego, jeśli go podzieliłeś).
- (To nie code-golf. Teraz nie jest liczony w oparciu o długości kodu źródłowego. To
- Państwo musi być w stanie (teoretycznie) proces podobny wejść zwykłego tekstu zbyt.
- (na przykład twarde kodowania mechanizm, który jest tylko zdolna do wysyłania dostarczona Szekspir wejściowego jest nie do przyjęcia).
- (Skompresowany rozmiar innych dokumentów nie ma znaczenia - pod warunkiem, że zdekompresowany wynik jest identyczny z alternatywnym wejściem.)
- Państwo może użyć dowolnego wyboru języka (S).
- (np. możesz kompresować za pomocą
awk
i dekompresować za pomocąjava
)
- (np. możesz kompresować za pomocą
- Państwo może napisać dwa oddzielne programy lub połączyć je z jakiejś formy „switch”, jak należy.
- (Muszą być wyraźne demonstracje, jak wywoływać tryby kompresji i dekompresji)
- Być może nie używać żadnych zewnętrznych poleceń (poprzez
exec()
).- (Jeśli używasz języka powłoki - przepraszam. Musisz zadowolić się wbudowanymi. Możesz opublikować „niedopuszczalną” odpowiedź ze względu na dzielenie się i przyjemność - ale nie zostanie to ocenione! )
- Być może nie stosować żadnych wbudowanych funkcji lub bibliotek dostarczonych który stwierdził celem jest kompresować danych (takich jak
gz
, etc)- (Zmiana kodowania nie jest w tym kontekście uważana za kompresję. Można tu zastosować pewną dyskrecję. Nie wahaj się argumentować, czy Twoje rozwiązanie jest akceptowalne).
- Spróbuj się dobrze bawić, jeśli zdecydujesz się wziąć udział!
Wszystkie dobre zawody mają obiektywną definicję wygranej; ergo:
- Pod warunkiem przestrzegania wszystkich reguł, najmniejsze skompresowane wyjście (w
STDOUT
bajtach) wygrywa.- (Zgłoś swoje dane wyjściowe za pośrednictwem
./cmprss | wc -c
)
- (Zgłoś swoje dane wyjściowe za pośrednictwem
- W przypadku remisu (identyczne rozmiary wyjściowe) wygrywa najwięcej osób, które uzyskały najwyższe poparcie społeczności.
- W przypadku drugiego losowania (identyczne głosy społeczności) wybiorę zwycięzcę na podstawie całkowicie subiektywnego badania elegancji i czystego geniuszu.
;-)
Jak przesłać:
Sformatuj swój wpis za pomocą tego szablonu:
<language>, <compressed_size>
-----------------------------
<description> (Detail is encouraged!)
<CODE...
...>
<run instructions>
Zachęcam czytelników i autorów do konwersacji poprzez komentarze - uważam, że ludzie mają prawdziwą okazję do nauki i zostania lepszymi programistami dzięki codegolf.stack.
Zwycięski:
Niedługo wyjeżdżam na wakacje: w ciągu kilku najbliższych tygodni mogę (lub nie będę) monitorować zgłoszenia i dobiegną końca do końca 19 września. Mam nadzieję, że będzie to dobra okazja dla ludzi do myślenia i poddania się - oraz do pozytywnego dzielenia się technikami i pomysłami.
Jeśli nauczyłeś się czegoś nowego od uczestniczenia (jako czytelnik lub autor), zostaw komentarz zachęty.
źródło
code-challenge
.Odpowiedzi:
Perl 5, 3651284
Po prostu prosty słownikowy słownik. Analizuje częstotliwość słowa korpusu i używa go do określenia, czy użyć jednego czy dwóch bajtów narzutu na słowo. Używa dwóch specjalnych symboli dla bajtów \ 0 i \ 1, ponieważ nie pojawiają się one w korpusie. Istnieje wiele innych symboli, których można użyć. Nie zostało to zrobione. Nie wykonuje żadnego kodowania huffmana ani żadnego takiego jazzu.
Skrypt kompresji shakespeare.pl:
Skrypt dekompresyjny deshakespeare.pl:
Uruchom używając:
źródło