Ceci est inspiré d'une réponse 05AB1E de Magic Octupus Urn .
Étant donné deux arguments, un entier positif et une chaîne / liste de caractères:
- Traduisez le nombre en base-n, où n est la longueur de la chaîne.
- Pour chaque caractère, remplacez chaque apparence de l'index de ce caractère dans le nombre base-n par ce caractère.
- Imprimez ou renvoyez la nouvelle chaîne.
Exemples:
Input:
2740, ["|","_"]
2740 -> 101010110100 in base 2
-> Replace 0s with "|" and 1s with "_"
Output: _|_|_|__|_||
Input:
698911, ["c","h","a","o"]
698911 -> 2222220133 in base 4
-> Replace 0s with "c", 1s with "h", 2s with "a", and 3s with "o"
Output -> "aaaaaachoo"
Input:
1928149325670647244912100789213626616560861130859431492905908574660758972167966, [" ","\n","|","_","-"]
Output:
__ __
| |_| |
___| |___
- - - -
- - - - - - -
- - - - - - - -
_______________
Input: 3446503265645381015412, [':', '\n', '.', '_', '=', ' ', ')', '(', ',']
Output:
_===_
(.,.)
( : )
( : )
Règles:
- IO est flexible .
- Vous pouvez prendre le nombre dans n'importe quelle base, tant qu'il est cohérent entre les entrées
- La liste des caractères doit cependant être indexée 0, où 0 est le premier caractère et n-1 est le dernier
- Les caractères possibles peuvent être n'importe quel ASCII imprimable, ainsi que des espaces tels que des tabulations et des retours à la ligne
- La liste de caractères donnée aura une longueur dans la plage
2-10
incluse. Autrement dit, la plus petite base est binaire et la plus grande est décimale ( pas de lettres embêtantes ici ) - Les failles standard sont interdites
- N'hésitez pas à répondre même si votre langue ne peut pas gérer les plus grands cas de test.
Comme il s'agit de code-golf , le code le plus court pour chaque langue l'emporte. ( Je sais que toutes les langues de golf ont des octets intégrés prêts à l'emploi ;)
code-golf
ascii-art
base-conversion
Jo King
la source
la source
Réponses:
05AB1E ,
76 octetsPuisqu'elle a été inspirée par une réponse 05AB1E, une réponse donnée dans 05AB1E semble appropriée. :)
-1 octet grâce à @Enigma en supprimant foreach et en le faisant implicitement.
Essayez-le en ligne ou vérifiez tous les cas de test .
Explication:
la source
gв¹sèJ
pour enregistrer un octet.¹sè
moi maintenant. (Je savais que changer le?
enJ
donnerait la même sortie dans ce cas.)Java 8,
7250 octets-22 octets grâce à @ OlivierGrégoire en retournant un
IntStream
au lieu d'imprimer directement.Essayez-le en ligne .
Explication:
la source
a->n->n.toString(a.length).chars().map(c->a[c-48])
(50 octets) depuis "IO is flexible"String f(char[]a,int n){return n>0?f(a,n/a.length)+a[n%a.length]:"";}
(69 octets) récursif, pour le plaisir.Python 3 , 49 octets
Je ne peux pas encore commenter, donc je poste la réponse Python 2 adaptée à Python 3.5.
la source
Japt, 2 octets
Peut prendre la deuxième entrée sous forme de tableau ou de chaîne. Échoue les 2 derniers cas de test car les nombres dépassent l'entier maximum de JavaScript. Remplacez
s
parì
pour afficher un tableau de caractères à la place.Essayez-le
la source
Haskell ,
4039 octetsEssayez-le en ligne!
Comme le
Int
type de Haskell est limité à9223372036854775807
, cela échoue pour les plus grands nombres.-1 octet merci à Laikoni .
Non golfé
Essayez-le en ligne!
la source
cycle
au lieu demod
!div n(length l)
enregistre un octet.MATL , 2 octets
Essayez-le en ligne!
Les entrées sont un nombre et une chaîne.
Échoue pour les nombres dépassant
2^53
, en raison de la précision en virgule flottante.Explication
Que
YA
savez-vous, une fonction intégrée (conversion de base avec des symboles cibles spécifiés).la source
JavaScript (ES6), 48 octets
Prend une entrée dans la syntaxe de curry
(c)(n)
, où c est une liste de caractères et n est un entier.Sûr uniquement pour n <2 53 .
Essayez-le en ligne!
JavaScript (ES6), 99 octets
Avec prise en charge des grands nombres entiers
Prend la saisie dans la syntaxe de curry
(c)(a)
, où c est une liste de caractères et a est une liste de chiffres décimaux (sous forme d'entiers).Essayez-le en ligne!
la source
Code machine x86 32 bits (entiers 32 bits): 17 octets.
(voir également les autres versions ci-dessous, y compris 16 octets pour 32 bits ou 64 bits, avec une convention d'appel DF = 1.)
L' appelant passe args dans les registres, y compris un pointeur vers la fin d'un tampon de sortie (comme ma C réponse , voir pour la justification et l' explication de l'algorithme.) Interne de glibc
_itoa
fait cela , il est donc pas seulement arrangea pour le code-golf. Les registres de passage d'argument sont proches du système V x86-64, sauf que nous avons un arg dans EAX au lieu d'EDX.En retour, EDI pointe vers le premier octet d'une chaîne C terminée par 0 dans le tampon de sortie. Le registre de valeur de retour habituel est EAX / RAX, mais en langage assembleur, vous pouvez utiliser n'importe quelle convention d'appel convenant à une fonction. (
xchg eax,edi
à la fin ajouterait 1 octet).L'appelant peut calculer une longueur explicite s'il le souhaite, à partir de
buffer_end - edi
. Mais je ne pense pas que nous puissions justifier l'omission du terminateur à moins que la fonction ne retourne réellement les deux pointeurs de début + fin ou le pointeur + la longueur. Cela économiserait 3 octets dans cette version, mais je ne pense pas que ce soit justifiable.idiv
. Les autres arguments ne sont pas des opérandes implicites.)dec edi
, donc doit être dans le bas 4GiB)nasm -felf32 ascii-compress-base.asm -l /dev/stdout | cut -b -30,$((30+10))-
(Modifié à la main pour réduire les commentaires, la numérotation des lignes est bizarre.)Il est surprenant que la version la plus simple sans compromis de vitesse / taille soit la plus petite, mais
std
/cld
coûte 2 octets à utiliserstosb
pour aller dans l'ordre décroissant et toujours suivre la convention d'appel DF = 0 commune. (Et STOS diminue après le stockage, laissant le pointeur pointant un octet trop bas à la sortie de la boucle, ce qui nous coûte des octets supplémentaires pour contourner.)Versions:
J'ai trouvé 4 astuces d'implémentation significativement différentes (en utilisant un
mov
chargement / stockage simple (ci-dessus), en utilisantlea
/movsb
(soigné mais pas optimal), en utilisantxchg
/xlatb
/stosb
/xchg
et un qui entre dans la boucle avec un hack d'instruction à chevauchement. Voir le code ci-dessous) . Le dernier a besoin d'une fin0
dans la table de recherche pour copier en tant que terminateur de chaîne de sortie, donc je compte cela comme +1 octet. Selon 32/64 bits (1 octetinc
ou non), et si nous pouvons supposer que l'appelant définit DF = 1 (stosb
décroissant) ou autre, différentes versions sont (à égalité) les plus courtes.DF = 1 à stocker dans l'ordre décroissant en fait une victoire pour xchg / stosb / xchg, mais souvent, l'appelant n'en voudra pas; C'est comme décharger le travail de l'appelant d'une manière difficile à justifier. (Contrairement aux registres de passage d'argument et de valeur de retour personnalisés, qui ne coûtent généralement pas de travail supplémentaire à un appelant asm.) Mais dans le code 64 bits,
cld
/scasb
fonctionne commeinc rdi
, évitant de tronquer le pointeur de sortie sur 32 bits, il est donc parfois gênant de conserver DF = 1 dans les fonctions de nettoyage 64 bits. . (Les pointeurs vers du code / des données statiques sont 32 bits dans les exécutables non PIE x86-64 sous Linux, et toujours dans l'ABI Linux x32, donc une version x86-64 utilisant des pointeurs 32 bits est utilisable dans certains cas.) Quoi qu'il en soit, cette interaction rend intéressant d'examiner différentes combinaisons d'exigences.nostring
) .stosb_edx_arg
ouskew
) ; ou avec DF entrant = dontcare, en le laissant réglé: 16 + 1Bstosb_decode_overlap
ou 17Bstosb_edx_arg
stosb_decode_overlap
) , 18B (stosb_edx_arg
ouskew
)x86-64 avec pointeurs 64 bits, autre gestion DF: 16B (DF = 1
skew
) , 17B (nostring
avec DF = 1, en utilisant à lascasb
place dedec
). 18B (stosb_edx_arg
préservant DF = 1 avec 3 octetsinc rdi
).Ou si nous permettons de renvoyer un pointeur à 1 octet avant la chaîne, 15B (
stosb_edx_arg
sans leinc
à la fin). Tous ensemble pour appeler à nouveau et développer une autre chaîne dans le tampon avec une base / table différente ... Mais cela aurait plus de sens si nous ne stockions pas de terminaison0
non plus, et vous pourriez mettre le corps de la fonction dans une boucle, donc c'est vraiment un problème distinct.x86-64 avec pointeur de sortie 32 bits, convention d'appel DF = 0: aucune amélioration par rapport au pointeur de sortie 64 bits, mais 18B (
nostring
) est maintenant lié.skew
). Ou pour définir DF = 1 et le laisser, 17B pourskew
avecstd
mais pascld
. Ou 17 + 1B pourstosb_decode_overlap
avecinc edi
à la fin au lieu decld
/scasb
.Avec une convention d'appel DF = 1: 16 octets (IA32 ou x86-64)
Nécessite DF = 1 en entrée, laisse-le défini. À peine plausible , au moins sur une base par fonction. Fait la même chose que la version ci-dessus, mais avec xchg pour obtenir le reste dans / hors de AL avant / après XLATB (recherche de table avec R / EBX comme base) et STOSB (
*output-- = al
).Avec un DF = 0 normal sur la convention d'entrée / sortie, la version
std
/cld
/scasb
est de 18 octets pour le code 32 et 64 bits, et est propre 64 bits (fonctionne avec un pointeur de sortie 64 bits).Notez que les arguments d'entrée sont dans différents registres, y compris RBX pour la table (pour
xlatb
). Notez également que cette boucle commence par stocker AL et se termine par le dernier caractère non encore enregistré (d'où lemov
à la fin). La boucle est donc "biaisée" par rapport aux autres, d'où le nom.Une version similaire non biaisée dépasse EDI / RDI, puis la corrige.
J'ai essayé une autre version de ceci avec
lea esi, [rbx+rdx]
/movsb
comme corps de boucle interne. (RSI est réinitialisé à chaque itération, mais RDI diminue). Mais il ne peut pas utiliser xor-zero / stos pour le terminateur, c'est donc 1 octet de plus. (Et ce n'est pas propre en 64 bits pour la table de recherche sans préfixe REX sur le LEA.)LUT avec longueur explicite et terminateur 0: 16 + 1 octets (32 bits)
Cette version définit DF = 1 et le laisse de cette façon. Je compte l'octet LUT supplémentaire requis dans le cadre du nombre total d'octets.
L'astuce ici consiste à décoder les mêmes octets de deux manières différentes . Nous tombons au milieu de la boucle avec reste = base et quotient = numéro d'entrée, et copions le terminateur 0 en place.
Lors de la première utilisation de la fonction, les 3 premiers octets de la boucle sont consommés en tant qu'octets élevés d'un disp32 pour un LEA. Que LEA copie la base (module) sur EDX,
idiv
produit le reste pour les itérations ultérieures.Le 2ème octet de
idiv ebp
isFD
, qui est l'opcode de l'std
instruction dont cette fonction a besoin pour fonctionner. (Ce fut une découverte chanceuse. J'avais déjà regardé cela avecdiv
plus tôt, qui se distingue de l'idiv
utilisation des/r
bits dans ModRM. Le 2ème octet dediv epb
décodage ascmc
, ce qui est inoffensif mais pas utile. Mais avecidiv ebp
peut-on réellement supprimer lestd
du haut de la fonction.)Notez que les registres d'entrée sont à nouveau différents: EBP pour la base.
Cette astuce de décodage qui se chevauchent peut également être utilisée avec
cmp eax, imm32
: il ne faut que 1 octet pour avancer efficacement de 4 octets, seulement les drapeaux qui tapent. (C'est terrible pour les performances sur les processeurs qui marquent les limites des instructions dans le cache L1i, BTW.)Mais ici, nous utilisons 3 octets pour copier un registre et sauter dans la boucle. Cela prendrait normalement 2 + 2 (mov + jmp), et nous permettrait de sauter dans la boucle juste avant le STOS au lieu d'avant le XLATB. Mais nous aurions alors besoin d'une MST distincte, et ce ne serait pas très intéressant.
Essayez-le en ligne! (avec un
_start
appelant qui utilisesys_write
le résultat)Il est préférable pour le débogage de l'exécuter sous
strace
ou hexdump la sortie, afin que vous puissiez voir qu'il y a un\0
terminateur au bon endroit et ainsi de suite. Mais vous pouvez voir que cela fonctionne réellement et produireAAAAAACHOO
pour une entrée de(En fait
xxAAAAAACHOO\0x\0\0...
, parce que nous vidons de 2 octets plus tôt dans le tampon vers une longueur fixe. Nous pouvons donc voir que la fonction a écrit les octets qu'elle était censée faire et n'a pas marché sur les octets qu'elle ne devrait pas avoir. le pointeur de début transmis à la fonction était l'avant-dernierx
caractère, suivi de zéros.)la source
Gelée , 4 octets
Essayez-le en ligne!
ṃ
est littéralement intégré pour cela. Les trois autres octets représentent l'indexation à base unique de Jelly.la source
ṃ
" décompression de base; convertir x en longueur de base (y) puis indexer en y. "? Est-ce pour les cas très exceptionnels où la base à convertir et la longueur d'une chaîne / d'un entier / d'une liste sont égales? Lorsque je le recherche, je ne peux trouver que trois réponses en l'utilisant: 1 ; 2 ; 3 . Un peu bizarre intégré dans tous les jours de défis de golf de code imo. : S“sspspdspdspfdspfdsp”
, mais“çƥ÷£ḟ’ṃ“spdf”¤
vous économisez six octets. C'est particulièrement utile avec les nombres de base 250 de JellyPython 2 ,
4948 octets-1 octet grâce à Jo King
Essayez-le en ligne!
Version alternative (ne se termine pas pour les grands nombres),
4543 octets-2 octets grâce à Jo King
Essayez-le en ligne!
la source
Fusain ,
31 octetsEssayez-le en ligne! Le lien est vers la version détaillée du code. Edit: sauvé 2 octets grâce à @ ASCII uniquement. Version précédente avant l'ajout de la fonction intégrée, 8 octets:
Essayez-le en ligne! Le lien est vers la version détaillée du code. Explication:
la source
θη
? Ça a l'air un peu déroutant. Pourquoi ne pas simplement l'enlever complètement et partir⍘
?D , 112 octets
Essayez-le en ligne!
Ceci est un portage de la réponse C ++ de HatsuPointerKun
Le style d'appel est
u(ulong(n), to!(char[])(b))
, oùn
etb
sont les arguments gauche et droitD trucs spécifiques
Malheureusement, nous devons importer
std.conv
pour effectuer des conversions de type supérieures à une conversion de type très basique.En utilisant le système de modèles golfy, et en donnant à la fonction les types requis (c'est pourquoi l'appeler n'est pas seulement
u(n,b)
), nous pouvons raccourcir les occurrences dechar[]
etulong
pour les1
octet chacune, à l'intérieur de f la fonction.D initialise nos types pour nous,
C t;
est donc court pourC t=cast(char[])([])
to!C
convertit l'entiern%l
en un tableau de caractères (en utilisant des points de code), et~
est une concaténationforeach(ref c;t)
est comme lafor(... : ...)
boucle de C ++ , mais un peu plus longue.ref
est comme&
, il traitec
comme copié par référence (c'est-à-dire, nous pouvons modifiert
). Heureusement, D infère le type dec
sans tout type de mot - clé dénoter.la source
C ++,
150144 octets,uint64
entrée-6 octets grâce à Zacharý
L'utilisation d'une variable pour stocker la taille augmenterait le nombre d'octets de 1
Pour appeler la fonction:
D'abord le nombre, le deuxième est la chaîne (tableau de caractères)
Cas de test:
la source
#include
, vous pouvez passer;;
à juste;
, et'0'
peut être48
for
boucle:for(;n;n/=b.size())t=std::to_string(n%b.size())+t;
b.size()
cela ne change pas dans cette boucle.Brindille, 66 octets
Créé un
macro
qui doit êtreimport
édité dans un modèle.Valeurs attendues:
Pour les premiers arguments (
n
):Pour le deuxième argument (
c
):Comment utiliser:
.twig
fichier{% import 'file.twig' as uncompress %}
uncompress.d()
Non golfé (non fonctionnel):
Vous pouvez tester ce code sur: https://twigfiddle.com/54a0i9
la source
Pyth,
987 octetsEnregistré un octet grâce à hakr14 et un autre grâce à M. Xcoder.
Essayez-le ici
Explication
la source
m@Qd
par@LQ
vz
parE
.C89, signé à portée limitée
int n
,6453 octetschar **out
et modifiez-le, au lieu de prendre et de retourner unchar *
Prend le nombre sous forme de
int
, la table de recherche sous forme de tableau + longueur.La sortie est écrite dans un fichier
char *outbuf
. L'appelant passe (par référence) un pointeur à la fin du tampon. La fonction modifie ce pointeur pour pointer vers le premier octet de la chaîne au retour.Ceci est C89 valide et fonctionne correctement même avec l'optimisation activée. c'est-à-dire ne dépend pas du
-O0
comportement de gcc lors de la chute de la fin d'une fonction non vide ou de tout autre UB.Passer un pointeur à la fin d'un tampon est normal pour une fonction int-> chaîne optimisée, telle que glibc internal
_itoa
. Voir cette réponse pour une explication détaillée de la décomposition d'un entier en chiffres avec une boucle div / mod comme nous le faisons ici, en C ainsi qu'en asm x86-64. Si la base est une puissance de 2, vous pouvez déplacer / masquer pour extraire d'abord les chiffres MSD, mais sinon la seule bonne option est d'abord le chiffre le moins significatif (avec modulo).Essayez-le en ligne! . Version non golfée:
Dans cette version de longueur explicite, l'entrée est un
char table[]
qui n'a pas besoin d'un octet de fin 0, car nous ne le traitons jamais comme une chaîne. Ce pourrait être unint table[]
pour tout ce dont nous nous soucions. C n'a pas de conteneurs qui connaissent leur propre longueur, donc pointeur + longueur est le moyen normal de passer un tableau avec une taille. Nous choisissons donc cela au lieu d'en avoir besoinstrlen
.La taille maximale du tampon est approximativement
sizeof(int)*CHAR_BIT + 1
, elle est donc petite et constante au moment de la compilation. (Nous utilisons cet espace avec base = 2 et tous les bits mis à 1.) Par exemple 33 octets pour des entiers 32 bits, y compris le0
terminateur.C89, signé
int
, table sous forme de chaîne C de longueur implicite, 65 octetsC'est la même chose, mais l'entrée est une chaîne de longueur implicite, nous devons donc trouver la longueur nous-mêmes.
la source
Utilitaires de base Bash + , 49 octets
Essayez-le en ligne!
Commentaires / explication
Cela prend les arguments de ligne de commande en entrée (le nombre en base 10, puis une seule chaîne avec la liste des caractères) et les sorties vers stdout. Des caractères spéciaux comme l'espace, la nouvelle ligne, etc. peuvent être entrés en notation octale (par exemple,
\040
pour un espace), ou\n
pour une nouvelle ligne,\t
pour tabulation, ou toute autre séquence d'échappement quiecho -e
ettr
interpréter de manière identique.Une grande partie des octets sert à gérer les caractères spéciaux et les cas de test plus volumineux. Si je dois seulement gérer des caractères non terribles et que les nombres sont petits (par exemple, le premier cas de test), les 24 octets suivants le feront:
Cela utilise l'expansion des paramètres
${#2}
pour obtenir le nombre de caractères dans la chaîne, crée un programme DC pour effectuer la conversion de base, puis envoie le nombre convertitr
.Cela ne gérera pas les sauts de ligne, les espaces ou les tabulations, donc pour gérer les séquences d'échappement sans affecter la base, je fais un décompte des caractères
wc -c
après avoir interprété les échappements avececho -en
. Cela étend le programme à 38 octets:Malheureusement, dc a une "fonctionnalité" ennuyeuse où, s'il émet un grand nombre, il l'enroulera avec une séquence barre oblique + nouvelle ligne, donc les plus grands cas de test ont cette sortie supplémentaire. Pour le supprimer, je redirige la sortie de dc vers
tr -dc 0-9
pour supprimer les caractères non numériques. Et nous y voilà.la source
dc -e${#2}o$1p|tr 0-9 "$2"
de prendre l'entrée littéralement au lieu de la forme in \ escape pour qu'elle puisse gérer les espaces, maistr
n'a pas d'option pour ne pas traiter-
comme un caractère de plage, par exemple. Si l'entrée n'a-
pas à une extrémité de la chaîne, elle se casse. Vous pouvez peut-être utilisersed "y/0123456789/$2/"
. Non, je suppose que non, GNUsed
exige que les deux argumentsy
soient de la même longueur, et il semble s'étouffer sur la nouvelle ligne.APL (Dyalog Unicode) ,
14 1312 octetsEssayez-le en ligne!
Fonction tacite Infix; ne peut pas gérer le plus grand cas de test en raison de la représentation en virgule flottante.
Enregistré
12 octets grâce à @ Adám!13 octets pour les en- têtes ajoutés:(J'avais oublié que cela ne s'applique pas. )⎕IO←0
: I ndex O rigine = 0 et⎕FR←1287
: F loat R ePresentation = 128 bits.Comment?
la source
Attaché , 17 octets
Essayez-le en ligne!
Explication
la source
Toile , 7 octets
Essayez-le ici!
Mise en œuvre simple:
Le jeu de caractères d'entrée peut également être une chaîne tant qu'il ne contient pas de nouvelle ligne, car Canvas n'a pas de caractère de nouvelle ligne et le convertit automatiquement en objet 2D.
la source
Stax ,
65 octetsExécuter et déboguer
Explication:
la source
SOGL V0.12 , 10 octets
Essayez-le ici!
Assez longtemps, étant donné que l'idée est à peu près mise en œuvre dans la langue: ici , entrer
donne une chaîne compressée en utilisant cette méthode.
la source
Rubis , 31 octets
Essayez-le en ligne!
la source
Stax , 2 octets
Exécuter et déboguer
:B
est une instruction dans stax qui fait cela. Il fonctionnerait normalement sur une "chaîne" * au lieu d'un tableau de "chaînes". En fin de compte, cela signifie que la sortie est un tableau de tableaux à caractère unique. Mais la sortie s'aplatit implicitement de toute façon.* Stax n'a pas de type de chaîne. Le texte est représenté par des tableaux entiers de points de code.
la source
J , 12 octets
Comment?
Essayez-le en ligne!
la source
Wolfram Language (Mathematica) , 49 octets
Essayez-le en ligne!
la source
C (gcc) , 110 octets
Essayez-le en ligne!
La description:
la source
sprintf
. Ma version C fait 53 octets , avec le tampon de sortie fourni par l'appelant. Vous pouvez en faire unstrcpy
à la fin si vous souhaitez copier les octets au début d'un tampon.CJam , 11 octets
Essayez-le en ligne! Prend la saisie comme le nombre, puis une nouvelle ligne, puis les caractères de l'art ASCII.
Explication
la source
liq
début, et cela vous fait gagner 3 octets!JavaScript, 39 octets
Solution Python de Port of Rod .
Essayez-le en ligne
la source
n
jusqu'à 64 bits, non? (Python a des entiers de précision arbitraire intégrés, mais les nombres JS sont naturellement desdouble
flottants de précision qui peuvent être convertis en entier). Ne semble pas fonctionner pour les plus grands cas de test de la question, comme 1928149325670647244912100789213626616560861130859431492905908574660758972167966. Oh, mais la question permet des réponses comme ça. Encore faut-il le noter.SimpleTemplate , 86 octets
Wow, c'était un énorme défi!
Cela a été rendu difficile en raison du manque d'accès direct à des index spécifiques lorsque l'index est une variable.
Un bug l'a également allongé, nécessitant de stocker les valeurs dans une variable.
Valeurs attendues:
Le premier argument (
argv.0
) peut être:Le deuxième argument (
argv.1
) peut être:Comment ça marche?
Cela fonctionne de cette façon:
C
comme un tableau contenant:C
"{@echoA."
"}"
join
fonction)Il en résulte, par exemple,
C
contenant"{@echoA.0}{@echoA.1}..."
C
Non golfé:
Vous pouvez essayer ce code sur: https://ideone.com/NEKl2q
Résultat optimal
S'il n'y avait pas de bogues, ce serait le meilleur résultat, en tenant compte des limitations (77 octets):
la source