Zeichnen Sie die Nationalflagge von Island

107

Die diesjährige UEFA Euro 2016 ist vorbei und neben ein paar negativen Schlagzeilen gab es auch eine sehr positive Überraschung - die isländische Fußballnationalmannschaft . Lassen Sie uns ihre Nationalflagge zeichnen.

Eingang

Offensichtlich hat diese Herausforderung keinen Einfluss.

Ausgabe

  • Zeichnen Sie die Flagge Islands in einem beliebigen visuellen Format mit mindestens 100 x 72 Pixel oder 25 x 18 Zeichen .
  • Speichern Sie die Ausgabe in einer Datei oder präsentieren Sie sie sofort - Beispielformate sind: Bilder wie PNG, JPG usw., Vektorgrafiken, Zeichnen auf HTML-Zeichenfläche oder sogar Nicht-Leerzeichen zur Visualisierung.
  • Mit diesen Farben : blau : #0048e0, weiß : #ffffffund rot : #d72828.
  • Wenn Ihre Sprache bestimmte Farbwerte nicht unterstützt, verwenden Sie die Standardwerte für Rot , Blau und Weiß aus den ANSI-Farbcodes .
  • Zeichnen Sie die Flagge mit den richtigen Proportionen, wie in der folgenden Abbildung gezeigt:

Boilerplate

  • Sie können ein Programm oder eine Funktion schreiben. Wenn es sich um eine anonyme Funktion handelt, geben Sie bitte ein Beispiel für den Aufruf an.
  • Dies ist also gewinnt die kürzeste Antwort in Bytes.
  • Standardlücken sind nicht zulässig.

Bestenliste

Wenn Sie Ihre Antwort nicht finden können, formatieren Sie Ihre Sprache und Byteanzahl wie im Abschnitt " Info " der Bestenliste beschrieben .


Diese Herausforderung ist inspiriert von Draw the national flag of france .

insertusernamehere
quelle
20
Weitaus herausfordernder wäre die Flagge meines Landes, die sich in diesem Jahr auch beim Euro deutlich besser geschlagen hat als erwartet - Wales. :-)
Gareth
24
@Gareth Ich freue mich auf eine wasserdichte Spezifikation des Drachen. ;)
Martin Ender
4
Es sieht so aus, als ob das Blau im obigen Bild dunkler ist als das tatsächliche#0048e0
Luis Mendo
10
@MartinEnder Zählt das Schnitzen auf einer Steintafel? Das ist wasserdicht.
immibis
5
@MartinEnder Mathematica wird eine haben.
Gcampbell

Antworten:

259

Python 3, 190 172 171 169 167 160 159 147 143 Bytes

Verwenden der PIL-Version 1.1.7 mit einer veralteten, aber nicht entfernten Versatzmethode.

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()

Erstellt ein mit Rot gefülltes 25 * 18-Pixel-Bild und zeichnet dann ein mit Blau gefülltes 23 * 16-Pixel-Rechteck mit einem weißen Umriss von einem Pixel. Dann versetzt es das Bild um (9,9), das an den Rändern umbrochen wird, ändert die Größe auf 100 * 72 und zeigt es dann in einem Fenster an.

Vor dem Verrechnen markieren:

Bildbeschreibung hier eingeben (Größe geändert auf 100 * 72)

Ausgabe:

Bildbeschreibung hier eingeben

Animiert:

Bildbeschreibung hier eingeben

Edit1: 18 Bytes durch Entfernen des Zuschnitts, indem zunächst ein 25 * 18-Bild erstellt wird.

Edit2: Golfed 1 Byte mit #fffanstelle von white.

Edit3: Golf 2 Bytes durch Aliasing-Importe.

Edit4: Golf 2 Bytes durch Entfernen des zweiten Arguments der Offset-Methode.

Edit5: Golfed 7 Bytes durch Anzeigen des Bildes statt Speichern. (benötigt imagemagick unter Unix)

Edit6: Golfed 1 Byte durch Umschreiben von Importen.

Edit7: 12 Bytes durch erneutes Überschreiben von Importen belegt. (danke von @Dennis)

Edit8: Animation hinzugefügt.

Edit9: Die Animation wurde aktualisiert, da das letzte Bild fehlte.

Edit10: Golf 4 Bytes dank Albert Renshaw!

Gábor Fekete
quelle
42
Wirklich schöne Antwort.
insertusernamehere
17
Das ist Genie! (Wikinger) Hut ab vor dir.
Ioannes
25
Wow, es kommt selten vor, dass ich über Code-Golf-Fragen zu SO abstimme, aber es kommt noch seltener vor, dass ich einer ganz neuen Community beitrete, um dies zu tun. Dieser Offset-Hack erinnert an das, was wir gemacht haben, bevor Sie als junger Whippersnapper Ihre oodlebytes an Speicher zur Arbeit bekamen. Exzellente Arbeit.
5
Genie, wirklich! 💡
InuYaksa
3
Wenn Sie dies tun from PIL.ImageDraw import*, Iwird Imageund D.Drawwird Draw, werden 11 Bytes gespart.
Dennis
117

x86-Real-Mode-Computercode für DOS COM, 69 65 63 62 Byte

Island Flagge produziert

Der Code soll als ausführbare DOS-COM-Datei ausgeführt werden.

Besonderen Dank

  • meden , speicherte vier Bytes.
  • meden , speicherte zwei Bytes und entfernte das Flackern.

Maschinencode (in hexadezimalen Bytes)

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

Versammlungsquelle

Quelle ist für 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
quelle
13
Dies ist eine wirklich coole erste Antwort! Herzlich willkommen!
AdmBorkBork
5
Sie können 2 Bytes sparen, indem Sie 'mov' durch 'xchg' um 10h & 13h und weitere 2 Bytes ersetzen, indem Sie 'test cx, cx / jz' um 16h durch 'jcxz'
ersetzen
3
Noch ein paar Gedanken. : Da das Programm in der Endlosschleife läuft, können Sie einfach , indem die Schleife kürzer Flimmern vermeiden _loop: jcxz _loop. Sie können auch 2 Bytes vom Ende des cxdi
Datenabschnitts abschneiden,
Nochmals vielen Dank @meden. Das Flackern war im Endeffekt völlig unnötig :) Ich habe auch mov bx, 320das 320 entfernt und in add di, 320(vorher add di, bx) verschoben .
Margaret Bloom
Toll. Jetzt haben Sie einen klaren Vorsprung vor allen Maschinencode-Antworten in dieser Herausforderung. Nur aus Gründen der Korrektheit: Es ist besser, jcxz _cycledirekt danach zu verschieben, xchg ax,cxdamit keine Bytes nach dem Ende der Daten geladen werden. Und es gibt einige irreführende Kommentare in der Quelle: ;dx = row. dxwird nirgendwo im Code verwendet.
Meden
55

C, 194 191 183 Bytes

#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 Hinzufügen eines @auf der #define A
-8 Hinzufügen [auf#define C

Verwendungszweck

main(){f();}

Ausgabe

Bild

gültig auf der Grundlage dieses Kommentars aus dem OP

Ausgabe in doppelter Größe, 204 Bytes

#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");}

image2

Giacomo Garabello
quelle
22
Die fünfte Aufwertung löste im gesamten Netzwerk +810 Wiederholungen aus ... Danke! (Ja, es ist die erste Stelle, an der ich die 200
Wiederholungen
1
Muss das Ergebnis nicht "mindestens 100 x 72 Einheiten, wobei eine Einheit ein Pixel oder ein Zeichen ist" sein? Dies entspricht nicht dieser Anforderung, aber ich vermute, dass das OP einen Fehler bei der Formulierung dieser Definition gemacht hat.
Kritzefitz
4
@Kritzefitz Nun, ein Zeichen benötigt viele Pixel, es kann also ein Pixel anstelle eines Zeichens sein. Habe ein Loch gefunden.
Erik der Outgolfer
@ GiacomoGarabello Was ist die erste Seite im Bild, auf der Sie +150 haben? Ich erkenne das Symbol nicht.
@LegoStormtroopr Es ist PPCG !! Schauen Sie sich dieses GitHub-Projekt an!
Giacomo Garabello
31

Excel VBA, 254 228 153 Bytes

Es konnte keine Möglichkeit gefunden werden, die Spalten- / Zeilengröße auf Pixel festzulegen (wodurch sie quadratisch werden), da Excel dies so handhabt, dass sie zuerst schön und quadratisch werden.

Edit 1: RGB wurde durch die zurückgegebenen Werte für Farben (-26 Byte) ersetzt

Edit 2: Versucht, so viele Vorschläge wie möglich hinzuzufügen, -75 Bytes. Ich konnte keine &48e0Farbe verwenden und weiß nicht warum. Vielen Dank an alle

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

Bild: Island Flagge

tjb1
quelle
Wie hast du die Zellen quadratisch gemacht? Haben Sie es manuell gemacht oder mit einem anderen Skript, das nicht enthalten ist? Ich würde es gerne sehen, auch wenn es nicht Teil Ihres erzielten Programms ist.
mbomb007
Ich habe es manuell gemacht, der Code zum Ändern der Zellenbreite ist einfach genug, wo ich ihn hätte hinzufügen können, aber die Größen sind nicht konsistent zwischen Zeilen- / Spalten- oder Monitorauflösungen, es sei denn, Sie legen die Größe basierend auf Pixeln fest, die nicht möglich sind was ich finden konnte. Nach dem, was ich gelesen habe, müssen Sie die Auflösung finden und einige Berechnungen anstellen, um die Pixel in die Größe zu konvertieren, die die Funktion akzeptiert.
tjb1
1
Auch der Code, um ihn in Pixel umzuwandeln, sieht so aus, als ob Sie entweder einen Teil der Auflösung oder PPI (ich verstehe die Formel nicht wirklich) als harten Code benötigen. Es scheint also, als würde er auch nicht auf allen Geräten funktionieren.
tjb1
2
Der Vollständigkeit halber (im Zusammenhang mit der Einrichtung von quadratischen Zellen anstelle der eigentlichen Lösung) können Sie bei einem Wechsel zur Seitenlayoutansicht Höhe und Breite der Zellen auf bestimmte Werte wie festlegen 0.2cm. Dies wird beibehalten, sobald Sie zurückwechseln, und Sie müssen nicht versuchen, die bizarren Excel-Seitenverhältnisse zu ermitteln :-) Wenn Sie übrigens noch mehr coole Excel-Tricks wollen, schauen Sie sich Joel Spolskys Video "You suck at Excel" an.
3
Ich denke, zusätzliches Leerzeichen kann entfernt werden, obwohl es später automatisch hinzugefügt wird.
Erik der Outgolfer
29

MATL , 57 56 52 49 48 Bytes

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

Dies ergibt die folgende Abbildung (getestet mit dem Compiler, der auf Matlab und Octave läuft).

Bildbeschreibung hier eingeben

EDIT: Sie können experimentell bei MATL Online versuchen ! (Möglicherweise müssen Sie die Seite neu laden, wenn sie anfangs nicht funktioniert.)

Wie es funktioniert

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
quelle
26

CSS, 285 284 264 Bytes

*,: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

1 Byte dank @insertusernamehere gespeichert.

Dank @ user2428118 20 Bytes gespart, indem alle pxs entfernt wurden. Beachten Sie, dass hierfür die Seite im Macken-Modus gerendert werden muss, sodass sie in Stapel-Snippets nicht funktioniert.

Ich könnte den Python-Ansatz kopieren, ein Bild versetzt herumzuwickeln, aber das wäre nicht interessant.

Ungolfed:

*, *::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 }

Dies verwendet die Pseudo-Elemente (Elemente, die nicht in HTML geschrieben sind) ::beforeund ::afterum die Linien auf dem Flag zu erstellen. Der Grund, warum es ohne HTML funktioniert, ist, dass in HTML5 die Elemente <html>und <body>optional sind, sodass Browser sie automatisch erstellen, wenn sie nicht vorhanden sind.

Mehr Spaß:

Campbell
quelle
2
Sie können immer noch speichern 1 Byte durch den Ersatz whitemit #fff.
Insertusernamehere
@insertusernamehere Ja, danke.
Gcampbell
1
Wenn Sie das CSS im Quirks-Modus anwenden (Seite ohne Doctype), können Sie es auf 264 Bytes reduzieren, indem Sie pxüberall weglassen .
user2428118
@ user2428118 Noch nützlicher, wenn man bedenkt, dass es kein HTML gibt, also nein <!doctype html>!
wizzwizz4
@ user2428118 Aus irgendeinem Grund funktioniert es bei mir in Mobile Safari nicht. Ich werde schauen, wann ich das nächste Mal an einem Computer bin.
Gcampbell
26

Bash + Imagemagick 7, 94 90 86 85 Bytes

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

8 Byte dank @manatwork und 1 Byte dank @ GlennRanders-Pehrson eingespart

bodqhrohro
quelle
5
Wenn Sie x:anstelle des Ausgabedateinamens angeben , convertwird das Ergebnis in einem Fenster angezeigt, das ebenfalls akzeptabel ist. Und genug ist , um zu entkommen , nur die scharfe, keine Notwendigkeit zu zitieren: \#d72828.
Manatwork
2
Normalerweise bezeichnen wir solche Antworten als Bash + Imagemagick . Auf bashSeite können Sie weitere 4 Zeichen sparen: convert -size 84x56 xc:#0048e0 ${s=-splice 8x8}+28+28 -background \#d72828 $s+32+32 x:.
Manatwork
Nur eine blöde Frage: Kannst du ${s=-splice 8x8}+56?
Erik der Outgolfer
@ EʀɪᴋᴛʜᴇGᴏʟғᴇʀ +56wird behandelt als +56+0, nicht +28+28.
Bodqhrohro
2
Sie können ein weiteres Byte speichern, indem Sie eine neuere Version von ImageMagick verwenden. dann kann der befehl "magick" anstatt "convert" lauten.
Glenn Randers-Pehrson
20

ZX Spectrum BASIC, 210 141 92 Bytes

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

Bildbeschreibung hier eingeben

Größe bestimmt als die Größe des BASIC-Programms auf Band über SAVE. Ein Großteil des Golfkredits geht an einige Mitglieder der ZX Spectrum-Gruppe auf Facebook , insbesondere an @impomatic und Johan Koelman.

Philip Kendall
quelle
Das zu sehen PAPERund BRIGHTbringt so viele gute Erinnerungen :-)
Luis Mendo
Gibt es Informationen darüber, wie viel Speicher ein ZX Spectrum BASIC-Programm benötigt? Ich dachte, es wäre eine "tokenisierte" Sprache, dh ich hätte erwartet FOR, NOTdass sie nur 1 oder vielleicht 2 Bytes einnimmt
Luis Mendo
1
@ LuisMendo Ja, es ist tokenisiert - es FORist genau ein Byte. Zahlen sind jedoch insofern "anti-tokenisiert", als sie sowohl als Text- als auch als Binärform gespeichert werden und 5 Byte mehr als erwartet belegen, also NOT PIanstelle von Null und dergleichen.
Philip Kendall
132 Bytes durch Entfernen des AT und Anpassen des
Grenztests
1
122 Bytes mit einigen weiteren Optimierungen twitter.com/john_metcalf/status/752783690179211264
impomatic
15

ZX Spectrum Z80 Assembly, 65 Byte

    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

Isländische Flagge

unmoralisch
quelle
14

Minecraft 1.10.2, 734 Zeichen

Es sind vielleicht 734 Zeichen, aber es ist die einzige Vorlage, die bisher aus echter Wolle gemacht wurde!

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]}]}]}]}

Gehen Sie zu ungefähr -5x -5z, fügen Sie ihn in einen Impulsbefehlsblock ein, setzen Sie ihn auf "Immer aktiv" und drücken Sie Fertig.

Flag überspannt von 0, 0 bis 100, 72; und befindet sich 3 Blöcke oberhalb des Befehlsblocks. Es wirft einen ziemlich großen Schatten und Monster erscheinen darunter. Ob dies jedoch für das Land Island zutreffend ist, ist unklar.

Faire Warnung - wird / tötet alle MinecartCommandBlocks in der Welt im Interesse der Rettung von vier Zeichen. Führen Sie dies nicht in einer Welt, der Sie übermäßig verbunden sind.

Flagge

Benutzt den Befehlskombinierer von MrGarretto und optimiert die Ausgabe ein wenig (808 -> 734)

quat
quelle
1
"Ob dies für das Land Island zutreffend ist ..." 😂
Jordanien
2
Können Sie nicht einfach kill @e ohne das Zielauswahlargument verwenden? Es wird den Spieler töten, aber hey die Flagge wird immer noch da sein
Kuilin Li
11

Logo, 216 188 Bytes

Verwendung der Implementierung von Calormen.com . Für Sie Puristen verwendet die Implementierung ein gewisses Antialiasing, das die Kanten ein wenig abfedert. Ich habe 3 Bytes verschwendet, um die Schildkröte zu verstecken, also sollte das das wieder wettmachen.

Dies kann erheblich reduziert werden, wenn Sie mit Ihrer Logo-Implementierung die Größe des Fensters festlegen können. Dann könnten Sie wrapdie Schildkröte durchpflügen lassen, um das Kreuz in vier Strichen zu machen, und überspringen, es mit einem Rand abzugrenzen.

Screenshot der Flagge generiert

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
quelle
Ich wusste nicht, dass es eine englischsprachige Version von Logo gibt!
Vincent
1
Absolut. Ich glaube, ich habe es vor über 30 Jahren zum ersten Mal auf einem Apple IIe gesehen. Ich hatte es auch auf meinem TRS-80 Color Computer. Es war mein erster Versuch, Winkel in der Geometrie zu verwenden, Jahre bevor ich es offiziell in der Schule lernen sollte.
GuitarPicker
Warum der weiße Rand?
Solomon Ucko
1
Ich habe die Linien mit einem großen Stift gezeichnet, der abgerundete Kanten an den Kreuzspitzen hinterlässt, und musste sie daher mit einem großen Radiergummi abwischen, um sie zu eckigen. Ich habe eine andere Version davon geschrieben, die eine völlig andere Methode in Logo verwendete und sich als kleiner herausstellte. Ich arbeitete auch an einer dritten Version, die ein großes lateinisches Unicode-Kreuz druckt und malt, aber die Proportionen stimmten nicht und die Größe schien diese zu übertreffen.
GuitarPicker
10

Java 8, 449 447 Bytes:

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);}}

Eine sehr späte Antwort, und anscheinend auch die längste hier. Verwendet die java.awt.GraphicsKlasse, um ein Fenster mit der Markierung darin zu erstellen und zu öffnen. Dieses Fenster besteht aus 5 Rechtecken, bestehend aus 1 für die blauen Blöcke, 2 für die weißen Streifen und 2 für die roten Streifen. Verwendet ein Verhältnis von 7 Pixel: 1. Mit anderen Worten, für jede Einheit werden 7 Pixel verwendet. Hier ist ein Bild der Ausgabe auf einem Macintosh mit OS X 10.11:

Beispielausgabe

Nun, um einen Weg zu finden, wie Sie ein bisschen mehr Golf spielen können ...

R. Kap
quelle
Versuchen Sie, paintanstelle von zu überschreiben paintComponent. Erwägen Sie die Verwendung einer anonymen Klasse für das JPanel. Verwenden Sie einfach ein BufferedImage und geben Sie es in eine Datei aus.
Justin
@Justin Eigentlich habe ich schon Blueals Hintergrund 1 riesiges Rechteck verwendet. Ich habe mich zwischen dieser und einer anderen Version, die ich in Python gemacht habe, vertauscht. Trotzdem danke für die anderen Tipps! :)
R. Kap
Noch ein paar Vorschläge: Verwenden Sie nicht a JPanel, sondern überschreiben Sie das JFrame. Wenn Sie dies tun und nur überschreiben paint, brauchen Sie kein Swing, sondern nur AWT. Ändern Sie also das JFramezu Frameund entfernen Sie den Import. Ruf nicht an super.paint. Ordnen Sie die Hauptmethode neu an. Verschieben Sie die setSizein die paintMethode von our Frame, entfernen Sie die Variable Jund fügen Sie sie .setVisible(true)an das Ende der anonymen Klasse an. Schließlich ändern .setVisible(true)zu sein show(), ja es eine veraltete Methode ist, aber es ist kürzer. Verwenden Sie ein interface, um die publicaus der Hauptmethode zu entfernen .
Justin
Endergebnis bei 338 Zeichen (musste auch die Höhe ändern, da es ein Rahmen ist):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
Noch besser: Malen Sie nicht das erste Rechteck, rufen Sie einfach auf setBackground(color)(auch die Größe war noch falsch). Jetzt um 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 Bytes

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()

Mit neuen Zeilen und Erläuterungen eingerückt:

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()

Insel Flagge

Bearbeiten : Es stellt sich heraus frame(), dass im Gegensatz zu plot()oder plot.new()nicht standardmäßig ein Rand zum Plot hinzugefügt wird, was bty="n"hier unnötig war.

Plannapus
quelle
9

Atari 8-Bit-Programm, 123 Byte

Ein weiterer "Nur zum Spaß" -Eintrag: Dieses Programm soll auf einem Atari 8-Bit-Computer oder -Emulator ausgeführt werden. Um beispielsweise das Programm auf Atari800 zu laden, führen Sie einfach Folgendes aus:

atari800 iceland.xex

Maschinencode (in hexadezimalen Bytes)

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

Assembler-Quellcode (kann mit MADS kompiliert werden ):

        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

Wie es funktioniert:

Das Programm verwendet eine benutzerdefinierte Anzeigeliste, die auf ANTIC Mode 8 basiert (40 Pixel pro Zeile, 2 bpp). Wiederholte Zeilen werden aus demselben Speicherort geladen. Nach dem Einrichten der Anzeige tritt das Programm in eine Endlosschleife ein.

Bildschirmfoto:

iceland.xex läuft auf Atari800

Locoluis
quelle
9

FFmpeg, 339 184 Bytes

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

Ich werde versuchen, dies nach unten zu spielen.

Bild 100x72 der Island-Flagge

Gyan
quelle
9

Python, 119 118 114 112 Bytes

Nichts Besonderes, unkompliziert:

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

Ausgabe als binäres PPM, Verwendung

python golf_iceland.py > iceland.ppm
  • Edit1: Schob ein Byte zwischen printund das Anführungszeichen
  • Edit2: etwas kürzer als binäres PPM
  • Edit3: Dargestellt, dass \0anstelle von verwendet werden kann\x00

Wenn jemand weiß, wie man das nicht druckbare ASCII-Zeichen direkt verwendet, lass es uns wissen.

In PNG konvertiert

Karl Napf
quelle
2
Herzliche Glückwünsche! Du hast mich um einiges geschlagen: D
Gábor Fekete
2
@ GáborFekete hat dich in Bytes geschlagen, ja. Aber Ihre Antwort ist mit diesem Versatz viel schlauer
Karl Napf
Warum nicht die Ergebnisse der Fluchten anstelle der Fluchten selbst haben?
Solomon Ucko
@SolomonUcko Ich habe versucht b,w,r="\0Hà"*28,"ÿ"*12,"×(("*8, Python 3 zu verwenden, aber es funktioniert nicht.
Karl Napf
@ KarlNapf, wie ist es gescheitert? Wurde falsch gezeichnet oder eine Fehlermeldung ausgegeben? Es könnte auch ein Codierungsproblem sein.
Solomon Ucko
8

JavaScript, 267 Bytes

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
quelle
1
Ist das 7 - 14 Verhältnis der linken und rechten blauen Breite korrekt?
Manatwork
1
@manatwork Ups, aus irgendeinem Grund dachte ich 100/25 = 5, also endete alles 25% zu breit.
Neil
8

Java, 335 Bytes

Die Funktion ist

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"));}

Und es schreibt das gewünschte Bild als f.png, mit einer Größe von 100x72

(Beachten Sie, dass dies kein direkter Konkurrent zu Answer by R. Kap ist , da es eine Datei schreibt und das Bild nicht auf dem Bildschirm anzeigt.)

Hier ist die ungolfed Version, die kompiliert und ausgeführt werden kann:

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"));
    }
}

Eine Randnotiz zu den damit verbundenen Fragen: Vielleicht sollte man eine Herausforderung schaffen, um die Flaggen zu malen

  • Indonesien
  • Polen
  • Finnland
  • Frankreich
  • Niederlande
  • Thailand
  • Norwegen

gleichzeitig:

Bildbeschreibung hier eingeben

Marco13
quelle
7

SVG + Javascript, 190 165 164 Bytes

Kein Experte da, nur einen Pfad zu wiederholen, um die Farbe und Linienbreite zu ändern, sieht albern aus.

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">`)

Besser lesbar:

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">`)
nicael
quelle
Sie können path d="m0,0h100v72H0"anstelle des Rechtecks ​​zwei Bytes speichern. Verwenden Sie dies auch M0 36H100M36 0V72für die Daten des anderen Pfads, wodurch weitere fünf Bytes eingespart werden. Sie können das styleAttribut auch löschen, um beide stroke-widthund strokeals Attribute zu deklarieren und weitere fünf Bytes zu sparen.
Joey
7

Verarbeitung , 136 Bytes

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);

Ungolfed

//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);

Ausgabe:

Bildbeschreibung hier eingeben

Cody
quelle
1
Sie können zwei weitere Bytes mit fillund rectanstelle von sizeund abschneiden background. 134 Bytes: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
Das, was GuitarPicker sagte, fill(-1)ist ein Byte kürzer alsfill(255)
Kühe quaken am
7

Mathematica 174 157 Bytes

Ohne eingebauten:

157 Bytes

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}]}

Bildbeschreibung hier eingeben

oder alternativ

232 Bytes

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]}]

Bildbeschreibung hier eingeben

martin
quelle
1
Bitte. Gleiches gilt für Ihre zweite längere Version. u=Unitize;c=ConstantArrayetc ^ _ ^
Dan Oak
1
Warten Sie, es gibt etwas, für das Mathematica kein eingebautes Programm hat. Ich bin überrascht.
Morgan Thrapp
@MorganThrapp Ich bin mir sicher, dass es früher eine andere Mathematica-Antwort gab, die eine eingebaute Funktion verwendete.
Gcampbell
3
Es gibtCountryData["Iceland", "Flag"]
dwa
7

JavaScript (ES6), 231 240

Code im Snippet unten. Führen Sie es zum Testen aus.

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
quelle
7

ZX Spectrum Z80 Assembly, 51 Byte

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

Bildbeschreibung hier eingeben

Ralph Becket
quelle
7

J, 86 84 83 Bytes

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

Der Ansatz ist der gleiche wie bei @ Gábor Fekete mit Python.

Das linke Argument colorsfür viewmatist ein Array von RGB-Werten, in unserem Fall:

255 255 255
  0  72 224
215  40  40

Und das richtige Argument ist eine Matrix von Indizes von colors.
(_9 _9 |. matrix)weist an, matrix9 Elemente in jeder Dimension zu verschieben.
Scary Bau (border ([,~[,.~[,[,.]) matrix)wickelt matrixmit der Nummer border.
Und (14 21 $ 1)macht 14 × 21 Matrix von Einsen.

Die Ausgabe wird in einem separaten Fenster angezeigt, das standardmäßig ziemlich groß ist. Bildbeschreibung hier eingeben

Vielen Dank

Meilen - 2 Bytes bei der Neuordnung der Farben gespart, verwendet die Funktion ,, die die Zahlen (255) für die Formübereinstimmung dupliziert.

Dan Oak
quelle
1
Es sieht so aus, als ob die Höhe der Flagge 26 statt 25 Einheiten beträgt.
Gábor Fekete
@ GáborFekete hm, du meintest die Höhe ist 19 statt 18? habe das nicht erwähnt, habe ich erst nach deinem Kommentar bemerkt
Dan Oak
Oh, richtig, ich habe height geschrieben, aber die width-Werte verwendet ...
Gábor Fekete
Ja, in der Tat. Ich habe einen Fehler in den Werten gemacht. Die Form der Ausgangsmatrix sollte 14 21( 18 25 - 4 4) sein. korrigieren ... danke!
Dan Oak
1
Sie können 2 Bytes speichern, um die RGB-Werte neu zu ordnen(255,0 72 224,:215 40 40)viewmat _9 _9|.2(b=.[,~[,.~[,[,.])0 b 14 21$1
Meilen
6

TI-BASIC (nicht konkurrierend), 323 Bytes

Code ist für den TI-84, 83 und Varianten geschrieben. Ich hoffe, es ist kein Problem, dass die Abmessungen je nach Gerät variieren und der Code nicht farbig ist.

Konfiguration:

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

Zeichnung:

: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)

Golf gespielt:

: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

Ja, der Mangel an )ist beabsichtigt.

Größe:

Line(und alle derartigen Befehle belegen 1 Byte, jede Zahl ein Byte. Das sind 323 Bytes.

Das war absolut mühsam. Ich werde das hoffentlich auf einen Emulator bekommen (ich muss alles manuell eingeben), aber es sind buchstäblich nur Linien in der Form der Flagge.

verkohltes Gras
quelle
1
@ Random832 Seltsamerweise ja! Überprüfen Sie die Token-Größe hier: tibasicdev.wikidot.com/line Ich bin nicht sicher, was das Byte genau ist. Ich weiß jedoch, dass es auf dem Taschenrechner im Wesentlichen als Zeichen behandelt wird.
Charredgrass
1
@ Random832 Das Byte für Line(ist 0x9C. Eine Tabelle mit Ein-Byte-Tokens finden Sie hier: tibasicdev.wikidot.com/one-byte-tokens
f ''
1
Könnten Sie nicht mithilfe von Regionen (mithilfe von <und >) anstelle von Linien grafisch darstellen , um Graustufenschattierungen zu erhalten?
mbomb007
7
Warum ist das nicht konkurrierend?
Mego
1
Beachten Sie, dass es jetzt eine Farbe TI-84 gibt, sodass Sie sie dort wahrscheinlich mit nur geringfügigen Änderungen ausführen können.
Moshe Katz
6

C #, 384 346 317 292 291 289 Bytes

Einfache Lösung mit Windows Forms und 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");

Verwendungszweck

Starten Sie ein neues Konsolenprojekt und schreiben Sie den obigen Code in die main-Methode, fügen Sie System.Drawing-Namespace hinzu.

Wie es funktioniert

Der Code erstellt ein neues Bild und zeichnet einige Linien darauf. Das Bild wird auf der Festplatte gespeichert. Einige der Endpunkte der Linien liegen außerhalb des sichtbaren Bereichs.

Bildbeschreibung hier eingeben

Soema
quelle
Willkommen bei PPCG! Tolles erstes Codegolf, aber es sieht so aus, als könntest du es verbessern. Erstens denke ich, dass Sie hier und da einige Leerzeichen entfernen können ( b = new=> b=new, using ()=> using(), verwenden Sie keine Leerzeichen nach ;s. Wenn Sie möchten, können Sie unsere Tipps zum Golfen in C # lesen , um einige Ratschläge zu erhalten.
Katenkyo
Danke, Leerzeichen werden entfernt und ich lösche auch die using-Anweisung. Ich benutze jetzt auch anonyme Variablen.
Soema
Sicher, dass Sie brauchen Process.Start(f);? Soweit ich weiß, ist das ähnlich cmd start. Da Sie das Bild speichern oder anzeigen können und es bereits gespeichert haben, erscheint dieser Schritt sinnlos. In diesem Fall können Sie möglicherweise vermeiden, auch die Variable f zu deklarieren.
Manatwork
Ja! Sparen Sie jetzt und keine Öffnung mehr ...
Soema
Sie sollten die Bytes für den Namespace usings sowie für eine Methodendeklaration oder ein Programm-Boilerplate zählen. Dies ist alles ein Teil dessen, was benötigt wird (die Aufgabe gibt Ihnen die Wahl einer Funktion oder eines Programms, aber nicht nur die Wahl einer Reihe von Anweisungen).
Joey
6

Python IDLE, 191 172 156 Bytes

IDLE ist die Standard-IDE von Python. Es sei denn, es hat ein benutzerdefiniertes Thema, STDOUTist blau, STDERRist rot und der Hintergrund ist weiß. Also der folgende Code:

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()

Erzeugt diese Ausgabe:

Bildbeschreibung hier eingeben

Bei gedruckten Zeichen, die nicht quadratisch sind, ist dies geringfügig anders. Wenn wir jedoch 1 Einheit mit 2 Zeichen Durchmesser und 1 Zeichen Höhe annehmen, sind die Proportionen exakt.

Dies könnte durch Halbieren der Breitendimension und Verwenden eines ASCII-Zeichens für die Blöcke, wie z. B. '#', erreicht werden, aber es hat nicht genau den gleichen Effekt.


Erläuterung

Der Code selbst scheint im Moment ziemlich schlampig zu sein und kann definitiv gespielt werden, aber die Grundidee ist:

  • Konstruieren Sie eine Matrix, in 0der Leerzeichen, 1ein blauer und 2ein roter Block dargestellt werden.
    • Die erste Hälfte wird erstellt (hauptsächlich durch Aufteilen / Multiplizieren von Listen) und umgekehrt zu sich selbst addiert, um das vollständige Flag zu generieren.
  • Durchlaufen Sie die Matrix und geben Sie jeden Wert entweder als Leerzeichen oder als Block zu STDERR/ STDOUTentsprechend aus. Drucken Sie nach jeder Zeile eine neue Zeile.
FlipTack
quelle
6

Python-Schildkröte, 176 Bytes

Eine weitere Implementierung von Python Turtle, diesmal basierend auf Stempeln statt Zeichnen :

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()

Durch das Stempeln werden etwa 60 Byte Code eingespart, was die Skalierbarkeit erschwert.

Bildbeschreibung hier eingeben

Der lustige Teil ist, dass Sie "square"die "turtle"Polygonoption im shape()Aufruf durch die Polygonoption ersetzen und ein ecogroovy-Logo erhalten können:

Bildbeschreibung hier eingeben

cdlane
quelle
5

Perl, 134 Bytes

Hinweis: \x1bIst eigentlich das ASCII-Escape-Zeichen und zählt als 1 Byte

($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

Verwendungszweck

Speichern unter iceland-flag.plund ausführen über:

perl iceland-flag.pl

Gequetschte Flagge

Verwendet ANSI-Escape-Sequenzen und setzt ein Linux-Terminal zur Anzeige des Flags voraus. Sieht bei den angegebenen Maßen etwas seltsam aus.

Perl, 141 Bytes

Diese Version kommt den Originalmaßen etwas näher ...

($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

Weniger zerquetschte Flagge

Dom Hastings
quelle
1
Die Verrücktheit kommt von der Tatsache, dass Zeichen größer als ihre Breite sind.
Erik der Outgolfer
@ EʀɪᴋᴛʜᴇGᴏʟғᴇʀ Ich habe mich zwar gefragt, ob es quadratische Schriften mit fester Breite gibt, aber ich kann mir nicht vorstellen, dass sie besonders gut aussehen würden! Ich könnte diese zweite Version aktualisieren, um noch genauer hinzuschauen (es sollte nicht mehr Bytes dauern, als es derzeit ist, aber Zeit ...)
Dom Hastings
Bei einem TTY kann man sich so etwas nicht wundern, die Schriftart ist THE FONT! Sie können es nicht ändern, nur weil Sie es nicht mögen.
Erik der Outgolfer
5

SpecaBAS - 150 Bytes

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

Liest die Tintenfarbe, x, y, Breite und Höhe und zeichnet ein Rechteck mit diesen Koordinaten / Abmessungen.

Bildbeschreibung hier eingeben

Brian
quelle
Benötigen Sie nacheinander Leerzeichen :? Oh, und es ist 151 Bytes.
Erik der Outgolfer