Wyzwanie: wyświetl w oknie tę dokładną grafikę ASCII pajęczyny:
_______________________________
|\_____________________________/|
|| \ | / ||
|| \ /|\ / ||
|| /\'.__.' : '.__.'/\ ||
|| __.' \ | / '.__ ||
||'. /\'---':'---'/\ .'||
||\ '. /' \__ _|_ __/ '\ .' /||
|| | /. /\ ' : ' /\ .\ | ||
|| | | './ \ _|_ / \.' | | ||
||/ '/. /'. // : \\ .'\ .\' \||
||__/___/___/_\(+)/_\___\___\__||
|| \ \ \ /(O)\ / / / ||
||\ .\' \.' \\_:_// './ '/. /||
|| | | .'\ / | \ /'. | | ||
|| | \' \/_._:_._\/ '/ | ||
||/ .' \ / | \ / '. \||
||.'_ '\/.---.:.---.\/' _'.||
|| '. / __ | __ \ .' ||
|| \/.' '. : .' '.\/ ||
|| / \|/ \ ||
||____/_________|_________\____||
|/_____________________________\|
Źródło: Joan Stark (nieznacznie zmodyfikowany pająk i rama oraz usuń inicjały ze względu na wyzwanie).
Wymagane znaki: _|\/'.:-(+)O
(12) + spacja i nowa linia (2)
Zasady konkursu:
- Dozwolone jest jedno lub wiele końcowych spacji i / lub nowych wierszy.
Główne zasady:
- To jest golf golfowy , więc wygrywa najkrótsza odpowiedź w bajtach.
Nie pozwól, aby języki gry w golfa zniechęcały Cię do publikowania odpowiedzi w językach niekodujących golfa. Spróbuj znaleźć możliwie najkrótszą odpowiedź na „dowolny” język programowania. - Do odpowiedzi odnoszą się standardowe reguły , więc możesz używać STDIN / STDOUT, funkcji / metody z odpowiednimi parametrami, pełnych programów. Twoja decyzja.
- Domyślne luki są zabronione.
- Jeśli to możliwe, dodaj link z testem swojego kodu.
- W razie potrzeby dodaj również wyjaśnienie.
code-golf
ascii-art
kolmogorov-complexity
Kevin Cruijssen
źródło
źródło
.
7 znaków przedO
. Czy po tym ma być też 7 znaków?Odpowiedzi:
SOGL V0.12 , 141 bajtów
Wyjaśnienie:
Wypróbuj tutaj! (program zawiera zakładki, więc tutaj jest lepsza reprezentacja programu)
źródło
Arnold C,
1257 1261 12561233 bajtówTo jest moja pierwsza próba programowania w najwyższym języku, więc zjem swoje przeglądy, ponieważ nie oferuję inteligentnego rozwiązania tego problemu, chociaż programowanie w języku wywodzącym się z niebios.
Oto kompilator, jeśli ktoś przypadkiem kwestionuje ten algorytm.
Czekać.
źródło
TALK TO THE HAND
!vim,
373371 bajtów<ESC>
jest standinsem dla 0x1B.Bez golfa
Wypróbuj online!
I aby wyjaśnić wyjaśnienie, które otrzymałeś jako dziecko: Chociaż prawdą jest, że jedyne emocje, które osobiście odczuwają, to nienawiść, są one w stanie wyczuć strach z odległości ponad 50 metrów.
źródło
<CR>
ale czy linie kończące się na<CR>
średnim uderzają dwukrotnie? Wydaje się, że w dwóch powyższych przypadkach odpowiedź brzmi „ nie” , ale linie zs/ /_/g
itr
nie kończą się na,<CR>
ale nie mogę uruchomić go bez naciśnięcia Enter.<CR>
były błędem i działa także podawanie linii. (Wprowadzałem wiersze za pomocą<C-v><ENTER>
, który generuje<CR>
; dlatego pokazuje się jako^M
zamiast nowej linii). Zmodyfikowałem kod, aby wyeliminować te dwa duplikaty i zastąpić znaki powrotu karetki normalnymi znakami nowej linii / linii. Wszystkie pozostałe znaki nowego wiersza należy wprowadzić dokładnie raz. (Wersja bez golfa nadal ma kilka dodatkowych pustych linii; te nie odpowiadają faktycznym naciśnięciom klawiszy. Wersja z golfem jest dokładnie tym, co należy wpisać, z wyjątkiem<ESC>
s.){ cat foo.vim; echo ':wq'; } | vim a.txt
, abyś nie utknął w vimie bez klawiatury podłączonej do standardowego wejścia. Zaletą jest to, że mogę uruchomić program bezpośrednio z pliku, zamiast próbować wpisywać go dokładnie przy każdej zmianie. W przypadku tego programu bajty i naciśnięcia klawiszy są równoważne, ale nie zawsze tak jest. np<C-v><ENTER>
jest trzy naciśnięcia klawiszy, ale produkuje jeden bajt\r
.Galaretka ,
206205 bajtówNiladyczny link zwracający listę znaków lub pełny program drukujący grafikę.
Wypróbuj online!
Czy można zastosować symetrię zgrubną-pionową?
W jaki sposób?
Pierwsze 158 bajtów to bardzo duża liczba zapisana w bazie dwusuwowej 250 przy użyciu pierwszych 250 bajtów strony kodowej Jelly:
Numer ten (rzędu 10 372 przeprowadza się w wykazie cyfr bazy-9 (391 liczb od 0 do 8), a następnie trzy dodaje się do 203 III , 204 TH , 220 TH i 221 st cyfr ( który będzie ciałem pająka):
Wynik jest następnie konwertowany na 12 znaków z lewej strony (do środkowej kolumny włącznie):
Pełne wiersze są następnie zbudowany odbijając każdy wiersz po lewej stronie (która odzwierciedla to, jak gdyby jego ostatni znak były zwierciadłem), zmieniając wszystko
(
do)
The\
aby/
i/
do\
, a następnie tylko przy użyciu nowych wartości po prawej stronie -ręczna strona za pomocą wektoryzacjiand
z lewą stroną z wcześniej. Rezultat jest w końcu połączony z nowymi liniami, aby stworzyć sztukę:źródło
Węgiel ,
239238 bajtówWypróbuj online! Link jest do pełnej wersji kodu. Większość z nich polega po prostu na drukowaniu dużego skompresowanego łańcucha, ale powtarzające się części zostały zakodowane oddzielnie, aby zmniejszyć długość łańcucha; w szczególności
Rectangle
oszczędza wiele bajtów, unikając wypełniania spacją, aby dotrzeć do 17. kolumny, a nawet ukośne linie oszczędzają bajt każdy.Edycja: Wydaje się, że węgiel drzewny nie rozpoznaje już skompresowanego ciągu, a jego bieżąca kompresja generuje krótszy ciąg, który oszczędza 51 bajtów i pozwala na przesunięcie jednej z linii przekątnych z powrotem do łańcucha dla dalszego 2-bajtowego zapisu. (Pamiętaj, że nie są to liczby wyświetlane przez
-sl
; w rzeczywistości nawet pierwotna liczba wydaje się być wyłączona o 1). Istnieją jednak trzy dodatkowe oszczędności, które dotyczyłyby również oryginalnego kodu: Wypróbuj online!B
(Box
) zamiastUR
(Rectangle
).↙P×_¹⁶←/
zamiast↓P×_¹⁵←_/
.×_¹⁶J⁵¦¹
zamiastP×_¹⁶M⁵¦²
.źródło
PHP , 380 bajtów
Wypróbuj online!
PHP , 494 bajty
Wypróbuj online!
źródło
pieprzenie mózgu , 4086 bajtów
Wypróbuj online!
To tylko metoda „ciągnij i wybierz” w celu wygenerowania łańcucha.
Dodano nowe wiersze dla większej czytelności:
źródło
---------------------------------------------------------------
Zamiast czegoś takiego>++++++++[-<-------->]<+
?>
s i<
s wydaje się później w kodzie. Nie wiem, ile bajtów (jeśli w ogóle) zapisuje moje podejście. Spróbuję użyć więcej komórek.>>>
sekwencje później, ponieważ są one po prostu używane jako tymczasowe miejsce dla faktoryzacji. W szczególności, jeśli wypełnisz komórki od lewej do prawej, możesz użyć np. Komórki 5 jako tymczasowej przestrzeni do konfiguracji komórki 4, a następnie (ponieważ komórka 5 jest zerowana w procesie ustawiania komórki 4), zapisz nową wartość w komórce 5, używając komórki 6 jako przestrzeni tymczasowej. Tak długo, jak końcowe wartości komórek pozostają niezmienione, możesz zmienić wszystko przed pierwszym.
bez konieczności modyfikacji późniejszego kodu.JavaScript (ES6), 471 bajtów
Pakowane z wariantem RegPack ES6 .
źródło
Java (JDK) , 494 bajty
Wypróbuj online!
Dzięki Kevin Cruijssen za grę w golfa kilka bajtów plus 6 bajtów przez zmianę
Windows-1252
nacp1252
i na ASCII-tylko po to, aby nieco skompresować ciąg :)Uwaga: plik musi być zakodowany jako Windows-1252 do liczenia bajtów, ale można go bezpiecznie skopiować / wkleić w UTF-8 do testowania!
Długi łańcuch jest tak naprawdę ciągiem, podobnie jak jego znaki odwzorowane na elastyczny koder znaków (raz cieszę się, że mogę użyć CP-1252). Reszta to tylko metoda odwzorowywania.
Mapowanie znaleziono przy użyciu permutacji, najpierw zainicjowanej na częstotliwość każdego znaku w sztuce ascii. Mapowania powodując bohaterów
'"'
i'\\'
zostały wyraźnie odrzucone być najkrótsza prawidłowy ciąg, jak to możliwe.Bez golfa
Odkrycie mapowania
źródło
()
postać na losową. Nigdy nie powiedział nic o żadnym wejściu, dzięki czemu można wykorzystać nieużywanyObject
który jestnull
jako wejście. Odpowiedni meta-post. . Aha, możesz zapisać kolejny bajt, zmieniającbyte
naint
w pętli dla każdego.r+=a;
jest równoważne znakomr = r + (a)
i ze znakami, co oznacza, że są dodawane do siebie przed połączeniem, więc są teraz uważane zaint
s, a wynikowy ciąg jest podobny127190190190190190190190190190...
. Napisałem skomentuj to w wersji bez golfa;)Windows-1252
można grać w golfacp1252
. Wyjaśnienie tutaj.b>>4
nie potrzebuje parens, pamiętaj, że bitowe mają bardzo, bardzo niski priorytetSiatkówka ,
465463425 bajtówWypróbuj online!
źródło
C # (.NET Core) ,
935 676 636627 bajtówWypróbuj online!
Chciałem wypróbować inne podejście i RLE przeprowadziłem rysunek. Skończyło się na tym, że kod miał więcej bajtów niż sam rysunek (782 bajty). Następnie skompresowałem łańcuch RLE, tworząc słownik z najczęściej używanymi grupami, a po skompresowaniu utworzyłem więcej słowników i ponownie skompresowałem, aż łańcuch nie będzie już mógł zostać zmniejszony. W ten sposób rysunek jest tworzony najpierw poprzez rozwinięcie tych grup, a następnie rozpakowanie za pomocą RLE.
źródło
Python 2.7,
414 405401 bajtówPo prostu dekompresuje ciąg i drukuje go. :)
źródło
Z_FILTERED
), która pozwala uniknąć nagłówków i sum kontrolnych. Krople do 401 bajtów.print zlib.decompress('fY9BauhADEP3OcXbueUz1j6X6AUEuogP/xeTpCmUGgxK5iFZ5O85xn++a44ZAHPPPEoAcxMPovEbeBFyddLFyRbyi0i6Hpd5HKqTTVTfLmutOmutdTt0zRwzphoVOCETEkGZLrRTBtSATHFSyEAbhocYqgUmEwTu2r9njhlRalA1Eic2XYZ24ZljJlHu9ce/T8XJvTsFc68+vj6Ndl0EV5d27Wg7Z6R9VKlfXWZHC7alql+XMuACrHTOdCyg9OrSha9ohusoUX116QpQVq+1+uy1VlsFpPrqQjWI5PJIMHRxdQHA6oJqTraw4Aexv8HzqG8iSZR75lFOkpljvh9/G89/'.decode('base64'),-9)
compress[obj]() takes no keyword arguments
compress
nie, alecompressobj
przyjmuje dodatkowe argumenty (choć nie jako słowa kluczowe przed 3.3, musisz przekazać argumenty pozycyjnie). Utworzenie kompresora, wywołaniecompressor.compress(thedata)
, a następnie wykonaniecompresseddata = compressor.flush()
jest w trzech krokach równoważnezlib.compress
, ale można skonfigurowaćcompressobj
bardziej precyzyjnie. Jedynym minusem jest to, że za pomocąwbits=-9
środków należy przekazać-9
dodecompress
(więc nie wie szukać nagłówka lub sumy kontrolnej).Python 3 ,
404398 bajtówWypróbuj online!
Taki sam kod jak w wersji Python 2.7 , po prostu dostosowany do Py3 wymagał konwersji
bytes
<->str
. Wciąż mniejszy niż kod 2.7 pomimo dodatkowych importów i wymaganego dekodowania dzięki Pythonowi 3, zapewniającemu kodowanie base85 jako wbudowane, zmniejszając rozmiar wymagany do reprezentacji skompresowanych danych w formacie drukowanym ASCII o 28 bajtów.Edycja: Ogolono jeszcze sześć bajtów poprzez ponowną kompresję,
wbits=-9
aby dane nie były nakładane na nagłówek ani sumę kontrolną (w zamian za konieczność dodawania,-9
argumentuzlib.decompress
).źródło
Java 8, 719 bajtów
Z pewnością można grać w golfa, ale to dopiero początek i coś, co inni golfiści Java mogą (spróbować) pokonać. ;)
Wyjaśnienie:
Wypróbuj tutaj.
źródło
pieprzenie mózgu , 5173 bajtów
Wypróbuj online!
Jak to działa
W skrócie: znajduje indeks ascii każdego znaku w linii; następnie drukuje. Następnie znajdź indeks ascii dla nowego wiersza i wydrukuj go. Opłucz i powtórz mojego syna.
źródło
256 bajtów, kod maszynowy (16-bit x86)
Miałem nadzieję, że uda mi się pokonać przynajmniej węgiel drzewny, ale nie udało mi się wycisnąć z tego więcej (do tej pory).
Uruchamianie: zapisz na codegolf.com, dosbox, aby zobaczyć wynik, w którym musisz ustawić punkt przerwania na
cs:200
ids:400
zrzuć pamięć na legth30e
... lub możesz dołączyć kolejny kawałek, który zrzuci go na standardowe wyjścieTo mój trzeci wpis do golfa. Poprzednim było szyfrowanie Xor .
Znowu: zrobione przy użyciu hekseditora HT , bez kompilatora , ale przy użyciu Ctrl-a
assemble instruction
.W jaki sposób
Ten zajął trochę czasu, aby ...
Zacząłem od prostego podejścia, z jedną ćwiartką i próby jej odzwierciedlenia. Dało to ~ 250 bajtów i posiadało tylko 2 z 4 ćwiartek. Duża część tego to sam pierwszy kwadrant, który zajął 204 bajty.
Wiedziałem, że może być lepiej.
Szybko sprawdziłem, czy lz4 tworzy plik ze 144 bajtami (pomijanie nagłówków). GZ daje ~ 120 bajtów, ale najwyraźniej nie byłbym w stanie stworzyć dekompresora za około 30 bajtów.
Kolejną próbą było ręczne wykonanie pierwszego kwadrantu poprzez narysowanie go (w tym pominięcie, kodowanie 4-bitowe i tym podobne). To razem z kodem zaowocowało 164 bajtami (myślę, że to tylko pierwsza ćwiartka), fajnie, ale byłem całkiem przekonany, że mogę zrobić lepiej.
Wymyśliłem kodowanie, które kończy się na 85 bajtach danych. Wraz z tablicą translacji (która nie jest jeszcze używana) i dekoderem otrzymałem 144 bajty. UWAGA, jestem = lz4 i już mam dekoder.
Kolejnym krokiem było połączenie początkowej kopii lustrzanej z ~ 250 prób do tej, wymagało to strojenia danych, ale poszło łatwiej niż oczekiwano i przyniosło 184 bajty.
Zdałem sobie sprawę, że będę potrzebował dodatkowych markerów, aby zrobić lustro poziome, które rozszerzyło dane do 91b i kod do 190 bajtów (które później trafiły do kosza).
Wraz z poziomym lustrem i końcowym tłumaczeniem skończyłem z ~ 250 bajtami.
Udało mi się zjeść kilka bajtów tu i tam, ale musiałem dodać te brzydkie znaki, które są niepoprawnie dublowane. To dało 259 bajtów ... To źle, ponieważ korzystałem z pamięci zaczynającej się od 0x200 i nie chciałem tego powtarzać.
Zamieniłem warunki w lustrze poziomym, aby zapętlić się przy użyciu tabeli translacji, która sama w sobie nie oszczędzała wiele, ale w połączeniu ze zmianą niepoprawnych znaków na spacje i naprawieniem ich później, zaoszczędziłem kilka bajtów, w wyniku czego otrzymano 256 bajtów.
Można zobaczyć piękny galerii, które zrobiłem, robiąc to tutaj
Sekcja
Podobnie jak poprzednie wpisy, ten również opiera się na wartościach początkowych , choć nie tak bardzo jak poprzednie:
pomiń dane, dostępne są 3 tabele:
Tabela translacji będzie używana do tworzenia kopii lustrzanych w poziomie
Tabela końcowa zostanie wykorzystana do ostatecznego podstawienia, do konwersji kodów na rzeczywiste ascii
Zakodowane dane, kodowanie jest dość proste:
wypełnij 12 * 17 bajtów tym, co stanie się spacją (8)
„Zdekompresuj” dane zgodnie z opisem w tabeli 3. Pamiętaj o użyciu ukochanej instrukcji AAM i nadużywaniu scasb do pomijania bajtów.
Ta część jest dość brzydka, ustawia miejsce docelowe na 0x400:
Pamiętaj, że tworzenie lustra odbywa się poprzez nadużywanie standardowego standardu / cld, aby przejść
SI
w drugą stronę. Tylko\/()
znaki muszą być dublowane, co jest wykonywane przez xor w 0x1BF.To robi lustro poziome, używając tabeli 1 i używając wspaniałego 1-bajtowego XLAT
Potem pojawia się nudna część, która naprawia 4 „piksele”. Pominę ją, bo jest nudna
Ostatni krok tłumaczenia na ascii.
PHEW! To było zabawne.
źródło
JavaScript (ES6),
517...459457456433431418409397392 bajtówZawiera końcową linię spacji oraz końcową spację w pierwszym wierszu. Niektóre z nich wciąż nie są optymalnie dostosowane do gry w golfa - poświęcam dużo czasu na to, aby wszystko działało.
Pierwotnie oparty na rozwiązaniu traktor53 od czasu porzucenia 556 bajtów . Wysłano za zgodą .
Lista rzeczy do zrobienia
Znajdź tańszy sposób na palindromizację łańcuchów.Spróbuj poprawić wymianę RLE.Sprawdź, czy ostatnie 4 zamienniki można w jakikolwiek sposób zagrać w golfa.Sprawdź, czy budowanie wizerunku w kwartałach przyniosłoby znaczne oszczędności - podejrzewam, że nie!źródło
string1[string2.indexOf( char) ]|| char
to konstrukcja, którą wypróbowałem, ale nie udało mi się zmniejszyć bajtów. Dobra robota!JavaScript
556468462448438387379 bajtówMniej golfa
Kompresja
Oryginalny post (556 bajtów) używał cyfr dziesiętnych, aby wskazać powtórzenie poprzedniego znaku w sieci pająka. Nowsze wersje kompresują lewą połowę sieci do 7-bitowych znaków, przy czym najmniej znaczącym skubkiem jest indeks do zestawu znaków, a trzy bity wyższego rzędu określają liczbę znaków do wyświetlenia plus wartości 1:
000
i001
nie są używane, co010
oznacza 1 znak i111
oznacza sześć. Ta konstrukcja pozwala uniknąć tworzenia znaków kontrolnych.Dzięki @Shaggy za porady i wskazówki przydatne podczas przepisywania.
Jak to działa
Lewa górna ćwiartka została przepisana, aby zawierała symbole zastępcze dla górnej i dolnej połowy sieci:
dający:
który został skompresowany przy użyciu
Dekompresja
Dekompresja odwzorowuje zakodowane znaki na rzeczywiste znaki dla każdej ćwiartki. W kodzie,
X
to indeksowana lista znaków, która zmienia się pomiędzy górną i dolną sekcją strony. Dostarcza wartości dla symboli zastępczych „suqh” i trudnych odbić znaków, takich jak między „+” a „O”.Kodowanie
Kodowanie znaku środkowego jest ograniczone do użycia rozszerzenia pojedynczego znaku. Kolejność zestawów znaków jest ograniczona, aby podczas kompresji nie generować znaków DEL (0x7F), Grave (0x60) ani odwrotnego ukośnika (0x5C).
Jest to późna aktualizacja w odpowiedzi na aktywność dotyczącą pytania.
źródło
.reduce
i.map
czego nie mogłem. W międzyczasie zmieniłem algorytm, aby uzyskać 468 bajtów! Szczęśliwy weekend./// , 463 bajtów
Wypróbuj online!
źródło
Bash, 391 bajtów
Wypróbuj online!
Uznanie dla wszystkich, którzy byli w stanie pokonać kompresję poza stołem - to ja rzucam ręcznikiem! Doceniam ludzi Pythona, którzy jako pierwsi przyjęli podejście zlib / gzip.
źródło
Perl 5
439402 bajtówZamiast używać base64 / gzip, podejście to polega na odbiciu lustrzanym i odwróceniu lewego górnego kwadrantu, z odpowiednimi podstawieniami
Wypróbuj online
Dla zainteresowanych skomentowana wersja:
źródło
C #, 484 bajty
Uwaga: Nie jestem w 100% pewien, jak je zdobyć. Z nagłówkiem i stopką jest to 544 bajty.
Nie golfowany:
Wypróbuj online!
źródło
Ruby 1.9.3,
1102763 bajtyWypróbuj online!
źródło
puts
i ciągu wielowierszowego powinno zająć ~ 790 bajtów. Twój ogromny ciąg do zeskanowania i kod do przetworzenia okazują się dłuższe niż naiwne rozwiązanie ...C #,
401 399 397 396389 bajtówNapisałem to jako pretekst do wypróbowania kodowania Huffmana
Nie golfowany:
Starsza wersja bez komentarza:
Wypróbuj online!
źródło
while(v>0){
for
v/=2
for(int p=0,l=0;v>0;v/=2){
while
będzie zajmować to samo miejscefor
.for(;someCondition;someAction);
vsfor(;someCondition;)someAction;
vswhile(someCondition)someAction;
. Ale ogólnie rzecz biorąc,for
jest rzeczywiście krótszy niżwhile
, więc używam prawie zawszefor
sam.Python 2 , 395 bajtów
Wypróbuj online!
źródło
Biała spacja ,
47234584 bajtówLitery
S
(spacja),T
(tab) iN
(nowa linia) dodane tylko jako wyróżnienia.Wypróbuj online .
Wyjaśnienie:
Korzystam z podejścia wyjaśnionego w tym moim wskazówce na temat białych znaków . Opisane podejście jest następujące:
Idealna stała wartość to
94
, którą wygenerowałem za pomocą tego programu Java . Użycie94
dałoby program Whitespace o łącznej długości 7508 bajtów (7481 + 27 bajtów dla pętli) lub 5791 bajtów (5764 + 27), jeśli zaimplementujemy już Duplicate Top (SNS
) wszędzie tam, gdzie sąsiadują dwa takie same znaki.Następnie ręcznie użyłem Copy 1st (
STSSTN
), Copy 2nd (STSSTSN
) i Copy 3rd (STSSTTN
) (1-indexed) wszędzie tam, gdzie zapisywałoby bajty. Które można również znaleźć w poradach białych znaków. Co w sumie spowodowało wyświetlenie programu 4584 bajtów .źródło
05AB1E , 204 bajty
Wypróbuj online.
Sprawdź, czy jest poprawne.
Wyjaśnienie:
źródło