Napisz program lub funkcję, która przyjmuje dodatnią liczbę całkowitą N i wysyła piksel N × N logo Google „G” zgodnie z następującą * konstrukcją:
Na przykład, jeśli N ma wartość 400, należy wydrukować logo o wymiarach 400 x 400 pikseli, o prawidłowych wymiarach i kolorach:
Powinien on wyglądać dokładnie, niezależnie od tego, jak duży lub mały jest N. np. tutaj jest N = 13:
Twój kod nie powinien wymagać połączenia z Internetem. Na przykład skalowanie hostowanego zewnętrznie pliku SVG jest niedozwolone. (Skalowanie pliku svg zakodowanego w kodzie byłoby jednak w porządku).
Wygładzanie może być stosowane lub nie. To zależy od Ciebie.
Zauważ, że poziomy pasek „G” nie rozciąga się aż do prawej krawędzi obrazu. Okrąg wygina się normalnie do wewnątrz na prawej krawędzi przed odcięciem.
Najkrótszy kod w bajtach wygrywa.
* Konstrukcja logo została uproszczona dla tego wyzwania. Prawidłową konstrukcję można zobaczyć tu i tutaj .
źródło
.svg
gotową wersję i zakodować ją w naszym rozwiązaniu, czy też musimy ją pierwotnie wykonać?Odpowiedzi:
Mathematica,
229226225224221206169 bajtówDzięki @MartinEnder za 1 bajt, @ChipHurst za 37 bajtów!
Co za fajne wyzwanie!
Wyjaśnienie
Iteruj od 1 do 4 ...
Konwertuj kolorowe kody szesnastkowe na
RGBColor
obiekty, aby można je było zastosować do grafiki logo Google. Zmień paletę kolorów na<input>
kolor th.Utwórz wypełniony prostokąt (prostopadłościan 2D), którego narożniki po przekątnej to (0, -1) i (sqrt (24), 1).
Wygeneruj cztery wypełnione ćwiartki
Annulus
, wyśrodkowane na początku, z wewnętrznym promieniem 3 i zewnętrznym promieniem 5. Nie rysuj obokArcCsc@5
(gdzie kończy się niebieski segment).Utwórz grafikę o rozmiarze N x N, od x = -5 do x = 5 (usuwa wypełnienie).
Wyjścia
N = 10
N = 100
N = 200
N = 10000 (kliknij obraz, aby uzyskać pełną rozdzielczość)
źródło
C (Windows), 311 bajtów
Bierze „N” jako argument wiersza poleceń i rysuje bezpośrednio na ekranie.
Bez golfa:
źródło
0xF48542
i0xFFFFFF
w całkowitych.gcc g.c -lgdi32
na mingw.-1>>8
może również działaćPython 2,
244220 bajtówużywając transformacji Martina Rosenau na płaszczyźnie [-1,1] ^ 2 i drobnych golfa, takich jak usuwanie
0.
lub nawiasyWyjaśnienie:
Wyjście jako binarny PPM, użycie:
Przykłady
poprzednie rozwiązanie 244 bajtów
Ungolfed beta wersja przed eliminacją if / else:
źródło
1for
działa.1for
dodanie próbki wyjściowej @Cyoce0.x
można zmniejszyć do.x
:)JavaScript (ES6),
408 ... 321317 bajtów384 383 371 367 359 327 316 308304 bajty JavaScript +2413 bajtów dla elementu canvasZapisano 1 bajt, rysując w lewo.
11 bajtów zapisanych w HTML dzięki Conor O'Brien.
12 bajtów zapisanych przy użyciu
with
bloku dzięki Prinzhorn.4 bajty zapisane z lepszym wykorzystaniem
z=q-y/2
.8 bajtów zapisanych przy użyciu
parentNode
ibackground
dzięki Alexis Tyler.32 bajty zapisane dzięki bardziej precyzyjnemu rysowaniu niebieskiego łuku / paska, więc nie muszę już wymazywać jego części.
11 bajtów zapisanych przez ustawienie canvas css zamiast jego parentNode dzięki Tejas Kale.
8 bajtów zapisanych za pomocą
with
imap
za pomocą pojedynczej instrukcji, zamiast `2d` zamiast('2d')
,n/5
zamiast.2*n
inicjalizacji tła wprompt(...)
.4 bajty zapisane, zastępowane
Math.PI/4
przez.7854
co wydaje się wystarczająco precyzyjne dzięki RobAu.Wyjaśnienie:
Wymiary obszaru roboczego są inicjowane przez użytkownika, a tło jest ustawione na biały.
q
jest zainicjowany.Dla każdego koloru rysuje część koła, z pewną korektą dla ostatniego (niebieskiego). Pasek jest rysowany dla każdego koloru w tym samym miejscu o tych samych wymiarach, więc widoczny jest tylko ostatni (niebieski).
źródło
<canvas id=d></canvas>
powinien działać i<canvas id=d>
może działać.d.style
też działa. Co pozwala(f = d.style).width = f.height = n = prompt() + 'px';
.785398
zamiastMath.PI/4
golić 2 bajty (lub więcej, jeśli mniej dokładność jest w porządku.BBC BASIC, 177 bajtów
Pobierz tłumacza na http://www.bbcbasic.co.uk/bbcwin/download.html
BBC BASIC używa 2 jednostek = 1 piksel, więc wykreślamy G
n
jednostek promienia (= n / 2 pikseli) w środkun,n
.Chodzi o to, aby narysować serię promieniowych linii, zmieniając odpowiednio kolor. Stwierdzono, że między liniami występowały niewielkie przerwy z powodu obcięcia liczb podczas konwersji na piksele, więc zamiast tego drukowane są cienkie trójkąty.
Po zakończeniu przeciągnięcia linii kursor znajduje się w prawym górnym rogu niebieskiego obszaru. Podano pojedynczą współrzędną dla przeciwległego rogu po przekątnej, aby narysować prostokąt w celu uzupełnienia kształtu.
Nie golfił
źródło
HTML / JS,
680624 bajtówAby uzyskać 624 bajty, usuń ostatni
;
, jest to konieczne dla poniższego fragmentu ze względu na sposób importowania HTML. Ponadto Firefox wydaje się nie obsługiwaćimage-rendering: pixelated
i potrzebuje-moz-crisp-edges
zamiast tego (dzięki @alldayremix !), Co sprawia, że Firefox +7 działa, ale działa w Chrome zgodnie z oczekiwaniami.Wykorzystuje JavaScript do żądania
N
oraz<style>
blok do pozycjonowania / pokolorowania elementów. Wykorzystuje podstawowe elementy HTML, zamiast stosować style do kanwy (co, jak się wydaje, było znacznie krótsze!). Jest to zmienione podejście z użyciemdata:
obrazu tła URI zamiast tylko kolorowych elementów. Zachowałem poprzednie podejście na wypadek, gdyby to nowe działało na mniejszej liczbie przeglądarek.Myślałem, że będzie o wiele mniejszy niż ostatecznie, ale mimo to było to ciekawe ćwiczenie!
Poprzednia wersja:
źródło
image-rendering: -moz-crisp-edges
zamiastpixelated
. Doda notatkę do tego efektu. Lubię styl gradientu! :)Bash z Imagemagick (ale tak naprawdę Postscript),
268255249 bajtówPodwojono skalowanie, aby usunąć
setlinewidth
, zastąpiono jednym współczynnikiem skalidup
i połączyłem spację wA
zmienną (nie można tego zrobić,C
ponieważ$C45
jest analizowany jako „zmiennaC45
”).Dzięki joojaa za sugerowanie tych zmian!
Stara skala, 255 bajtów
Pobiera N jako jedyny argument i wysyła do o.png.
Ungolfed Postscript for Old Scale
źródło
61.2 dup scale
, możesz również dodać spację w CC=' setrgbcolor 5 5 4 '
i golić 4 spacje. Jeśli zaprojektowałeś to w połowie skali, możesz pominąć2 setlinewidth
MATLAB,
189184 bajtówbez golfa
źródło
Perl 5,
486477476450 (+7 dla-MImager
flagi) = 457 bajtówZa sprawą Dady zaoszczędziłem kilka bajtów, używając
new
wywołań funkcjonalnych i pozbywając się parenów, a takżepop
zamiast$ARGV[0]
ostatniego średnika. Zaoszczędziłem trochę więcej, umieszczając to$n=pop
tam , gdzie jest po raz pierwszy użyte, i używając notacji przestrzeni nazw Perl 4'
zamiast::
.Wymaga modułu Imager , który należy zainstalować z CPAN. Bierze jedną liczbę całkowitą jako argument wiersza poleceń. Obraz nie jest wygładzony, więc jest trochę brzydki.
Skopiuj poniższy kod do pliku g.pl. Potrzebujemy dodatkowych +7 bajtów na
-MImager
flagę, ale to oszczędza kilka bajtów, ponieważ nie jest to konieczneuse Imager;
.Oto różne rozmiary:
N = 10
N = 100
N = 200
Całkowicie nieznany kod jest prosty.
Ten post poprzednio miał kod w kształcie obrazu wyjściowego. Ponieważ jest to niezgodne z zasadami kodeksu golfowego, musiałem go usunąć. Zobacz historię zmian, jeśli chcesz rzucić okiem. Użyłem Acme :: EyeDrops do stworzenia tego, o kształcie, który utworzyłem z obrazu utworzonego za pomocą samego programu, który przekonwertowałem na grafikę ASCII. Kod I ukrywane już grałem, które mogą być postrzegane przez zastąpienie pierwszy
eval
zprint
.źródło
pop
zamiast$ARGV[0]
.$h=($n=pop)/2
zamiast$n=pop;...;$h=$n/2
.new Imager::Color"#$_"
zamiastImager::Color->new("#$_")
. (i zapomniałeś upuścić ostatni średnik). Ale jeszcze raz, to tylko małe szczegóły, twój kod jest naprawdę świetny! (Nie mogłem tego zrobić! Nawet o tym nie wiedziałemImager
, co jest całkiem wygodne!)Imager'Color
z ogranicznikiem przestrzeni nazw Perl 4 zapisuje kolejny bajt. :)-MImager
jest krótszy niżuse Imager;
:)$n=pop
donew
argumentu ratuje pareny i średnikPHP + SVG, 300 bajtów
Część skalująca jest
width=<?=$_GET[w]?>
Wyjście dla wartości 333
źródło
"
) a następnym atrybutem? Np.<svg width="333" viewBox="0 0 10 10">
-><svg width="333"viewBox="0 0 10 10">
M 0,5 A 5 5 0 0 1 5,0 V 2 A 3,3 0 0 0 2,5
=>M0,5A5 5 0 0 1 5,0V2A3,3 0 0 0 2,5
echo
oświadczeniu użyj ciągu podwójnego cudzysłowu, aby zezwolić na zmienne wbudowane i usunąć średnik:echo'<use xlink:href="#c"fill="#'.$k.'"transform="rotate($v,5,5)"/>';
=>echo"<use xlink:href='#c'fill='#$k'transform='rotate($v,5,5)'/>"
<rect x=5 y=4 fill=#4285f4 width=4.9 height=2 />
(tutaj jednak będziesz potrzebować miejsca przed/
.)Logo, 258 bajtów
... bo myślę, że logo powinno być wykonane przy użyciu Logo . Jest to realizowane jako funkcja. Opracowałem go za pomocą internetowego interpretera logo Calormen.com
Początkowo próbowałem narysować każdy segment i malować go, ale okazało się, że był większy niż oczekiwano. Było wiele zmarnowanych ruchów i takie tam. Zamiast tego zdecydowałem się na zamiatanie wykresu biegunowego, dostosowując kolor na podstawie nagłówka. Trudniejszą częścią matematyki było wykonywanie geometrii krzywej u góry prostokąta G. Możesz przyciąć niektóre miejsca po przecinku i mieć mniejszą dokładność, ale chciałem, aby była to dokładność do około 3 cyfr, aby pomieścić typowe rozmiary ekranu.
Grał w golfa
Próba
g 200
Nie golfił
źródło
JavaScript (ES7),
285258254252251 bajtówMonituje o szerokość logo (do 999) i rysuje je na kanwie, piksel na piksel.
Edycja : Początkowa wersja konwertuje współrzędne kartezjańskie na współrzędne
(x,y)
biegunowe(r,a)
, ale tak naprawdę nie potrzebujemy kąta. Łatwiej (i znacznie krócej) po prostu dokonać porównańx
iy
dowiedzieć się, w którym kwartale jesteśmy.Edycja : Zapisano 1 bajt dzięki produktom ETH.
J,
251224220218217 bajtówHTML, 34 bajty
Wersja ES6:
258231227225224 + 34 = 258 bajtówZalecana maksymalna szerokość fragmentu: 190.
źródło
<-
i-->
operatorzy?” Wydaje mi się, że tak się dzieje, kiedy przez 24 godziny zastanawiałeś się nad hipotetycznymi operatorami dla hipotetycznego języka ...: P-->
jako początek (?) Komentarza HTML, jeśli jest on umieszczony w<script>
znacznikach w pliku HTML.123 --> comment
zgłasza błąd w mojej konsoli przeglądarki (Firefox 49), podczas gdy--> comment
nie.C #, 276 + 21 = 297 bajtów
276 bajtów dla metody + 21 bajtów dla importu System.Drawing.
Na podstawie algorytmu Martina Rosenau. Dzięki za trudny pomysł wymyślenia sposobu na zbudowanie obrazu!
26:
400:
źródło
0xFF...
JS /CSS / HTML (+ JS),400 +701644617593 +1739097 121 =714 bajtów914774754730Używa gradientów liniowych zamiast przekształceń. Edycja: Zapisano 140 bajtów dzięki @darrylyeo. Zaoszczędzono 20 bajtów, używając dodatkowego elementu zamiast gradientu. Zaoszczędź 24 bajty dzięki @DBS. Zaoszczędź 16 bajtów dzięki @Hedi. Od tyłu do przodu różne warstwy to:
a
Niebieskie kołob
Biały prostokąt zasłaniający część nad paskiemc
Czerwono-żółta górna lewa ćwiartkad
Czerwony oktant w prawym górnym rogue
Żółto-zielony dolny lewy kwartałf
Zielona / niebieska dolna prawa ćwiartkag
Wewnętrzny biały okrągh
Poziomy niebieski pasekźródło
a
,b
,i
,s
, itd. Użyj*
zamiastdiv
do selektora CSS.background
jako skrótubackground-image
.border-radius
. Np.c{border-radius:100% 0 0;
Zamiastc{border-top-left-radius:100%;
Ruby 2.3.1,
376359 bajtówKorzystanie z klejnotu RMagick.
Przykłady
50 x 50
250 x 250
500 x 500
1000 x 1000
Plik przyjmuje dwa parametry - pierwszy to wymiar, a drugi to nazwa pliku, w którym zapisuje się wynik.
Nie golfił
Początkowo zacząłem rozwiązywać to za pomocą oily_png / chunky_png, ale to prawdopodobnie skończyłoby się o wiele za skomplikowane w porównaniu z RMagick. Funkcja .ellipse firmy RMagick sprawiła, że było to proste, a głównym zadaniem było dopracowanie kształtów / rozmiarów wszystkiego.
To jest moje pierwsze zgłoszenie do Code Golf (również pierwsza odpowiedź SE) i uważam się za trochę pośredniego w Ruby. Jeśli masz jakieś uwagi na temat ulepszeń / wskazówek, podziel się nimi!
źródło
Python 2,
378373 bajtówNaprawdę chciałem to zrobić za pomocą
turtle
. W tym celu musiałem odkurzyć swoją wiedzę na temat geometrii, obliczając kąty i długości, których nie podano w opisie wyzwania.Edycja: usunięto
up()
, ponieważ powoduje to usunięcie małego fragmentu bieli między zielonym a niebieskim i sprawia, że wewnętrzny okrąg wygląda lepiej. To jeszcze bardziej spowalnia program.Edycja: zastąpione
9*n
przez,2*n
aby przyspieszyć. Ustaliłem, że nadal będzie tworzyć gładki okrąg.Uwagi:
n
jeśli je usunieszspeed(0)
, co dodałem tylko dla szybkości.circle
wzrostuO(n)
, ponieważ określa on, ile stron ma wielokąt wpisany do rysowania koła.Wypróbuj online
Ungolfed: Wypróbuj online
Ciekawostka:
Trinket
jest anagramemTkinter
pakietu GUI Pythona i podstawąturtle
.źródło
n
dla mnie? Jeśli to nie wygląda ładnie, być może będę musiał wstawić trochęsqrt
s, aby być bardziej dokładnym. Zaokrągliłem do tysięcznych.PHP + GD,
529449 bajtówPobiera parametr ciągu zapytania
n
i wyświetla wersję PNG logo o określonym rozmiarze.Nie golfowany:
N = 13:
N = 200:
źródło
imagecolorallocate
; po prostu podaj 0xRRGGBB jako kolor do funkcji rysowania. Trochę więcej gry w golfa i to do 329 bajtów:imagefill($i=imagecreatetruecolor($n=$argv[1],$n),0,0,($m=[4359668,3450963,0xfbbc05,0xea4335,0xffffff])[4]);for($j=-11.6;$e=[45,135,225,315][$k];$j=$e)($a=imagefilledarc)($i,$h=$n/2,$h,$n,$n,$j,$e,$m[$k++],0);$a($i,$h,$h,$n*.6,$n*.6,0,0,$m[4],0);imagefilledrectangle($i,$h,$h-$n*.1,$h+$h*.98,$h+$h*.2,$m[0]);imagepng($i,"g.png");
uruchom-r
, pobiera dane wejściowe z wiersza poleceń i dane wyjściowe dog.png
.[$k
musi być[+$k
. Ale to też powinno działać:imagefill($i=imagecreatetruecolor($n=$argv[1],$n),0,0,$w=2**24-1);$j=-11.6;foreach([$b=4359668,3450963,0xfbbc05,0xea4335]as$c)($a=imagefilledarc)($i,$h=$n/2,$h,$n,$n,$j,$j=45+90*$k++,$c,0);$a($i,$h,$h,$p=$n*.6,$p,0,0,$w,0);imagefilledrectangle($i,$h,$n*.4,$n*.99,$p,$b);imagepng($i,"g.png");
(291 bajtów)imagecolorallocate
. Zaktualizuję moją odpowiedź za pomocą twojego kodu. Ale czy musisz wyprowadzać dane do nazwy pliku? Nie możesz po prostu pominąć nazwy plikuimagepng
i po prostu wysłać go na standardowe wyjście?Java, 568 bajtów
Nie najsilniejszy język do gry w golfa, ale oto moja największa próba:
Stosowanie:
Wersja bez gry w golfa - podstawową ideą jest praca w układzie współrzędnych u, v ∈ [−0,5, 0,5] i obliczanie odległości i kąta każdego piksela od centrum obrazu:
Moja implementacja oblicza i rysuje surowe piksele. Możliwe jest stworzenie alternatywnej implementacji korzystającej z procedur graficznych wysokiego poziomu, takich jak Graphics2D i Arc2D, do rysowania, szczególnie z wygładzaniem krawędzi .
źródło
Idź, 379 bajtów
Funkcja
f
pobiera pojedynczyint
argument (współczynnik skali) i wyświetla odpowiednio skalowany obraz SVG.Wypróbuj online w Ideone.
Przykładowe dane wyjściowe:
Wydaje się niewłaściwe uspokajanie naszych władców Google w jakimkolwiek języku programowania oprócz własnego.
źródło
CJam, 141
Wypróbuj online
Wysyła obraz w formacie ASCII ppm.
W przypadku wersji ASCII-art, która jest ładniejsza w przeglądarce, wypróbuj ten kod . Pomaga również wizualizować algorytm.
Wyjaśnienie:
źródło
JavaScript (ES6) (+ SVG), 293 bajtów, niekonkurujący
Niestety łączenie linii okrągłej nie jest pożądanym efektem, ale jest całkiem blisko.
źródło
FreeMarker + HTML / CSS, 46 + 468 = 514 bajtów
HTML:
CSS:
Zakładając, że procesor FreeMarker jest wykonywany przy użyciu
n
zestawu zmiennych reprezentujących dane wejściowe.Objaśnienie liczb magicznych:
Wszystko opiera się na opakowaniu 10x10 pikseli, a następnie skalowane według
n/10
.Ungolfed JSFiddle
źródło
transform:scale(n)
siętransform:scale(<?=$_GET[n])?>
(PZP). W javascript możesz dołączyć część CSS do elementu stylu343 oktetów Haskell
Wyjaśnienie
źródło
0x7C
/124
/|
), w którym to przypadku byłoby to 338 septetów Haskell . Biorąc jednak pod uwagę, jak w ostatnich kilku dekadach stało się standardowe przechowywanie od 8 bitów do bajtu , myślę, że termin „bajty” jest wystarczająco szczegółowy, nie pokonując martwego konia.SAS -
590536521 bajtówWykorzystuje to funkcję Adnotacji GTL . Dane wejściowe są określone w makrozmiennej w pierwszym wierszu. Dla kilku dodatkowych bajtów możesz zdefiniować całość jako makro. Nadal zakrada się pod Javą i kilkoma odpowiedziami HTML, nawet jeśli musisz zdefiniować szablon wykresu zerowego, aby w ogóle móc wykreślić cokolwiek!
Zostawiłem przerwy w linii dla odrobiny czytelności, ale nie liczę ich do sumy, ponieważ działa bez nich.
Edycja: zeskrobano kilka kolejnych bajtów za pomocą zmiennych makr, ustawień domyślnych i wyboru operatorów.
Edycja 2: pozbyłem się
do-end
bloków dlaif-then-else
logiki i jakoś nadal działa - nie do końca rozumiem jak. Odkryłem teżeuclid
funkcję!źródło
SCSS - 415 bajtów
Pobiera dane wejściowe jako
$N: 100px;
i<div id="logo"></div>
, nie jestem pewien, czy powinny one liczyć się w sumie ...Demo na JSFiddle
źródło
Haskell z pakietem JuicyPixels , 306 bajtów
Przykład użycia:
Można to prawdopodobnie poprawić. Chodzi o to, aby przekazać funkcję,
generateImage
która wybiera piksel (naprawdę kolor), który powinien przejść w pozycji x, y. W tym celu używamy lambda, która dodajen
jako parametr i konwertuje je wszystkie na liczby zmiennoprzecinkowe w tym samym czasie.#
Funkcja zasadzie sprawdza, czy jesteśmy w ringu, w barze, lub też nie. Jeśli to pierścień, przekazujemy pałeczkę%
, jeśli pasek po prostu zwracamy niebieski, w przeciwnym razie biały.%
sprawdza, w którym kwadrancie się znajdujemy, i zwraca odpowiedni kolor, jeśli nie jest niebieski. Niebieski jest szczególnym przypadkiem, ponieważ musimy upewnić się, że nie zawija się na czerwony, więc zwracamy niebieski tylko, jeśliy
znajduje się poniżej „linii kreskowej”, w przeciwnym razie zwracamy biały. To jest ogólny przegląd.źródło
Processing.py - 244 bajty + 1 bajt na liczbę cyfr w N
Zacznijmy od kodu. Można to wkleić w środowisku przetwarzania i uruchomić (zmieniając
N
dla różnych rozmiarów).Mały cheat: okrąg, który wycina część z logo, jest rysowany w odcieniu 205 w skali szarości firmy Processing, który jest domyślnym kolorem tła. Eksportowanie tego do obrazu nie wyglądałoby tak samo. To oszczędza połączenie z
background(255)
.Wyjaśnienie
Przykłady
N
= 400N
= 13 (minimalny rozmiar przetwarzania to 100 x 100)Uwaga
Jeśli pozwolimy na ręczną edycję wielu wartości dla
N
jawnych wywołań dosetup
idraw
nie są one potrzebne i jest to do 213 bajtów + 3 bajty na cyfrę wN
.źródło