Wyzwanie: Wyprodukuj następujący wynik, używając jak najmniejszej liczby znaków:
_ _ _ _ _ _ _
| | | | ___| | | ___ __ _____ _ __| | __| | |
| |_| |/ _ \ | |/ _ \ \ \ /\ / / _ \| '__| |/ _` | |
| _ | __/ | | (_) | \ V V / (_) | | | | (_| |_|
|_| |_|\___|_|_|\___( ) \_/\_/ \___/|_| |_|\__,_(_)
|/
Zasady i ograniczenia:
Nie możesz używać FIGLet ani żadnych podobnych narzędzi. (W przeciwnym razie
figlet Hello, world!
byłoby to trywialne i prawie bezkonkurencyjne rozwiązanie).Twój program musi składać się wyłącznie z drukowalnych znaków ASCII - w szczególności punktów kodowych 9 (TAB), 10 (LF) i 32 - 126. (Jeśli twój język / system operacyjny wymaga podziału linii CRLF, możesz użyć tych zamiast zwykłych LF). Tak , niestety dyskwalifikuje to każdy język, który wymaga znaków spoza ASCII (lub danych nietekstowych) jako części składni.
Dane wyjściowe muszą wyglądać dokładnie tak jak w powyższym przykładzie. Jeśli chcesz, możesz jednak dołączyć dodatkowe białe znaki na wyjściu. Możesz założyć 8-znakowe odstępy między znakami (lub natywne ustawienie domyślne wybranej platformy, jeśli ma spójne ustawienie).
Ps. Aby ustawić tę wartość, wymyśliłem Perl o 199 znakach. Nie opublikuję go jednak na wypadek, gdyby ktoś wymyślił to samodzielnie. (Ponadto jest to trochę tandetne.) Oczywiście nie powinno to zniechęcać do publikowania własnego rozwiązania, nawet jeśli jest ono dłuższe.
Aktualizacja: Teraz, gdy Han pobił go o jeden znak, oto moje tandetne rozwiązanie Perla z 199 znakami:
use Compress'Zlib;say uncompress unpack u,'M>-I]BT$*`S$,`^]YQ=R:0,&_Z<DP?8@?WVQJ]E2J"%E$$@)R(/(/MCJ*\U!OM`Z#=5`4Y>6M=L\L%DMP&DB0V.4GQL&OOGB$4:%`4TT4!R8O-Z(^BTZWNV?>F86K:9+""-35*-LNC:T^D:_$#%^`";"DD0'
Jest bardzo podobny do rozwiązania DC (i wszystkich innych rozwiązań opartych na zlib / gzip w różnych językach), tyle że użyłem uuencoding zamiast base64 dla skompresowanego tekstu i kilku innych drobnych sztuczek golfowych.
Aktualizacja 2 : Myślę, że nadszedł czas, aby oficjalnie zaakceptować zwycięzcę. Pierwsze miejsce zajmuje kod PHP konsolenfreddy , ponieważ bez względu na liczbę znaków, jest on jak dotąd najkrótszy. W rzeczywistości połączenie go ze zoptymalizowanym strumieniem DEFLATE z mojego kodu Perla o 199 znakach daje jeszcze krótsze rozwiązanie o 176 znakach:
<?=gzinflate(base64_decode("fYtBCgMxDAPvecXcmkDBv+nJMH2IH99savZUqghZRBICciDyD7Y6ivNQbwOg3VQFOXlrXbPLBZLcBpIkNjlJ8bBr754hFGhQFNNFAcmLzeiPotOt7tn3plq2mSwgjU1SjbLo2tPpGvxAxfgA"));
Uważam jednak, że han zasługuje na specjalne wyróżnienie za zbliżenie się bez użycia wcześniej napisanych narzędzi dekompresyjnych. Gratulacje dla was obojga i szczęśliwego nowego roku dla wszystkich!
źródło
Odpowiedzi:
Stax , 137 bajtów
Uruchom i debuguj
Działa to w ten sposób.
0
s, po których następuje a,1
są tłumaczone na znaki spacji.1
s są zastąpione spacjami.źródło
Perl 5.10 - 195
198202203znakówOto wpis, który nie wymaga żadnych bibliotek poza podstawowym dopasowaniem wyrażeń regularnych. Zakodowany ciąg ma 131 znaków, a kod do jego zdekodowania i wydrukowania zajmuje 64 znaki (przy założeniu braku nowego wiersza na końcu źródła). Chodzi o to, aby reprezentować wspólne 3-znakowe łańcuchy małymi literami.
Koder jest teraz znacznie dłuższy i niestety nie bardzo czytelny. Podstawową ideą jest użycie programowania dynamicznego, aby znaleźć najkrótsze kodowanie dla każdej linii, biorąc pod uwagę stały zestaw podstawień ciągów. Ciąg podstawień w ostatnim wierszu został zbudowany metodą prób i błędów i możliwe jest, że inny ciąg podstawień może prowadzić do krótszego programu niż powyżej.
Jeden trick jest to, że niektóre podstawienia są krótsze niż 3 znaków: Ze względu na sposób Perla
substr
prac,x
zastępuje się wyrazami "_
” iy
„_
”. To ostatnie jest konieczne, ponieważ\w
w wyrażeniach regularnych dopasowuje „_
”, które jest następnie zastępowane przez „(_)
”.źródło
print
przezsay
say
, musisz wykonaćuse 5.010;
skrypt lub uruchomić go jako jednowierszowyperl -E 'script here'
. Pierwszy z nich wydłuża kod, a drugi nie jest odpowiedni dla skryptu wieloliniowego. Przegapiłem coś?-E
Nie liczy się ilość char.s''...'
zamiast$_=q!...!
; pamiętaj tylko, by uciec od pojedynczego cytatu. Z tym isay
zamiastprint
(i pomijając ostatnią nową linię), sprowadzam to do 198 znaków.#
długich serii białych znaków i udało mi się zmniejszyć twoje rozwiązanie do 190 znaków. Zastanawiam się, czy zejście poniżej 184 znaków jest możliwe - pobiłoby to wszystkie dotychczas skompresowane rozwiązania zlib.Brainfuck - 862 znaków:
źródło
[<---->---]
pierwszej linii. (Prawdopodobnie w końcu by to się skończyło, ale nie czekałem na to wystarczająco długo).Python (2.x), 194 znaki
źródło
JavaScript,
273265264 znaków:(
źródło
return
, -1 char :)Ta odpowiedź jest dłuższa niż tylko wydrukowanie łańcucha; jednakże, dla zabawy, oto:
Python, 485 znaków ☺
Ponieważ mam jedną z najkrótszych reprezentacji skompresowanego tekstu ASCII, muszę mieć najdłuższy pasek przewijania w moim kodzie! To zwycięstwo! :)
źródło
PHP,
194189 znakówZasadniczo jest taki sam jak odpowiedź na Python i Perl, nieco krótszy
źródło
php -r'=...'
Sztuczka nie wydają się działać dla mnie, ale może po prostu użyć<?=...
do 184 znaków. Ponadto wydaje się, że twoja produkcja ma dodatkową przestrzeń, w której spotykają sięr
il
.-r'=..'
. sposóbphp -r
nie liczyć? Jest zawarty w moich 189 znakach ...-r
Przełącznik PHP jest jednak czymś na marginesie, ponieważ oprócz przyjmowania kodu jako parametru i uruchamiania go, modyfikuje również nieco środowisko analizowania w porównaniu do uruchamiania kodu z pliku. Byłbym skłonny liczyć to jako 2 dodatkowe znaki - co nawiasem mówiąc, to nawet z<?
.J,
167160znaków (47 + 113)Kolejny komunikat o braku wbudowanej kompresji. Wykorzystuje dość proste kodowanie o zmiennej długości, kodując każdy znak jako serię 1 bitów i oddzielając znaki przez 0 bitów. Skompresowany ciąg ma zaledwie 113 znaków.
źródło
Python (2.7.x), 218 znaków
Całkiem proste ... niezbyt zadowolone z tej próby.
źródło
Bash,
199196193 znakówWystarczająco blisko...
EDYCJA: do 193!
źródło
gzip -d
jezcat
.bash,
196192źródło
Perl, 230 znaków
Jest to w zasadzie to samo, co moja odpowiedź w języku Python. Chciałbym zobaczyć wersję 199 znaków. Brzmi jak magia.
źródło
Perl,
294290 bajtów.Sam skompresowany ciąg to
151130 bajtów.To nie jest krótkie, ale pisanie było naprawdę fajne.
źródło
Perl, 346 bajtów
Sam skompresowany ciąg ma 111 bajtów.
Próbując zrozumieć, co
key= (0,(1,((((7,5),(6,(8,(11,(9,10))))),(4,3)),2)))
robi python , ostatecznie stworzyłem bardzo podobną wersję perla.źródło
PHP 590
oczywiście, nie próbuję wygrać, po prostu zainteresowałem się wypróbowaniem innego schematu kompresji, chociaż nie jest nawet w stanie pokonać prostszego rozwiązania PHP z 302 zwykłym tekstem polegającego na kopiowaniu i wklejaniu
działa jako mapa bitowa na 10 kanałach
„golfa”
czytelny
źródło
Pylongolf2, 300 bajtów
Nie mogłem znaleźć żadnych klasycznych metod kodowania, więc prawdopodobnie nie konkuruję.
źródło
Golf-Basic 84, 325
Zakładając, że kalkulator może drukować znaki odwrotne, ukośniki odwrotne, pojedyncze potoki i podkreślenia.
źródło
HTML + JS (223 znaki Unicode)
Dla żartu:
Uwaga: musisz zapisać go w pliku HTML „UTF-8 with BOM”.
źródło
PowerShell , 220 bajtów = skrypt: 9 + archiwum: 211
Wypróbuj online!
Skrypt Powershell do utworzenia archiwum
t
(patrz TIO):źródło