Basé sur CETTE question.
Étant donné une chaîne, remplacez chaque parenthèse ()[]{}<>
par une parenthèse du type approprié afin que les parenthèses correspondent, et les parenthèses imbriquées cycle comme suit:
- Les plus externes sont
()
- Directement à l' intérieur de
()
devrait être[]
- Directement à l' intérieur de
[]
devrait être{}
- Directement à l' intérieur de
{}
devrait être<>
- Directement à l'intérieur de
<>
sera à()
nouveau (cycles)
Tous les caractères sans parenthèse doivent rester exactement tels qu'ils sont. Les parenthèses ouvertes ne peuvent être remplacées que par des parenthèses ouvertes d'un certain type et les parenthèses fermées par des parenthèses fermées.
L'entrée rendra cela toujours possible. Cela signifie que ses crochets correspondent correctement si leur type est ignoré. Alors, {ab<)c]
est une entrée valide, mais ab)(cd
ou ab((cd
ne sont pas.
Exemples:
2#jd {¤>. = 2#jd (¤).
abcdef = abcdef
(3×5+(4-1)) = (3×5+[4-1])
<<<>><<>><<<<<<>>>>>>> = ([{}][{}][{<([{}])>}])
L'utilisation de la transformation native des entrées de cette façon (syntaxe automatique du langage) n'est pas autorisée.
Comme toujours: le code le plus court gagne.
la source
Réponses:
JavaScript (ES6), 79 octets
Cas de test
Afficher l'extrait de code
la source
Lex, 132 octets
la source
flex
comme compilateur) en supprimant respectivement les deux ou trois dernières lignes, au prix d'un certain nombre d'octets (probablement 2, 3 ou 4; les règles ne sont pas claires) en pénalités pour l'-ll
option de ligne de commande lors de la liaison du fichier C résultant. (Autrement dit, au lieu de compiler aveclex brackets.l; cc lex.yy.c
, vous compilez aveclex brackets.l; cc lex.yy.c -ll
.) C'est certainement un compromis à faire dans cette situation.Java, 155 octets
Lambda qui prend un
char[]
comme argument unique. Nous parcourons le tableau, stockant sa position dans notre chaîne de crochets (s
) dans une variable (k
). Nous vérifions s'il s'agit d'un support d'ouverture ou de fermeture (s.indexAt()
), et le remplaçons par le support approprié en fonction de son niveau d'imbrication (s.charAt()
), en bouclant de manière appropriée avec%4
la source
Haskell, 126 octets
Essayez-le sur ideone. Usage:
Explication
f
prend trois arguments: une chaîne qui fonctionne comme une pile pour fermer les crochets, un intn
pour compter la profondeur d'imbrication et la chaîne d'entrée.la source