Twoim zadaniem jest wydrukowanie następującej grafiki ASCII:
_ _ _______ _
| | | | (_______) _ | |
| |__ | | ____ ____ ____ _ _ _____ ____ ___| |_ ____ ____| |
| __)| |/ _ | _ \| _ \| | | | | ___) / _ |/___) _)/ _ )/ ___)_|
| | | ( ( | | | | | | | | |_| | | |____( ( | |___ | |_( (/ /| | _
|_| |_|\_||_| ||_/| ||_/ \__ | |_______)_||_(___/ \___)____)_| |_|
|_| |_| (____/
Pamiętaj, że to jest gra w golfa , więc wygrywa kod z najmniejszą liczbą bajtów. Powodzenia.
code-golf
string
kolmogorov-complexity
Oliver Ni
źródło
źródło
|()/\_
co prowadzi do zupełnie różnych form kompresji. Wcześniej mieliśmy podobne wyzwania związane ze sztuką ASCII, ale chciałbym, aby to pytanie zostało uruchomione, aby sprawdzić, czy ktoś korzysta z geometrii. Z drugiej strony nie jest to nadzwyczaj niezwykłe, a masz rację, nie potrzebujemy wielkanocnej zawieszki.Odpowiedzi:
Bubblegum, 130 bajtów
Wypróbuj online.
Skompresowane za pomocą
zopfli --deflate --i10000
.źródło
JavaScript (ES6),
377373360359345 bajtówDzięki @Neil za jednobajtowe oszczędności i @ edc65 za kolejne 14!
Pomyślałem, że dam temu szansę. Kompresuje typowe powtarzające się wzory w tekście.
_____
(5 znaków podkreślenia) jest przechowywany jako_5
5
| | | | |
(5|
wzoru) jest przechowywany jako~5
źródło
=>
._
s._
ze związkiem_
następnie ile istnieją w biegu~1
lub_2
nie wydaje się tego warte. (Dlaczego|2
na przykład nie użyć ?)BinaryFuck ,
565378 bajtówZasadniczo przechowuje znaki użyte w tablicy, a następnie nawiguje po tablicy, odpowiednio je drukując. Obecnie dość długi, skróci go.
Oto nielepszy kod:
EDYCJA: zmieniając kolejność znaków w komórkach, zapisałem 186 bajtów!
źródło
1
. Podaj link do interpretera i zrzut heksowy kodu źródłowego, aby Twoje wyniki mogły zostać odtworzone.JavaScript (ES6), 380 bajtów
Dla kompletności to mój wysiłek, aby użyć innej metody kompresji, chociaż jak się okazuje, nie jest ona tak wydajna jak kodowanie długości przebiegu. Każda cyfra oznacza, że ostatnie N już wygenerowanych znaków jest powtarzanych. Kolejne cyfry mogą powtarzać już powtarzające się znaki, np.
| 23
Zamienia się w| | |
. Chciałbym tylko skompresować serię trzech postaci.źródło
C,
517427407 bajtówUngolfed Wypróbuj online
źródło
JavaScript, 297 bajtów
Proste kodowanie dziesięciu najbardziej znanych (o ile wiem) podciągów. Nie są uporządkowane z powodu nakładania się; mój koder (poniżej) musi zobaczyć np.
'_ '
i' _'
wcześniej' '
.To zajmuje ciąg i tablicę podciągów do zakodowania i zwraca a) zakodowany ciąg b) listę potencjalnych następnych oszczędności c) liczbę dotychczas zapisanych bajtów.
źródło
𝔼𝕊𝕄𝕚𝕟, 72 znaki / 209 bajtów
Try it here (Firefox only).
Przynajmniej liczba znaków jest świetna, ale nie możemy użyć niestandardowej strony kodowej. To tylko dekompresja LZString. Pracuję również nad innym rozwiązaniem - więcej na ten temat później.
źródło
Perl 5, 286 bajtów
perl -M5.01 happy.pl
, gdziehappy.pl
jest:Dzięki Dom Hastings (w komentarzu tutaj) za pomysł, który oszczędził mi dwa bajty i doprowadził do kolejnego mojego pomysłu, który oszczędził cztery kolejne.
źródło
L
jako skrótu|_
;-)Python 2,
343328316 bajtówTo rozwiązanie nie korzysta z funkcji dekompresyjnych ani innych importów.
Wersja do odczytu:
Używa wersji kodowania długości przebiegu z 3 bitami dla symbolu z zestawu „\ n _ | () /”. Pozostała część bajtu jest długością, ale ograniczyłem długość do 10 i zmanipulowałem ją tak, aby wyniki były znakami do wydruku, które są poprawne w łańcuchu pythonowym bez żadnych znaków ucieczki.
Zastąpienie ciągu odpowiadającego „|” pojedynczemu znakowi w zakodowanych danych pozwala zaoszczędzić jeszcze kilka bajtów.
Usunąłem końcowe spacje w liniach 1 i 5, które mogą nieco wyginać reguły, ale wydają się praktyczne.
Ten program generuje spakowane dane:
źródło
Python 2, 159 bajtów
To źródło zawiera znaki niedrukowalne, więc jest prezentowane jako zrzut heksadecymalny, który można dekodować
xxd -r
.źródło
Rakieta,
367364 bajtówNie golfił
Na podstawie podobnego wyzwania odpowiedziałem .
źródło
/// ,
282279 bajtówUlepszenie: Zauważyłem, że
//
poleceń zastępujących jest zbyt wiele , więc postanowiłem je również skompresowaćm
, co pozwoliło mi zaoszczędzić 3 bajty.Powtarzaj kompresję najczęściej podciąganego materiału.
Trzynasta generacja, 282 bajtów
Wypróbuj online!
Pierwsza generacja, 486 bajtów
Bez kompresji. Uciekł
/
i\
.Wypróbuj online!
Druga generacja, 402 bajty
Skompresowano dwie spacje do
a
. Te/a/ /
środki „zastąpić wszystkie wystąpieniaa
dwóch przestrzeniach”.Wypróbuj online!
Trzecia generacja, 369 bajtów
Kompresowany
__
dob
. Na/b/__/
początku oznacza „zamień wszystkie wystąpieniab
na__
”.Wypróbuj online!
Czwarta generacja, 339 bajtów
Kompresowany
|
doc
. Na/c/ |/
początku oznacza „zamień wszystkie wystąpieniac
na|
”.Wypróbuj online!
Reszta reguł kompresji
Lista reguł kompresji:
a
.__
dob
.|
doc
.aa
dod
.bb
doe
.cc
dof
.dd
dog
.|c
doh
.\/
doi
. Zarówno zasady, jak\
i/
zasady są dalej unikane.b_
doj
.|a
dok
._
dol
.//
dom
.Jak widać, istnieją nakładające się reguły kompresji. Na przykład,
g
koduje,dd
który koduje,aaaa
który koduje 8 spacji.źródło
Twoja mama (niekonkurująca), 331 bajtów
Dekoduj ciąg i rozpakuj go za pomocą kompresora Jelly
źródło
Python 3, 377 bajtów
podobny do odpowiedzi w javascript, używał RLE plus kilka zamienników dla typowych podciągów.
Myślę, że trochę przesadziłem z wymianą rzeczy, prawdopodobnie nie pomogłem tak bardzo, ale no cóż.
źródło
JavaScript (ES6), 354 bajty
Kolejna próba. Niestety nie tak wydajna jak długość cyklu.
Przechowuje kilka liczb podstawowych 36 w pierwszym ciągu, oddzielonych
i
!
separatorem. Następnie zastępuje liczby (wraz z!
) reprezentacjami liczb podstawowych 4. Zastępuje wszystkich znaków 0, 1-i 2 w liczbie baza-4 i_
,|
, odpowiednio, oraz wszystkie 3'S zastąpione elementami drugiego łańcucha sekwencyjnie.źródło
Python 3, 263 bajty
Wstępne przejście przy użyciu wbudowanych funkcji.
dodano kilka dodatkowych cytatów i podziałów wierszy, aby uniknąć przewijania w poziomie tylko w celach wyświetlania (nie liczone w wyniku)
źródło
repr()
surowego łańcucha był znacznie dłuższy niż ascii85CJam, 229
Brak funky i brak wbudowanej kompresji :)
Wypróbuj online
źródło
Lua, 353 bajtów
Program:
Dzięki @jrich za kompresję.
źródło
Rubinowy,
271262248 bajtówWypróbuj tutaj
źródło
Vim ,
374365326319313311 klawiszy9 naciśnięć klawiszy dzięki @Dr Green Eggs i Ham DJ .
Prawdopodobnie można grać w golfa za pomocą
:nn
?źródło
<number>a <esc>
dużo. Jeśli robiszyl
na spacji, możesz to zastąpić<number>p
. To powinno zaoszczędzić około 8. 2. Można zastąpićea
zA
. Prawdopodobnie możesz wziąć jeszcze więcej, jeśli zmienisz swoje podejście, ale to są szybkie porady, które widzę._
i|
etc?:s
zastępuje tylko w jednej linii. Chcesz:% s
. Możesz także zapisać niektóre naciśnięcia klawiszy, wykonując:im
(imap) zamiast wyszukiwania i zamiany. (Może być konieczne użycie ctrl-v lub ctrl-q do mapowania do spacji):im
golfa może być jeszcze tylko kilka bajtów.JavaScript (ES6)
464352 bajtyWypróbuj tutaj!
źródło
HTML,
482481475 bajtówźródło
05AB1E , 171 bajtów
Wypróbuj online.
Wyjaśnienie:
Zobacz moją wskazówkę 05AB1E (rozdział Jak kompresować duże liczby całkowite? I Jak kompresować listy liczb całkowitych? ), Aby zrozumieć, jak działają skompresowane liczby całkowite i lista Base-8.
źródło
C (gcc) ,
280279 bajtówWypróbuj online!
Zniszczony
Definiujemy alfabet składający się z 8 symboli
" _|/\\()\n"
i kompresujemy dane, pakując dwa symbole na bajt zgodnie z jego indeksem w alfabecie, z pierwszym symbolem w bitach 0..2, a drugim w 3..5. Bit 6 jest ustawiony tak, aby wynikowy bajt znalazł się na terytorium ASCII do wydruku. Następnie na skompresowanym łańcuchu uruchamiany jest prosty RLE. Jeśli symbol w ciągu występuje więcej niż dwa razy z rzędu, jest on przechowywany jako para znaków, przy czym pierwszy zawiera długość przebiegu plus 32 (zestaw bitów 5), a drugi sam symbol.Wypróbuj online!
źródło
JavaScript ES6, 314 bajtów
Zawiera niezadrukowane bajty. Używa czarnej magii JS do uruchomienia. Jeśli
console.log()
jest potrzebna, aby odpowiedź była poprawna, liczba bajtów wyniesie 327.To był ogromny ból, aby dobrze się postarać i nie mogłem się pozbyć
.slice(0,-2)
:( Zedytujęjutro w wyjaśnieniu, kiedy będę mniej zmęczony.
Zastąpił każdy bajt odpowiednią wartością szesnastkową, aby fragment kodu mógł być uruchomiony
źródło
JavaScript,
294292 bajtówTo ... jest dosłownie tylko kodowaniem sztuki ... z tym ...
Jeśli
console.log()
jest to wymagane, liczba bajtów wynosi307305 bajtów.294-> 292, -2B do kodowania
\n
do7
.źródło