7 , 23 Zeichen, 9 Bytes
54340045141332401057403
Probieren Sie es online!
Dies ist eine ziemlich schwierige Herausforderung in einer Sprache, die nur aus Ziffern besteht, aber ich habe es geschafft ...
Dies sind nur 9 Bytes in der 7er-Kodierung. (Genau genommen sind es 8⅜ Bytes (23 × ⅜ - ¼, da die letzten beiden nachgestellten 1-Bits weggelassen werden können), aber zum ersten Mal ist es ein Vorteil, wenn PPCG auf eine ganze Anzahl von Bytes aufrundet die zusätzlichen nachgestellten 1 Bits sind notwendig und werden daher von der Frage nicht gebannt.) Ein umkehrbarer Hex-Dump:
00000000: b1c0 2530 b6a0 22f8 1f ..%0.."..
Die Hauptherausforderung beim Schreiben dieses Programms in 7 bestand darin, es auf unter 10 Byte zu beschränken (wie beim Schreiben von 7, ohne 0
oder 1
ziemlich schwer zu verwenden). Dies verwendet dieselbe Struktur wie das Standardprogramm "Hallo Welt":
5434004514133240105 7 403
5434004514133240105 Mit den Befehlen 0-5 werden Literale an den Datenbereich angehängt
7 Starten Sie einen neuen Abschnitt des Datenraums
403 ein weiteres Literal an den Datenraum angehängt
{implizit: den letzten Abschnitt als Befehle auswerten}
4 Tausche den ersten und zweiten Abschnitt mit einem leeren Abschnitt zwischen
6 rekonstruiere die Befehle, die die Ausgabe des ersten Abschnitts
3 erzeugen würden (+ einige andere Effekte, die uns egal sind)
Mit anderen Worten, wir beginnen damit, zwei Abschnitte des Datenraums zu erstellen. Wir haben zwei Literale, von denen jeder eine Folge von Befehlen drückt. Der zweite Abschnitt (sie sind gestapelt, also first push = last pop) ist eine ziemlich willkürliche Folge von Befehlen, wird jedoch unter Verwendung der Befehlsfolge 5434004514133240105
(wodurch die Datensequenz erzeugt wird 5434664574733246765
; bei der Erörterung von 7 im Text verwende ich normalerweise normale Schrift für einen Befehl, der ein Literal drückt, und fett für das entsprechende resultierende Literal). Der erste Abschnitt wird mithilfe der Befehlssequenz verschoben 403
und erzeugt 463
. Dann wird der erste Abschnitt zurück in das Programm kopiert (ein implizites Verhalten von 7).
Das 463
setzt sich nun aus (fett gedruckten) Befehlen zusammen, die etwas sofort ausführen, anstatt aus (nicht fett gedruckten) Befehlen, die nur Literale drücken. 4
ordnet die Abschnitte neu an, um unser "String-Literal" in den ersten Abschnitt zu bringen. Anschließend 0
wird die Operation ausgeführt, für die 7 am bekanntesten ist: Einen Abschnitt des Datenraums nehmen und die Befehlssequenz rekonstruieren, für die die Wahrscheinlichkeit am größten ist, dass sie erstellt wurde. In dem Fall, in dem die ursprüngliche Befehlssequenz vollständig 0
- war 5
, ist dies 100% genau (was nicht verwunderlich ist, da diese Befehle lediglich Daten übertragen und somit offensichtliche Beweise dafür hinterlassen, was sie getan haben), und so erhalten wir unsere ursprüngliche Sequenz 5434004514133240105
zurück. Zum Schluss 3
druckt es aus.
Das übrige, was hier zu sehen ist, ist die Kodierung des Strings. Dies hat eine eigene domänenspezifische Sprache:
5434004514133240105
5 change encoding: 6 bits per character
43 select character set: digits and common symbols
40 '9'
04 space
51 select character set: uppercase letters
4133240105 'B' 'Y' 'T' 'E' 'S'
(Im Zeichensatz "Ziffern und gebräuchliche Symbole" gibt es keinen "Zeichensatz auswählen: Kleinbuchstaben". Zuerst muss ein anderer Zeichensatz eingegeben werden. Ich musste also Großbuchstaben verwenden, um so kurz zu spielen, dass er unter die effektiven 10 passt -Byte-Limit.)