Les parenthèses sur mon clavier sont toutes usées et je veux éviter de les utiliser autant que possible. Votre défi est d'équilibrer une ligne contenant des parenthèses en les ajoutant avant et après chaque ligne.
Ceci est similaire aux parenthèses automatiques et à la fermeture de chaîne de TI-Basic (ie Output(1, 1, "Hello, World!
). Il enregistre également de précieux octets d'un programme!
Exemple d'entrée:
This line has no parentheses
alert(Math.max(1, 2
1+1)*2).toString()
function() { alert('Hello, World!'); })(
Exemple de sortie (possible):
This line has no parentheses
alert(Math.max(1, 2))
((1+1)*2).toString()
(function() { alert('Hello, World!'); })()
Spécification:
Pour chaque ligne d'entrée,
Ajoutez autant de parenthèses ouvertes au début et de parenthèses fermées à la fin de la ligne que nécessaire pour équilibrer les parenthèses de la ligne
La définition de «l'équilibre» est:
Même quantité de
(
et)
dans la lignePour chaque sous-chaîne commençant au début de la chaîne, cette sous-chaîne ne doit pas avoir plus de parenthèses fermantes que de parenthèses ouvrantes
- Par exemple,
(foo))(bar
n'est pas équilibré car(foo))
a plus de parenthèses fermantes que de parenthèses ouvrantes
- Par exemple,
Vous pouvez ajouter des parenthèses inutiles supplémentaires si vous le souhaitez, si cela rend votre code plus court
Vous n'avez pas à vous soucier des littéraux de chaîne ou quelque chose comme ça, supposez que toutes les parenthèses doivent être équilibrées
Sortie chaque ligne avec des parenthèses équilibrées
Il s'agit de code-golf , donc le code le plus court en octets gagnera!
la source
()
parens, ou faire d' autres supports{}
,[]
,<>
, etc ont besoin d'être considérés comme bien?(
et)
.Réponses:
GolfScript, 23 octets
L'échappatoire que j'exploite est la décision suivante:
Fondamentalement, pour chaque ligne, ce code compte le nombre de caractères sur la ligne qui n'ouvrent pas de parenthèses, et ajoute autant de parenthèses ouvrantes supplémentaires à la ligne, puis fait de même pour les parenthèses fermantes. Ceci est incroyablement inefficace, mais garantit que toutes les parenthèses sur la ligne de sortie sont équilibrées.
Par exemple, étant donné l'entrée:
ce programme affichera:
Ps. Vous pouvez également tester ce code en ligne .
la source
Perl, 32 = 31 + 1 ou 73 = 72 + 1 (parenthèses minimisées)
32 = 31 + 1: avec des parenthèses inutiles supplémentaires
Modifications:
y///
.$a
supprimée.Il est utilisé avec le commutateur d'exécution
-p
(+1 octet).Fichier de test
input.txt
:Ligne de commande:
ou
Résultat:
Non golfé:
L'algorithme est simple, il suffit d'ajouter la contrepartie pour chaque parenthèse trouvée.
73 = 72 + 1: ajout d' un nombre minimum de parenthèses
Ce script ajoute uniquement le nombre minimum de parenthèses pour obtenir une sortie équilibrée.
Il est utilisé avec le commutateur d'exécution
-p
(+1 octet).Résultat:
Non golfé:
81 = 80 + 1: ajout d' un nombre minimum de parenthèses
Il s'agit d'une méthode plus ancienne pour ajouter le nombre minimum de parenthèses pour une sortie équilibrée.
Il utilise Perl 5.14 (en raison du modificateur de substitution non destructif) et le commutateur d'exécution
-p
(+1 octet).Résultat:
Non golfé:
la source
'('x/\)/g
toujours égal '' ('...y///
au lieu dem//g
compter les parenthèses.Python
2.73:626058 octetsPas super golfé, mais vous savez. Je pourrais peut-être extraire quelques octets supplémentaires si j'essayais vraiment.
Pour chaque ligne, sort
(
* le nombre de)
dans la ligne, puis la ligne, puis)
* le nombre de(
dans la ligne. Si je comprends bien les règles, cela fournira toujours une sortie valide.Quitte en lançant une exception, en raison de la façon dont j'ai entré. (L'entrée est toujours une partie difficile de ces problèmes.) Si ce n'est pas acceptable, cela me coûtera quelques octets à corriger, mais je ne sais pas encore combien.
Exemple de sortie:
la source
python2 balanced_parenthesis.py < input.txt 2>/dev/null
obtient la sortie que j'ai écrite mais si vous voulez une entrée multiligne en le faisant de manière interactive, cela me coûtera quelques octets. Donnez-moi une seconde, je vais trouver quelque chose ...while 1:s=raw_input();c=s.count;print'('*c(')')+s+')'*c('(')
c=s.count
. Je pensais que vous aviez à fairec=s
,s.c()
. Merci!Pure Bash, 72 octets
Utilise le même algorithme que la réponse de @ undergroundmonorail:
Production:
la source