Dans Vim, vous pouvez répéter une commande en la précédant d'un nombre, comme 3dd
est équivalent à dd dd dd
. Eh bien, ce motif répétitif n'est pas limité aux commandes Vim. La chaîne peut également être répliquée de cette manière.
Spécification:
Étant donné une chaîne, composée uniquement de chiffres, de caractères alphabétiques (majuscules et minuscules) et d'espaces, avec un retour à la ligne facultatif en entrée, écrivez un programme qui effectue le travail suivant:
Chaque «mot» est composé de chiffres et d'alphabets. Si une lettre est précédée d'un nombre (il peut y avoir plus d'un chiffre dans un nombre ou le nombre est zéro), répétez cette lettre pour les heures données. Par exemple:
a2bc -> abbc 3xx1yz -> xxxxyz 10ab0c0d0e -> aaaaaaaaaab # No 'cde' because there's a zero 2A2a2A2a -> AAaaAAaa
Les mots sont séparés par des espaces. Il y a un maximum d'un espace entre deux mots adjacents.
Facile, non? Voici les trucs supplémentaires:
S'il y a un nombre devant l'espace, répétez le mot suivant pour les heures données. Le numéro sera toujours attaché à la fin du mot précédent ou au début de la chaîne. Exemple:
a2bc3 2d -> abbc dd dd dd 3 3a -> aaa aaa aaa 33a -> aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa 0 abcd0 efgh3 2x -> xx xx xx a3 0xc b -> a c c c b
Si un mot vide doit être répété, ne sortez pas plusieurs espaces d'affilée. Écrasez-les:
a3 0x2 b -> a b b # NOT 'a b b'
En d'autres termes, votre programme ne doit jamais produire deux espaces ensemble.
L'entrée n'est jamais vide, mais il n'est pas nécessaire que la sortie ne soit pas vide:
0 3x -> (empty)
L'entrée et la sortie peuvent être prises de n'importe quelle manière préférée. Une fonction prenant l'entrée des arguments et donnant la sortie via les valeurs de retour est également acceptable.
S'il s'agit d'un programme, il ne doit pas sortir avec erreur (c'est-à-dire que la valeur de retour est zéro).
Les nombres sont toujours décimaux et ne commencent jamais par un zéro, sauf si le nombre lui-même est zéro, auquel cas il n'y a qu'un seul zéro. C'est-à-dire que vous n'avez pas besoin de considérer
077a
ou de000a
donner en entrée.Tous les chiffres sont inférieurs à 2 ^ 31 (2 147 483 648). La longueur de sortie maximale est inférieure à 2 ^ 32 (4 294 967 296) octets.
Le programme peut éventuellement générer un espace de fin et / ou une nouvelle ligne de fin. Cet espace et cette nouvelle ligne n'affectent pas la validité de la sortie. Même si la sortie correcte doit être vide, une sortie d'un espace suivie d'une nouvelle ligne sera qualifiée.
En bref, une entrée valide correspond à cette expression régulière:
([0-9]+ )?([0-9A-Za-z]*[A-Za-z])([0-9]* [0-9A-Za-z]*[A-Za-z])*( ?\n?)
Et pour une sortie valide:
([A-Za-z]+)( [A-Za-z]+)*( ?\n?)
Exemples de cas de test:
abcdefg -> abcdefg
a3bcd -> abbbcd
a3bbbc -> abbbbbc
3a0b -> aaa
abc 3d -> abc ddd
abc3 d -> abc d d d
5 1x5 1y0 z -> x x x x x y y y y y
a999 0x b -> a b
999 0s -> (empty)
0 999s -> (empty)
0 999s4 t -> t t t t
a3 0xc b -> a c c c b
ABC3 abc -> ABC abc abc abc
Il s'agit d'un code-golf , donc le programme le plus court en octets dans chaque langue gagne!
a3 0xc b
->a c c c b
devrait être ajouté, car j'avais à l'origine du code qui fonctionnait pour tous les cas de test ci-dessus, mais ne fonctionnait pas correctement pour cela.Réponses:
JavaScript (Node.js) ,
102129110106 octetsEssayez-le en ligne!
Merci pour @Arnauld pour -4 octets.
la source
Perl 6, 88 octets
Essaye-le
Étendu:
La
~(…).words
combinaison supprime les espaces superflus, ce qui est utile si un «mot» est supprimé.la source
Python 2,
286275260257238 octets-19 octets grâce aux ovs
f
prend une chaîne comme argument et imprime la chaîne formatée.Voici un repl.it avec les cas de test.
Code non golfé:
Je travaille toujours sur des améliorations.
la source
exec
, car c'est la seule ligne de la fonction.Perl 5 , 77 + 1 (
-p
) = 78 octetsEssayez-le en ligne!
la source
Nettoyer ,
443... 306 octetsEssayez-le en ligne!
la source
Lua , 113 octets
Essayez-le en ligne!
la source