Dies ist eine quine Variante.
Einführung
Wir alle schreiben kurzen Code, weil einige Gründe unklar sind , aber was auch immer wir tun, das wird mindestens 144 Pixel / Byte (mit einer 12px-Schriftart) in Anspruch nehmen. Aber was würde passieren, wenn wir unseren Code in Bildern verschlüsseln würden? Dies ist heute Ihre Aufgabe.
Herausforderung
Ihre Aufgabe ist es, Ihren eigenen Quellcode einzulesen (nicht korrekte Quines sind zulässig, z. B. das buchstäbliche Lesen der Quelldatei) und daraus ein Bild zu erstellen, indem Sie die roten, grünen und blauen Komponenten eines Pixels basierend auf dem ASCII-Code festlegen Wert des Zeichens.
Beispiel:
Wir haben die Zeichenfolge "Hallo Welt!"
Hello world!
Lassen Sie uns dies in ASCII-Werte konvertieren:
72 101 108 108 111 32 119 111 114 108 100 33
Ordnen Sie die RGB-Werte zu (Wenn die Länge des Quellcodes nicht durch 3 teilbar ist, verwenden Sie 0s als verbleibende Zeichen):
__________________________________________________
| R | G | B || R | G | B || R | G | B || R | G | B |
----------------------------------------------------
|72 |101|108||108|111|32 ||119|111|114||108|100|33 |
----------------------------------------------------
Wir erstellen dann das Bild mit dem kleinsten Bereich daraus. Wir haben 4 Sätze von RGB-Werten, so dass das kleinste Bild ein 2 * 2-Bild ist, das vom oberen linken Pixel nach rechts verläuft:
Und wir bekommen dieses schrecklich farbige Bild (verkleinert, so dass es zumindest sichtbar ist, beweist auch, wie klein es werden kann)
Regeln / Zusatzinformationen
- Es gibt keine Eingabe
- Die Ausgabe sollte als separate Datei oder in einem separaten Fenster erfolgen.
- Teilen Sie bei Multibyte-Zeichen das Zeichen in 2 Bytes.
- Der Quellcode muss mindestens 1 Byte lang sein
- Das Bild sollte diejenige von den möglichen Größen sein, die das engste Breiten- / Höhenverhältnis zu 1 hat
- Die Pixelanzahl auf dem Bild sollte genau Ceil (Byteanzahl / 3) sein. Es sollten keine zusätzlichen Pixel hinzugefügt werden
Wertung
Dies ist ein Code-Golf , also gewinnt die kleinste Antwort in Bytes.
quelle
height = N
undwidth = 1
? Ich denke, Sie meinen Breite / Höhe am nächsten zu 1.Antworten:
Eigentlich 12 Bytes
Probieren Sie es online!
Dieses Programm funktioniert auch in Seriously.
Dieses Programm gibt ein PPM-Bild aus , das standardmäßig akzeptabel ist .
Ausgabebild (50x vergrößert):
Erläuterung:
quelle
MATLAB,
817269 BytesDadurch wird eine anonyme Funktion erstellt, die in das Befehlsfenster eingefügt und mit ausgeführt werden kann
ans()
. Bei der Ausführung wird ein Bild mit 23 Pixeln (eine Primzahl) erstellt. Die quadratischste Darstellung ist daher ein einfaches Array von Pixeln.Erläuterung
Beim Einfügen in das Befehlsfenster wird die anonyme Funktion automatisch der Variablen zugewiesen
ans
. Dann verwenden wir innerhalb der anonymen Funktion:Dies wird
char(ans)
im Namespace des Befehlsfensters und nicht im lokalen Namespace der anonymen Funktion ausgewertet . Es ist daher in der Lage, die anonyme Funktion selbst in eine Zeichenfolgendarstellung umzuwandeln.Dann haben wir die folgenden Operationen, die einfacher sind:
quelle
ans
Idee!ans
wird, bis der erste Durchlauf abgeschlossen ist, wodurchans
die Funktion selbst erstellt wird. Beim zweiten Mal wird "sein eigener" Code verwendet (eigentlich handelt es sich um den Code einer separaten, aber identischen anonymen Funktion). Davon abgesehen kenne ich MATLAB nicht, also kann ich mich irren.evalin
aufrufenchar(ans)
. Dasevalin
ist nur bei ausgewerteter Laufzeit so , obwohlans
nicht definiert ist , wenn Sie es in das Befehlsfenster einfügen, wenn Sie rufenans()
diese anonyme Funktion auszuführen,ans
wird definiert und derevalin
Anruf innerhalb der anonymen Funktion darauf zugreifen kann. Sie müssen es also nicht zweimal ausführen. Wenn ich es zweimal laufen wird verlassen kann,evalin('base', 'char(ans)')
würde einfach ersetzt werdenchar(ans)
Javascript (ES6)
324312309 BytesIch bin mir sicher, dass man ein bisschen Golf spielen könnte:
Neue Zeilen für die Lesbarkeit:
Ausgabe
quelle
f=()=>{
Hier, tu es einfachf=_=>
, -1 Byte, benutze es einfach nicht, Javascript ist lose geschriebenJavascript ES6 - 216 Bytes
Ungolfed:
Hinweis:
f
Gibt eine Leinwand zurück.Beispiellauf (setzt voraus, dass ein
<body>
angehängt werden muss):Sollte das folgende Bild auf der Seite ablegen (vergrößert):
quelle
PowerShell v4, 64 Byte
Es ruft den Inhalt seines eigenen Dateinamens ab, wandelt den String in ein Zeichen-Array um, fügt einen PPM-Header hinzu und setzt den Inhalt als Ausgabe auf a.ppm. 64 Bytes ergeben 11x2 Pixel:
quelle
Node.js, 63 Bytes
Gibt das Bild in eine Datei mit dem Namen aus,
P6
die im PPM- Format (P6) vorliegt.Hier ist eine PNG-Wiedergabe (7x3 Pixel):
quelle
PHP, 226 Bytes
Golf gespielt
Ungolfed-Version
Geben Sie dieses Skript in eine Datei mit dem Namen 'p.php' ein und führen Sie es aus. Sie benötigen eine eigene Methode zum Ausführen von PHP-Skripten, da diese aus einer lokalen Datei lesen.
Ausgabebild:
quelle
Java 511 Zeichen
Die Länge der Lösung führt zu einem größeren Bild, das cool ist, weil diese Bilder wirklich schön sind.
Beachten Sie, dass es eine unsichtbare nachgestellte Zeile gibt! Es liest die Quelldatei, die "Q.java" sein muss, und erstellt ein Bild "Q.png", das so aussieht:
oder 100x skaliert
quelle
APL (Dyalog) , 33 Bytes
Benötigt,
⎕IO←0
was auf vielen Systemen Standard ist. Außerdem sollte AutoFormat ausgeschaltet sein, um das Programm genau so zu erhalten, wie es angegeben ist.Hex B9 BA FD 4E 50 55 54 BB F8 0D 50 0D C2 CD FD 41 56 B2 0D 03 0B 01 FF 0D C2 BB C8 FD 4E 52 0D 16 0D
Unicode 28 2282 2395 4E 50 55 54 2283 29 27 50 27 2C 2355 2395 41 56 2373 27 0D 026B 08 2363 27 2C 2283 233D 2395 4E 52 27 66 27
Erstellt
P
: P3 11 1 255 185 186 253 78 80 85 84 187 248 13 80 13 194 205 253 65 86 178 13 3 11 1 255 13 194 187 200 253 78 82 13 22 13 ZumSpeichern und Ablegen hier klicken:
⎕NR'f'
N sierte R ePresentation des Programms f⊃⌽
wähle das letzte (lit. first des umgekehrten) Elements (Zeile)'␍ɫ␉⍣',
voranstellen der vier Zeichen (Dateityp, Breite, Höhe, max)⎕AV⍳
Entsprechende Indizes finden Sie im A tomic V ector (Zeichensatz)⍕
Format als Text'P',
einen Brief voranstellen(
…)
Wenden folgende stillschweigende Funktion an:⊂
nimm das ganze Argument [und in ein]⎕NPUT
N ative [file,] Put [it, mit einem Dateinamen bestehend aus]⊃
das erste Zeichen ("P")quelle
Python, 81 Bytes
Die Ausgabe erfolgt im PPM-Format.
So sieht das Bild aus:
Skaliert:
quelle
q
P6
Format verwenden, müssen Sie nicht in Ordnungszahlen konvertieren. Außerdem sollte für 8-Bit-RGB255
anstelle von verwendet werden256
.q
einmal verwenden, wie es scheint, entfernen Sie die Zuweisung und ersetzen Sie sie direkt - das spart Ihnen drei Bytes.print'P3\n9 3 256 '+' '.join(map(lambda x:str(ord(x)),open(__file__).read()))
. Es ist -4 Bytes, tho!