Narysuj flagę narodową Islandii

107

Tegoroczny UEFA Euro 2016 się skończył, a oprócz kilku negatywnych nagłówków pojawiła się również bardzo pozytywna niespodzianka - reprezentacja Islandii w piłce nożnej . Narysujmy ich flagę narodową.

Wejście

Cóż, oczywiście to wyzwanie nie ma wkładu.

Wynik

  • Narysuj flagę Islandii w dowolnym odpowiednim formacie wizualnym o wielkości co najmniej 100 x 72 pikseli lub 25 x 18 znaków .
  • Zapisz dane wyjściowe w pliku lub wyświetl je natychmiast - przykładowe formaty to: obrazy takie jak png, jpg itp., Grafika wektorowa, rysuj na płótnie HTML, a nawet używaj znaków spacji do wizualizacji.
  • Korzystać z tych kolorów : niebieski : #0048e0, biały : #ffffffa czerwony : #d72828.
  • Jeśli twój język nie obsługuje określonych wartości kolorów, użyj standardowych wartości dla czerwonego , niebieskiego i białego z kodów kolorów ANSI .
  • Narysuj flagę w odpowiednich proporcjach, jak pokazano na poniższym rysunku:

Płyta grzewcza

  • Możesz napisać program lub funkcję. Jeśli jest to funkcja anonimowa, podaj przykład jej wywołania.
  • To jest więc wygrywa najkrótsza odpowiedź w bajtach.
  • Standardowe luki są niedozwolone.

Tabela liderów

Jeśli nie możesz znaleźć odpowiedzi, sformatuj swój język i liczbę bajtów, jak wyjaśniono w sekcji Informacje ” na tablicy wyników .


To wyzwanie jest inspirowane przez Narysuj flagę narodową Francji .

wstawić nazwę tutaj
źródło
20
O wiele trudniejsza byłaby flaga mojego kraju, który również w tym roku wypadł znacznie lepiej niż oczekiwano w euro - Walii. :-)
Gareth,
24
@Gareth Nie mogę się doczekać wodoodpornej specyfikacji smoka. ;)
Martin Ender
4
Wygląda na to, że niebieski kolor na powyższym zdjęciu jest ciemniejszy niż w rzeczywistości#0048e0
Luis Mendo
10
@MartinEnder Czy rzeźba na kamiennej tabliczce się liczy? To jest wodoodporne.
immibis
5
@MartinEnder Mathematica będzie miał jeden.
gcampbell

Odpowiedzi:

259

Python 3, 190 172 171 169 167 160 159 147 143 bajtów

Korzystanie z PIL w wersji 1.1.7, która ma przestarzałą, ale nie usuniętą metodę przesunięcia.

from PIL.ImageDraw import*
i=Image.new('RGB',(25,18),'#d72828')
Draw(i).rectangle((1,1,23,16),'#0048e0',~0)
i.offset(9).resize((100,72)).show()

Tworzy obraz 25 * 18 pikseli wypełniony czerwonym, a następnie rysuje prostokąt 23 * 16 pikseli wypełniony niebieskim z białym konturem jednego piksela. Następnie przesuwa obraz o (9,9), który owija się na krawędziach, zmienia rozmiar na 100 * 72, a następnie pokazuje w oknie.

Flaga przed przesunięciem:

wprowadź opis zdjęcia tutaj (zmieniono na 100 * 72)

Wynik:

wprowadź opis zdjęcia tutaj

Ożywiony:

wprowadź opis zdjęcia tutaj

Edycja1: Gra w golfa 18 bajtów, usuwając kadrowanie, początkowo tworząc obraz 25 * 18.

Edycja2: Grał w golfa 1 bajt, używając #fffzamiast white.

Edycja3: Gra w golfa 2 bajty, aliasingując import.

Edycja4: Gra w golfa 2 bajty, usuwając drugi argument metody offset.

Edycja5: Grał w golfa 7 bajtów, pokazując obraz zamiast zapisywać. (wymaga zainstalowanego imagemagick na Uniksie)

Edycja6: 1 bajt w golfa, przepisując import.

Edycja7: Gra w golfa 12 bajtów, ponownie przepisując import. (dzięki @Dennis)

Edycja8: Dodano animację.

Edycja9: Zaktualizowano animację, ponieważ brakowało ostatniej klatki.

Edycja10: Grał w golfa 4 bajty dzięki Albertowi Renshawowi!

Gábor Fekete
źródło
42
Naprawdę miła odpowiedź.
inserttusernamehere
17
To jest genialne! (Viking) Czapka dla ciebie.
Ioannes,
25
Wow, rzadko głosuję na pytania typu SO-golf, ale jeszcze rzadziej dołączam do zupełnie nowej społeczności, aby to zrobić. Ten offsetowy hack przypomina to, co mieliśmy do zrobienia, zanim wy, młodzi whippersnappers, uzyskaliście oodlebity pamięci. Świetna robota.
5
geniusz, naprawdę! 💡
InuYaksa
3
Jeśli to zrobisz from PIL.ImageDraw import*, Istaje się Imagei D.Drawstaje się Draw, oszczędzając 11 bajtów.
Dennis
117

Kod maszynowy trybu rzeczywistego x86 dla DOS COM, 69 65 63 62 bajtów

Wyprodukowano flagę Islandii

Kod ma być wykonywany jako plik wykonywalny COM systemu DOS.

Szczególne podziękowania

  • meden , zapisane cztery bajty.
  • meden , zapisał dwa bajty i usunął migotanie.

Kod maszynowy (w bajtach szesnastkowych)

68 00 A0 07 B8 13 00 CD      10 BE 23 01 AD 91 AD 91 
AC E3 FE 60 30 ED F3 AA      61 81 C7 40 01 FE CD 75 
F2 EB E9 FA B4 00 00 09      28 B4 46 00 0F FA 28 80 
57 0F 14 B4 0C 50 00 FA      14 0C 00 64 00 00

Źródło zestawu

Źródło jest dla NASM.

ORG 100h

push 0a000h
pop es

mov ax, 13h
int 10h

mov si, data


_draw:
 lodsw
 xchg ax, cx

 lodsw
 xchg ax, di

 lodsb

_cycle:
 jcxz _cycle

 ;al = color
 ;cl = col
 ;ch = row

rect:
 pusha
 xor ch, ch
 rep stosb
 popa
 add di, 320
 dec ch
 jnz SHORT rect

jmp SHORT _draw


data: 

        db 250d
        db 180d
        dw 0000h
        db 09h


        db 40d
        db 180d
        dw 0070d
        db 0fh


        db 250d
        db 40d
        dw 22400d
        db 0fh

        db 20d
        db 180d
        dw 80d
        db 0ch


        db 250
        db 20
        dw 25600d 
        db 0ch


        dw 0000h
Margaret Bloom
źródło
13
To jest naprawdę fajna pierwsza odpowiedź! Witamy!
AdmBorkBork
5
Możesz zaoszczędzić 2 bajty, zamieniając „mov” na „xchg” o 10h i 13h, a kolejne 2 bajty, zastępując „test cx, cx / jz” na „jcxz” o 16h
meden
3
Jeszcze kilka myśli. Ponieważ program działa w nieskończonej pętli, można uniknąć migotania tylko poprzez pętlę krócej: _loop: jcxz _loop. Możesz także wyciąć 2 bajty z końca fragmentu danych, jeśli zmienisz kolejność ładowania cxidi
meden
Jeszcze raz dziękuję @meden. Migotanie było całkowicie niepotrzebne :) Usunąłem również mov bx, 320i przeniosłem 320 do add di, 320(poprzednio add di, bx).
Margaret Bloom
Wspaniały. Teraz masz silną przewagę nad wszystkimi odpowiedziami na kod maszynowy w tym wyzwaniu. Tylko ze względu na poprawność: lepiej przejść od jcxz _cyclerazu, xchg ax,cxaby nie ładować bajtów poza koniec danych. A tam niektóre wprowadzające w błąd komentarze w źródle: ;dx = row. dxnie jest nigdzie używany w kodzie.
meden
55

C, 194 191 183 bajtów

#define C "\x1b["
#define A "@@@@@@"
y;f(){for(;y++<14;)printf(y>5&&y<10?y>6&&y<9?C"31m"A A A A"@\n":C"0m"A"@@"C"31m@@"C"0m"A A"@@@\n":C"34m"A"@"C"0m@"C"31m@@"C"0m@"C"34m"A A"@@\n");}

-3 dodanie jednego @NA #define A
-8 dodanie [na#define C

Stosowanie

main(){f();}

Wynik

wizerunek

ważny na podstawie tego komentarza z PO

Wyjście podwójnej wielkości, 204 bajty

#define C "\x1b["
#define B "████"
#define A B B B
y;f(){for(;y++<28;)printf(y>10&&y<19?y>12&&y<17?C"31m"A A A A"██\n":C"0m"A B C"31m"B C"0m"A A B"██\n":C"34m"A"██"C"0m██"C"31m"B C"0m██"C"34m"A A B"\n");}

zdjęcie 2

Giacomo Garabello
źródło
22
Piąta poprawka uruchomiła sieć +810 powtórzeń ... Dzięki! (Tak, to pierwsza strona, na której docieram do 200 powtórzeń: D)
Giacomo Garabello,
1
Czy wynik nie musi być „co najmniej 100 x 72 jednostek, gdzie jednostką jest piksel lub znak”? To nie spełnia tego wymogu, ale podejrzewam, że OP popełnił błąd przy formułowaniu tej definicji.
Kritzefitz,
4
@ Kritzefitz Cóż, postać zajmuje wiele pikseli, więc może to być piksel zamiast znaku. Znalazłem dziurę.
Erik the Outgolfer
@GiacomoGarabello Jaka jest pierwsza strona na zdjęciu, na której masz +150? Nie rozpoznaję ikony.
@LegoStormtroopr It's PPCG !! Spójrz na ten projekt GitHub!
Giacomo Garabello
31

Excel VBA, 254 228 153 bajtów

Naprawdę nie mogłem znaleźć sposobu, aby ustawić rozmiar kolumny / wiersza na piksele (tym samym czyniąc je kwadratowymi) ze względu na sposób, w jaki Excel to obsługuje, więc najpierw powinny być ładne i kwadratowe.

Edycja 1: Zamieniono RGB na zwracane wartości kolorów, -26 bajtów

Edycja 2: Próbowałem dodać tyle sugestii, ile mogłem, -75 bajtów. Nie mogłem użyć &48e0jako koloru i nie jestem pewien, dlaczego. Dziękuję wszystkim

Sub e()
c "A1:CV72", rgbBlue
c "AC1:AR72", -1
c "A29:CV44", -1
c "AG1:AN72", 255
c "A33:CV40", 255
End Sub

Sub c(d, f)
Range(d).Interior.Color = f
End Sub

Obrazek: Flaga Islandii

tjb1
źródło
Jak sprawiłeś, że komórki stały się kwadratowe? Czy zrobiłeś to ręcznie, czy z innym skryptem nie uwzględnionym? Chciałbym to zobaczyć, nawet jeśli nie jest to część twojego programu punktacji.
mbomb007,
Zrobiłem to ręcznie, kod zmiany szerokości komórki jest dość łatwy, gdzie mogłem go dodać, ale rozmiary nie są spójne między rozdzielczością wiersza / kolumny lub monitora, chyba że ustawisz rozmiar na podstawie pikseli, których nie można zrobić co mogłem znaleźć. Z tego, co przeczytałem, musisz znaleźć rozdzielczość i zrobić matematykę, aby przekonwertować piksele na rozmiar akceptowany przez funkcję.
tjb1
1
Również kod do konwersji na piksele wygląda tak, jakby wymagał twardego kodu albo części rozdzielczości, albo PPI (tak naprawdę nie rozumiem formuły), więc wygląda na to, że nie działałby również na wszystkich urządzeniach.
tjb1 11.07.16
2
I, dla kompletności (dotyczy to konfiguracji kwadratowych komórek zamiast samego rozwiązania), jeśli przejdziesz do widoku układu strony, możesz ustawić wysokość i szerokość komórki na określone wartości, takie jak 0.2cm. Zostanie to zachowane, gdy przełączysz się z powrotem, i nie musisz próbować wypracowywać dziwnych proporcji Excela :-) Przy okazji, jeśli chcesz więcej fajnych sztuczek Excela, spójrz na wideo Joela Spolsky'ego „Ssisz w Excelu”.
3
Myślę, że dodatkowe białe znaki można usunąć, nawet jeśli zostaną dodane automatycznie później.
Erik the Outgolfer
29

MATL , 57 56 52 49 48 bajtów

7:g2IvtPvt!9Mh2$X>2YG[0E28]8*255/7B[43DD]51/v2ZG

Daje to następujący rysunek (testowany z kompilatorem działającym na Matlabie i Octave).

wprowadź opis zdjęcia tutaj

EDYCJA: Możesz eksperymentalnie wypróbować w MATL Online! (może być konieczne ponowne załadowanie strony, jeśli początkowo nie działa).

Jak to działa

7:g         % Range from 1 to 7 converted to logical: push array [1 1 1 1 1 1 1]
2           % Push 2
I           % Push 3
v           % Concatenate vertically into a 9×1 array
tPv         % Duplicate, flip vertically, concatenate. Gives a 18×1 array
t!          % Duplicate, transpose: 1×18 array
9M          % Push [1 1 1 1 1 1 1] again
h           % Concatenate horizontally: gives 1×25 array
2$X>        % Maximum of the two arrays, with broadcast. Gives a 18×25 array
            % with 1 for blue, 2 for white, 3 for red
2YG         % Show image with default colormap
[0E28]8*    % Push array [0 72 224] (blue)
255/        % Divide each entry by 255. Colors are normalized between 0 and 1
7B          % 7 converted into binary: push array [1 1 1] (white, normalized)
[43DD]51/   % Push array [215/255 40/255 40/255] (red, normalized)
v           % Concatenate vertically. Gives a 3×3 array
2ZG         % Use as colormap
Luis Mendo
źródło
26

CSS, 285 284 264 bajtów

*,:before,:after{background:#fff;width:100;height:72}body{background:#0048e0;margin:0}:before,:after{content:"";position:fixed}:after{background:#d72828}html:before{top:28;height:16}body:before{left:28;width:16}html:after{top:32;height:8}body:after{left:32;width:8

Zapisano 1 bajt dzięki @insertusernameherehere.

Zaoszczędzono 20 bajtów dzięki @ user2428118, usuwając wszystkie pxs. Pamiętaj, że wymaga to renderowania strony w trybie dziwactw, więc nie działa w urywkach stosu.

Mógłbym skopiować podejście Pythona do zawijania obrazu z przesunięciem, ale nie byłoby to interesujące.

Nie golfowany:

*, *::before, *::after {
  background: #fff;
  width: 100px;
  height: 72px;
}

body {
  background: #0048e0;
  margin: 0;
}

*::before, *::after {
  content: "";
  position: fixed;
}

*::after { background: #d72828 }

html::before { top: 28px; height: 16px }
body::before { left: 28px; width: 16px }
html::after { top: 32px; height: 8px }
body::after { left: 32px; width: 8px }

Wykorzystuje pseudoelementy (elementy, które nie są napisane w HTML) ::beforei ::aftertworzy linie na fladze. Powodem, dla którego działa bez HTML, jest to, że w HTML5 elementy <html>i <body>są opcjonalne, więc przeglądarki automatycznie je tworzą, jeśli nie są obecne.

Więcej zabawy:

gcampbell
źródło
2
Nadal możesz zapisać 1 bajt , zastępując whitego #fff.
inserttusernamehere 11.07.16
@insertusernamehere Tak, dziękuję.
gcampbell
1
Jeśli zastosujesz CSS w trybie dziwactw (strona bez doctype), możesz obniżyć go do 264 bajtów, pomijając pxwszędzie.
user2428118,
@ user2428118 Jeszcze bardziej przydatne, biorąc pod uwagę, że nie ma HTML, dlatego nie <!doctype html>!
wizzwizz4,
@ user2428118 Z jakiegoś powodu nie działa dla mnie w mobilnym Safari. Zobaczę, kiedy będę następny przy komputerze.
gcampbell
26

Bash + Imagemagick 7, 94 90 86 85 bajtów

magick -size 84x56 xc:#0048e0 ${s=-splice 8x8}+28+28 -background \#d72828 $s+32+32 x:

Zaoszczędzono 8 bajtów dzięki @manatwork i 1 bajt dzięki @ GlennRanders-Pehrson

bodqhrohro
źródło
5
Jeśli podasz x:zamiast nazwy pliku wyjściowego, convertwyświetli wynik w oknie, co jest również dopuszczalne. A wystarczy po prostu uciec ostry, nie ma potrzeby cytować: \#d72828.
manatwork
2
Zazwyczaj nazywamy takie odpowiedzi jak Bash + Imagemagick . Na bashstronie można zaoszczędzić kolejne 4 znaki: convert -size 84x56 xc:#0048e0 ${s=-splice 8x8}+28+28 -background \#d72828 $s+32+32 x:.
manatwork
Głupie pytanie: czy potrafisz ${s=-splice 8x8}+56?
Erik the Outgolfer
@ EʀɪᴋᴛʜᴇGᴏʟғᴇʀ +56jest traktowane jako +56+0nie +28+28.
bodqhrohro
2
Możesz zapisać kolejny bajt, używając najnowszej wersji ImageMagick; wtedy polecenie może być „magią” zamiast „konwertować”.
Glenn Randers-Pehrson
20

ZX Spectrum BASIC, 210 141 92 bajtów

1 LET n=-VAL "8.5": FOR y=n TO -n: FOR x=n TO VAL "16": LET p=VAL "271"(PI-(ABS x<SQR PI OR ABS y>SQR PI)-NOT INT ABS x*INT ABS y): PRINT PAPER p; BRIGHT p>PI;" ";: NEXT x: PRINT : NEXT y

wprowadź opis zdjęcia tutaj

Rozmiar określony jako rozmiar programu BASIC na taśmie przez SAVE. Wiele zasług golfowych dla niektórych członków grupy ZX Spectrum na Facebooku , w szczególności @impomatic i Johan Koelman.

Philip Kendall
źródło
Widząc je PAPERi BRIGHTprzynosząc tak wiele dobrych wspomnień :-)
Luis Mendo
Czy są jakieś informacje o tym, ile pamięci zajmuje program ZX Spectrum BASIC? Myślałem, że to „tokenizowany” język, tzn. Spodziewałem się FOR, że NOTitd. Zajmą tylko 1, a może 2 bajty każdy
Luis Mendo
1
@LuisMendo Tak, jest tokenizowany - FORma dokładnie jeden bajt. Liczby są jednak „blokowane”, ponieważ są przechowywane zarówno w postaci tekstowej, jak i binarnej i zajmują 5 bajtów więcej, niż można się spodziewać, dlatego NOT PIzamiast zera i tym podobnych.
Philip Kendall,
132 bajty poprzez usunięcie AT i dostosowanie testu granic twitter.com/john_metcalf/status/752760203007791105
impomatic
1
122 bajty z kilkoma dalszymi optymalizacjami twitter.com/john_metcalf/status/752783690179211264
impomatic
15

Zespół ZX Spectrum Z80, 65 bajtów

    ld hl,22528
    ld b,7
    ld de,120*256+8 ; white, blue
    ld a,16         ; red

; create the first row

blueleft:
    ld (hl),e
    inc hl
    djnz blueleft

    ld (hl),d
    inc hl
    ld (hl),a
    inc hl
    ld (hl),a
    inc hl
    ld (hl),d
    inc hl

    ld b,14
blueright:
    ld (hl),e
    inc hl
    djnz blueright

; copy the first row to the next 17 rows

    ld l,b
    ld de,22528+32
    ld bc,17*32
    ldir

; add the horizontal stripe

    ld hl,22528+7*32
    dec d
    ld e,b
    ld c,2
midrep:
    ld b,25
midstripe:
    cp (hl)
    jr z,red
    ld (hl),120
red:
    ld (de),a
    inc hl
    inc de
    djnz midstripe

    ld hl,22528+10*32
    ld e,9*32
    dec c
    jr nz,midrep
    ret

Flaga Islandii

bezczelny
źródło
14

Minecraft 1.10.2, 734 znaków

Może to być 734 znaków, ale jak dotąd jest to jedyne zgłoszenie wykonane z prawdziwej wełny!

summon FallingSand ~ ~1 ~ {Block:log,Time:1,Passengers:[{id:FallingSand,Block:redstone_block,Time:1,Passengers:[{id:FallingSand,Block:activator_rail,Time:1,Passengers:[{id:MinecartCommandBlock,Command:"fill 0 ~ 0 100 ~ 72 wool 11"},{id:MinecartCommandBlock,Command:"fill 28 ~ 0 44 ~ 72 wool"},{id:MinecartCommandBlock,Command:"fill 0 ~ 28 100 ~ 44 wool"},{id:MinecartCommandBlock,Command:"fill 32 ~ 0 40 ~ 72 wool 14"},{id:MinecartCommandBlock,Command:"fill 0 ~ 32 100 ~ 40 wool 14"},{id:MinecartCommandBlock,Command:setblock ~ ~ ~1 command_block 0 replace {Command:fill ~ ~-3 ~-1 ~ ~ ~ air}},{id:MinecartCommandBlock,Command:setblock ~ ~-1 ~1 redstone_block},{id:MinecartCommandBlock,Command:kill @e[type=MinecartCommandBlock]}]}]}]}

Przejdź do około -5x -5z, wklej do bloku poleceń Impulse, ustaw na „Always Active” i naciśnij Gotowe.

Rozpiętość flag od 0, 0 do 100, 72; i znajduje się 3 bloki powyżej bloku poleceń, jak umieszczony. To rzuca cień dość duży , a potwory tarło pod nią. Jednak, czy jest to dokładne w przypadku Islandii, nie wiadomo.

Uczciwe ostrzeżenie - zabije wszystkich MinecartCommandBlockna świecie w celu uratowania czterech postaci. Nie uruchamiaj tego w świecie, do którego jesteś zbyt przywiązany.

Flaga

Używane polecenia sumator MrGarretto za i tweaked wyjście A trochę (808 -> 734)

quat
źródło
1
„Czy dotyczy to Islandii…”
Jordan
2
Czy nie możesz po prostu użyć kill @e bez argumentu selektora docelowego? Zabije gracza, ale hej flaga nadal tam będzie
Kuilin Li
11

Logo, 216 188 bajtów

Korzystanie z implementacji Calormen.com . Dla was, purystów, implementacja wykorzystuje pewne wygładzanie krawędzi, które nieco wtapia krawędzie. Zmarnowałem 3 bajty, chowając żółwia, więc to powinno to nadrobić.

Można to znacznie zmniejszyć, jeśli implementacja Logo pozwala ustawić rozmiar okna. Następnie możesz wrapi zmusić żółwia pługiem, aby wykonał krzyż w czterech pociągnięciach, i pomiń konieczność przycinania go ramką.

wygenerowany zrzut ekranu flagi

TO X :C :S
setpc :C
setpensize :S
home
pd
setx 100
setx 36
bk 36
fd 72
pu
END
setpc "#48e0
fill
X 7 16
X "#d72828 8
fd 4
pe
pd
setx -4
bk 80
setx 104
fd 80
setx 0
ht
GuitarPicker
źródło
Nie wiedziałem, że istnieje anglojęzyczna wersja Logo!
Vincent
1
Absolutnie. Myślę, że pierwszy raz widziałem to ponad 30 lat temu na Apple IIe. Miałem go również na moim komputerze TRS-80 Color Computer. To był mój pierwszy gust używania kątów w geometrii, lata przed oficjalnym nauczeniem się go w szkole.
GuitarPicker,
Dlaczego biała obwódka wokół niego?
Solomon Ucko
1
Narysowałem linie za pomocą dużego długopisu, który pozostawia zaokrąglone krawędzie na końcach krzyża, więc musiałem zamiatać wokół niego dużą gumką, aby je wyrównać. Pisałem inną wersję tego, która używała zupełnie innej metody w Logo i okazała się mniejsza. Pracowałem również nad trzecią wersją, która drukuje duży łaciński krzyż Unicode i maluje go, ale proporcje były niewłaściwe, a rozmiar wyglądał, jakby przekraczał ten.
GuitarPicker,
10

Java 8, 449 447 bajtów:

import java.awt.*;import javax.swing.*;class A extends JPanel{public void paintComponent(Graphics G){super.paintComponent(G);G.setColor(new Color(0,72,224));G.fillRect(0,0,175,126);G.setColor(Color.WHITE);G.fillRect(49,0,28,126);G.fillRect(0,49,175,28);G.setColor(new Color(215,40,40));G.fillRect(56,0,14,126);G.fillRect(0,56,175,14);}public static void main(String[]a){JFrame J=new JFrame();J.add(new A());J.setSize(175,147);J.setVisible(true);}}

Odpowiedź bardzo późna, a zarazem najdłuższa tutaj. Wykorzystuje java.awt.Graphicsklasę do utworzenia i otwarcia okna z flagą, która jest utworzona przez 5 całkowitych prostokątów składających się z 1 dla niebieskich bloków, 2 dla białych pasków i 2 dla czerwonych pasków. Wykorzystuje stosunek 7 pikseli: 1. Innymi słowy, dla każdej jednostki używa się 7 pikseli. Oto obraz danych wyjściowych na komputerze Macintosh z systemem OS X 10.11:

Przykładowy wynik

Teraz, aby znaleźć sposób na odrobinę golfa ...

R. Kap
źródło
Spróbuj paintzastąpić zamiast paintComponent. Rozważ użycie anonimowej klasy dla JPanel. Rozważ skorzystanie z BufferedImage i wyjście do pliku.
Justin
@Justin Właściwie używałem już Bluejako 1 ogromny prostokąt jako tło. Właśnie pomieszałem tę i inną wersję, którą stworzyłem w Pythonie. Niezależnie od tego, dziękuję za inne wskazówki! :)
R. Kap
Kilka innych sugestii: nie używaj JPanel, po prostu zastąp JFrame. Jeśli to zrobić i po prostu zastąpić paint, nie trzeba huśtawka, tylko AWT, więc zmienić JFramesię Framei usunąć importu. Nie dzwoń super.paint. Zmień układ głównej metody; przenieść setSizedo paintsposobu naszego Frame, usuń zmienną Ji dołącz .setVisible(true)do końca anonimowy klasy. Na koniec zmień .setVisible(true)na show(), tak, jest to przestarzała metoda, ale jest krótsza. Użyj a, interfaceaby usunąć publicmetodę główną.
Justin
Ostateczny wynik przy 338 znakach (musiał również zmienić wysokość, ponieważ jest to ramka):import java.awt.*;interface A{static void main(String[]a){new Frame(){public void paint(Graphics G){setSize(175,119);G.setColor(new Color(0,72,224));G.fillRect(0,0,175,126);G.setColor(Color.WHITE);G.fillRect(49,0,28,126);G.fillRect(0,49,175,28);G.setColor(new Color(215,40,40));G.fillRect(56,0,14,126);G.fillRect(0,56,175,14);}}.show();}}
Justin
1
Jeszcze lepiej: nie maluj pierwszego prostokąta, po prostu zadzwoń setBackground(color)(również rozmiar był nadal nieprawidłowy). Teraz o 317:import java.awt.*;interface A{static void main(String[]a){new Frame(){public void paint(Graphics G){setSize(175,126);setBackground(new Color(0,72,224));G.setColor(Color.WHITE);G.fillRect(49,0,28,126);G.fillRect(0,49,175,28);G.setColor(new Color(215,40,40));G.fillRect(56,0,14,126);G.fillRect(0,56,175,14);}}.show();}}
Justin
10

R, 197 195 187 bajtów

w="white";r="#d72828";png(w=100,h=72);par(mar=rep(0,4),bg="#0048e0",xaxs="i",yaxs="i");frame();rect(c(0,7,0,8)/25,c(7,0,8,0)/18,c(1,.44,1,.4),c(11/18,1,5/9,1),c=c(w,w,r,r),b=NA);dev.off()

Wcięte, z nowymi liniami i objaśnieniami:

w="white"
r="#d72828"
png(w=100,h=72) #Creates in working directory a png called Rplot001.png 
                #with a width and a height of 120 and 72 pixels respectively.
par(mar=rep(0,4), #No margin around the plot
    bg="#0048e0", #Blue background
    xaxs="i",yaxs="i") #Axes fits range exactly
frame() #Creates an empty plot which range is xlim=c(0,1) & ylim=c(0,1)
rect(c(0,7,0,8)/25, #Because rect is vectorized
     c(7,0,8,0)/18,
     c(1,.44,1,.4), #i. e. c(25,11,25,10)/25
     c(11/18,1,5/9,1), #i. e. c(11,18,10,18)/18
     c=c(w,w,r,r), # c= is the same as col=, thanks to argument name completion
     b=NA)#No borders
dev.off()

Flaga wyspy

Edycja : okazuje się frame(), w przeciwieństwie do plot()lub plot.new()domyślnie nie dodaje obramowania do fabuły, co oznacza, że bty="n"tutaj nie było to konieczne.

plannapus
źródło
9

8-bitowy plik wykonywalny Atari, 123 bajty

Kolejny wpis „tylko dla zabawy”, ten program jest przeznaczony do uruchamiania na 8-bitowym komputerze lub emulatorze Atari. Na przykład, aby załadować program na Atari800, po prostu uruchom:

atari800 iceland.xex

Kod maszynowy (w bajtach szesnastkowych)

ff ff 00 06 74 06 a9 1b 8d 30 02 a9 06 8d 31 02
a9 44 8d c4 02 a9 0f 8d c5 02 a9 84 8d c6 02 d0
fe 70 70 70 48 57 06 48 57 06 48 57 06 48 57 06
48 57 06 48 57 06 48 57 06 48 61 06 48 6b 06 48
6b 06 48 61 06 48 57 06 48 57 06 48 57 06 48 57
06 48 57 06 48 57 06 48 57 06 41 1b 06 ff fe 5b
ff ff ff c0 00 00 00 aa aa 5a aa aa aa 80 00 00
00 55 55 55 55 55 55 40 00 00 00

Kod źródłowy asemblera (można skompilować za pomocą MADS ):

        org $0600
        lda <dlist
        sta $0230
        lda >dlist
        sta $0231
        lda #$44
        sta $02c4
        lda #$0f
        sta $02c5
        lda #$84
        sta $02c6
loop    bne loop
dlist   dta $70, $70, $70
        dta $48, a(line1), $48, a(line1), $48, a(line1), $48, a(line1), $48, a(line1), $48, a(line1), $48, a(line1)
        dta $48, a(line2)
        dta $48, a(line3), $48, a(line3)
        dta $48, a(line2)
        dta $48, a(line1), $48, a(line1), $48, a(line1), $48, a(line1), $48, a(line1), $48, a(line1), $48, a(line1)
        dta $41, a(dlist)
line1   dta $ff, $fe, $5b, $ff, $ff, $ff, $c0, $00, $00, $00
line2   dta $aa, $aa, $5a, $aa, $aa, $aa, $80, $00, $00, $00
line3   dta $55, $55, $55, $55, $55, $55, $40, $00, $00, $00

Jak to działa:

Program wykorzystuje niestandardową listę wyświetlania opartą na trybie ANTIC 8 (40 pikseli na linię, 2 bpp). Powtarzające się linie są ładowane z tego samego miejsca w pamięci. Po skonfigurowaniu wyświetlacza program wchodzi w nieskończoną pętlę.

Zrzut ekranu:

iceland.xex działający na Atari800

Locoluis
źródło
9

FFmpeg, 339 184 bajtów

ffplay -f lavfi color=d72828:100x36[r];color=white:64x32[w];color=0048e0:56x28[b];[w][b]overlay=4,split[x][y];[r][x]overlay=-32[d];[d][y]overlay=40,split[t][m];[m]vflip[n];[t][n]vstack

Spróbuję zagrać w golfa w dół .. dalej.

100 x 72 obraz flagi Islandii

Gyan
źródło
9

Python, 119 118 114 112 bajtów

Nic specjalnego, proste:

b,w,r="\0H\xe0"*28,"\xff"*12,"\xd7(("*8
A,B=28*(b+w+r+w+2*b),4*(8*w+r+15*w)
print"P6 100 72 255 "+A+B+100*r+B+A

Wyjście jako binarny PPM, użycie

python golf_iceland.py > iceland.ppm
  • Edycja1: przesunął bajt między printznak cudzysłowu i
  • Edycja2: nieco krótszy jako binarny PPM
  • Edycja3: Wymyślono, że \0można go użyć zamiast\x00

Jeśli ktoś wie, jak bezpośrednio użyć niedrukowalnego znaku ASCII, prosimy o informację.

Konwersja do formatu PNG

Karl Napf
źródło
2
Gratulacje! Bardzo mnie bijesz: D
Gábor Fekete
2
@ GáborFekete pobił cię w bajtach, tak. Ale twoja odpowiedź jest znacznie mądrzejsza z tym przesunięciem
Karl Napf
Dlaczego nie mieć wyników ucieczek zamiast samych ucieczek?
Solomon Ucko
@ SolomonUcko Próbowałem b,w,r="\0Hà"*28,"ÿ"*12,"×(("*8i używam Python 3, ale to nie działa.
Karl Napf,
@KarlNapf, jak to się nie udało? Czy narysował niepoprawnie lub wyświetlił komunikat o błędzie? Może to być także problem z kodowaniem.
Solomon Ucko
8

JavaScript, 267 bajtów

document.write("<div style='width:250px;height:180px;background:"+[[b="bottom",44.4,d="d72828",55.6],[r="right",32,d,40],[b,38.9,e="fff",61.1],[r,28,e,44]].map(([d,a,c,o])=>`linear-gradient(to ${d+(t=",transparent ")+a}%,#${c} ${a}%,#${c} ${o}%${t+o}%)`)+",#003897'")

Neil
źródło
1
Czy stosunek 7–14 lewej i prawej niebieskiej szerokości jest prawidłowy?
manatwork
1
@manatwork Ups, z jakiegoś powodu myślałem, że 100/25 = 5, więc wszystko skończyło się o 25% za szerokie.
Neil,
8

Java, 335 bajtów

Ta funkcja to

void w()throws Exception{int w=100,h=72;BufferedImage i=new BufferedImage(w,h,1);Graphics g=i.getGraphics();g.setColor(new Color(18656));g.fillRect(0,0,w,h);g.setColor(WHITE);g.fillRect(0,28,w,16);g.fillRect(28,0,16,h);g.setColor(new Color(14100520));g.fillRect(0,32,w,8);g.fillRect(32,0,8,h);ImageIO.write(i,"png",new File("f.png"));}

I zapisuje pożądany obraz jako f.pngo rozmiarze 100 x 72

(Pamiętaj, że nie jest to bezpośredni konkurent w stosunku do odpowiedzi R. Kapa , ponieważ zapisuje plik i nie wyświetla obrazu na ekranie)

Oto wersja bez golfa, którą można skompilować i uruchomić:

import static java.awt.Color.WHITE;

import java.awt.Color;
import java.awt.Graphics;
import java.awt.image.BufferedImage;
import java.io.File;

import javax.imageio.ImageIO;

public class Iceland
{
    public static void main(String[] args) throws Exception
    {
        Iceland i = new Iceland();
        i.w();
    }

    void w() throws Exception
    {
        int B=0x0048e0,R=0xd72828,w=100,h=72;
        BufferedImage i=new BufferedImage(w,h,1);
        Graphics g=i.getGraphics();
        g.setColor(new Color(B));
        g.fillRect(0,0,w,h);
        g.setColor(WHITE);
        g.fillRect(0,28,w,16);
        g.fillRect(28,0,16,h);
        g.setColor(new Color(R));
        g.fillRect(0,32,w,8);
        g.fillRect(32,0,8,h);
        ImageIO.write(i,"png",new File("f.png"));
    }
}

Uwaga dodatkowa dotycząca pokrewnych pytań: Może należy stworzyć wyzwanie, aby pomalować flagi

  • Indonezja
  • Polska
  • Finlandia
  • Francja
  • Holandia
  • Tajlandia
  • Norwegia

w tym samym czasie:

wprowadź opis zdjęcia tutaj

Marco13
źródło
7

SVG + JavaScript, 190 165 164 bajtów

Żaden ekspert, powtarzanie jednej ścieżki tylko w celu zmiany koloru i szerokości linii wygląda głupio javascript ftw!

document.write(`<svg><rect width=100 height=72 fill="#0048e0"/>${a='<path d="M0 36L100 36M36 0L36 72"style="stroke-width:'}16;stroke:#fff"/>${a}8;stroke:#d72828">`)

Bardziej czytelny:

document.write(`<svg><rect width=100 height=72 fill="#0048e0"/>
${a='<path d="M0 36L100 36M36 0L36 72"style="stroke-width:'}16;stroke:#fff"/>
${a}8;stroke:#d72828">`)
Nicość
źródło
Możesz użyć path d="m0,0h100v72H0"zamiast prostokąta, aby zapisać dwa bajty. Podobnie użyj M0 36H100M36 0V72do danych drugiej ścieżki, co pozwala zaoszczędzić kolejne pięć bajtów. I możesz upuścić styleatrybut na rzecz zadeklarowania obu stroke-widthi strokejako atrybutów, aby zaoszczędzić kolejne pięć bajtów.
Joey,
7

Przetwarzanie , 136 bajtów

size(100,72);noStroke();background(#0048e0);fill(255);rect(28,0,16,72);rect(0,28,100,16);fill(#d72828);rect(0,32,100,8);rect(32,0,8,72);

Nie golfił

//open the window
size(100,72);
//turn off borders that surround shapes by default
noStroke();
//draw blue as the background
background(#0048e0);
//set color to white
fill(255);
//draw 2 white bars
rect(28,0,16,72);
rect(0,28,100,16);
//set color to red
fill(#d72828);
//draw 2 red bars
rect(0,32,100,8);
rect(32,0,8,72);

Wynik:

wprowadź opis zdjęcia tutaj

Cody
źródło
1
Możesz ogolić jeszcze dwa bajty za pomocą filli rectzamiast sizei background. 134 bajty:noStroke();fill(#0048e0);rect(0,0,100,72);fill(255);rect(0,28,100,16);rect(28,0,16,72);fill(#d72828);rect(0,32,100,8);rect(32,0,8,72);
GuitarPicker
Dodatek do tego, co powiedział GuitarPicker, fill(-1)jest o jeden bajt krótszy niżfill(255)
szarlatan krów
7

Mathematica 174 157 bajtów

Bez wbudowanych:

157 bajtów

r=Rectangle;c=RGBColor;Graphics@{c[{0,72,224}/255],r[{0,0},{25,18}],White,r[{7,0},{11,18}],r[{0,7},{25,11}],c[{43,8,8}/51],r[{8,0},{10,18}],r[{0,8},{25,10}]}

wprowadź opis zdjęcia tutaj

lub alternatywnie

232 bajty

x=Join[Unitize/@Range@7,{0},{2,2},{0},Unitize/@Range@14]&/@Range@7;y=Join[ConstantArray[0,8],{2,2},ConstantArray[0,15]];z=ConstantArray[2,25];ArrayPlot[Join[x,{y},{z,z},{y},x]/.{2->RGBColor[{43,8,8}/51],1->RGBColor[{0,72,224}/255]}]

wprowadź opis zdjęcia tutaj

jaskółka oknówka
źródło
1
nie ma za co. to samo można zastosować do drugiej dłuższej wersji. u=Unitize;c=ConstantArrayetc ^ _ ^
Dan Oak
1
Czekaj, jest coś, dla czego Mathematica nie ma wbudowanego? Jestem zaskoczony.
Morgan Thrapp,
@MorganThrapp Jestem pewien, że była inna odpowiedź Mathematica za pomocą wbudowanego.
gcampbell
3
JestCountryData["Iceland", "Flag"]
dwa
7

JavaScript (ES6), 231 240

Kod we fragmencie poniżej. Uruchom go, aby przetestować.

d=(w,h,c)=>`<div style=float:left;width:${w}em;height:${h}em;background:#${['0048e0','fff','d72828'][~~c]}>`;document.write(d(25)+(a=[252,61,94,61,476]).concat(b=[261,70,485],810,b,a).map(v=>d(v>>5,v/4&7,v&3)).join(e='</div>')+e+e)

edc65
źródło
7

Zespół ZX Spectrum Z80, 51 bajtów

https://github.com/ralphbecket/Z80/blob/master/IcelandFlag/IcelandFlag.asm

                zeusemulate "48K", "ULA+"
ZeusEmulate_PC  equ Main
ZeusEmulate_SP  equ $FF40

                org $8000

MinWhite        equ 7
MinRed          equ MinWhite + 1
TopRed          equ MinRed + 2
TopWhite        equ TopRed + 1
Height          equ TopWhite + MinWhite - 2
Width           equ TopWhite + 2 * MinWhite - 1

White           equ %01111000
Red             equ %01010000
Blue            equ %01001000

Main            ld hl, $5800 + ((Height - 1) * 32) + (Width - 1)
                ld c, Height

YLoop           ld b, Width

XLoop           ld (hl), Red
                ld de, MinRed * $100 + TopRed
                call Test
                jr c, Next

                ld (hl), White
                ld de, MinWhite * $100 + TopWhite
                call Test
                jr c, Next

                ld (hl), Blue

Next            dec hl
                djnz XLoop
                ld de, -(32 - Width)
                add hl, de
                dec c
                jr nz, YLoop
                ret

Test            equ *
TestX           ld a, b
                cp d
                jr c, TestY
                cp e
                ret c
TestY           ld a, c
                cp d
                ccf
                ret nc
                cp e
                ret

wprowadź opis zdjęcia tutaj

Ralph Becket
źródło
7

J, 86 84 83 bajtów

   load'viewmat'
   (255,0 72 224,:215,2#40)viewmat _9 _9|.2(b=.[,~[,.~[,[,.])0 b 14 21$1

Podejście jest takie samo jak @ Gábor Fekete's z Pythonem.

Lewy argument colorsza viewmatto tablica wartości RGB, w naszym przypadku:

255 255 255
  0  72 224
215  40  40

Właściwym argumentem jest macierz wskaźników colors.
(_9 _9 |. matrix)nakazuje przesunięcie matrix9 elementów w każdym wymiarze.
Straszna konstrukcja (border ([,~[,.~[,[,.]) matrix)owija matrixsię liczbą border.
I (14 21 $ 1)tworzy matrycę 14 × 21 z nich.

Dane wyjściowe są wyświetlane w osobnym oknie o zmiennym rozmiarze, domyślnie dość dużym. wprowadź opis zdjęcia tutaj

Dzięki

mile - zapisano 2 bajty przy zmianie kolejności kolorów, wykorzystano funkcję ,powielania liczb (255) do uzgodnienia kształtu.

Dan Oak
źródło
1
Wygląda na to, że wysokość flagi to 26 jednostek zamiast 25.
Gábor Fekete
@ GáborFekete hm, miałeś na myśli, że wysokość wynosi 19 zamiast 18? nie wspomniałem o tym, właśnie zauważyłem po twoim komentarzu
Dan Oak
No tak, napisałem wysokość, ale użyłem wartości szerokości ...
Gábor Fekete
tak, rzeczywiście. popełniłem błąd w wartościach. kształt macierzy początkowej powinien wynosić 14 21( 18 25 - 4 4). poprawianie ... dziękuję!
Dan Oak
1
Możesz zapisać 2 bajty, zmieniając kolejność wartości rgb(255,0 72 224,:215 40 40)viewmat _9 _9|.2(b=.[,~[,.~[,[,.])0 b 14 21$1
mile
6

TI-BASIC (niekonkurencyjny), 323 bajty

Kod jest napisany dla TI-84, 83 i wariantów. Mam nadzieję, że nie jest problemem, że wymiary różnią się w zależności od urządzenia i że kod nie jest kolorowy.

Ustawiać:

:18→Xmax:¯18→Xmin
:10→Ymin:¯10→Ymin
:AxesOff

Rysunek:

:Line(¯15,9,¯8,9)
:Line(¯8,9,¯8,2)
:Line(¯8,2,¯15,2)
:Line(¯15,2,¯15,9)

:Line(¯15,¯9,¯8,¯9)
:Line(¯8,¯9,¯8,¯2)
:Line(¯8,¯2,¯15,¯2)
:Line(¯15,¯2,¯15,¯9)

:Line(¯4,9,10,9)
:Line(¯4,2,10,2)
:Line(¯4,9,¯4,2)
:Line(10,9,19,2)

:Line(¯4,¯9,10,¯9)
:Line(¯4,¯2,10,¯2)
:Line(¯4,¯9,¯4,¯2)
:Line(10,¯9,19,¯2)

:Line(¯15,1,¯7,1)
:Line(¯15,¯1,¯7,¯1)
:Line(¯5,1,20,1)
:Line(¯5,¯1,¯20,¯1)
:Line(¯7,¯1,¯7,¯9)
:Line(¯5,¯1,¯5,¯9)
:Line(¯7,1,¯7,9)
:Line(¯5,1,¯5,9)

Gra w golfa:

:18→Xmax:¯18→Xmin:10→Ymin:¯10→Ymin:AxesOff:Line(¯15,9,¯8,9:Line(¯8,9,¯8,2:Line(¯8,2,¯15,2:Line(¯15,2,¯15,9:Line(¯15,¯9,¯8,¯9:Line(¯8,¯9,¯8,¯2:Line(¯8,¯2,¯15,¯2:Line(¯15,¯2,¯15,¯9:Line(¯4,9,10,9:Line(¯4,2,10,2:Line(¯4,9,¯4,2:Line(10,9,19,2:Line(¯4,¯9,10,¯9:Line(¯4,¯2,10,¯2:Line(¯4,¯9,¯4,¯2:Line(10,¯9,19,¯2:Line(¯15,1,¯7,1:Line(¯15,¯1,¯7,¯1:Line(¯5,1,20,1:Line(¯5,¯1,¯20,¯1:Line(¯7,¯1,¯7,¯9:Line(¯5,¯1,¯5,¯9:Line(¯7,1,¯7,9:Line(¯5,1,¯5,9

Tak, brak )jest celowy.

Rozmiar:

Line(i wszystkie takie polecenia zajmują 1 bajt, każda liczba zajmuje bajt. To 323 bajty.

To było absolutnie nudne. Mam nadzieję, że dostanę to na emulatorze (muszę ręcznie wprowadzić wszystko), ale to dosłownie tylko linie w kształcie flagi.

charredgrass
źródło
1
@ Random832 Dziwne, tak! Sprawdź rozmiar tokena tutaj: tibasicdev.wikidot.com/line Nie jestem pewien, jaki dokładnie jest bajt. Wiem jednak, że na kalkulatorze jest traktowany zasadniczo jako znak.
charredgrass,
1
@ Random832 Bajt dla Line(0x9C. Możesz zobaczyć tabelę tokenów jednobajtowych tutaj: tibasicdev.wikidot.com/one-byte-tokens
f ''
1
Czy nie można sporządzić wykresu przy użyciu regionów (używając <i >) zamiast linii, aby uzyskać cieniowanie w skali szarości?
mbomb007
7
Dlaczego to nie konkuruje?
Mego
1
Zauważ, że jest teraz kolor TI-84, więc prawdopodobnie możesz go tam uruchomić tylko z niewielkimi modyfikacjami.
Moshe Katz,
6

DO#, 384 346 317 292 291 289 bajtów

Proste rozwiązanie z Windows Forms i GDI

Func<int,int,Point>p=(x,y)=>new Point(x*10,y*10);var b=new Bitmap(250,180);var g=Graphics.FromImage(b);g.Clear(Color.Blue);g.DrawLines(new Pen(Color.White,40),new[]{p(0,9),p(50,9),p(9,-20),p(9,18)});g.DrawLines(new Pen(Color.Red,20),new[]{p(0,9),p(50,9),p(9,-20),p(9,18)});b.Save("b.png");

Stosowanie

Uruchom nowy projekt konsoli i umieść powyższy kod w metodzie głównej, dodaj System.Drawing-Namespace.

Jak to działa

Kod tworzy nowy obraz i rysuje na nim kilka linii. Zapisuje obraz na dysku. Niektóre punkty końcowe linii znajdują się poza widocznym obszarem.

wprowadź opis zdjęcia tutaj

soema
źródło
Witamy w PPCG! Świetny pierwszy codegolf, ale wygląda na to, że można go poprawić. Po pierwsze, myślę, że możesz usunąć niektóre spacje tu i tam ( b = new=> b=new, using ()=> using(), nie używaj spacji po ;s. Jeśli chcesz, możesz przeczytać nasze Wskazówki dotyczące gry w golfa w C #, aby znaleźć porady.
Katenkyo
Dzięki, spacje są usuwane, ja również usuwam instrukcję using. Teraz używam także zmiennych anonimowych.
soema
Na pewno potrzebujesz Process.Start(f);? Jak rozumiem, jest to podobne do cmd start. Ponieważ możesz wybrać zapisanie lub wyświetlenie obrazu i już go zapisałeś, ten krok wydaje się bezcelowy. W takim przypadku może być możliwe uniknięcie zadeklarowania zmiennej f.
manatwork
Tak! Po prostu oszczędzaj teraz i nie otwieraj więcej ...
soema
Powinieneś policzyć bajty dla przestrzeni nazw, usinga także dla deklaracji metody lub schematu programowego. Wszystko to jest częścią tego, co jest potrzebne (zadanie daje wybór funkcji lub programu, ale nie wybór tylko kilku instrukcji).
Joey,
6

Python IDLE, 191 172 156 bajtów

IDLE to standardowe IDE Pythona. Chyba że ma niestandardowy motyw, STDOUTjest niebieski, STDERRjest czerwony, a tło jest białe. Tak więc następujący kod:

from sys import*
x=[1]*7;y=[0]*7;z=[0,2,2,0]
f=[x+z+x*2]*4+[y+z+y*2,[2]*25]
for s in f+f[::-1]:[[stderr,stdout][-x].write(' █'[x>0]*2)for x in s];print()

Daje to wyjście:

wprowadź opis zdjęcia tutaj

Ponieważ drukowane znaki nie są kwadratowe, jest to nieco wyłączone, ale jeśli weźmiemy 1 jednostkę na 2 znaki w poprzek i 1 znak wysokości, wówczas proporcje są dokładne.

Można to pograć w golfa, zmniejszając o połowę wymiar szerokości i używając znaku ASCII dla bloków takich jak '#', ale nie ma to dokładnie takiego samego efektu.


Wyjaśnienie

Sam kod wydaje się w tej chwili dość niechlujny i można go z pewnością zagrać w golfa, ale podstawową ideą jest:

  • Skonstruuj macierz, w której 0reprezentuje białe znaki, 1reprezentuje niebieski blok i 2reprezentuje czerwony blok.
    • Pierwsza połowa jest konstruowana (głównie poprzez dzielenie / pomnażanie list) i dodawana do rewersu w celu wygenerowania pełnej flagi.
  • Pętlę przez matrycę, drukując każdą wartość jako białą spację lub blok do STDERR/ STDOUTodpowiednio. Wydrukuj nowy wiersz po każdym wierszu.
FlipTack
źródło
6

Python Turtle, 176 bajtów

Kolejna implementacja Python Turtle, ale tym razem oparta na stemplowaniu zamiast rysowania :

from turtle import*
shape("square")
c=color
c("navy")
z=shapesize
z(18,25)
s=stamp
s()
c("white")
z(4,25)
s()
bk(70)
seth(90)
s()
c("#d72828")
z(2,18)
s()
home()
z(2,25)
done()

Użycie stemplowania, a nie uczynienie go łatwo skalowalnym, pozwala zaoszczędzić około 60 bajtów kodu.

wprowadź opis zdjęcia tutaj

Zabawne jest to, że możesz zastąpić "square"opcję "turtle"wielokąta opcją wielokąta w shape()zaproszeniu i uzyskać logo ecogroovy:

wprowadź opis zdjęcia tutaj

cdlane
źródło
5

Perl, 134 bajty

Uwaga: w \x1brzeczywistości jest to znak ucieczki ASCII i liczy się jako 1 bajt

($b,$w,$r)=map"\x1b[48;5;${_}m",18,15,1;print@l=("$b "x7,"$w $r  $w $b",$"x14,$/)x7,@m=("$w "x8,"$r  ","$w "x15,$/),("$r "x25,$/)x2,@m,@l

Stosowanie

Zapisz jako iceland-flag.pli uruchom przez:

perl iceland-flag.pl

Squished flag

Wykorzystuje sekwencje specjalne ANSI i zakłada terminal Linux do wyświetlenia flagi. Wygląda trochę dziwnie na podstawie dostarczonych pomiarów.

Perl, 141 bajtów

Ta wersja wygląda nieco bliżej oryginalnych wymiarów ...

($b,$w,$r)=map"\x1b[48;5;${_}m",18,15,1;print@l=("$b "x14,"$w  $r    $w  $b",$"x28,$/)x7,@m=("$w "x16,"$r "x4,"$w "x30,$/),("$r "x50,$/)x2,@m,@l

Mniej spłaszczona flaga

Dom Hastings
źródło
1
Dziwność wynika z faktu, że postacie są wyższe niż ich szerokość.
Erik the Outgolfer
@ EʀɪᴋᴛʜᴇGᴏʟғᴇʀ Rzeczywiście zastanawiałem się, czy istnieją kwadratowe czcionki o stałej szerokości, ale nie sądzę, aby wyglądały szczególnie dobrze! Mogę zaktualizować tę drugą wersję, aby wyglądała jeszcze bliżej (nie powinna zajmować więcej bajtów niż obecnie, ale czas ...)
Dom Hastings,
Na TTY nie można się dziwić, że czcionka to CZCIONKA! Nie możesz tego zmienić tylko dlatego, że ci się nie podoba.
Erik the Outgolfer,
5

SpecaBAS - 150 bajtów

1 a=15,b=250,c=180: FOR i=1 TO 5: READ k,x,y,w,h: RECTANGLE INK k;x,y,w,h FILL: NEXT i
2 DATA 1,0,0,b,c,a,71,0,40,c,a,0,71,b,40,2,81,0,20,c,2,0,81,b,20

Odczytuje kolor atramentu, x, y, szerokość i wysokość i rysuje prostokąt z tymi współrzędnymi / wymiarami.

wprowadź opis zdjęcia tutaj

Brian
źródło
Czy potrzebujesz po każdym spacji :? Aha, i to 151 bajtów.
Erik the Outgolfer