Spróbujmy zagrać w golfa w ten ascii-art przedstawiający golfistę:
„\. . |> 18 >> \. „. | O >>. „o | \. | / \. | / /. ” | jgs ^^^^^^^ `^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^
Źródło: JGS - http://www.retrojunkie.com/asciiart/sports/golf.htm
Zasady:
- Brak danych wejściowych
- Niedozwolone zasoby zewnętrzne
- Dane wyjściowe muszą być dokładnie tym tekstem, wyświetlanym czcionką monospace (konsola systemu operacyjnego, konsola JS, znacznik HTML <pre>, ...), w tym wiodący i końcowy podział wiersza.
- Dozwolone są otaczające cudzysłowy lub podwójne cudzysłowy (konsola JS dodaje podwójne cudzysłowy, gdy wypisujesz ciąg znaków, to jest w porządku)
Najlepszą odpowiedzią będzie ta, która używa mniej znaków w dowolnym języku.
Baw się dobrze!
Odpowiedzi:
CJam, 62 znaki
Wypróbuj online.
Testowe uruchomienie
Jak to działa
2G#b
konwertuje poprzedni ciąg na liczbę całkowitą, uznając go za liczbę podstawową 65536.128b:c
konwertuje tę liczbę całkowitą z powrotem na ciąg ( 110 bajtów ), uznając ją za liczbę podstawową 128, która~
następnie wykonuje:(notacja karetki)
dzieli ciąg na pary dwóch znaków i wykonuje następujące czynności dla każdej pary: Pop drugi znak ciągu, przekonwertuj go na liczbę całkowitą i powtórz ciąg
" "
wiele razy.Na przykład
".("
staje się". "
, ponieważ kod znaku ASCII(
to 40.Wreszcie,
popycha ciąg znaków
"jgs"
, znak^
powtarza się 7 razy, znak`
, znak^
powtarza się 51 razy i przesuwa wiersz.źródło
Ruby, 107
Myślałem, że faktycznie spróbuję „wygenerować” obraz w kodzie (zamiast korzystać z istniejącej funkcji kompresji):
W tym dosłownym tablicy jest kilka znaków niedrukowalnych.
Oto widok szesnastkowy pliku, aby pokazać także znaki niedrukowalne:
Dzięki Ventero za kilka istotnych ulepszeń! (Zasadniczo zmniejszył kod o 50%).
źródło
6.times{|i|S[i+1]=' '*55+?|}
na zapisaniu 2 znaków.i
więcej niż raz. Dobry chwyt!S.fill{' '*55+?|}
zamiast zaoszczędzić kilka więcej znaków (będziesz musiał zdefiniowaćS
jako['']*7
, zmieńputs
sięputs p,S,p
i odjąć 1 od wszystkich współrzędnych y chociaż). Następnie, używając varargs w f (def f(*p,c)
), możesz zapisać[]
wywołania funkcji. Och, i możesz rzucić()
wokóły,x
.S
jednowymiarowy, możesz zapisać kolejne 55 znaków;) Oto kod, jeśli nie chcesz tego zrobić sam.bash + iconv + kod maszynowy DosBox / x86 (
104979695 znaków)Sugeruję, aby umieścić to w skrypcie w pustym katalogu, jest prawie pewne, że wklejenie go w terminalu zniszczy wszystko; nawet lepiej, możesz pobrać skrypt tutaj gotowy.
Oczekiwany wynik:
Jak to działa
Część bash to tylko program uruchamiający, który używa
iconv
do „dekompresji”.com
pliku ze znaków UTF-8 skryptu i uruchamia go za pomocą DosBox.Zauważ, że stanowi to pewne ograniczenie treści, ponieważ nie wszystkie sekwencje wejściowe można interpretować jako UCS-2
iconv
bez narzekania; na przykład z jakiegoś powodu wiele operacji związanych zbx
rejestrem spowodowało spustoszenie w zależności od miejsca, w którym ich użyłem, więc musiałem kilka razy obejść ten problem.Teraz rzeczą Unicode jest po prostu skorzystanie z zasad „liczby znaków”; rzeczywisty rozmiar (w bajtach) skryptu jest znacznie większy niż oryginalny
.COM
plik.Wyodrębniony
.com
plik toi ma długość 108 bajtów. Źródłem NASM jest:
Wszystko to jest po prostu dekompresorem,
compressed.dat
którego format jest następujący:compressed.dat
z kolei jest generowany przy użyciu skryptu Python z oryginalnego tekstu.Całość można znaleźć tutaj .
źródło
Python, 156
Wykorzystuje formatowanie ciągów z odstępami do podstawowej kompresji.
źródło
PHP, 147
Działa to w wierszu poleceń i wyprowadza bezpośrednio do konsoli:
źródło
Perl - 127
129130132135137145Podziękowania dla Ventero i m.buettner za pomoc w mojej optymalizacji RegEx.
źródło
s/\d+(?!8?>)/%$&s/rg
/\d++(?!>)/
GCC C - 203 bajty
Pomyślałem, że będę się z tym dobrze bawić. To kompiluje się w mojej wersji MinGW i wyświetla oczekiwany tekst.
Dodano spację dla przejrzystości.
Żadna z witryn do wklejania kodu online nie zezwala na stosowanie znaków jednobajtowych spoza zakresu ASCII, więc musiałem uciec przed nimi, aby przesłać przykład. Ale poza tym jest identyczny. http://codepad.org/nQrxTBlX
Zawsze możesz to zweryfikować za pomocą własnego kompilatora.
źródło
LOLCODE, 590 znaków
Bo LOLCODE iz perfik language 4 golfin: iz easy 2 obejmuje zaciemnienie i wcale nie jest pełne.
Im pritee sure dis werkz, ale Ian ma interpretr LOLCODE http://repl.it wydaje się, że 2 nie jest funcshuns.
(Tranzlashun hojnie dostarczone przez roboty http://speaklolcat.com , bo I doan speakek lolcat)
Wersja kodu z wcięciem, odstępami i komentarzami (komentarze LOLCODE zaczynają się od BTW):
źródło
Python -
205203197Ciąg
i
przeplata znaki w sztuce ascii z ich multiplikatami, reprezentowanymi jako znaki, wszystkie w odwrotnej kolejności. Ponadto oszczędzam trochę miejsca, używając „!” zamiast „G” w,i
a następnie po prostu go zastępując.źródło
Python (145)
Nie bardzo oryginalne, wiem.
źródło
JavaScript ( ES6 )
193175 bajtówEdycja: Zmodyfikowano RegPack v3, aby zachować nowe wiersze, użyj
for in
pętli, aby zapisać 3 bajty, i usunięto eval dla niejawnego wyjścia konsoli.Korzystanie z kompresji Unicode xem: 133 znaków
źródło
ES6, 155 znaków
Po prostu próbuję podejść anorher:
Uruchom to w konsoli JS Firefoksa.
Każdy znak Unicode ma następującą postać: \ uD8 [kod ascii] \ uDC [liczba powtórzeń].
(Ciąg znaków Unicode wykonany za pomocą: http://jsfiddle.net/LeaS9/ )
źródło
.replace(/../g,a=>String.fromCharCode(a[c='charCodeAt']()&255).repeat(a[c](1)&255))
PHP
Metoda 1, prostsza (139 bajtów):
Używanie wstępnie deflowanego ciągu.
Metoda 2: kodowanie przebiegów spacji do liter alfabetu (192 bajty):
źródło
PowerShell,
192188119Część powyżej zawiera kilka znaków innych niż znaki. Zrzut szesnastkowy:
Schemat kodowania to RLE z długością zakodowaną powyżej dolnego 7 bitów, które są znakami do wyświetlenia.
źródło
Python - 236
źródło
Pakowane JS (190b) / ES6 (146b) / ES6 (118 znaków)
Uruchom to w konsoli JS:
JS:
ES6:
Pakiety ES6: ( http://xem.github.io/obfuscatweet/ )
Dzięki @nderscore!
źródło
"\n6'\\19.2.24|>18>>\n8\\14.9'1.19|\n7O>>9.17'o16|\n8\\7.38|\n8/\\4.40|\n7/1/2.'41|\n1jgs^^^^^^^`".replace(/\d+/g,a=>18-a?' '.repeat(a):a)+"^".repeat(50)+"\n"
"\n6'\\19.2.24|>0>>\n8\\14.9'1.19|\n7O>>9.17'o16|\n8\\7.38|\n8/\\4.40|\n7/1/2.'41|\n1jgs58`101\n".replace(/\d+/g,a=>' ^'[a>51|0].repeat(a%51)||18)
(ES6, 163b / 127 znaków
Jeszcze inne podejście, dzięki @nderscore.
Uruchom go w konsoli Firefox
JS (163b):
Zapakowane (127c):
źródło
Python, 70 znaków UTF-16
Oczywiście prawdopodobnie będziesz musiał użyć wersji szesnastkowej:
lub wersja base64:
Pierwsza „linia” programu deklaruje kodowanie UTF-16. Cały plik to UTF16, ale interpreter Pythona zawsze interpretuje linię kodującą w ASCII (jest to
#coding:UTF-16BE
). Po nowej linii zaczyna się tekst UTF-16. To po prostu sprowadza się do tego,print'<data>'.decode('zlib')
gdzie tekst jest deflowaną wersją docelowego obrazu ASCII. Dołożono wszelkich starań, aby strumień nie zawierał surogatów (co zniszczyłoby dekodowanie).źródło
zip
zamiastzlib
może zapisać jeden znak.zlib
raczej niżzip
jest bardzo celowy.zlib
to parzysta liczba znaków.C # -
354332Trochę golfa:
źródło
string[] args
.Main
nie musi mieć żadnych argumentów, nadal będzie się kompilował (w przeciwieństwie do Javy). Usunięcie tego ix
wprowadzenie powoduje już 333. Możesz zapisać kolejny bajt, usuwając spację między argumentami wDeflateStream
ctor. Możesz użyć obsady dla członka enum:,(CompressionMode)0
co sprowadza nas do 324. Więc twierdzę, że nie jest to jeszcze najkrótsza możliwa ;-)bzip2, 116
Po obejrzeniu odpowiedzi CJAM, pomyślałem, że ta też powinna się zakwalifikować.
Wątpię, aby wymagane było jakiekolwiek dalsze wyjaśnienie. :)
źródło
C (gcc) , 190 bajtów
Wypróbuj online!
źródło
Vim, 99 klawiszy
prawdopodobnie golfa
Wyjaśnienie:
źródło