Es ist ein Ich!
Die heutige Aufgabe ist einfach: Schreiben Sie ein Programm oder eine Funktion, die das inaktive kleine Mario-Sprite von Super Mario Bros auf NES vor einem blauen Hintergrund anzeigt.
Jede Art von Eintrag ist gültig, solange diese 12 * 16 Pixel irgendwo auf dem Bildschirm / Fenster / Browser angezeigt werden.
(BEARBEITEN: Das angezeigte Bild kann vergrößert werden, wenn Ihre Sprache keine Pixelbilder unterstützt. Sie können auch ASCII- oder HTML-Bilder ausgeben, aber die richtigen Farben verwenden.)
Bild (um 400% vergrößert):
Sie müssen die folgenden Farben verwenden:
- blau: # 6B8CFF
- rot: # B13425
- grün / braun: # 6A6B04
- orange: # E39D25
Das kürzeste Programm (in der Anzahl der Zeichen) gewinnt!
Es gelten Standardlücken (insbesondere ist keine Netzwerkverbindung zulässig), aber das Hardcodieren und Anzeigen einer Bilddatei in Ihrem Programm ist zulässig. (Einträge, die diesen Trick verwenden, werden separat gewertet.)
Auf geht's!
Aktuelle Rangliste
Kürzeste Antwort nur mit Code:
- Mathematica, 141. https://codegolf.stackexchange.com/a/39916/10732 (von Martin Büttner)
- Bash, 158. https://codegolf.stackexchange.com/a/40002/10732 (von hpsMouse)
- ...
Kürzeste Antwort mit einem hartcodierten Bild:
- HTML, 102b. https://codegolf.stackexchange.com/a/39923/10732 (von xem und NiettheDarkAbsol)
- PHP, 131b. https://codegolf.stackexchange.com/a/39926/10732 (von NiettheDarkAbsol)
- ...
Antworten:
HTML / JS,
206158153102102
Verwendeter Trick: Speichern Sie die komprimierte GIF-Datei als HTML-Datei und fügen Sie am Ende <img src = #> hinzu
Dank diesem Eintrag: https://codegolf.stackexchange.com/a/39926/10732 von @NiettheDarkAbsol
Demo: http://meuziere.free.fr/mario/gif.html
Ältere Versionen:
153
Verwendeter Trick: Speichern Sie die komprimierte PNG-Datei als HTML-Datei und fügen Sie am Ende <img src = #> hinzu
158
Verwendeter Trick: Festlegen des getrimmten dataURI eines komprimierten PNG als SRC eines IMG-Tags und Packen des Ganzen in Unicode-Zeichen.
Führen Sie das in Ihrer JS-Konsole aus:
206
Ausgepackt (206b):
Demo
Benutztes Werkzeug:
quelle
Mathematica,
412292252212163148143141 ZeichenHierbei wird die Caret-Notation
^A
für das Steuerzeichen am Codepunkt verwendet1
. In Mathematica kann ich das Zeichen tatsächlich buchstäblich einbetten, obwohl dies beim Kopieren zu allerlei Hässlichkeit führt. Wie auch immer, die obigen Angaben sind 2 Zeichen kürzer als meine frühere Version, und ich habe diese Zeichen erhalten, indem ich Base-4 anstelle von Base-5 zum Codieren der Farbpalettenindizes verwendet habe. Im Moment kann ich nicht die Mühe machen, die unten stehende Erklärung und den Screenshot zu korrigieren. Daher möchte ich Sie hier mit der ursprünglichen Base-5-Version meiner Antwort zurücklassen:Ich verschlüssele die Pixel in Unicode-Zeichen (yay für das Zählen nach Zeichen!).
So sieht es in Mathematica aus:
So funktioniert das:
Zuerst definieren wir eine Funktion
f
, die Unicode-Strings (als erstes Argument übergeben#
) in Listen von ganzen Zahlen umwandelt. Zuerst erhalten wir die Zeichencodes. Diese können als Ziffern einer Basis 65536 interpretiert werden. Und dann konvertieren wir diese Zahl in eine andere Basis, die als zweites Argument übergeben wird#2
.Jetzt machen wir das für den längeren Unicode-String.
ToCharacterCode
ergibt diese Liste:Behandle dies als Basis 65536:
Und zur Basis 5 konvertieren:
Dies sind die Farbindizes der Pixel in der Reihenfolge Blau, Rot, Grün, Orange. Wir verwenden diese, um diese Liste von Zahlen zu indizieren, die die Farbpalette darstellt.
Nun zur Farbpalette. Das ist
"넴╫賿橫ӣ鴥"
. Wir verwenden die obigen Indizes, um die richtige Zeichenfolge auszuwählen. Dann wenden wir unsere Funktion erneut an, verwenden aber die Basis 256. Das ergibt eine Liste von 12 ganzen Zahlen:Wir verwenden die
;;
Bereichsindizierung, um das relevante Segment für die aktuelle Farbe zu ermitteln.Zuletzt
Partition
teilen wir dies einfach in Reihen von12
und füttern esImage
. Voilà!Edit: Mit der Unicode-Packung hat sich die RLE nicht mehr gelohnt. Beim Entfernen wurden 50 Zeichen gespeichert.
Bearbeiten: Natürlich, ohne RLE, gibt es auch keine Notwendigkeit, Basis 16 zu gehen.
Edit: Und wenn wir schon dabei sind, warum nicht auch die Farbpalette mit Unicode packen? (Ich habe eine Vermutung, dass ich ein bisschen mehr sparen kann, indem ich die gesamte Farbpalette auch zu einer einzigen Zeichenfolge zusammenstelle und sie
Partition
dort auch verwende. Das werde ich später versuchen.)Bearbeiten: Ja, das hat weitere 5 Bytes rasiert.
quelle
Java:
398377Zeichnet einfach das Sprite, indem Sie ein int für jede Spalte entpacken. In einem vollen Programm gezeigt:
Obligatorischer Screenshot:
quelle
import java.awt.*
.x86-Maschinencode, 102 Byte
So funktioniert es: Das Bild wird mit einer Palette als 2-Bit-Bild gespeichert. Jede Bildzeile wird als 3 Byte gespeichert, gefolgt von einem 1 Byte der Farbpalette. Dadurch können die Daten als einzelnes DWORD geladen werden. Die zwölf Pixel werden ausgegeben, indem die untersten 2 Bits des Werts ausgeblendet, in den Videospeicher geschrieben und dann der gesamte Wert um zwei Bits nach rechts verschoben wird. Sobald die Pixel für die Zeile ausgegeben wurden, wird das Palettenbyte in die VGA-Palette geschrieben. Wenn das Bild fertig gezeichnet ist, tritt das Programm in eine Endlosschleife ein.
Assembler-Code zum Generieren der Binärdatei:
Base-64-codierte Binärdatei, speichern Sie sie unter Mario.com, um sie auszuführen:
Beispielausgabe:
quelle
GIF - 93 Bytes
Die Hardcodierung des Bildes ist anscheinend in Ordnung, also ... yay? : D
Wie in Notepad ++ zu sehen
Wie PHP - 131 Bytes
quelle
Bash + ImageMagick:
350331321 Zeichen(Palette schamlos gestohlen Martin Büttner ‚s Antwort .)
Beispielausgabe:
Zu inspizieren es einfach hinzufügen
-scale 120
zuconvert
‚s - Parameter , um eine 10 - fach skalierte Version zu erhalten:quelle
s/185 191 127 185 254 254/1{85,91,27,85} 254{,}/
;s/do/{/
;s/done/}/
{
..}
. Vielen Dank, @grawity.Octo / XO-Chip , 70 Bytes
Octo ist eine Assemblersprache auf hoher Ebene, die in bytecodierte Anweisungen für die virtuelle Maschine CHIP-8 kompiliert wird . Octo bietet einige benutzerdefinierte Erweiterungen, die als "XO-Chip" für den Basis-CHIP-8-Bytecode bezeichnet werden, einschließlich der Möglichkeit, 4-Farben-Bitmaps über überlagerte Bitebenen zu zeichnen.
Die kompilierten Bytes lauten wie folgt:
Führen Sie es hier in Ihrem Browser aus: http://johnearnest.github.io/Octo/index.html?gist=33aa37d4717a425ccd4f
Es ist wahrscheinlich aufschlussreicher, die Octo-Assemblersprache zu sehen, die diesen Bytecode erzeugt:
Das Hauptprogramm besteht aus drei Zwei-Byte-Anweisungen. Setzen Sie das Speicherindexregister
i
an den Anfang des Datensegments, wählen Sie Zeichnungsebene 3 (3 ist eine Bitmaske; dies zeigt an, dass Sie mit beiden Bitebenen im 4-Farben-Modus zeichnen möchten) und zeichnen Sie dann ein Sprite an einer durch angegebenen x- und y-Position Registerv0
(auf Null initialisiert). Die letzte 0 gibt die Größe des Sprites an, das in den Befehlssätzen SuperChip und XO-Chip ein 16x16-Sprite zeichnet. Im 4-Farben-Modus folgt auf eine Bitmap für die erste Ebene sofort eine Bitmap für die zweite Ebene.Betrachten Sie dieses modifizierte Programm, das nach dem Zeichnen von Mario eine Ebene nach rechts scrollt, um zu sehen, wie die Ebenen funktionieren:
Wenn Ihnen das gefällt, könnte Ihnen eine meiner anderen Lösungen gefallen, die mit Octo geschrieben wurden. Es gibt tatsächlich einen Spielestau für den Monat Oktober, der auf diesem Tool basiert.
quelle
Groovy
417386Spaß wie die Hölle, aber mit einem schrecklichen Char Count. GroovyFX benötigt
ungolfed:
quelle
grep()
statttoList()
HTML / JS,
427408264256239226 ZeichenObfuscatweet,
271270264256239226 ZeichenMit obfuscatweet konnte dies auf <250 gekürzt werden: D
Woraus besteht der folgende Code?
Verwendeter Trick: konvertiertes Bild in base4 Zeichenfolge aus Farbkacheln, konvertiert in eine hexadezimale Zeichenfolge. Der Index der Basis 4 bezeichnet Farbe (0 = Blau, 1 = ROT usw.). CSS mit einem Inline-p wird verwendet, weil divs Inhalt zum Erweitern benötigen (auch p ist kürzer). Da CSS mit einem Buchstaben beginnen muss, wird vor den CSS-Tags ein 'A' eingefügt.
Das Auffüllen aus dem CSS ergibt Pixel. Keines davon verwendet Unicode-Zeichen, mit denen ich sowieso nicht allzu vertraut bin, obwohl es in diesem Fall wahrscheinlich unter 300 gehen würde. Der relative Vorteil der Verwendung der Auffüllung besteht darin, dass Sie das Bild wie in diesem Fall auf die gewünschte Pixelgröße aufblasen können. Ich habe 9 Pixel verwendet, aber wenn Sie ein zusätzliches Zeichen ausgeben, können Sie bis zu 99 Pixel pro dargestelltem Pixel erhalten.
CSS,
127119118114100130 ZeichenDas Umschalten von
p
aufrp
beseitigt die Notwendigkeit vondisplay:inline
, kostet +1 Zeichen, -15! Zeichen!Entfernte alle Farben und legte es in einem Array in JS-87 Zeichen. Dann habe ich gerade alle CSS entfernt
JS,
300289280275329325 ZeichenIch habe versucht, so viel wie möglich aus dieser einfachen JS-Verarbeitung eines Hex-Strings herauszuschneiden, aber da es mein erster Versuch ist, habe ich nur das verwendet, was ich weiß. Das HTML-Schreiben wurde durch eine Funktion gekürzt, die Tags hinzufügt, und die Klassen verwenden den Basiswert 4, um die anzuzeigende Farbe zu bestimmen.
Ersetzen Sie charAt mit zusätzlichen Kürzungen durch Klammern [], entfernen Sie die Klasse A0 und legen Sie Blau als Standardfarbe für p fest, wodurch zusätzliche 10 Zeichen gespart werden. Die zusätzlichen Kosten für die Verwendung von
rp
Tags werden durch einen enormen Verlust an CSS ausgeglichen.Zusätzlicher Versatz vom Entfernen des while-Loop-Pads bis zum Hinzufügen von '000' für den Anwendungsfall und Schneiden von -12.
Fügte zusätzliches JS für Farben hinzu und fügte dann die Polsterung hinzu. Es wurde ein Fehler mit der Polsterung festgestellt, für dessen Behebung 2 zusätzliche Zeichen erforderlich sind. Eine Reihe von Schleifen komprimiert
HTML-Datei,
430429419399366342 ZeichenDemo
quelle
MATLAB,
194193 BytesDer Code:
Und die Ausgabe:
Grundsätzlich habe ich das Mario-Bild so konvertiert, dass jedes Pixel eine 2-Bit-Zahl ist. Ich habe dann das in der Basis 32 codiert, das die Zeichenfolge ist, die im Code gezeigt wird. Diese Zeichenfolge wird zunächst in 5 x 16 umgewandelt (jede Zeile (12px) von 2-Bit-Zahlen wurde in Basis 32 codiert) und dann wieder in Basis 10 konvertiert. Das Ergebnis wird erneut in Basis 4 konvertiert 2 Bit Zahlen. Diese Zahlen werden mit dargestellt
imagesc()
. Anschließend werden die Farben mithilfecolormap()
einer benutzerdefinierten Farbzuordnung der erforderlichen Hex-Werte zugewiesen .Komisch, sind ein Drittel der Anzahl von Bytes verwendet nur die richtigen Farben zu setzen MATLAB zu erhalten , nachdem sie aufgetragen wurde. Der Farbcode entspricht in etwa der Anzahl der Bytes der gesamten Base32-Zeichenfolge !.
Ohne die Farbe zu korrigieren (den
colormap()
Aufruf zu entfernen ), sind es 135 Bytes, und dies ist die Ausgabe für die Standardfarbzuordnung in MATLAB R2013a:quelle
JavaScript /
CSS/ HTML446430407353328316Ich habe so viel Golf gespielt, wie ich konnte, und am Ende habe ich schmutziges HTML / JS gesehen, aber was auch immer ... es funktioniert.
Edit : Das ist es ... ich bin fertig.
Bearbeiten Ernsthaft dieses Mal getan.
JavaScript
JSFiddle
quelle
*{line-height:1}
würde ein helfen.<div></div>
ist kürzer alsdocument.createElement('div')
. Und JSFiddle mag nichtdocument.write
i%12?"":"<br>"
.Matlab -
449/332305 Bytepartielle Komprimierung + Verwenden der unteren Bildsymetrie:
- Teilweise komprimierte Version (332 Bytes):
Völlig unkomprimierte Version (449 Bytes):
Ausgabe in beiden Fällen (auf dem Bildschirm offensichtlich vergrößert, ist die reale 12x16pix):
quelle
C 4999 Bytes
Dies kann absolut nicht mit einigen der Antworten hier mithalten, aber ich dachte, ich würde eine C-Antwort versuchen. Der Code besteht aus einer einzigen langen Zeile. Hier ist also ein Pastebin-Link. Wenn Sie möchten, finden Sie hier eine Base64-Codierung des gezippten Codes:
H4sICAzFGFYCA21hcmlvLmMA3Zc9DsIwDIXv0qndUqchkXwUurAgdYiFEEyIu4NYaZBI7PzNT3Lsz4mf408bjdPjct3odh6HVeujdgg4K4vzohCM8esdjHOpkrVoALUtIrBX8y1R04DKNCGZmTp85CVdAHifYuxO3mElIlju6xaRICOgCo4pD64PoiTzHnkZcHYnRhAYcEEpFznxB1mXP4TdS/KeVGYPZbmVaQHlnRVZFi65OkhoGodq+RHrby4xsTj8i6RmapXrPvfa0Q8ZWZY1/UPbSiC7Z2bYA7r0zla57Xmo8sOEzxdNYIXFhxMAAA==
Bemerkenswert ist, dass zum Ausführen keine externen Bibliotheken erforderlich sind.
Erfordert ein xterm-, ein Konsole- oder ein GNOME-Terminal, da es die RGB-Erweiterung für die ANSI-Escape-Codes verwendet, um die richtigen Farben auszugeben (ANSI definiert kein Orange). Aus offensichtlichen Gründen wird Ideone nicht funktionieren. Es kann in Windows unter Cygwin ausgeführt werden, das xterm verwendet (tatsächlich habe ich es so getestet). MSYS könnte funktionieren; Ich bin mir nicht sicher.
Ausgabe auf meinem Computer (xterm):
quelle
Excel VBA,
310307295 BytesAnonyme VBE-Direktfensterfunktion, die an Zellen ein Mario an das Activesheet-Objekt ausgibt
A1:L16
Helper
Sub
Routine einUngolfed Version
-3 Bytes zum Entfernen von Leerzeichen -12 Bytes für die Verwendung von
[...]
Notation überRange(...)
Notation; Umstellung von Hex-Farben auf Int-FarbenAusgabe
quelle
Bash 346
pure Bash mit VT100-ähnlichen Escape-Sequenzen (sorry, keine Orange in dieser Palette)
quelle
Pyth, 83 Bytes
Haftungsausschluss: Dies ist kein gewinnbringender Kandidat, da einige der Sprachfunktionen nach dem Posten der Frage erstellt wurden.
Hier ist ein Hex-Dump:
Sie können das Programm auch hier herunterladen und mit ausführen
Dies erzeugt eine Datei
o.png
:Erläuterung:
Es gibt nur 4 verschiedene Farben, daher brauche ich nur 2 Bits, um die Farbe jedes Pixels zu speichern.
quelle
Verarbeitung von 2 - 359 Zeichen
Ich sah diese Herausforderung und dachte sofort an die pixel [] -Funktion von Processing. Ich hatte gehofft, dass es kürzer wird, aber ich bin immer noch ziemlich zufrieden mit dem Ergebnis, da dies mein erster Versuch ist, Code Golf zu spielen.
ungolfed:
die verarbeitung können sie hier herunterladen
quelle
Javascript 515
Ich habe es gerade zum Laufen gebracht, muss noch reingehen und Golf spielen
quelle
div
s, aus denen die Zeilen bestehen, durch ein Tag ersetzen, das standardmäßig inline ist. Ich habe es nicht getestet, aber esa
sollte funktionieren. Sie können auchbackground
anstelle von verwendenbackground-color
.Perl - Ungolfed 927
Ich muss später Golf spielen. Zum ersten Mal ausprobieren
Image::Magick
.Ich bin sicher, wir haben viele davon, aber hier ist meine:
quelle
Bash druckbar:
179158 BytesInspiriert von der Antwort von user2485710 .
Sie müssen Ihr Terminal so einstellen, dass die Farben genau übereinstimmen.
quelle
-D
zum Dekodieren und-d
zum Debuggen .Tcl 298
Es handelt sich um ein Bild mit 2 Bit pro Pixel in der Basis 64. Pixel werden auf Ansi-Escape-Codes abgebildet.
quelle
JavaScript - 256 Zeichen (161 obfusc-a-tweeted)
Methode:
Um die optimale Reihenfolge für den Farbzyklus zu bestimmen, habe ich den Komprimierungsalgorithmus mit den Rohdaten für jede der 24 Permutationen von [R, G, B, O] verglichen und diejenige ausgewählt, die die kürzeste Ausgabe ergab (126 war am besten, am wenigsten optimal war) um 150-etwas)
ETA entdeckte dies erst, nachdem sie die anderen Antworten mit obfusca-tweet gelesen hatte ...
Weitere Ideen. - Probieren Sie den 3-Bit-Datenbereich 0-6 aus, wobei der seltene 7,8,9 jeweils 4 zusätzliche Punkte bringt: 60000N. - Überprüfen Sie die Farbzykluspermutationen in alle Richtungen und Geschwindigkeiten außer horizontal jeweils um ein Pixel. - Versuchen Sie es mit mehreren Renderdurchläufen, damit die Farben überlagert werden können.
quelle
Javascript,
253240238236Obfuscatweet ed source -
253240238236Unverdeckt -
395370365361Vielen Dank an @compass für die
<p>
Tag-Tricks und @xem für 2 (5) Zeichen.Demo
Es konvertiert Daten von der Basis 36 und konvertiert in die Basis 4.
quelle
padding:9
es etwas ohne eine Einheit danach macht. Sie können stattdessen auch ein Element mit einem Buchstaben wiea
oderq
implizit inline verwendenp
.document.write
Variablen zuweisen können (wir sollten verwendendocument.write.bind(document)
), war mein Bestes,document
Variablen zuzuweisen .JavaScript ES6 (HTML + CSS), 199
30731953630Mit Obfusc-a-tweet :
Dadurch wird das Sprite angezeigt, ohne dass Bilder oder mehrere Elemente verwendet werden. Die CSS-
box-shadow
Eigenschaft wird nur zum Erstellen der einzelnen Pixel missbraucht . Versuchen Sie es unter http://jsbin.com/pozohiyezo/ . Diese unverschlüsselte Version hat 307 Zeichen :Dies ist die ursprüngliche HTML-Version in reinem Vanille. Sehen Sie es in Aktion unter http://jsfiddle.net/gfeLn1ey/1/ .
quelle
Javascript,
256 oder 245,252 oder 241256
Es ist traurig, 256 zu überschreiben, aber 245 ist möglich, wenn nicht druckbare Zeichen verwendet werden:
Es gibt ein Problem beim Senden einer Lösung mit nicht druckbaren Zeichen. Das Argument von
btoa
muss das Ergebnis vonatob("ij6n56kcraqlaqasasjaqbsasibtdlstlb2cmc2b2cid5dra2q3q2au7u55rj4j4kclcidld")
mit 1 Symbol der Länge sein, die hinzugefügt wird, um den Backslash zu umgehen.Kürzen Sie beide Lösungen um 4 Symbole: Für die Array-Erstellung benötigen wir keine neuen.
252
241
In dieser Version ist kein Escape-Befehl erforderlich. Das
btoa
Argument ist das Ergebnis vonatob("k6n56kcraqlaqasasjaqbsasibtdlstlb2cmc2b2cid5dra2q3q2au7u55rj4j4kclbaidld")
quelle
Perl,
266260257249245 BytesVerwendet einen ähnlichen Ansatz wie die bash-Lösung von user2485710, um eine Ausgabe im VT100-Stil zu schreiben. Entfernt das explizite N für Zeilenvorschub, indem alle 12 "vt100 Pixel" ein Zeilenvorschub eingefügt wird, 12 * 7 = 84.
quelle
SmileBASIC,
147136 ZeichenAusgabe (beschnitten):
Ich habe alle Zeichen in den Datenketten durch
x
's ersetzt. Hier sind die Zeichencodes (in UCS-2):P$
(Palette):FF6B,8CFF,FFB1,3425,FF6A,6B04,FFE3,D925
Bilddaten:
0000,83F8,0A80,A3FA,8BE4,A5EA,BEA5,A55A,7EE5,0575,BFF5,0156,BFF5,0156,BBA5,0575,3AF4,A55A,3BC4,A5EA,0BC4,A3FA,0300,83F8
Die Palette ist in einer Zeichenfolge gespeichert, wobei jede Farbe (32 Bit) in zwei Zeichen (jeweils 16 Bit) gespeichert ist. Die Bilddaten (2 Bit pro Pixel) werden in einer anderen Zeichenfolge gespeichert (8 Pixel pro Zeichen).
Glücklicherweise wird die Herausforderung in Zeichen bewertet, da diese Datei erheblich größer ist, wenn sie in UTF-8 gespeichert wird.
quelle
05AB1E , 87 Bytes (nicht konkurrierend)
Probieren Sie es online!
Ausgänge:
Da 05AB1E keine Farben oder Grafiken verarbeiten kann ... Wenn dies nicht akzeptabel ist, lösche ich sie.
quelle
Bash + 05AB1E
Sinclair BASIC - 573 Bytes
OK, das Spektrum kann die angegebenen RGB-Farben nicht anzeigen. Verwenden Sie daher die nächstmögliche Farbe.
Die Zeichenfolge ist die Farbe (1 = blau, 2 = rot usw.), gefolgt von einem Buchstaben, der angibt, wie oft sich der Block wiederholt (indem der ASCII-Wert minus 96 zu 1,2,3 usw. wird). Eine Zahl ohne Buchstaben danach zeichnet nur einen Block.
"\::"
In Zeile 60 erfahren Sie, wie Sie Grafiken in einen Texteditor eingeben, bevor Sie sie in eine TAP-Datei umwandeln, um sie in den Fuse-Emulator zu laden. (Wird als Vollblockgrafik auf dem Bildschirm angezeigt).Jedes Schlüsselwort ist ein Byte in Sinclair BASIC und enthält eine Anzahl von PEEK-Befehlen, nachdem es generiert wurde.
quelle
Perl -
399171 BytesSchreibt die GIF-Datei nach stdout.
quelle