Kiedy natknąłem się na to pytanie , przypomniałem sobie, że kiedyś widziałem dokładne zasady budowy flagi Korei Południowej. A to zupełnie inna konstrukcja.
Więc teraz narysuj dokładną konstrukcję tego!
Specyfikacja
Możesz renderować flagę do pliku lub ekranu za pomocą grafiki wektorowej lub rastrowej. Jeśli wyniki są rasteryzowane, obraz musi mieć wymiary co najmniej 450 x 300 pikseli.
Wszystkie proporcje długości i pozycje muszą być dokładnie takie, jak pokazano na poniższym schemacie:
Zauważ, że środki dwóch małych kółek są wyrównane z przekątną.
W przypadku kolorów należy użyć następującej palety:
- Biały: #FFFFFF
- Czarny: # 000000
- Czerwony: # C60C30
- Niebieski: # 003478
Czarnej granicy nie można narysować, chyba że system rysowania nie zezwala na określenie obszaru roboczego 3: 2 z przyczyn technicznych (w przeciwnym razie należy użyć obszaru roboczego 3: 2, a flaga powinna wypełnić całość). Jeśli musisz dodać granicę, może ona być dowolnie gruba - flaga powinna być uważana za ściśle wewnątrz czarnej granicy. Nie wolno rysować żadnych innych linii pomocniczych ani wskaźników długości. Oznacza to, że flaga powinna wyglądać dokładnie tak, jak na pierwszym obrazie.
Punktacja
To jest kod golfowy, więc wygrywa najkrótsza odpowiedź (w bajtach).
Jako ostrzeżenie, użycie istniejącej kompresji (jak osadzenie skompresowanego pliku GIF) wpada w kilka standardowych luk .
źródło
CountryData["ROK","Flag"]
że się nie liczy?Odpowiedzi:
PHP / HTML / SVG, 324
(dodano podział linii dla czytelności)
Skompresowane dane są rozszerzane do tych samych danych SVG, co moja poprzednia odpowiedź pokazana poniżej, ale z dwiema zmianami ułatwiającymi kompresję:
Dwie
<use>
sekcje są rozwinięte do oryginalnej zawartości<defs>
sekcji. To wydłuża tekst źródłowy, ale zmniejsza entropię, dzięki czemu lepiej się kompresuje.W pierwszym
<g>
elemencie zmieniłemtransform=translate(36,24)rotate(33.69)
natransform=rotate(33.69)translate(43.27)
. Ma to ten sam efekt geometryczny, ale lepiej kompresuje, ponieważ sekwencja><g transform=rotate(
pojawia się teraz dwukrotnie.Domyślnie PHP będzie to służyło
Content-Type: text/html
, więc nieprawidłowa składnia XML nie powinna stanowić problemu.SVG / HTML, 463
Parser HTML nie jest zbytnio zorientowany na poprawną składnię, więc możemy pozbyć się cudzysłowów w parametrach, o ile nie zawierają spacji. Powinno być możliwe ściśnięcie tego nieco przy pomocy Javascript.
źródło
Python + Pycairo,
371 370366 bajtówWysyła mały plik SVG o nazwie
F
.źródło
C(*[.77,0,.05,.2,.19,.47][i::2])
jest krótszy niżC(*[(.77,.05,.19),(0,.2,.47)][i%2])
s=SVGSurface("F",12,8);c=Context(s)
zamiast po prostuc=Context(SVGSurface("F",12,8))
?HTML + CSS,
966 906 843 792762 bajtówW żadnym wypadku nie zwycięzca, ale dużo zabawy w rysowaniu w CSS. Można to jednak bardzo pograć w golfa.
CSS, HTML :
;border:1px solid
jest tylko na pokaz, ponieważ<body>
tag ma wyraźne granice, które mogą być obserwowane przez Inspektora lub podobne narzędzia, jak stwierdził POUWAGA Działa tylko w przeglądarce Firefox (lub Chrome canary / dev) ze względu na użycie transformacji i gradientów innych niż określone przez producenta.
Zobacz to w akcji
źródło
0deg
->0
(dwa razy) i usunąćleft:0
za:before
. W HTML możesz użyć<p><ul></ul>
. (<p>
zostanie wcześniej domyślnie zamknięty<ul>
):before{content:''}
i:after{content:''}
są dłuższe niż dodawanie kolejnego elementu (pomimo tego faktycznie wygląda lepiej).-webkit-
przed wszystkimi literamitransform:
, ale nie trzeba dodawać , że dzięki temu będzie to trochę dłużej!BBC Basic,
349343 znaków ASCII, tokenizowany rozmiar pliku 330Pobierz emulator na http://www.bbcbasic.co.uk/bbcwin/bbcwin.html
Używanie prawidłowych kolorów dodawało dużo, ale gra w golfa wszystkimi poleceniami graficznymi aż do nieprzetworzonych kodów VDU daje oszczędność 6 znaków w porównaniu z moim oryginalnym postem. Cała grafika w BBC micro odbywa się za pomocą specyficznych dla maszyny kodów sterujących ASCII, więc zamiast używać komend graficznych wysokiego poziomu, możesz podawać bajty bezpośrednio do kontrolera VDU (zwykle krótszy, ale kosztem czytelności). Wartość kończąca się średnikiem zamiast przecinkiem to 16-bitowa reprezentacja little-endian 2 bajtów.
Wersja bez golfa
Na początku programu przesuwam początek na środek ekranu.
Nie rysuję żadnych dużych kolorowych półokręgów. Zamiast tego uruchamiam pętlę, która rysuje małe czerwone i niebieskie kółka, obracając się w kierunku przeciwnym do ruchu wskazówek zegara. Robię prawie 3 pełne obroty (zaczynając od niebieskiego po prawej), co oczywiście jest więcej niż wystarczające do wypełnienia dysku. Zatrzymuję się na 3. rewolucji, gdy niebieski w prawym dolnym rogu znajduje się we właściwej pozycji, aby zrównać się z pasami (które trzeba wykreślić).
Kiedy kąt jest odpowiedni, rysuję jeden z pasków. wektor x, y do rysowania bieżącego małego niebieskiego koła służy do wskazania, w którym kierunku powinien być pasek. Dla każdego z 3 obrotów
a*7DIV44
obliczana jest inna wartość liczby całkowitej , która określa, czy należy narysować pierwszy, drugi lub trzeci takt z wewnętrzną krawędzią 6 / 8,7 / 8 lub 8/8 jednostek od środka ( zgodnie z jednostkami użytymi w specyfikacji pytania.) Ponieważ jednostki programu są 1/4 jednostek w specyfikacji, jest to nadal połowa jednostki, więc dzielimy ponownie przez 2 przed zapisaniem do zmiennej „b”, aby uniknąć powtarzania połowy później.Słupki są rysowane w sposób ciągły, a w razie potrzeby środek jest usuwany. Zapobiega to łączeniu załamań. Zmienna z wskazuje, czy należy wyciąć pręt. To znaczy, gdy y jest ujemne dla środkowych słupków, a gdy x jest dodatnie dla pozostałych słupków.
MOVE
to ruch absolutny.MOVEBY
jest ruchem względnym.PLOT133
traktuje dwie ostatnie pozycje kursora graficznego plus nową podaną (we współrzędnych względnych) jako trzy rogi równoległoboku i kreśli ten równoległobok.Wynik (i omówienie ograniczeń językowych)
Wybrałem tryb ekranu 1280 x 800 pikseli logicznych = 640 x 400 pikseli fizycznych, który domyślnie ma czarne tło. Na tym rysuję biały prostokąt od -600, -400 do 600,400, aby działał jak moje „płótno”.
BBC Basic może obsługiwać 16 kolorów jednocześnie, z programowalnej palety. Ale obsługuje tylko 18-bitowy kolor, podczas gdy pytanie określa kolory jako 24-bitowe. Kolory jak najbliżej.
źródło
Pyton 3? Ó (
552549 bajtów)( Obraz w pełnym rozmiarze )
Edycja: Teraz, gdy mamy fragmenty stosu, oto test fragmentu stosu za pomocą Skulpt , z pomocą odpowiedzi ArtOfCode tutaj . Niestety, Skulpt nie wdrożył jeszcze w pełni Pythona, więc musiałem okaleczyć połowę mojego kodu, aby to zadziałało. Innymi słowy, ten fragment kodu ma jedynie wskazywać, jak działa mój program (bez konieczności pobierania Pythona).
(Uważam również, że może to nie działać w niektórych przeglądarkach ...)
Rzeczywisty kod:
Ponieważ żółw jest taki powolny, jeśli chcesz natychmiastowych rezultatów, możesz dodać
t.tracer(0)
po pierwszym wierszu przed uruchomieniem skryptu.Uwaga: z jakiegoś powodu żółw wciąż rysuje coś, co wygląda jak dodatkowe czarne piksele, mimo że już zadzwoniłem
up()
, i nie mam pojęcia, dlaczego ...źródło
HTML + ES6, 388
Jeśli Twoja przeglądarka obsługuje ES6, możesz wyświetlić ją na JSFiddle lub uruchomić fragment kodu .
Konstruuje flagę z kilku podstawowych kształtów, najpierw obracając płótno, aby uwzględnić kąty.
źródło
<canvas width=576 height=384 id=D><script>c=D.getContext('2d')
jest o 9 bajtów mniej. Ponadto, ponieważ cała strona jest biała, myślę, że musisz narysować granicę.Mathematica
404450źródło
C ++ ZBYT DUŻY
Próbowałem to przy użyciu mojej domowej biblioteki rysunków PPM . Jest technicznie skalowalny, ale jestem ograniczony przez moją funkcję rekurencyjnego wypełniania, ponieważ jest zawodna i lubi segfault, myślę, że zużywa zbyt dużo pamięci, więc nie pozwolę użytkownikowi ustawić skali. Obraz jest nieregularny, ponieważ współrzędne, które wpisałem dla każdego rogu słupków, są nieco wyłączone.
Ustawiłem go tak, aby zaczynał od czarnego tła, następnie umieściłem biały okrąg na środku, a następnie czerwony i niebieski okrąg. Użyto rekurencyjnych wypełnień, aby dodać resztę czerwieni i niebieskiego. Następnie narysuj prostokąty białymi liniami, aby zaznaczyć czarne pasy. Podziel czarne tło na 4 sekcje z białymi liniami i użyj 4 rekurencyjnych wypełnień, aby każda sekcja była biała. Wykonanie tego w jednym przejściu spowodowałoby awarię. Renderowanie jest nadal bardzo wolne.
Nieskluczony kod główny (reszta biblioteki jest za duża, gra w golfa nie ma znaczenia)
źródło
PostScript ,
572477 bajtówKod do gry w golfa:
Nieskluczony kod:
Wynik:
źródło
Python 2, 483 bajty
Możliwe ulepszenia:
Wyjście jako tekst PPM, użycie:
wersja beta bez gry w golfa
źródło