Im Jahr 2015 begann der Portland International Airport mit dem Austausch seines Kultteppichs . Ich möchte, dass Sie ein Programm schreiben, um ihren alten Teppich in so wenigen Bytes wie möglich zu zeichnen.
Der Teppich:
Spezifikationen
Hier ist ein Link zu einem skalierbaren PDF-Bild einer Kachel. Ihre Ausgabe sollte mit den relativen Abmessungen und der Position des Bildes übereinstimmen.
Alle Farben in Ihrem endgültigen Bild sollten innerhalb von 15 von jedem RGB-Wert im angegebenen Bild liegen. Diese sind im Folgenden aufgeführt.
Red Green Blue Teal: 0, 168, 142 Magenta: 168, 108, 185 Orange: 247, 58, 58 Light Blue: 90, 166, 216 Dark Blue: 0, 77, 117
Ihre Ausgabe muss mindestens 150 x 150 Pixel groß und quadratisch sein. Wenn Sie sich für die Ausgabe in einem skalierbaren Format wie einem Vektorbild entscheiden, sollten Sie das Bild genau angleichen.
Sie können das Bild in jedem vorhandenen Bildformat ausgeben.
Dies ist Codegolf, daher sollten Sie versuchen, die Anzahl der Bytes in Ihrem Code zu minimieren.
quelle
Antworten:
Reines HTML, 873 Bytes
HTML + CSS, 625 Bytes
quelle
Tikz,
725693681671 BytesProbieren Sie es online!
Erläuterung
Ein Großteil des Codes ist ein Wrapper:
Dies ist eine geringfügige Abweichung vom Standard-Tikz-Wrapper, da er auch die Linie aufweist,
\usepackage{xcolor}
damit wir die Farben richtig erstellen können.Zunächst
line width=20,every node/.style={minimum size=20}]
werden die Linien und Knoten auf die richtige Größe eingestellt.Danach definieren wir die Farben, die wir für die verschiedenen Teile des Bildes verwenden werden:
Jetzt, da alles eingerichtet ist, malen wir den Hintergrund für unsere Leinwandfarbe:
(Ich werde kein Bild davon einfügen, weil es nur ein blaugrünes Quadrat ist, aber ich werde Bilder von jedem anderen Schritt einfügen.)
Der erste Knoten, den wir hinzufügen, ist der orangefarbene Knoten direkt links von der Mitte der Zeichenfläche.
Jetzt werden wir die hellblauen und magentafarbenen Knoten zeichnen. Es gibt 7 blaue Knoten und 4 blaue Knoten, aber wir können zusätzliche Knoten zeichnen, die später durch Linien verdeckt werden, sodass wir jeweils 7 zeichnen.
Jetzt zeichnen wir alle Gruppen von 3 Punkten mit einer einzigen
\foreach
SchleifeJetzt ziehen wir die richtige Linie. Diese Linie ist eine einfache Linie mit Versätzen
.35
in jeder Richtung, die der Größe eines Knotens entsprechen.Jetzt müssen wir die dunkelblauen Linien und Quadrate auf der x-Achse einzeichnen. Wir zeichnen sie mit einer Linie unter Verwendung eines benutzerdefinierten Strichmusters.
Dieses Muster ist
[dash pattern=on20off8.5on162.5off8.5]
Dies schafft ein Quadrat mit einem langen, festen Schwanz. Unsere Linie beginnt von unten und deckt nicht ganz 2 Zyklen des Musters ab.Und jetzt sind wir fertig.
quelle
\definecolor
derHTML
Angabe (anstattRGB
) können Sie Farben mit hex angeben.Literal-PNG-Datei,
283,234,227 BytesBEARBEITEN : Mit dem Online-Bildkomprimierungsdienst https://compress-or-die.com/ wurden weitere 7 Byte eingespart.
albn @ alexhi
Die 227 Bytes entsprechen der tatsächlichen Größe der Binärdatei carpet.png. Wenn es in base64 codiert ist, wie im obigen Block angezeigt, ist es einige Bytes länger (308 Bytes). Wenn Sie das in einem HTML-Snippet einkapseln, das das Bild sofort rendert, werden einige weitere Bytes hinzugefügt:
HTML,
414,343, 336 BytesBearbeiten : Ich habe die Anführungszeichen entfernt und> geschlossen, wie von Shaggy vorgeschlagen. Komprimiert auch das Bild um weitere
17, 24 Bytesquelle
=
und die schließenden>
. Hier ist eine 366-Byte-Version, an der ich gearbeitet habe, bevor ich Ihre Antwort gesehen habe:<img src=data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAJgAAACYBAMAAADq7D0SAAAAD1BMVEUAqI4ATXWobLlaptj3OjrqGXAuAAAAp0lEQVRo3u3YQQqFMAxFUbeQLbiFbsH9r8k3y8CmTiKm7b2Dwv/CgUAD4jF3TYGBRdgKmRqPCQa28gaMZ20KDGz5DQhnbQoMTG2wAcPR/ScY2HeYVw4zBQYWYDUvbRLWFS/lBxhYhM3bpXzMcWBgEVa5U70cpsDAnkf1FxcwMDAwMLBczP8DAwuwmpc2HzMFBhY8qHlp8zFTYGCdyn8GKrhOYBtjv3QDvf+Zic+8bOsAAAAASUVORK5CYII
Mathematica, 285 Bytes
Einfacher zu lesen:
Die Zeilen 1 bis 3 definieren Kurznamen für Funktionen, von denen die wichtigste darin besteht
s
, ein Quadrat zu zeichnen, das an den Koordinaten zentriert ist, die es empfängt (tatsächlich das Dreifache seiner Koordinaten, für eine angemessene Skalierung). Zeile 4 definiert eine Farbfunktion unter Verwendung von Mathematics "Shortcut" RGB-System:RGBColor["#xyz"]
wobeixyz
hexadezimale Ziffern stehen fürRGBColor[{17x, 17y, 17z}]
(so dass jede Koordinate 16 Optionen mit gleichem Abstand von 0 bis 255 hat). Mit den ersten Befehlen in den Zeilen 6 bis 10 wird die aktuelle Farbe gewechselt, wobei die Shortcut-Farben verwendet werden, die den angegebenen fünf Farben am nächsten sind (kein Wert ist um mehr als 8 verschoben, wenn auf das nächste Vielfache von 17 gerundet wird).Zeile 6 zeichnet das große blaugrüne Quadrat. Linie 7 zeichnet die Linie der Magenta-Quadrate, Linie 8 die Linie der Orange-Quadrate und das einzelne Orange-Quadrat. Linie 9 zeichnet die Linie der hellblauen Quadrate. Linie 11 zeichnet die drei diagonalen Linien dunkelblauer Quadrate sowie das einzelne dunkelblaue Quadrat unten. Schließlich zeichnet Linie 12 die drei langen dunkelblauen Rechtecke. Die Ausgabe ist unten:
(Golftipp: Der Befehl
Cuboid
, der für 3D-Grafikobjekte vorgesehen ist, funktioniert in 2D einwandfrei und ist kürzer alsRectangle
.)quelle
Python, 420
quelle
HTML / SVG,
550542521 Bytesquelle
HTML, 366 Bytes
Sonntag bekam eine Base64- Antwort , während ich noch daran arbeitete; Wenn er es verwendet, lösche ich diese Antwort.
Wenn der Base64-String für sich genommen eine gültige Antwort ist, sind das nur 335 Bytes:
quelle
HTML / SVG + JavaScript (ES6),
500499 BytesEin Extra
>
ist , um diese zu Funktion als Snippet findet erforderlich diese Fiddle für tatsächlichen Code.Erläuterung
Ein Array von Arrays wird Funktion abgebildet
a
, Klont die Erstellungrect
in der HTML, so dass sie nach dem anfänglichen Einsetzenrect
und Einstellen ihrerfill
,x
,y
,width
undheight
Attribute. Jedes Array enthält Werte für diese Attribute in dieser Reihenfolge, wobei fehlende Werte durch die Standardparameter von festgelegt werdena
. Das scheinbar Unnötiger.id++
erlaubt die Verwendung von,cloneNode()
während sichergestellt wird, dass es immer nur 1rect
mit einemid
von c gibt; dies erspart die notwendigkeit, die lächerlich teuren zu verwendendocument.createElementNS("http://www.w3.org/2000/svg","rect")
.quelle
PHP + SVG, 425 Bytes
erweitert
Das Ergebnis des Codes in einem HTML-Snippet
PHP + SVG, 375 Bytes
Diese Bytezahl kann durch Komprimieren der SVG erreicht werden
quelle