Die Herausforderung ist einfach: Zeichnen Sie einen Regenbogen in so wenigen Bytes wie möglich
Die Spezifikationen für den Regenbogen lauten wie folgt:
- Die Figur muss genau 400 Pixel breit und 200 Pixel hoch sein (optional 401x201, wenn Sie ein einzelnes zentrales Pixel wünschen)
- Der rote Ring sollte alle Ränder der Figur berühren (äußerer Radius = 200 Pixel)
- Alle Ringe müssen die gleiche Breite haben (10 Pixel)
- Der violette Ring muss einen Innenradius von 130 Pixel haben
- Der Bogen sollte die obere Hälfte eines perfekten Kreises sein
- Der Hintergrund muss weiß sein (auch transparent wird akzeptiert)
- Die Figur darf keine Grenzen haben (Ausnahme ist, wenn die Grenze nicht unterdrückt werden kann)
- Eingebaute Regenbogenfunktionen sind nicht erlaubt!
Folgende Farben sind im Regenbogen zu verwenden:
Das ist Code Golf, also gewinnt der kürzeste Code in Bytes!
Beispiel:
code-golf
graphical-output
Stewie Griffin
quelle
quelle
Antworten:
MATL ,
1079592878483 BytesDies funktioniert in der aktuellen Version (14.0.0) der Sprache / des Compilers.
EDIT (6. Juli 2017) : Sie können es bei MATL Online ausprobieren! .
Um zu überprüfen, ob die Farben korrekt sind, entfernen Sie die letzten fünf Zeichen (Sie müssen einige Sekunden warten und bis zum Ende der Ausgabe scrollen).
Erläuterung
Der Code besteht aus drei Hauptschritten:
Schritt 1 : Generieren Sie eine 201x401-Matrix mit Zahlen von
1
bis8
. Pixel mit Wert1
sind Hintergrund (weiß), Pixel mit Werten2
, ...,8
repräsentieren jedes Band des Regenbogens.Horizontale Koordinaten liegen im Bereich von
-200
bis200
links nach rechts und vertikalen Koordinaten liegen im Bereich von0
bis200
unten nach oben. Der Ursprung (0,0) ist also unten in der Mitte, die obere linke Ecke ist (-200.200) usw.Die verschiedenen Bänder des Regenbogens werden erzeugt, indem der Abstand von jedem Pixel zum Ursprung berechnet und in Schritten von 10 Pixeln quantisiert wird.
Schritt 2 : Erzeugen Sie eine 8x3-Matrix, die die Farbkarte definiert. Jede Reihe ist eine der notwendigen Farben (Weiß und die sieben Farben des Regenbogens). Jeder Wert der vorherigen 201x401-Matrix wird als Index für eine Zeile dieser Farbkarte interpretiert.
Wir generieren die Colormap-Matrix mit Werten zwischen 0 und 1 für jede Farbkomponente und multiplizieren dann mit 255 und runden ab. Auf diese Weise sind die meisten Werte anfangs 0 und 1, die später zu 0 und 255 werden. Zwischenwerte werden als Werte zwischen 0 und 1 mit 2 oder 3 Dezimalstellen codiert, die so gewählt werden, dass sich beim Multiplizieren und Runden der exakte gewünschte Wert ergibt.
Schritt 3 : Zeigen Sie das Bild mit dieser Farbkarte an.
quelle
Piet , 838 Codels, mehrere tausend Pixel
Jemand musste es tun:
Wenn Sie dieses Bild speichern, können Sie es online ausprobieren !
Das eigentliche Piet-Programm besteht nur aus den besten ~ 125 Pixeln, die ich mit einem von mir geschriebenen Python-Programm erstellt habe.
Wenn ich das später bearbeite, schadet das wirklich meiner Vision. Ich werde tagelang stolpern!
Dies gibt das Bild in einem SVG-Format aus, da SVG (meiner Meinung nach) der einfachste Weg ist, dies zu tun. Ich habe schamlos den SVG-Code von Doorknob gestohlen. Ausgänge:
Nun, das ist wirklich:
Viel Glück bei dieser Antwort, Nicht-Esolang-Benutzer!
quelle
Pyth,
150149128 BytesAusgaben in SVG:
Danke an @MamaFunRoll für 16 Bytes und @PatrickRoberts für 6 mehr!
quelle
</svg>
Tag.red #ff7f00 #ff0 #0f0 #00f #8f00ff #fff
für die Farbliste einfache Anführungszeichen für alle Parameterwerte, in denen keine Leerzeichen ( ,, und ) enthaltencx
sindcy
,r
undfill
lassen Sie ein Leerzeichen zwischen dem Füllwert und dem,/
damit die Farbe nicht falsch interpretiert wird . Entfernen Sie auch die</svg>
wie oben vorgeschlagen.red #ff7f00 #ff0 #0f0 #00f indigo #8f00ff #fff
. Wenn Sie die Leerzeichen durch Kommas ersetzenviewBox
, können Sie auch die einfachen Anführungszeichen für diesen Parameter entfernen.Minecraft 1.10 (fast), 2677 Zeichen mit einem Befehl, 868 Blytes
Nun, ich habe wirklich eine wörtliche Sprache gewählt.
Erstelle eine neue Superflach-Welt, füge das Chaos in einen Impuls-Befehlsblock ein, stelle deine Renderentfernung ziemlich hoch ein und starte sie. Brechen Sie den Panzerungsständer, wenn Ihr Computer nicht mehr verzögert.
Das Ergebnis ist je nach Anforderung 400 Blöcke breit und 200 Blöcke hoch.
Ich habe MrGarrettos einen Befehlsgenerator verwendet, um alles zusammen zu packen, und dann das Ergebnis ein wenig geändert, um ein paar Bytes mehr zu sparen. Hier ist die Eingabe dazu:
Das sind insgesamt 15 1.9+ Befehlsblöcke und 838 Bytes, also 15 * 2 + 838 = 868 Blytes .
Hier ist der (fast) Teil, es fehlt eine Ecke und Kante. Es sollte logischerweise nicht - Minecraft Bug? Wäre genau 400x200 Blöcke, wenn das nicht wäre. Ich kann nicht viel tun.
quelle
Mathematica
152144126 BytesVielen Dank an @CatsAreFluffy für das Abschneiden von 8 Bytes und @njpipeorgan für weitere 18 :)
quelle
#
vs#[[1]]
,#2
vs#[[2]]
, und@@@
vs/@
.Thread
stattTranspose
.Graphics@MapIndexed[{#,Disk[{0,0},4-#/5&@@#2,{Pi,0}]}&,RGBColor/@TextWords@"#f00 #ff7f00 #ff0 #0f0 #00f #4b0082 #8f00ff #fff"]
spart weitere 18 Bytes, aber die Idee ist die gleiche.vim,
165142139Ja, das ist klobig. Es muss Verbesserungen geben, die gemacht werden können.
Ausgabe als SVG, wie meine Pyth-Antwort .
Danke an @MyHamDJ für das Abschneiden von 3 Bytes!
quelle
kv3G:norm A'/><cr>
<circle cx...
Zeichenfolge zum ersten Mal in Zeile 2 eingeben, anstatt alle Farben einzugeben und sie anschließend einzugeben .HTML + SVG + ES6, 169
quelle
height=200
undcx=200 cy=200 r=${--r}0
stattviewBox='0 0 40 20'
. Das sollte 7 Bytes sparen..replace
Methode ausgeliehen habe ...r-=1
im Codegolf zu sehen ist ...Rubin mit Schuhen, 155 Bytes
Beispielausgabe:
quelle
JavaScript (ES6),
171158 ByteWir danken @ edc65 für die umzusetzende Idee
zu
Es mag länger aussehen, aber die Menge an Bytes, die beim Komprimieren des Arrays zu einer Zeichenfolge eingespart wird, ist die Konvertierung wert. (In diesem Fall werden 13 Bytes gespart.)
Demo
quelle
HTML (162) + CSS (146)
HTML (224) + CSS (128)
quelle
SpecBAS -
318254 BytesWenn wir Regenbögen zeichnen, ist dies ein guter Ort, um den Nachfolger von ZX Spectrum BASIC zu verwenden.
Zeile 2 richtet die Palette für die spezifischen RGB-Werte ein, die benötigt werden (und hilft wahrscheinlich nicht bei der Byte-Zählung), da die Standardfarben des Spektrums nicht übereinstimmen.
Der
DRAW
Befehl kann einen zusätzlichen Parameter enthalten, der es ermöglicht, zwischen x1, y1 und x2, y2 im Bogenmaß um einigeGrad zudrehen. Schließlich findet es eine Lücke in den gerade gezeichneten Halbkreisen und füllt sich mit der aktuellen Farbe.quelle
Tcl / Tk , 263 Bytes
Leider bevorzugt diese Art von Frage immer einige esoterische Sprachen ... Trotzdem macht Tcl / Tk Grafikoperationen wirklich einfach, kurz und lesbar .
Trotzdem habe ich die Lesbarkeit geopfert, um die Optionen auf so wenige Zeichen wie möglich zu beschränken. Ich kann mir nicht vorstellen, dass das Zerquetschen der Farbliste im Vergleich zu Code beim Entpacken viel hilft ...
Zum Vergleich hier der nicht gekürzte Code (380 Bytes):
Der
after
Befehl war leider erforderlich, da nicht gescrollt werden kann (vom Koordinatenursprung der Zeichenfläche), bevor das Fenster dem Bildschirm zugeordnet ist.Außerdem zeichnet der geknackte Code tatsächlich einen vollständigen Regenbogen (unter Verwendung eines Kreises anstelle eines Bogens) und verlässt sich nur auf das Fensterbeschneiden ...
Wie auch immer, ich hoffe es gefällt euch. :O)
quelle
lmap
anstattforeach
zu verkürzen.pack [canvas .c -bg #FFF -bo 0 -highlightt 0] -e 1 -f both
create oval
; ungolfed tutcreate arc
. Kannst du bitte Erklären?LaTeX, 290 Bytes
Probieren Sie es hier aus .
Erklärungen
quelle
Java, 354 Bytes
Zeichnet mit der
Graphics2D
Klasse einfach 7 Bögen und speichert die Farben in einem Array. Ich bin sicher, dass es weiter verbessert werden kann.Ungolfed-Code:
quelle
0x0000ff
könntest gerecht0xff
oder sogar gerecht sein255
, genauso wie das0x00ff00
Sein0xff00
.0xff0000
könnte sein255<<16
, ein anderes Byte zu speichern. Ihre Schleife könnte darin bestehen, ein paar weitere Bytes zu speichern. Sie können ein weiteres Byte speichern, indem Sie,q
Ihrerint
Deklaration ein hinzufügen . Sie müssten es machen,int c[]=
anstattint[] c
soq
ist einint
und keinint[]
. Auf diese Weise können Sieq=390-v*20;
Ihrer Schleife ein hinzufügen . und ersetzen Sie die390-v*20
durch ein q. Es ist eine Menge Arbeit für ein Byte, aber ein Byte ist ein Byte, oder ?!drawOval
nur die obere Hälfte des Bildes verwenden und rendern können ... könnte allerdings etwas teurer sein ...void r()throws Exception{BufferedImage i=new BufferedImage(400,200,2);Graphics2D g=i.createGraphics();g.setStroke(new BasicStroke(10));for(int c[]={255<<16,16744192,16776960,65280,255,4915330,9371903},v=0,t;v<7;g.drawArc(t=v*10+5,t,t=390-v++*20,t,0,360))g.setColor(new Color(c[v]));ImageIO.write(i,"PNG",new File("a.png"));}}
( 325 Bytes )Bubblegum ,
139119 BytesHexdump:
Leider ist dies kürzer als meine Pyth-Antwort . :(
Erzeugt die gleiche SVG-Datei.
quelle
CSS,
244242240 BytesBearbeiten: 2 Bytes durch Umgehen eines Fehlers in Chrome gespeichert. Dank @TrangOul wurden weitere 2 Bytes gespeichert.
Hinweis: Das Snippet verwendet
<div>
aufgrund der Einschränkungen von Stack Snippets einen.Code-Snippet anzeigen
quelle
JavaScript
271251quelle
{ ... }
Fors in den letzten For-Abschnitt verschieben, getrennt durch,
. zbfor(i=0;i<8;x.beginPath(),x.arg(...etc...))
. Sie können wahrscheinlich auchslice
/splice
of substr verwenden, wenn ich mich nicht irre. Es kann auch kürzer sein, <canvas> zu verwenden.innerHTML
. Oder sogar eine HTML + JS-Antwort und geben Sie die <canvas> und ID vonc
und dann sollte es automatisch als globale JS-Variable hinzugefügt werdensubstr
hat hier den Vorteil, dass sein zweiter Parameter eine Länge und kein Offset ist. Was das Golfen angeht,document.body
scheint dies eine erhebliche Ersparnis zu bringen.C
220,217,213 BytesAusgabe ist PPM (die binäre Art).
Edit: Sparte dank @tucuxi ein paar Bytes.
Edit 2: Code neu angeordnet, um noch mehr zu speichern.
quelle
i;s;t;main()
->s;t;main(i)
und ein anderes rasieren , indem Sie einen Teil Ihres for-Schleifenkörpers in das for:;)code1,code2;
-> setzen;code2)code1;
(ein Komma wurde gespeichert!).Google Blockly , 48 Blöcke, 75 Bytes
Klicken Sie auf das GIF unten, um zur Lösung zu navigieren, in der Sie einen genaueren Einblick in die Funktionsweise erhalten.
Zur Erklärung: Ein Bild sagt mehr als tausend Worte, und ein GIF sagt mehr als tausend Bilder.
Link zu großem lesbarem GIF
Hinweis: Ich bin mir nicht sicher, wie ich in Blockly zählen soll. Daher habe ich jeden Block wie gewohnt als 1 Byte und jede Variable gezählt, sodass
0
== 1 Byte,530
== 3 Byte,Arial
== 5 Byte undbold
== 4 Byte.Ich habe das Sonderzeichen, mit dem ich den Regenbogen abgeschnitten habe, als 2 Byte gezählt. Bitte melden Sie Fehler oder Vorschläge zur Anzahl der Bytes in den Kommentaren
quelle
Postscript (87 Bytes)
Hex-Dump:
Ausgabe:
quelle
HTML + CSS,
310307 BytesUngültiges Super-Duper-Markup (kann in Ihrem Browser richtig oder falsch aussehen). Ich wollte nur sehen, ob es überhaupt möglich war.
quelle
white
könnte auch gekürzt werden) - weißt nicht, warum ich das nicht gesehen habe. Ich habe esbgcolor
vor dem Posten versucht , aber leider wird es nicht mehr unterstützt (hier in Chrome sowieso)PHP, 285 Bytes
Ausgänge:
quelle
header()
Aufruf und sogar das öffnende PHP-Tag sparen können. Unter Linux ist es am einfachsten,php -r '$a=imagecreate(400,200);const b=255;for($c=[b,b,b,b,0,0,b,127,0,b,b,0,0,b,0,0,0,b,75,0,130,143,0,b,b,b,b];$i<9;)imagefilledellipse($a,200,200,$r=420-$i*20,$r,imagecolorallocate($a,$c[$j=$i++*3],$c[$j+1],$c[$j+2]));imagepng($a);' | display
von der Eingabeaufforderung aus zu starten und als 227 Zeichen zu zählen. (Mit PHP 5.6.11.)Bash + ImageMagick,
159125 ZeichenBeispielausgabe:
quelle
Verarbeitung,
196186181179169163 BytesDank Kritixi Lithos 10 Bytes gespeichert
... und dank dzaima weitere 6 Bytes
quelle
for(int i=0;i<8;i++)
infor(int i=0;i++<8;)
oder ähnlichemsize()
background(-1)
ist ein Byte kürzer alsbackground(255)
, und Sie können das ändern255
in Arrayc
zu-1
sparen einen weiteren ByteR
184170 BytesDas Erstellen eines Bildes mit festen Pixelabmessungen gestaltet sich mit R, dessen Plotfunktionen hauptsächlich für Statistiker gedacht sind, überraschend schwierig. Insbesondere lässt R zusätzlichen Platz für Beschriftungen und Koordinatenachsen, es sei denn, Sie legen die Ränder durch Aufrufen explizit als Breite Null fest
par
.Andererseits befinden sich einige der erforderlichen Farben (insbesondere Rot, Gelb und Blau) in der Standardpalette und können einfach durch Ganzzahlindizes referenziert werden.
quelle
Forth Salon Haiku (184 Bytes)
Ich kann die Dimensionseinschränkungen mit diesem Format nicht erfüllen, aber ich dachte, es lohnt sich trotzdem, sie zu teilen.
quelle
Excel VBA,
213202196192172 BytesCode
Anonyme VBE-Direktfensterfunktion, die keine Eingabe annimmt und einen Regenbogen als Vektorbild an das Blatt (1) -Objekt ausgibt
Unterprogrammversion
-11 Bytes zum Entfernen
.Adjustments(3)=3/80
Anrufs und Hinzufügen eines achten weißen Bogens-6 Bytes für die Verwendung
-1
über&HFFFFFF
-3 Bytes für die Verwendung
Sheet1
überSheets(1)
-6 Bytes zum Konvertieren
with
Anweisung zuset
Anweisung-14 Bytes zum Konvertieren von
Sub
in anonyme VBE-FunktionAusgabe
quelle
DIV Games Studio (184 Byte)
Nicht die kürzeste, aber ganz einfach. Verwendet die DIV-Standardpalette
Erläuterung
Programmstart definieren (platzsparend "r" genannt)
Setup-Palette suchen
Programmcode BEGINNEN
Stellen Sie den Videomodus auf 400.200 ein
Schleife x (vordefinierte Variable) von -80 (welcher BG-Hack) bis 80 (7 Farben + weiße Mitte)
Definieren Sie Elipse-Constraints
elipse zeichnen - zeichnet in der ersten Iteration einen Kreis, der größer als der Bildschirm ist, in Vollweiß (Index -8)
Zeichnen (Typ (5 = gefüllte Elipse), Farbe, Deckkraft, x0, y0, x1, y1)
Sobald dies geschehen ist, drücken Sie x auf Null, um mit dem Zeichnen des roten Bandes zu beginnen
Ende für Schleife
Endlosschleife, Zeichenbildschirm.
end (entspricht BEGIN am Anfang des Programms)
quelle
Perl, 175 + 1 = 176 Bytes
quelle
PHP, 190 Bytes
Führen Sie es so aus:
Funktioniert theoretisch auch mit 179 Bytes (aber das Bild sieht ein bisschen durcheinander aus, schlechter GD):
Auch kein perfektes Bild, aber viel besser als das obige (und @ 166 Bytes):
quelle