Votre défi consiste à élargir certaines parenthèses dans la contribution d'un programme, comme indiqué:
- Recherchez une chaîne s entre deux crochets correspondants
[
et]
, avec un seul chiffre n après le crochet de fermeture. - Retirez les crochets.
- Remplacez s par lui-même répété n fois. (Si n est 0, supprimez simplement s .)
- Passez à l'étape 1 jusqu'à ce qu'il n'y ait plus de crochets correspondants dans l'entrée.
Règles supplémentaires et clarifications:
- Vous allez prendre une entrée et donner une sortie par tout moyen autorisé.
- Un retour à la ligne final dans la sortie est autorisé.
- Vous devez uniquement gérer l’ASCII imprimable dans l’entrée.
- Vous pouvez supposer que tous les crochets correspondent, c'est-à-dire que vous ne recevrez jamais l'entrée
[]]]]
ou[[[[]
. - Vous pouvez supposer que chaque parenthèse fermante
]
est suivie d'un chiffre.
Cas de test:
Input -> Output
[Foo[Bar]3]2 -> FooBarBarBarFooBarBarBar
[one]1[two]2[three]3 -> onetwotwothreethreethree
[three[two[one]1]2]3 -> threetwoonetwoonethreetwoonetwoonethreetwoonetwoone
[!@#[$%^[&*(]2]2]2 -> !@#$%^&*(&*($%^&*(&*(!@#$%^&*(&*($%^&*(&*(
[[foo bar baz]1]1 -> foo bar baz
[only once]12 -> only once2
[only twice]23456789 -> only twiceonly twice3456789
[remove me!]0 ->
before [in ]2after -> before in in after
S'agissant de code-golf , la réponse la plus courte dans chaque langue est gagnante. Bonne chance!
s
ne doit jamais contenir d'autres crochets? Par exemple, une tentative de résolution[Foo[Bar]3]2
en développant la chaîneFoo[Bar
3 fois entraînerait un état non valideFoo[BarFoo[BarFoo[Bar]2
[a[b]2c[d]2e]2
? Vous obtenezabbcddeabbcdde
en développantb
et end
premier, maisababcdbcdedbabcdbcdede
en développanta[b
et end]2e
premier.Réponses:
Gema , 17 caractères
Échantillon échantillon:
la source
Retina ,
242322 octetsEssayez-le en ligne! Ceci est pratiquement intégré à Retina 1. Edit: 1 octet enregistré grâce à @Kobi.
4745 octets dans la rétine 0.8.2:Essayez-le en ligne!
la source
Haskell ,
101 à96 octetsEssayez-le en ligne! Au lieu d'utiliser une expression régulière comme la plupart des autres réponses, cela implémente un analyseur récursif.
-5 octets grâce à BMO !
la source
(%)
vous enregistre 1 octet et['1'..d]
vous en sauvegarde un autre 4, voir ceci .Perl 5 ,
343329 + 1 (-p
) = 30 octetsEssayez-le en ligne!
Réduisez-le avec l'aide de @Shaggy et @TonHospel.
la source
]
.perl -pe 's/.([^[]*?)](.)/$1x$2/e&&redo'
etperl -pe 's/.([^][]*)](.)/$1x$2/e&&redo'
Japt v2 ,
212019 octets2 octets sauvés grâce à @Shaggy
Testez-le en ligne!
e
is récursive replace, ce qui rend un remplacement à la fois jusqu'à ce qu'il n'y ait plus de correspondance. Dans ce cas, les correspondances de l'expression rationnelle/\[([^[]*?)](\d)/g
sont remplacées par les fois <texte intérieur> répété <chiffre> jusqu'à ce qu'il n'y ait plus de correspondances.Selon ce que j'ai prévu ( ici ), cette expression rationnelle devrait éventuellement être plus courte de
3 à2 octets:la source
]
est suivie d’un chiffre ", vous devriez pouvoir la remplacer(\d
par(.
.\[
par.
JavaScript,
716766 octetsJ'avais une solution de 54 octets , mais il foiré sur par suis le second cas de test! :(
Cas de test
la source
Python 3 ,
1109392 octetsEssayez-le en ligne!
-17 octets grâce à pizzapants184 -1 octet grâce à Kevin Cruijssen
la source
in
.(\d)
à(.)
, car nous savons qu'un crochet]
est toujours suivi d'un chiffre.Scala , 173 octets
Essayez-le en ligne!
Étendu:
Ancienne solution
Scala ,
219215213212199octetsEssayez-le en ligne!
Étendu:
Où l est la liste des chaînes que nous allons traiter.
Merci Kevin Cruijssen pour -1 octet
Nous sommes passés de 212 à 199 en supprimant un paramètre inutilisé, sans faire attention.
la source
(\d)
sur(.)
, car nous savons qu'un accolade]
est toujours suivie d'un chiffre.Empilé ,
3938 octetsSauvé 1 octet grâce à Shaggy, golfé la regex!
Essayez-le en ligne!
Remplace simplement de manière récursive une expression rationnelle
'\[([^[\]]+)](.)'
par la règle de répétition.la source
]
.Python 3,
15514810197 octetsEssayez-le en ligne
Merci à HyperNeutrino et Mego pour -47 octets et user202729 pour -4 octets.
la source
def f(x):a=x.rfind('[');b=x.find(']',a);return f(x[:a]+x[a+1:b]*int(x[b+1])+x[b+2:])if~a else x
JavaScript -
777572 octetsEdit: regex mis à jour avec la recommandation de Shaggy
Fragment:
Afficher l'extrait de code
la source
f=
!QuadR avec l'
≡
argument,3028 octetsEssayez-le en ligne!
\[[^[]+?].
remplacer "caractère[
non-[
bourré]
" par¯2↓⍵M
laisser tomber les deux derniers caractères du M atch ( «]
chiffre « )1↓
laisser tomber le premier caractère ( »[
»)⊂
enferment à traiter dans son ensemble(
...)⍴
r Eshape à la longueur:⌽⍵M
inverser la M atch⊃
choisir la première (le chiffre)⍎
évaluer∊
ε nlist ( aplatir)≡
répéter jusqu'à ce qu'il n'y ait plus de changementsLa fonction APL Dyalog équivalente est de 47 octets:
Essayez-le en ligne!
la source
Java 8,
250249241239 octets-2 octets grâce à @JonathanFrech (le code contient maintenant deux caractères ASCII non imprimables, qui peuvent être vus dans le lien TIO ci-dessous).
Soupir ... Java avec regex est tellement limité .. Je vais me citer une autre réponse ici:
Explication:
Essayez-le en ligne.
la source
Wolfram Language (Mathematica) , 86 octets
Essayez-le en ligne!
la source
C,
407368 octetsMerci à Jonathan Frech pour avoir économisé des octets.
golfé (fichier crochet.c):
non golfé avec programme:
Compilé avec gcc 5.4.1,
gcc bracket.c
la source
malloc
etrealloc
, y comprisstdlib.h
par elle-même.Rouge , 147 octets
Ungolfed:
J'ai commencé à apprendre le dialecte Red Parse hier seulement, alors je suis sûr que mon code peut encore être amélioré. Parse est incomparablement plus bavard que regex, mais il est très clair, flexible et lisible et peut être librement mélangé avec le reste de la langue rouge.
Essayez-le en ligne!
la source
Gelée , 30 octets
Essayez-le en ligne!
Explication.
la source
C, 381 octets
Version compacte:
Version complète:
la source
Python, 80 octets
Essayez-le en ligne!
s("[Foo[Bar]3]2")
Convertis[Foo[Bar]3]2
à''+('Foo'+('Bar')*3+'')*2+''
et évalue.Ne réussit pas à saisir des guillemets (par exemple
[']3
)la source