dc , 46 byte
[[{}]]sx256?^dd3^8d^1-/8092541**r255/BF*+d0=xP
Provalo online!
Input su stdin, output su stdout.
Funziona calcolando una formula per l'output desiderato come numero base-256. Il comando P in cc viene quindi utilizzato per stampare il numero base-256 come stringa.
Ulteriori spiegazioni:
Sia n l'ingresso n. Il programma dc calcola la somma di
A = piano (256 ^ n / 255) * 125 (BF è interpretato da dc come 11 * 10 + 15 = 125)
e
B = piano ((256 ^ n) ^ 3 / (8 ^ 8-1)) * 8092541 * (256 ^ n).
Per un:
Osserva che 1 + 256 + 256 ^ 2 + ... + 256 ^ (n-1) è uguale a (256 ^ n-1) / 255, secondo la formula per una progressione geometrica, e questo è uguale a floor (256 ^ n / 255 ). Quindi questo è il numero composto da n 1 nella base 256.
Quando lo moltiplichi per 125 per ottenere A, il risultato è il numero costituito da n 125 nella base 256 (125 è ovviamente una singola cifra nella base 256). Probabilmente è meglio scrivere le cifre nella base 256 come numeri esadecimali; 125 è esadecimale 7D, quindi A è il numero base-256 costituito da n 7D di fila.
B è simile:
Questa volta osserva che 1 + 16777216 + 16777216 ^ 2 + ... + 16777216 ^ (n-1) è uguale (16777216 ^ n - 1) / 16777215, e questo è uguale a piano (16777216 ^ n / 16777215).
Ora, 256 ^ 3 = 16777216 e 8 ^ 8-1 = 16777215, quindi questo è ciò che stiamo calcolando come floor ((256 ^ n) ^ 3 / (8 ^ 8-1)).
Dalla rappresentazione della serie geometrica, questo numero nella base 256 è 100100100 ... 1001 con n delle cifre pari a 1 e il resto delle cifre pari a 0.
Questo è moltiplicato per 8092541, che è 7B7B7D in esadecimale. Nella base 256, questo è un numero di tre cifre composto dalle cifre 7B, 7B e 7D (scrivendo quelle cifre in esadecimale per comodità).
Ne consegue che il prodotto scritto nella base 256 è un numero di 3 cifre composto da 3 cifre 7B 7B 7D ripetute n volte.
Questo viene moltiplicato per 256 ^ n, risultando in un numero base-256 di 4n cifre, costituito dalle 3 cifre 7B 7B 7D ripetute n volte, seguite da n 0. Questo è B.
Aggiungendo A + B ora si ottiene il numero base-256 a 4 cifre composto da 3 cifre 7B 7B 7D ripetute n volte, seguite da n 7D. Poiché 7B e 7D sono i codici ASCII per {
e }
, rispettivamente, questa è la stringa composta da n copie {{}
seguite da n copie di }
, che è esattamente ciò che vogliamo per n> 0. Il comando P in cc stampa un numero base-256 come una stringa, proprio come abbiamo bisogno.
Sfortunatamente, n = 0 deve essere trattato come un caso speciale. Il calcolo sopra riportato produce un risultato di 0 per n = 0; in tal caso, ho appena codificato la stampa della stringa {}
.