[[{}]]sx256?^dd3^8d^1-/8092541**r255/BF*+d0=xP
Probieren Sie es online!
Input on stdin, Output on stdout.
Dies funktioniert, indem eine Formel für die gewünschte Ausgabe als Basis-256-Zahl berechnet wird. Der Befehl P in dc wird dann verwendet, um die Basis-256-Zahl als Zeichenfolge auszudrucken.
Weitere Erklärung:
Sei n die Eingabe n. Das DC-Programm berechnet die Summe von
A = Etage (256 ^ n / 255) * 125 (BF wird von dc als 11 * 10 + 15 = 125 interpretiert)
und
B = Etage ((256 ^ n) ^ 3 / (8 ^ 8-1)) * 8092541 * (256 ^ n).
Für ein:
Beachten Sie, dass 1 + 256 + 256 ^ 2 + ... + 256 ^ (n-1) nach der Formel für einen geometrischen Verlauf (256 ^ n-1) / 255 entspricht, und dies entspricht dem Wert für floor (256 ^ n / 255) ). Das ist also die Zahl, die aus n Einsen in der Basis 256 besteht.
Wenn Sie es mit 125 multiplizieren, um A zu erhalten, ist das Ergebnis die Zahl, die aus n 125 in der Basis 256 besteht (125 ist natürlich eine einzelne Ziffer in der Basis 256). Es ist wahrscheinlich besser, die Ziffern in Basis 256 als Hexadezimalzahlen zu schreiben. 125 ist hex 7D, also ist A die Basis-256-Zahl, die aus n 7Ds in einer Reihe besteht.
B ist ähnlich:
Diesmal ist zu beachten, dass 1 + 16777216 + 16777216 ^ 2 + ... + 16777216 ^ (n-1) gleich (16777216 ^ n - 1) / 16777215 ist, und dies entspricht Floor (16777216 ^ n / 16777215).
Nun, 256 ^ 3 = 16777216 und 8 ^ 8-1 = 16777215, also berechnen wir dies als Floor ((256 ^ n) ^ 3 / (8 ^ 8-1)).
Aus der geometrischen Reihendarstellung ergibt sich für die Basis 256 eine Zahl von 100100100 ... 1001, wobei n der Ziffern 1 und der Rest der Ziffern 0 sind.
Dies wird mit 8092541 multipliziert, was hexadezimal 7B7B7D ist. In der Basis 256 ist dies eine dreistellige Zahl, die aus den Ziffern 7B, 7B und 7D besteht (diese Ziffern werden der Einfachheit halber hexadezimal geschrieben).
Daraus folgt, dass das in die Basis 256 geschriebene Produkt eine 3n-stellige Zahl ist, die aus den 3 Ziffern 7B, 7B, 7D besteht, die n-mal wiederholt werden.
Dies wird mit 256 ^ n multipliziert, was zu einer 4n-stelligen Basis-256-Zahl führt, die aus den 3 Ziffern 7B, 7B, 7D besteht, die n-mal wiederholt werden, gefolgt von n 0en. Das ist b
Das Addieren von A + B ergibt nun die 4n-stellige Basis-256-Zahl, die aus den 3 Ziffern 7B, 7B, 7D besteht, die n-mal wiederholt werden, gefolgt von n 7D. Da 7B und 7D die ASCII-Codes für {
und sind}
, ist dies der String, der aus n Kopien von {{}
gefolgt von n Kopien von besteht. Dies ist }
genau das, was wir für n> 0 wollen. Der P-Befehl in dc gibt eine Base-256-Zahl aus als schnur, so wie wir sie brauchen.
Leider muss n = 0 als Sonderfall behandelt werden. Die obige Berechnung ergibt zufällig ein Ergebnis von 0 für n = 0; In diesem Fall habe ich den Druck der Zeichenfolge nur hartcodiert {}
.