dc , 46 octets
[[{}]]sx256?^dd3^8d^1-/8092541**r255/BF*+d0=xP
Essayez-le en ligne!
Entrée sur stdin, sortie sur stdout.
Cela fonctionne en calculant une formule pour la sortie souhaitée sous la forme d'un nombre de base 256. La commande P dans dc est ensuite utilisée pour imprimer le nombre base-256 sous forme de chaîne.
Plus d'explications:
Soit n l'entrée n. Le programme DC calcule la somme de
A = étage (256 ^ n / 255) * 125 (BF est interprété par dc comme 11 * 10 + 15 = 125)
et
B = étage ((256 ^ n) ^ 3 / (8 ^ 8-1)) * 8092541 * (256 ^ n).
Pour un:
Observez que 1 + 256 + 256 ^ 2 + ... + 256 ^ (n-1) est égal à (256 ^ n-1) / 255, par la formule d'une progression géométrique, et cela est égal au sol (256 ^ n / 255 ). C'est donc le nombre composé de n 1 en base 256.
Lorsque vous le multipliez par 125 pour obtenir A, le résultat est le nombre composé de n 125 en base 256 (125 est un chiffre unique en base 256, bien sûr). Il est probablement préférable d'écrire les chiffres de la base 256 sous forme de nombres hexadécimaux; 125 est hexadécimal 7D, donc A est le nombre de base 256 composé de n 7D dans une rangée.
B est similaire:
Cette fois, observez que 1 + 16777216 + 16777216 ^ 2 + ... + 16777216 ^ (n-1) est égal à (16777216 ^ n - 1) / 16777215, et cela est égal au plancher (16777216 ^ n / 16777215).
Maintenant, 256 ^ 3 = 16777216 et 8 ^ 8-1 = 16777215, c'est donc ce que nous calculons comme étage ((256 ^ n) ^ 3 / (8 ^ 8-1)).
D'après la représentation des séries géométriques, ce nombre dans la base 256 est 100100100 ... 1001 avec n des chiffres étant 1 et le reste des chiffres étant 0.
Ceci est multiplié par 8092541, qui est 7B7B7D en hexadécimal. Dans la base 256, il s'agit d'un nombre à trois chiffres composé des chiffres 7B, 7B et 7D (en écrivant ces chiffres en hexadécimal pour plus de commodité).
Il s'ensuit que le produit écrit en base 256 est un nombre à 3n chiffres composé des 3 chiffres 7B 7B 7D répétés n fois.
Celui-ci est multiplié par 256 ^ n, ce qui donne un nombre de base 256 à 4n chiffres, composé des 3 chiffres 7B 7B 7D répétés n fois, suivis de n 0. C'est B.
L'ajout de A + B donne maintenant le nombre de base 256 à 4 chiffres composé des 3 chiffres 7B 7B 7D répétés n fois, suivis de n 7D. Puisque 7B et 7D sont les codes ASCII pour {
et }
, respectivement, il s'agit de la chaîne composée de n copies de {{}
suivi de n copies de}
, ce qui est exactement ce que nous voulons pour n> 0. La commande P en dc imprime un nombre en base 256 comme une chaîne, comme nous en avons besoin.
Malheureusement, n = 0 doit être traité comme un cas spécial. Le calcul ci-dessus donne un résultat de 0 pour n = 0; dans ce cas, je viens de coder en dur l'impression de la chaîne {}
.