Eigentlich 58 Bytes
73*8╙:13542├`≈"÷≥"E`M"«%s₧ªn%s6û"7*%"♠n≥6û"+¿├`' +`M╪♂Σ♂Ri
Probieren Sie es online!
Erläuterung
Es gibt drei Hauptteile, die ich dementsprechend aufschlüsseln werde.
Teil 1: Aufbau der Base-256-Zeichenkette
Wir werden die Binärzeichenfolge umgekehrt konstruieren, um die stapelbasierte (LIFO-) Struktur von Actually zu nutzen und Komplikationen mit führenden Nullen in der Binärzeichenfolge zu vermeiden. Die Ziel-Binärzeichenfolge lautet also 110011011101111001000110110100101101010111011110010100111101010011001101110111100100011011010010110101011101111011010011110101001100110111011110010001101101001011010101110111101101001111010100110011011101111011000110110100101101010111011110010100111101010011001101110111100100011011010010110101011101111001010011110101001100110111011110110001101101001011010101110111101101001111010100110011011101111001000110110100101101010111011110010100111101010011001101110111101100011011010010110
, was einer 20083405242288679348048842451418880256193335738939042905519679590571514414673488599852759703515507690399267425671627412178904636115120346432419478
Dezimalzahl entspricht. In base-256 (unter Verwendung der CP437-Zeichentabelle zur Konvertierung) lautet die entsprechende Zeichenfolge ♠n≥6û«≥₧ªn≥6û«÷₧ªn≥6û«÷₧ªn÷6û«≥₧ªn≥6û«≥₧ªn÷6û«÷₧ªn≥6û«≥₧ªn÷6û
. Um die ursprüngliche Binärzeichenfolge zu erstellen, erstellen wir die Base-256-Zeichenfolge (unter Ausnutzung des darin enthaltenen Musters) und führen Basisumwandlungen in Dezimal- und Binärzeichenfolgen durch.
Die Base-256-Zeichenfolge hat das folgende Format (Leerzeichen und Zeilenumbrüche wurden der Übersichtlichkeit halber hinzugefügt):
♠n≥6û
« (either ≥ or ÷) ₧ªn (either ≥ or ÷) 6û
(7 times)
Somit kann jeder der 7 Mittelabschnitte gebildet werden, indem das Gerüst verwendet wird «%s₧ªn%s6û
und die %s
Teile entweder durch ≥
oder ersetzt werden ÷
.
Die spezifische Folge von ≥
s und ÷
s, die wir brauchen, ist ≥≥÷≥÷÷≥≥≥÷÷≥≥÷
. Da wir dies als Liste von Zeichenfolgen der Länge 1 benötigen, wäre die naive Art, dies darzustellen "≥≥÷≥÷÷≥≥≥÷÷≥≥÷"#
(drücken Sie die Zeichenfolge, machen Sie sie zu einer Liste). Wir können es jedoch etwas besser machen. Indem wir diesen String als Binärzahl interpretieren (wobei ≥
repräsentiert 1
und ÷
repräsentiert 0
), erhalten wir eine 13542
Dezimalzahl. Indem Sie diese zurück in eine Binärdatei konvertieren (mit den herkömmlichen Methoden 1
s und 0
s) und in eine Zeichenfolge der Länge 2 indizieren, erhalten Sie die Liste mit einem Byte weniger als mit der naiven Methode.
:13542├`≈"÷≥"E`M"«%s₧ªn%s6û"7*%"♠n≥6û"+
:13542├ push 13542, convert to binary
`≈"÷≥"E`M for each bit:
≈ convert to integer (from string)
"÷≥"E index into "÷≥"
"«%s₧ªn%s6û"7* push the scaffold for the middle section
% old-style Python string formatting to fill in the scaffold
"♠n≥6û"+ prepend the beginning piece
Teil 2: Konvertieren in eine Binärdatei
Dieser Teil ist viel einfacher. Wenn Actually die Fähigkeit hätte, Base-256 direkt in Binärdaten umzuwandeln, würden wir dies verwenden. Leider ist dies nicht der Fall, daher müssen wir Dezimalzahlen als Zwischenformat verwenden.
Der ,
folgende Code stellt den Code aus Teil 1 dar. Zu Erläuterungszwecken habe ich den Code aus Teil 1 durch ersetzt ,
, um die Ausgabe aus Teil 1 von STDIN zu lesen. Es ist nicht Teil des eigentlichen endgültigen Codes.
8╙,¿├
, Part 1 result
8╙ ¿ convert from base-256 to decimal
├ convert to binary
Teil 3: Formatieren
Wenn die Herausforderung darin bestand, die Binärzeichenfolge so wie sie ist auszugeben, wären wir fertig. Es müssen jedoch noch einige Formatierungen vorgenommen werden, um die Binärzeichenfolge in ein 21 x 23-Rechteck umzuwandeln.
Wie in Teil 2 stellt das ,
die Ausgabe des vorherigen Teils dar und ist nicht Teil des tatsächlichen Codes.
73*,`' +`M╪♂Σ♂Ri
, output from Part 2
`' o`M insert a space after every character
73* ╪ chunk into 21 pieces
♂Σ concatenate each piece
♂R reverse each piece
i flatten
(implicitly print)
Für diejenigen, die zu Hause den Überblick behalten, ist dies der entsprechende Python 3-Code (481 Byte):
print('\n'.join([''.join(' '+c for c in bin(sum('\x00☺☻♥♦♣♠•◘○◙♂♀♪♫☼►◄↕‼¶§▬↨↑↓→←∟↔▲▼ !"#$%&\'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~⌂ÇüéâäàåçêëèïîìÄÅÉæÆôöòûùÿÖÜ¢£¥₧ƒáíóúñѪº¿⌐¬½¼¡«»░▒▓│┤╡╢╖╕╣║╗╝╜╛┐└┴┬├─┼╞╟╚╔╩╦╠═╬╧╨╤╥╙╘╒╓╫╪┘┌█▄▌▐▀αßΓπΣσµτΦΘΩδ∞φε∩≡±≥≤⌠⌡÷≈°∙·√ⁿ²■\xa0'.index(c)*256**i for i,c in enumerate(("♠n≥6û"+("«%s₧ªn%s6û"*7)%tuple("÷≥"[int(b)]for b in bin(13542)[2:]))[::-1])))[2:])[i*42:-~i*42][::-1]for i in range(23)][::-1]))