Als ich auf diese Frage stieß, fiel mir ein, dass ich auch einmal genaue Regeln für den Bau der südkoreanischen Flagge gesehen hatte. Und das ist eine ganz andere Konstruktion.
Sie müssen jetzt eine genaue Konstruktion für diese zeichnen!
Spezifikation
Sie können das Flag mithilfe von Vektor- oder Rastergrafiken in eine Datei oder einen Bildschirm rendern. Wenn Ihre Ausgabe gerastert ist, muss Ihr Bild eine Größe von 450 x 300 Pixel oder mehr haben.
Alle Längenverhältnisse und Positionen müssen genau den Angaben in der folgenden Abbildung entsprechen:
Beachten Sie, dass die Mitten der beiden kleinen Kreise auf die Diagonale ausgerichtet sind.
Für die Farben müssen Sie die folgende Palette verwenden:
- Weiß: #FFFFFF
- Schwarz: # 000000
- Rot: # C60C30
- Blau: # 003478
Die schwarze Grenze darf nur gezeichnet werden, wenn Sie in Ihrem Zeichnungssystem aus technischen Gründen keine 3: 2-Zeichenfläche angeben können (andernfalls sollten Sie eine 3: 2-Zeichenfläche verwenden und die Flagge sollte diese vollständig ausfüllen). Wenn Sie die Grenze hinzufügen müssen, kann sie beliebig dick sein - die Flagge sollte streng innerhalb der schwarzen Grenze betrachtet werden. Andere Hilfslinien oder Längenindikatoren dürfen nicht gezeichnet werden. Das heißt, die Flagge sollte genau wie im ersten Bild angezeigt werden.
Wertung
Dies ist Codegolf, daher gewinnt die kürzeste Antwort (in Bytes).
Zur Warnung: Die Verwendung vorhandener Komprimierung (wie das Einbetten eines komprimierten GIF) ist in mehrere Standardlücken unterteilt .
quelle
CountryData["ROK","Flag"]
zählt nicht?Antworten:
PHP / HTML / SVG, 324
(Zeilenumbrüche zur besseren Lesbarkeit hinzugefügt)
Die komprimierten Daten werden auf die gleichen SVG-Daten wie in meiner vorherigen Antwort (siehe unten) erweitert, jedoch mit zwei Änderungen, um die Komprimierung zu unterstützen:
Die beiden
<use>
Abschnitte werden auf den ursprünglichen Inhalt des<defs>
Abschnitts erweitert. Dadurch wird der Quelltext länger, die Entropie wird jedoch verringert, sodass die Komprimierung verbessert wird.Im ersten
<g>
Elemente, änderte ichtransform=translate(36,24)rotate(33.69)
zutransform=rotate(33.69)translate(43.27)
. Dies hat geometrisch den gleichen Effekt, wird jedoch besser komprimiert, da die Sequenz><g transform=rotate(
jetzt zweimal angezeigt wird.Standardmäßig dient PHP als
Content-Type: text/html
, daher sollte die ungültige XML-Syntax kein Problem darstellen.SVG / HTML, 463
Der HTML-Parser kümmert sich nicht zu sehr um die korrekte Syntax, daher können wir Anführungszeichen in den Parametern beseitigen, solange sie keine Leerzeichen enthalten. Es sollte möglich sein, dies mit etwas Javascript weiter zu reduzieren.
quelle
Python + Pycairo,
371 370366 BytesGibt eine winzige SVG-Datei mit dem Namen aus
F
.quelle
C(*[.77,0,.05,.2,.19,.47][i::2])
ist kürzer alsC(*[(.77,.05,.19),(0,.2,.47)][i%2])
s=SVGSurface("F",12,8);c=Context(s)
anstatt nurc=Context(SVGSurface("F",12,8))
?HTML + CSS,
966 906 843 792762 BytesKein Gewinner zu jeder Zeit, aber viel Spaß beim Zeichnen in CSS. Dies kann jedoch viel Golf gespielt werden.
CSS, HTML :
;border:1px solid
Dies ist nur zur Veranschaulichung<body>
gedacht , da das Tag klare Grenzen aufweist, die von Inspector oder ähnlichen Tools, wie vom OP angegeben, eingehalten werden könnenHINWEIS Funktioniert nur in Firefox (oder Chrome Canary / Dev), da keine herstellerspezifischen Transformationen und Farbverläufe verwendet werden.
Sehen Sie es in Aktion
quelle
0deg
->0
(zweimal) und entfernenleft:0
ausa:before
. In HTML könnten Sie verwenden<p><ul></ul>
. (<p>
wird vor implizit geschlossen<ul>
):before{content:''}
und:after{content:''}
länger als nur das Hinzufügen eines weiteren Elements (obwohl dies in der Tat besser aussieht).-webkit-
vor alletransform:
s, aber unnötig zu sagen , dass es ziemlich viel länger machen würde!BBC Basic,
349343 ASCII-Zeichen, Token-Dateigröße 330Laden Sie den Emulator unter http://www.bbcbasic.co.uk/bbcwin/bbcwin.html herunter
Das Verwenden der richtigen Farben fügte viel hinzu, aber das Golfen aller Grafikbefehle bis hinunter zu rohen VDU-Codes ergibt eine Einsparung von insgesamt 6 Zeichen im Vergleich zu meinem ursprünglichen Beitrag. Alle Grafiken auf dem BBC micro werden über maschinenspezifische ASCII-Steuercodes erstellt. Anstatt also allgemeine Grafikbefehle zu verwenden, können Sie Bytes direkt an den VDU-Controller senden (in der Regel kürzer, aber mit großem Aufwand für die Lesbarkeit). Ein mit Semikolon statt Komma endender Wert ist eine 16-Bit-Little-Endian-Darstellung von 2 Bytes.
Ungolfed-Version
Zu Beginn des Programms verschiebe ich den Ursprung in die Mitte des Bildschirms.
Ich zeichne keine großen farbigen Halbkreise. Stattdessen führe ich eine Schleife aus, die kleine rote und blaue Kreise zeichnet und sich gegen den Uhrzeigersinn dreht. Ich mache fast 3 komplette Umdrehungen (beginnend mit Blau rechts), was offensichtlich mehr als genug ist, um die Scheibe auszufüllen. Ich halte bei der 3. Umdrehung an, gerade als das Blau rechts unten in der richtigen Position ist, um mit den Balken (die geplottet werden müssen) übereinzustimmen.
Wenn der Winkel stimmt, zeichne ich einen der Balken. Der Vektor x, y zum Zeichnen des aktuellen kleinen blauen Kreises gibt an, in welche Richtung der Balken zeigen soll. Für jede der 3 Umdrehungen wird ein anderer Wert der ganzen Zahl
a*7DIV44
berechnet, der angibt, ob der erste, zweite oder dritte Balken mit seiner Innenkante 6 / 8,7 / 8 oder 8/8 Einheiten von der Mitte entfernt gezeichnet werden soll ( entsprechend den in der Frage verwendeten Einheiten.) Da die Programmeinheiten 1/4 der in der Frage angegebenen Einheiten sind, ist dies immer noch eine halbe Einheit, sodass wir vor dem Speichern in die Variable ´b´ erneut durch 2 teilen, um eine wiederholte Halbierung zu vermeiden später.Die Balken werden durchgezogen, und die Mitte wird bei Bedarf gelöscht. Dies verhindert, dass Knicke die Halbstangen verbinden. Die Variable z gibt an, ob ein Balken geschnitten werden soll. Das heißt, wenn y für die mittleren Balken negativ ist und wenn x für die anderen Balken positiv ist.
MOVE
ist ein absoluter Zug.MOVEBY
ist ein relativer Zug.PLOT133
Berücksichtigt die letzten beiden Grafikcursorpositionen sowie die neue (in relativen Koordinaten) als drei Ecken eines Parallelogramms und zeichnet dieses Parallelogramm.Ausgabe (& Diskussion von Spracheinschränkungen)
Ich habe einen Bildschirmmodus von 1280 x 800 logischen Pixeln = 640 x 400 physischen Pixeln ausgewählt, der standardmäßig einen schwarzen Hintergrund hat. Darauf zeichne ich ein weißes Rechteck von -600, -400 bis 600.400, um als meine "Leinwand" zu fungieren.
BBC Basic kann 16 Farben gleichzeitig von einer umprogrammierbaren Palette verarbeiten. Es werden jedoch nur 18-Bit-Farben unterstützt, während in der Frage die Farben als 24-Bit-Farben angegeben sind. Die Farben so nah wie möglich.
quelle
Python 3-Schildkröte (
552549 Byte)( Bild in voller Größe )
Bearbeiten: Jetzt, da wir Stapel-Snippets haben, ist hier ein Stapel-Snippet-Test mit Skulpt , mit Hilfe von ArtOfCodes Antwort hier . Leider hat Skulpt Python noch nicht vollständig implementiert, daher musste ich die Hälfte meines Codes verstümmeln, damit dies funktioniert. Mit anderen Worten, dieses Snippet soll nur angeben, wie mein Programm funktioniert (ohne dass Python aufgerufen werden muss).
(Außerdem stelle ich fest, dass dies in einigen Browsern möglicherweise nicht funktioniert ...)
Tatsächlicher Code:
Da die Schildkröte so langsam ist, können Sie, wenn Sie sofort Ergebnisse erzielen möchten, diese
t.tracer(0)
nach der ersten Zeile hinzufügen , bevor Sie das Skript ausführen.Hinweis: Aus irgendeinem Grund zeichnet Turtle weiterhin zusätzliche schwarze Pixel, obwohl ich bereits angerufen habe
up()
, und ich habe keine Ahnung, warum ...quelle
HTML + ES6, 388
Wenn Ihr Browser ES6 unterstützt, können Sie es in JSFiddle anzeigen oder das Snippet ausführen.
Die Flagge wird aus einigen Grundformen konstruiert, wobei die Leinwand zuerst gedreht wird, um die Winkel zu berücksichtigen.
quelle
<canvas width=576 height=384 id=D><script>c=D.getContext('2d')
ist 9 Bytes weniger. Da die ganze Seite weiß ist, müssen Sie den Rand zeichnen.Mathematica
404450quelle
C ++ ZU GROSS
Versuchte dies mit meiner hausgemachten PPM-Zeichnungsbibliothek . Es ist technisch skalierbar, aber ich bin durch meine rekursive Füllfunktion eingeschränkt, da es unzuverlässig ist und gerne fehlerhaft arbeitet. Ich denke, es verbraucht zu viel Speicher, sodass der Benutzer die Skalierung nicht festlegen kann. Das Bild ist unregelmäßig, da die Koordinaten, die ich für jede Ecke der Balken eingegeben habe, geringfügig abweichen.
Ich habe es so eingerichtet, dass es mit einem schwarzen Hintergrund beginnt, dann habe ich einen weißen Kreis in die Mitte und dann rote und blaue Kreise in die Mitte. Verwendet rekursive Füllungen, um den Rest von Rot und Blau hinzuzufügen. Dann zeichnete ich Rechtecke mit weißen Linien, um die schwarzen Balken zu markieren. Teilen Sie den schwarzen Hintergrund in 4 Abschnitte mit weißen Linien und verwenden Sie 4 rekursive Füllungen, um jeden Abschnitt weiß zu machen. Wenn Sie dies in einem Durchgang tun, wäre ein Segfehler aufgetreten. Es ist immer noch sehr langsam zu rendern.
Ungolfed Hauptcode (der Rest der Bibliothek ist zu groß, Golfen ist egal)
quelle
PostScript ,
572477 BytesGolf Code:
Ungolfed-Code:
Ergebnis:
quelle
Python 2, 483 Bytes
Mögliche Verbesserungen:
Ausgabe als Text-PPM, Verwendung:
ungolfed beta version
quelle