Wyzwanie jest proste: narysuj tęczę w jak najmniejszej liczbie bajtów
Dane techniczne tęczy są następujące:
- Liczba musi mieć dokładnie 400 pikseli szerokości i 200 pikseli wysokości (opcjonalnie 401 x 201, jeśli chcesz mieć pojedynczy piksel środkowy)
- Czerwony pierścień powinien dotykać wszystkich granic figury (promień zewnętrzny = 200 pikseli)
- Wszystkie pierścienie powinny mieć tę samą szerokość (10 pikseli)
- Fioletowy pierścień ma wewnętrzny promień 130 pikseli
- Łuk powinien stanowić górną połowę idealnego koła
- Tło powinno być białe (przezroczyste jest również akceptowane)
- Liczba nie może mieć granic (wyjątek występuje, jeśli nie można znieść granicy)
- Wbudowane funkcje tworzenia tęczy są niedozwolone!
W tęczy należy zastosować następujące kolory:
To jest kod golfowy, więc wygrywa najkrótszy kod w bajtach!
Przykład:
code-golf
graphical-output
Stewie Griffin
źródło
źródło
Odpowiedzi:
MATL ,
1079592878483 bajtówDziała to w bieżącej wersji (14.0.0) języka / kompilatora.
EDYCJA (6 lipca 2017 r.) : Możesz spróbować w MATL Online! .
Aby sprawdzić, czy kolory są poprawne, usuń pięć ostatnich znaków (musisz poczekać kilka sekund i przewinąć w dół do końca wydruku).
Wyjaśnienie
Kod składa się z trzech głównych kroków:
Krok 1 : Wygeneruj macierz 201x401 z liczbami od
1
do8
. Pikselami z wartością1
są tło (białe), piksele z wartościami2
...8
reprezentują każde pasmo tęczy.Współrzędne poziome wynosić od
-200
do200
lewej do prawej, jak i pionowe współrzędne wahają się od0
do200
dołu ku górze. Tak więc początek (0,0) to dolny środkowy środek, lewy górny róg to (-200,200) itd.Różne pasma tęczy są generowane przez obliczenie odległości od każdego piksela do początku i kwantyzację w krokach co 10 pikseli.
Krok 2 : Wygeneruj macierz 8x3 definiującą mapę kolorów. Każdy rząd jest jednym z niezbędnych kolorów (biały i siedem kolorów tęczy). Każda wartość poprzedniej macierzy 201x401 będzie interpretowana jako indeks wiersza tej mapy kolorów.
Generujemy macierz mapowania kolorów, używając wartości od 0 do 1 dla każdego składnika koloru, a następnie mnożąc przez 255 i zaokrąglając w dół. W ten sposób większość wartości to początkowo 0 i 1, które później staną się 0 i 255. Wartości pośrednie są kodowane jako wartości od 0 do 1 z 2 lub 3 miejscami po przecinku, wybranymi tak, że po pomnożeniu i zaokrągleniu dają dokładnie pożądaną wartość.
Krok 3 : Wyświetl obraz z tą mapą kolorów.
źródło
Piet , 838 kodów, kilka tysięcy pikseli
Ktoś musiał to zrobić:
Jeśli zapiszesz ten obraz, możesz spróbować online !
Rzeczywisty program Piet to tylko górne ~ 125 pikseli, które utworzyłem za pomocą napisanego przeze mnie programu w języku Python.
Edytowanie tego później naprawdę zaszkodziło mojej wizji, będę się potykał przez kilka dni!
Powoduje to wyświetlenie obrazu w formacie SVG, ponieważ SVG jest (moim zdaniem) najprostszym sposobem na zrobienie tego. Bezwstydnie ukradłem kod SVG Doorknoba. Wyjścia:
cóż, to naprawdę:
Powodzenia pokonując tę odpowiedź, użytkownicy spoza Esolang!
źródło
Pyth,
150149128 bajtówDane wyjściowe w SVG:
Dzięki @MamaFunRoll za 16 bajtów i @PatrickRoberts za 6 kolejnych!
źródło
</svg>
znacznika końcowego .red #ff7f00 #ff0 #0f0 #00f #8f00ff #fff
na liście kolorów i wziąć apostrofów wyłączyć wszystkie wartości parametrów, które nie mają miejsca w nich (cx
,cy
,r
ifill
), ale upewnij się, aby pozostawić przestrzeń pomiędzy wartością wypełnienia, a/
więc kolor nie zostanie błędnie zinterpretowane . Usuń także</svg>
jak sugerowano powyżej.red #ff7f00 #ff0 #0f0 #00f indigo #8f00ff #fff
. Również, jeśli zastąpisz spacje przecinkami,viewBox
możesz również usunąć pojedyncze cudzysłowy dla tego parametru.Minecraft 1.10 (prawie), 2677 znaków jednym poleceniem, 868 blytów
Cóż, na pewno wybrałem pełny język.
Stwórz nowy świat Superflat, wklej ten bałagan do bloku poleceń Impulse, ustaw dość wysoką odległość renderowania i uruchom go. Zniszcz podstawkę na zbroję, gdy komputer przestanie być opóźniony.
Wynik to 400 bloków w poprzek i 200 bloków wysokości, zgodnie z życzeniem.
Kiedyś MrGarretto za jedno polecenie generator zapakować wszystko razem, a następnie zmodyfikowany wynik to trochę zaoszczędzić kilka bajtów więcej. Oto dane wejściowe:
To w sumie 15 1.9+ bloków poleceń i 838 bajtów, więc 15 * 2 + 838 = 868 blytów .
Oto (prawie) część, brakuje jej rogu i krawędzi. Logicznie nie powinno - błąd Minecraft? Byłoby dokładnie 400 x 200 bloków, gdyby nie to. Niewiele mogę zrobić.
źródło
Mathematica
152144126 bajtówDzięki @CatsAreFluffy za zgolenie 8 bajtów i @njpipeorgan na kolejne 18 :)
źródło
#
vs#[[1]]
,#2
vs#[[2]]
, i@@@
vs/@
.Thread
działa zamiastTranspose
.Graphics@MapIndexed[{#,Disk[{0,0},4-#/5&@@#2,{Pi,0}]}&,RGBColor/@TextWords@"#f00 #ff7f00 #ff0 #0f0 #00f #4b0082 #8f00ff #fff"]
oszczędza kolejne 18 bajtów, ale pomysł jest taki sam.vim,
165142139Tak, to jest niezgrabne. Muszą być usprawnienia, które można wprowadzić.
Dane wyjściowe jako SVG, jak moja odpowiedź w języku Pyth .
Dzięki @MyHamDJ za zgolenie 3 bajtów!
źródło
kv3G:norm A'/><cr>
<circle cx...
ciąg w linii 2 za pierwszym razem, zamiast wpisywać wszystkie kolory, a następnie wprowadzać go później.HTML + SVG + ES6, 169
źródło
height=200
icx=200 cy=200 r=${--r}0
zamiastviewBox='0 0 40 20'
. To powinno zaoszczędzić 7 bajtów..replace
metodą ...r-=1
w golfie z kodem ...Rubin z butami, 155 bajtów
Przykładowe dane wyjściowe:
źródło
JavaScript (ES6),
171158 bajtówKredyt @ edc65 za pomysł konwersji
do
Może wyglądać dłużej, ale ilość bajtów zaoszczędzonych na kompresji tablicy do łańcucha jest warta konwersji. (W tym przypadku oszczędza 13 bajtów)
Próbny
źródło
HTML (162) + CSS (146)
HTML (224) + CSS (128)
źródło
SpecBAS -
318254 bajtówJeśli rysujemy tęcze, to wydaje się, że jest to dobre miejsce do korzystania z następcy ZX Spectrum BASIC.
Linia 2 ustawia paletę dla potrzebnych określonych wartości RGB (i prawdopodobnie nie pomaga w liczeniu bajtów), ponieważ standardowe kolory widma nie pasują.
DRAW
Polecenie może wziąć dodatkowy parametr, który czyni go włączyć poprzez szeregstopniradianach między X1, Y1 i X2, Y2. Wreszcie znajduje przerwę w właśnie narysowanych półkolach i wypełnia się bieżącym kolorem.źródło
Tcl / Tk , 263 bajtów
Niestety, tego rodzaju pytania zawsze faworyzują niektóre ezoteryczne języki ... To powiedziawszy, Tcl / Tk naprawdę sprawia, że operacje graficzne są wszystkie: łatwe, krótkie i czytelne .
To powiedziawszy, poświęciłem czytelność ograniczania opcji do jak najmniejszej liczby znaków. Nie wyobrażam sobie, by przeglądanie listy kolorów znacznie pomogło w porównaniu do kodu do rozpakowania ...
Dla porównania, oto niekontrolowany kod (380 bajtów):
after
Polecenie było niestety konieczne, ponieważ bez przewijania (od współrzędnych pochodzenia płótna za) może być wykonane przed okno jest odwzorowany na ekranie.Ponadto, kod crunched w rzeczywistości rysuje a pełną tęczę (używając koła zamiast łuku) i polega tylko na przycinaniu okien ...
W każdym razie mam nadzieję, że wam się spodoba. : O)
źródło
lmap
zamiastforeach
skrócić.pack [canvas .c -bg #FFF -bo 0 -highlightt 0] -e 1 -f both
create oval
; nie ma golfacreate arc
. Czy możesz wyjaśnić?LaTeX, 290 bajtów
Wypróbuj tutaj .
Objaśnienia
źródło
Java, 354 bajty
Wykorzystuje
Graphics2D
klasę do narysowania 7 łuków, z tablicą do przechowywania kolorów. Jestem pewien, że można go jeszcze ulepszyć.Nieskluczony kod:
źródło
0x0000ff
może być sprawiedliwy0xff
lub nawet taki255
sam z0x00ff00
bytem0xff00
.0xff0000
może być255<<16
zapisanie kolejnego bajtu. Twoją pętlą może być zapisanie kilku dodatkowych bajtów. Możesz zapisać jeszcze jeden bajt, dodając,q
do swojejint
deklaracji. Trzeba by to zrobićint c[]=
zamiastint[] c
takq
jestint
i nie jestint[]
. Dzięki temu możesz dodać aq=390-v*20;
do swojej pętli. i zamień na390-v*20
q. To dużo pracy dla jednego bajtu, ale bajt jest bajtem, prawda ?!drawOval
i po prostu renderować górną połowę obrazu ... może być trochę droższy ...void r()throws Exception{BufferedImage i=new BufferedImage(400,200,2);Graphics2D g=i.createGraphics();g.setStroke(new BasicStroke(10));for(int c[]={255<<16,16744192,16776960,65280,255,4915330,9371903},v=0,t;v<7;g.drawArc(t=v*10+5,t,t=390-v++*20,t,0,360))g.setColor(new Color(c[v]));ImageIO.write(i,"PNG",new File("a.png"));}}
( 325 bajtów )Bubblegum ,
139119 bajtówHexdump:
Niestety jest to krótsze niż moja odpowiedź w Pythonie . :(
Generuje ten sam plik SVG.
źródło
CSS,
244242240 bajtówEdycja: Zapisano 2 bajty, omijając błąd w Chrome. Zaoszczędź kolejne 2 bajty dzięki @TrangOul.
Uwaga: fragment korzysta z
<div>
powodu ograniczeń fragmentów stosu.Pokaż fragment kodu
źródło
JavaScript
271251źródło
{ ... }
do wewnątrz ostatniej sekcji, oddzielone przez,
. npfor(i=0;i<8;x.beginPath(),x.arg(...etc...))
. Prawdopodobnie możesz również użyćslice
/splice
substr, jeśli się nie mylę. Może być również krótszy, aby użyć <canvas>.innerHTML
. Lub nawet odpowiedź HTML + JS i podać <canvas> i identyfikator,c
a następnie należy ją automatycznie dodać jako zmienną globalną JSsubstr
ma tę zaletę, że jego drugim parametrem jest długość, a nie przesunięcie. Jeśli chodzi o golfa,document.body
wydaje się , że zapewnia znaczne oszczędności.C,
220217213 bajtówDane wyjściowe to PPM (binarny).
Edycja: Zapisano kilka bajtów dzięki @tucuxi.
Edytuj 2: Zmieniono kod, aby zaoszczędzić jeszcze więcej.
źródło
i;s;t;main()
->s;t;main(i)
, a drugi, umieszczając część ciała pętli for wewnątrz:;)code1,code2;
->;code2)code1;
(zapisano przecinek!).Google Blockly , 48 bloków, 75 bajtów
Kliknij gif poniżej, aby przejść do rozwiązania, w którym możesz dokładniej przyjrzeć się, jak to działa.
Jeśli chodzi o wyjaśnienie, myślę, że obraz jest wart tysiąca słów, a zatem gif jest wart tysiąca obrazów.
link do dużego czytelnego gif
Uwaga: Nie jestem pewien, jak liczyć w trybie Blockly, więc policzyłem każdy blok jako 1 bajt i każdą zmienną w zwykły sposób, tak że
0
== 1 bajt,530
== 3 bajty,Arial
== 5 bajtów ibold
== 4 bajty.Policzyłem znak specjalny, którego użyłem do odcięcia tęczy, jako 2 bajty. Proszę zgłaszać wszelkie błędy lub sugestie dotyczące liczby bajtów w komentarzach
źródło
Postscript (87 bajtów)
Zrzut szesnastkowy:
Wydajność:
źródło
HTML + CSS,
310307 bajtówNieprawidłowy znacznik superduperowania (może wyglądać lub nie w przeglądarce poprawnie). Chciałem tylko sprawdzić, czy to w ogóle możliwe.
źródło
white
można je również skrócić) - nie wiem, dlaczego tego nie widziałem. Próbowałem jednakbgcolor
przed opublikowaniem, ale niestety nie jest już obsługiwany (w każdym razie w Chrome)PHP, 285 bajtów
Wyjścia:
źródło
header()
wywołania, a nawet otwierającego tagu PHP. W systemie Linux najprostszym jest uruchomieniephp -r '$a=imagecreate(400,200);const b=255;for($c=[b,b,b,b,0,0,b,127,0,b,b,0,0,b,0,0,0,b,75,0,130,143,0,b,b,b,b];$i<9;)imagefilledellipse($a,200,200,$r=420-$i*20,$r,imagecolorallocate($a,$c[$j=$i++*3],$c[$j+1],$c[$j+2]));imagepng($a);' | display
z wiersza polecenia i policzenie go jako 227 znaków. (Przy użyciu PHP 5.6.11.)Bash + ImageMagick,
159125 znakówPrzykładowe dane wyjściowe:
źródło
Przetwarzanie,
196186181179169163 bajtówZaoszczędź 10 bajtów dzięki Kritixi Lithos
... i kolejne 6 bajtów dzięki dzaima
źródło
for(int i=0;i<8;i++)
wfor(int i=0;i++<8;)
podobny lub podobnysize()
background(-1)
jest krótszy niż jeden bajtbackground(255)
, a można zmienić255
w tablicyc
aby-1
zapisać kolejny bajtR
18470170 bajtówTworzenie obrazu ze stałymi wymiarami pikseli okazuje się zaskakująco trudne w przypadku R, którego funkcje drukowania są przeznaczone głównie dla statystyków. W szczególności R pozostawia dodatkowe miejsce na etykiety i osie współrzędnych, chyba że jawnie ustawisz marginesy jako zerową szerokość przez wywołanie
par
.Z drugiej strony niektóre wymagane kolory (szczególnie czerwony, żółty i niebieski) znajdują się w domyślnej palecie i można do nich odwoływać się po prostu za pomocą wskaźników liczb całkowitych.
źródło
Forth Salon Haiku (184 bajty)
Nie mogę spełnić ograniczeń wymiarów w tym formacie, ale pomyślałem, że i tak warto to udostępnić.
źródło
Excel VBA,
213202196192172 bajtówKod
Anonimowa funkcja bezpośredniego okna VBE, która nie pobiera danych wejściowych i wysyła tęczę jako obraz wektorowy do obiektu arkusza (1)
Wersja podprogramu
-11 bajtów do usunięcia
.Adjustments(3)=3/80
połączenia i dodania ósmego białego łuku-6 bajtów dla użycia
-1
ponad&HFFFFFF
-3 bajty za użycie
Sheet1
overSheets(1)
-6 bajtów do konwersji
with
instrukcji naset
instrukcję-14 bajtów do konwersji z
Sub
anonimowej funkcji VBEWydajność
źródło
DIV Games Studio (184 bajty)
Nie najkrótszy, ale dość prosty. Używa domyślnej palety DIV
Wyjaśnienie
Zdefiniuj początek programu (o nazwie „r”, aby zaoszczędzić miejsce)
wyszukiwanie palety konfiguracji
BEGIN kod programu
Ustaw tryb wideo na 400,200
pętla x (predefiniowana zmienna) od -80 (który hack hg) do 80 (7 kolorów + biały środek)
zdefiniuj ograniczenia elipse
narysuj elipsę - przy pierwszej iteracji rysuje koło większe niż ekran w kolorze białym (indeks -8)
rysuj (typ (5 = wypełniona elipsa), kolor, krycie, x0, y0, x1, y1)
po zakończeniu najpierw uderz x do zera, aby rozpocząć rysowanie czerwonego paska
koniec pętli
nieskończona pętla, ekran do rysowania.
koniec (dopasowuje POCZĄTEK na początku programu)
źródło
Perl, 175 + 1 = 176 bajtów
źródło
PHP, 190 bajtów
Uruchom tak:
Teoretycznie działa również przy 179 bajtach (ale obraz wygląda na nieco pomieszany, zły GD):
Również nie jest to idealny obraz, ale znacznie lepszy niż powyższe (i @ 166 bajtów):
źródło