Być może słyszałeś o „logo hakera”, zwanego także „godłem hakera”. To wygląda tak:
Jest to wzór z matematycznej symulacji zwanej Game of Life. Szybowiec jest najprostszym poruszającym się wzorem Życia i najbardziej natychmiast rozpoznawalnym ze wszystkich wzorów Życia.
Wyzwanie
Wyzwanie jest dość proste: wyświetl logo hakera. Jest to zdefiniowane jako:
- Siatka 3x3 z ramką, białym tłem i szarymi liniami siatki.
- Pięć czarnych kropek ułożonych w wzór szybowca GoL.
- Nic więcej.
Zasady
- Czarne kropki muszą wypełniać 40% - 80% ich poszczególnych pól siatki.
- Wyświetlisz godło z wyjściem graficznym, ale bez grafiki ASCII .
- Dane wyjściowe muszą mieć co najmniej 30 x 30 pikseli .
- Dane wyjściowe muszą mieć tylko kolory szary, czarny i biały .
- Każde pole siatki w siatce będzie tego samego rozmiaru. Siatka będzie regularnym kwadratem 3x3 .
- Nie możesz pobrać logo z Internetu lub systemu plików.
- Twój program wyświetli logo na pustym ekranie / oknie. Jeśli zakończy się, musi to zrobić normalnie.
- Zauważ, że „kropki” niekoniecznie oznaczają „koła”. „Kropka” to pojedynczy kształt geometryczny wyśrodkowany na środku siatki z jedną powierzchnią. Na przykład, podczas gdy okrąg lub kwadrat kwalifikują się jako kropka, dwa trójkąty lub szachownica nie będą.
Zwycięzca
Ponieważ jest to gra w golfa , wygrywa najkrótsza odpowiedź w każdym języku!
Dołącz do odpowiedzi zrzut ekranu z programu.
Odpowiedzi:
Mathematica, 62 bajty
Mathematica, 71 bajtów
źródło
Graphics@Disk[]
jako argumentu.Rasterize@Grid[{{,●,},{,,●},{●,●,●}},Frame->All,FrameStyle->Gray]
. ● jest dwubajtowym znakiem Unicode. Ponieważ nie musi to być wyłącznie koło, być może jakaś postać ASCII mogłaby pracować, aby spełnić wymagania 40% -80%.Rasterize
lub podobnie, aby spełnić ten wymóg,graphical output but no ASCII art
ponieważ symbole można nadal wybierać w siatce jako znaki Unicode.CSS + HTML,
56 + 84 = 140 bajtów52 + 84 = 136 bajtówZaoszczędzono 4 bajty, włączając sugestie z komentarzy.
Wykorzystuje on znak UTF-8 o
•
długości 2 bajtów i korzysta z łaskawości składni HTML.źródło
•
!line-height:.4;
, a drugi, pomijając zamknięcie}
GLSL (shader fragmentów),
278235256 bajtówZobacz to w akcji: http://glslsandbox.com/e#40717.2
źródło
precision highp float;void main(){vec2 a=gl_FragCoord.xy/20.-.2;ivec2 b=ivec2(a);a-=vec2(b)+.5;gl_FragColor=vec4(vec3(a.x<-.5||a.y<-.5||a.x>.3||a.y>.3?.5:length(a+.1)<.4&&(b.x+b.y-3)*b.y==0?.0:1.)*float(b.x<3&&b.y<3),1.);}
Python 2 ,
169140 bajtówRzeczywisty rozmiar, 61 na 61, wykreślony na znacznie większym płótnie 300 na 400:
Pokazuje siatkę pikseli:
Kropki używają 177 pikseli w zakresie 40% -80%, niezależnie od tego, czy wypełnia się białe tło 19 na 19 (144,4-288,8), czy 21 na 21, w tym obie krawędzie (176,4-352,8).
Uwaga: program kończy i zamyka okno obszaru roboczego po zakończeniu rysowania, aby umożliwić ręczne zamknięcie okna, dołączając linię
done()
.turtle
to pakiet Pythona opracowany do wstępnego programowania graficznego. Pióro zaczyna się nax,y=0,0
środku 300 na 400 pikseli płótna (domyślnie),up
podnosi pióro,goto
przesuwa pióro,shape
ustawia kształt pióra na nazwany kształt ("square"
jest to wstępnie zdefiniowany kształt o domyślnej szerokości piksela 21 ),color
ustawia kolor, w którym dwa parametry ustawiają obrys (domyślnie szerokość 1) i wypełnienie; bajt jest zapisywany za pomocą(r,g,b)
opcji krotki w celu zastąpienia"white"
za[1,1,1]
pomocą mnożenia listy[1]*3
. Na koniecdot
rysuje kropkę o podanej szerokości w pikselach i kolorze. Domyślna wartość szerokości kropki jest zbyt mała, aby ją zakwalifikować,9
dlatego też uczyniłem ją estetyczną i kwalifikującą15
. Kolor kropki może być"black"
ale rozpakowana(r,g,b)
krotka0,0,0
jest krótsza o dwa bajty.Pióro musi oddalić się od kropki na końcu, ponieważ w przeciwnym razie szary / biały długopis ukrywa kropkę.
Siatka jest przesuwany za pomocą div (
/
) i mod (%
I)i
zaczynając od8
(i
zostaje zainicjowany na9
ale jest zmniejszana na początkuwhile
pętli) i działa aż do0
, potrącenie wyniki2,1,0
dla-1,0,1
użyciu(1-...)
i skalowanie każdy się do rozmiaru siatki przy użyciu współczynnik 20 (uwaga, że w20-i/3*20
rzeczywistości jest to bajt mniej niż20*(1-i/3)
, to samo dotyczy%
). To tworzy kolejność [lewy dolny, środkowy lewy, lewy górny, dolny środkowy, środkowy środkowy, górny środkowy, dolny prawy, środkowy prawy, górny prawy] i wymagahasDot
oceny „ ”[1,0,0,1,0,1,1,1,0]
, która jest302
w formacie binarnym więc może mieć dostęp poprzez kontrolęi
th mocy dwóch komponent302
z użyciem bitowym i,302&2**i
.źródło
turtle
.Applesoft BASIC ,
479476516515483482 bajtów-32 poprzez użycie nieczytelnych nazw zmiennych: P
-1, ponieważ Apple zdecydowało się być magiczne i pozwól mi użyć ukrytego / nieistniejącego GOTO
Oto mój własny (bardzo dający się pokonać) program na przykład wyniku, który nie używa okręgów:
Wynik:
źródło
Kod maszynowy IA-32,
8180 bajtówHexdump:
Jest to
fastcall
funkcja o nazwie,doit
która zwraca obraz w formacie PGM w dostarczonym buforze. Stosowanie:Wynik:
Kiedyś rozdzielczości 256x256 bo
fajnieto pozwala mi podzielić indeks piksela wecx
automatycznie na współrzędney
wch
ix
wcl
. Ponadto format pliku PGM wymaga liczby 255 w nagłówku obrazu.Wewnętrzne kwadraty mają wymiary 54 x 54 (41% komórek według obszaru).
Kod źródłowy (może zostać skompilowany przez Visual Studio):
Wzór komórki
może być reprezentowany przez „zoptymalizowaną” bitmapę 7 bitów.
Bity są indeksowane według wyrażenia
y * 2 + x
, gdzie(x,y)
jest lokalizacja komórki. To wyrażenie daje ten sam indeks 2 parom komórek. To szczęśliwy zbieg okoliczności, że wartości bitów są takie same.źródło
42*42/85/85
tylko 24,4%.HTML i CSS, 155 bajtów
Okazuje się, że HTML naprawdę wybacza błędy składniowe.
1 bajt zapisany dzięki @Octopus · 1 bajt zapisany dzięki @Downgoat · 2 bajty zapisane dzięki @StephenS
2 bajty zapisane dzięki @Ryan · 3 bajty zapisane dzięki @styfle · 4 bajty zapisane dzięki @Ferrybig
13 bajtów zapisanych dzięki @SteveBennett
źródło
R (
130119113 bajtów)źródło
axes=F
do zastąpieniaxaxt="n",yaxt="n"
. Jeśli podwoisz wszystkie wartości współrzędnych, zaoszczędzisz 4 bajty netto (ale nie możesz użyć1:3,2:3
lewy).;box()
ponieważaxes=F
usuwa również ramkę. Ponadto, jakaxes
toplot
parametr, a nie przekazanepar
przez...
takxaxt
/yaxt
, to nawet nie muszą być pisane w całości.c(1,7)
zmienną (l=c(1,7)
); (2) zastępowanieann
zan
; (3) zastępuje[xy]li
się[xy]li
; oraz (4) usuwa się drugą nadmiarowe argumentugrid
:grid(3,lt=1)
. W rzeczywistości mogłem edytować to w (w trakcie przeglądu).Python 2.7,
214311309 bajtówTo moja pierwsza próba gry w golfa, więc jestem pewien, że można to poprawić. Chciałbym nie ustalać limitów, ale wygląda na to, że matplotlib nie może wykryć, że narysowałem koła tam, gdzie to zrobiłem. Bez ustawienia xlim () i ylim () pokazuje tylko dwa dolne okręgi.
Wynik:
Edycja: Naprawiono kolor obramowań i usunięto cyfry zaznaczenia. Muszę powiedzieć, że matplotlib jest bardzo gęsto sformułowany i niezbyt przyjazny ze zmieniającymi się kolorami osi.
Wygolono 3 bajty dzięki @DJMcMayhem
Edycja: Oderwał dwa bajty ustawiając moje tiki jako krotkę wewnątrz funkcji set_ticks.
źródło
for s in'xy':exec"x.set_"+s+"ticks(a);"+s+"lim(-.5,2.5);"
. (Nie testowałem tego jednak, więc nie jestem pozytywny)Bash + ImageMagick,
233226 znakówPrzykładowe dane wyjściowe:
Bash + ImageMagick, 215 znaków
Właściciel pytania nie odpowiedział jeszcze na pytanie antyaliasingu, a niektóre inne rozwiązania mają również dodatkowe odcienie szarości dodane przez antyaliasing, więc na razie ten krótszy wydaje się również do przyjęcia.
Przykładowe dane wyjściowe:
źródło
Rubin,
144166164148144 144 bajtówWynik:
Edycja: teraz ma szare linie siatki.
źródło
d=d+1
ma krótszą formę (d+=1
) i==1
tutaj jest równoważna>0
. Zastanów się również, co się stanie, gdy ustawisz c na Fixnum zamiast na tablicę :-)[]
za pomocą tablicy bitów (tylko do odczytu, ale tutaj jest OK).g=[2,13,24]
, abyg=2,13,24
i wymienićeach
zmap
.PNG,
105100 bajtów(tzn. ten plik obrazu)
Biorąc pod uwagę, że HTML i inne języki nieprogramowe są dozwolone , byłem ciekawy, jak bardzo mogę grać w golfa w zwykły obraz, który można wyświetlić w przeglądarce, aby służyć jako podstawowe porównanie. Wynik jest kompresowany za pomocą narzędzi open-source optipng (
-o7 -zm1-9 -strip all
) i pngwolf . Eksperymentowałem również z zopflipng , ale wyniki były większe. Inne narzędzia do kompresji o zamkniętym źródle mogą być w stanie zgolić jeszcze kilka bajtów.Dane obrazu w base64:
Pokaż fragment kodu
Edytuj Zmusiłem kropki do dotykania górnej i dolnej części komórki, aby zwiększyć powtarzalność wzoru pikseli, a tym samym poprawić współczynnik kompresji. Ale nie martw się, kropka wciąż wypełnia tylko (7 * 9) / (9 * 9) ≈ 78% jej komórki.
Niestandardowy PNG, 88 bajtów
Jak wskazał @anatolyg , istnieje pewien potencjał golfowy poprzez usunięcie fragmentu IEND (12 bajtów). Technicznie IEND jest wymagany przez standard . Jednak każdy fragment PNG zawiera swój własny rozmiar i informacje o sumie kontrolnej. Dlatego nie ma absolutnie konieczności posiadania znacznika końcowego. I rzeczywiście, wszystkie testowane przeze mnie przeglądarki mogą wyświetlać obraz bez problemu.
Niestety (lub na szczęście) ten niestandardowy obraz został odrzucony przez imgur, więc nie mogę go załadować. To jest kodowanie base64:
Pokaż fragment kodu
źródło
PNG
nie jest językiem programowania.Oktawa ,
127124 bajtówUsunięto 3 bajty dzięki Luisowi.
grid
jest wystarczający (zamiastgrid on
).Wyjścia (po zapisaniu):
Zauważ, że dane wyjściowe pokazują szare linie siatki w oknie wydruku. Podczas zapisywania zmieniają kolor na czarny (z jakiegoś powodu).
To było długie i nieporządne! Musiałem przejść wiele modyfikacji, aby dostosować się do specyfikacji.
Wyjaśnienie i mam nadzieję, że zbliża się gra w golfa ...
źródło
'square'
aby był kwadratowy na wszystkich platformach.spy([0,1,0;0,0,1;1,1,1],'.k',80),set(gca,'XTick',.5:4,'XTickLabel','','YTick',.5:4,'YTickLabel',''),axis(.5+[0,3,0,3],'square'),grid on
.Przetwarzanie,
212198 bajtówZasadniczo używamy prostego przetwarzania, aby narysować białe tło, a następnie ustawiamy przezroczystość prostokątów używanych w siatce i rysujemy ich obrysy na szaro. Kontynuujemy, definiując prostokąt, ustawiając ponownie wartość wypełnienia, aby wypełnić czarne koła i definiując pięć kół.
Voilà!
Możesz dodać
lub więcej, aby lepiej zobaczyć kolor pociągnięć.
(To mój pierwszy Code-Golf, mam nadzieję, że wszystko zrobiłem dobrze.)
EDYCJA: Dzięki Kritixi Lithos! Usunięto znaki nowej linii, zmieniono na int f = 25 i zastosowano -1 w tle (liczba zmiennoprzecinkowa)
źródło
float f=25;
sięint f=25;
i używającbackground(-1)
zamiastbackground(255);
Tikz,
193175170 bajtówOto wynik:
źródło
MATL ,
7469686462 bajtówWypróbuj w MATL Online! (To zajmuje kilka sekund.)
Dane wyjściowe z tłumacza online:
źródło
Przetwarzanie, 134 bajty
Zainspirowany przez @Zep, oto mój Processing one-liner (a także mój pierwszy kod golfowy):
Dzięki za @Kritixi Lithos za jego genialne wskazówki na temat golenia o kilka bajtów!
źródło
for(int i=0,x,y;...
tak abyś mógł upuścićint
ciało w pętli. Dodatkowofill(255);
może stać się po prostufill(-1);
+20
podczas ustawiania wartościx
iy
, tak, że można zmienićrect
, abyrect(x+5,y+5,30,30);
iellipse
doellipse(x+20,y+20,23,23);
i zapisać dwa bajty.LaTeX + Tikz, 155 bajtów
źródło
1/0
to podział?x
iy
współrzędnych..5
był sprawiedliwy1
.[step=2]
), aby utworzyć większą siatkę. Uproszczenie współrzędnych do rysowania okręgów nie pozwoliłoby zaoszczędzić wystarczającej liczby bajtów. (Otrzymasz 157 bajtów, jeśli to zrobisz)SmileBASIC, 125 bajtów
58081 (U + E2E1, który znajduje się w bloku „Obszar prywatnego użytku”) to kod znaku symbolu okręgu. Umieszczenie go w łańcuchu też by działało, ale ponieważ koduje się go w UTF-8 jako 3 bajty, miałby on tę samą długość (i nie wyświetla się tutaj poprawnie).
źródło
C #, 333 bajty
Wersja pełna / sformatowana:
Pomysł jest prosty, tworzymy obiekt graficzny z obrazu i używamy go, aby obraz był cały biały. Następnie przesuń pętlę nad każdym kwadratem obrazu, rysując obwiedni prostokąt. Jeśli jest to jedna z lokalizacji kropki, również ją rysujemy. Na koniec zapisujemy obraz do pliku i pozwalamy systemowi Windows decydować o tym, jak go otworzyć, w moim przypadku otwiera się za pomocą Windows Photo Viewer.
Użycie a
Process
do wyświetlenia obrazu i zapisanie go do pliku jest o wiele krótsze niż utworzenie formularzy Windows lub aplikacji WPF ze względu na wszystkie różne klasy i dodatkowy puch potrzebny do ich utworzenia.Wynik:
źródło
PHP, 221 + 2 bajty
Zapisz do pliku; zadzwoń w przeglądarce. Jeśli przeglądarka wyświetla bełkot,
włóż
header("Content-Type:image-png");
wcześniejimagepng($i);
.Kropki nie są bardzo okrągłe; wynika to z małych proporcji.
awaria
Myślę, że to
0x4c4b40
kwalifikuje się jako przybliżony szary. Jeśli nie, dodaj cztery bajty.źródło
R 313 236 bajtów
Zmieniony kod, oparty głównie na komentarzach @ user2390246, zapisał 77 bajtów. Bardzo doceniam pomoc.
Ponadto chcę dodać odwołanie do krótszego rozwiązania R autorstwa @mschilli. Pokazuje elegancki sposób rozwiązania problemu domyślnych wartości graficznych R.
Wynik
Przechodzi do nazwy pliku „r”. Pominięcie i rozszerzenie pozwoliły mi zaoszczędzić cztery bajty. Ale potem musiałem edytować rozszerzenie pliku z powrotem na „bmp”, aby je załadować. Więc może nie powinienem dostać kredytu za te cztery bajty.
Komentarz
Pomyślałem sobie: „Ta grafika to nic innego jak prosty wykres z pięcioma kropkami. Powinna być prostą sprawą do zaimplementowania w języku z solidnymi możliwościami grafiki. Spróbujmy w R.” Ale potem musiałem wydać na rząd 80% bajtów po prostu pracujących wokół domyślnych ustawień graficznych R.
Trochę niewłaściwe narzędzie do pracy ....
Nie mogłem znaleźć mniej pełnego sposobu zagwarantowania rozmiaru i proporcji grafiki niż przez wywołanie konstruktora bmp, a następnie dev.off (). Kombinacja obejmuje 25 bajtów. Jeśli twoja sesja R jest poprawnie skonfigurowana, możesz uzyskać grafikę, która wygląda mniej więcej poprawnie bez wydawania tych bajtów, ale nie jest niezawodna ani spójna.
źródło
b
, po prostu umieść dwa wektory nienazwane bezpośrednio wplot
funkcji. Użyjc(l,3)
dlaxaxp
iyaxp
. Możesz po prostu użyćF
dla fałszu, nie musisz go definiować. I zdefiniuj nową funkcję,a(x,...)
która wywołuje,axis(x)
ale ma domyślne wartości etykiet, tck itp., Dzięki czemu nie musisz określać ich wszystkich dwa razy.axes=F
zamiastxaxt='n',yaxt='n'
. I zapomniałeś użyć.5
przy definiowaniu,l
chociaż użyłeś tej sztuczki później..5
?.bmp
rozszerzenie pliku, równie dobrze możesz po prostu nazwać plikr
.TI-BASIC,
218140137 bajtówUwaga: ta liczba bajtów jest nieco zawyżona. Program używa tylko 85 tokenów, ale jest to zapisane w 137 bajtach. Ponadto, jeśli używasz kalkulatora bez koloru, możesz zapisać kolejne 4 tokeny, ponieważ nie musisz określać koloru (domyślnie jest to niebieski), ale nie wiem, czy ich ekrany są wystarczająco duże, aby to wyzwanie, ponieważ nie mam jednego.
prgmHACKER (138 bajtów, 86 tokenów):
Aby poprawnie wyświetlić, ten program wymaga, aby Xmin = Ymin = 0, Xmax = Ymax = 3, Xscl = Yscl = 1. dX również musi być odpowiednio ustawiony, ale kalkulator robi to za Ciebie, gdy ustawisz dowolną inną zmienną okna. Nie widziałem, ile miejsca te zmienne wykorzystały w pamięci RAM.
Ponadto ustawieniami formatu powinny być {RectGC, CoordOff, GridLine, GridColor: MEDGRAY, Axes: OFF, ExprOff, BorderColor: 1, Background: OFF}, ale są to przełączane wartości i nie zajmują dodatkowego miejsca w zależności od ustawienia.
źródło
{0,1,2,1,2}
a{0,0,0,2,1}
następnie dodać0.5
do każdego elementu.L1
iL2
naL₁
iL₂
, ponieważ już ich używasz. Myślę, że możesz usunąć}
iL₁(I)+.5→A
=>.5+L₁(I
iL₂(I)+.5→B
=>.5+L₂(I→B
.R,
119114111 bajtów( Dzięki @JayCe za uratowanie mi 3 bajtów)
Nie krótszy niż inne rozwiązanie R , ale zupełnie inne podejście:
Wykorzystuje układ, w którym 4 pierwsze wykresy to puste komórki, a 5 innych to te z kropkami.
źródło
Excel VBA, 180 bajtów
Anonimowa funkcja okna natychmiastowego VBE, która nie przyjmuje danych wejściowych i wyjściowych do domyślnego obiektu arkusza (
Sheet1
).Skomentowana wersja
Wynik
-6 bajtów dla użycia
[{21,32,13,23,33}]
ponadSplit("21 32 13 23 33")
-2 bajty dla użycia
Mid(s,2)
ponadRight(s,1)
-3 bajty za użycie
(s\10)
overLeft(s,1)
źródło
Oktawa
10794103 bajtówlub
oba rozwiązania mają 103 bajty.
źródło
line([x1,x2],y)
musicie zrobićline([x1,x2],[y,y])
Apple Swift (iOS - CoreGraphics / QuartzCore) - 832 bajtów
Narysowałem ten kształt całkowicie za pomocą Quartz na urządzenie Apple iOS. Niestety, nie jest to język szczególnie uważny, więc wynik jest dość duży, ale jest tak mały, jak tylko mogę.
Bardziej czytelna wersja dla wszystkich zainteresowanych:
Oto dane wyjściowe wyprodukowane w symulatorze iOS:
źródło
Rubin z butami, 118 znaków
Bit sprawdzanie zapożyczone z RJHunter 's komentarzu wykonane na Mark Thomas ' s rozwiązania Ruby .
Przykładowe dane wyjściowe:
źródło
SVG + HTML,
146138135133 bajtówDzięki łagodnemu parserowi HTML
xmlns="http://www.w3.org/2000/svg"
deklarację można pominąć, a także cytaty atrybutów i tag zamykający. Ta wersja rozwiązuje niektóre problemy innych rozwiązań HTML:Edycja Ogolono 8 bajtów, wykorzystując fakt, że podścieżki nie muszą być zamykane, aby je wypełnić .
Edycja Zgodnie z gramatyką svg nie jest konieczne oddzielanie cyfr od przecinków (
.5,.5
). Porzuciłem również wyraźne wypełnienie, aby zmienić kierunek rysowania jednej linii z ujemnej na pozytywną, oszczędzając kreskę. Na koniec dostosowałem liczbę, aby nie zawierała nowej linii, przepraszam za ten błąd debiutanta.Edycja Uczenie się od innej odpowiedzi na codegolf, jakie otrzymuje końcowy
9 />
z9>
. Działa to dobrze we wszystkich testowanych przeglądarkach.źródło
Python 3 + PyGame, 238 bajtów
Pozornie arbitralne stałe są ode mnie próbujące uczynić obraz tak dużym, jak to możliwe, bez poświęcania bajtów.
Ze znakami niedrukowalnymi, 229 bajtów
Wymieniłem listy literałami bajtowymi, co oszczędza wiele znaków, ale znaki niedrukowalne nie mogą być tutaj poprawnie wyświetlane. Do celów wyświetlania zastąpiłem znaki niedrukowalne ich graficznymi odpowiednikami U + 2400-U + 2421.
źródło