Los paréntesis en mi teclado están desgastados y quiero evitar usarlos tanto como sea posible. Su desafío es equilibrar una línea que contiene paréntesis agregándolos antes y después de cada línea.
Esto es similar a los paréntesis automáticos y al cierre de cadena de TI-Basic (es decir Output(1, 1, "Hello, World!
). ¡También ahorra bytes preciosos de un programa!
Entrada de ejemplo:
This line has no parentheses
alert(Math.max(1, 2
1+1)*2).toString()
function() { alert('Hello, World!'); })(
Ejemplo (posible) de salida:
This line has no parentheses
alert(Math.max(1, 2))
((1+1)*2).toString()
(function() { alert('Hello, World!'); })()
Especificación:
Para cada línea de entrada,
Agregue tantos paréntesis abiertos al principio y cierre los paréntesis al final de la línea como sea necesario para equilibrar los paréntesis en la línea
La definición de "equilibrio" es:
La misma cantidad de
(
y)
en la líneaPara cada subcadena que comienza desde el principio de la cadena, esta subcadena no debe tener más paréntesis de cierre que paréntesis de apertura
- Por ejemplo,
(foo))(bar
no está equilibrado porque(foo))
tiene más paréntesis de cierre que paréntesis de apertura
- Por ejemplo,
Puede agregar paréntesis innecesarios adicionales si lo desea, si acorta su código
No necesita preocuparse por los literales de cadena ni nada de eso, suponga que todos los paréntesis necesitan equilibrio
Salida de cada línea con paréntesis balanceados
Este es el código de golf , por lo que el código más corto en bytes ganará.
fuente
()
parens, o hacer otros soportes{}
,[]
,<>
, etc necesidad de tener en cuenta también?(
y)
.Respuestas:
GolfScript, 23 bytes
La escapatoria que estoy explotando es la decisión de que:
Básicamente, para cada línea, este código cuenta el número de caracteres en la línea que no están entre paréntesis de apertura, y antepone esa cantidad de paréntesis de apertura adicionales a la línea, y luego hace lo mismo para cerrar los paréntesis. Esto es increíblemente ineficiente, pero asegura que todos los paréntesis en la línea de salida estén equilibrados.
Por ejemplo, dada la entrada:
este programa generará:
PD. También puede probar este código en línea .
fuente
Perl, 32 = 31 + 1 o 73 = 72 + 1 (paréntesis minimizados)
32 = 31 + 1: con paréntesis innecesarios adicionales
Ediciones:
y///
.$a
eliminada.Se usa con el interruptor de tiempo de ejecución
-p
(+1 byte).Archivo de prueba
input.txt
:Línea de comando:
o
Resultado:
Sin golf:
El algoritmo es simple, solo agregue la contraparte para cada paréntesis encontrado.
73 = 72 + 1: agregar un número mínimo de paréntesis
Este script solo agrega el número mínimo de paréntesis para obtener un resultado equilibrado.
Se usa con el interruptor de tiempo de ejecución
-p
(+1 byte).Resultado:
Sin golf:
81 = 80 + 1: agregar un número mínimo de paréntesis
Este es un método antiguo para agregar el número mínimo de paréntesis para una salida balanceada.
Utiliza Perl 5.14 (debido al modificador de sustitución no destructivo) y el interruptor de tiempo de ejecución
-p
(+1 byte).Resultado:
Sin golf:
fuente
'('x/\)/g
siempre es igual a '(' ...y///
lugar dem//g
contar los paréntesis.Python
2.73:626058 bytesNo super golf, pero ya sabes. Es posible que pueda exprimir algunos bytes más si realmente lo intento.
Para cada línea, salidas
(
* el número de)
en la línea, luego la línea, luego)
* el número de(
en la línea. Si entiendo las reglas correctamente, esto siempre proporcionará una salida válida.Sale lanzando una excepción, como resultado de la forma en que ingresé. (La entrada es siempre una parte difícil de estos problemas). Si esto no es aceptable, me costará unos pocos bytes solucionarlo, aunque todavía no estoy seguro de cuántos.
Salida de ejemplo:
fuente
python2 balanced_parenthesis.py < input.txt 2>/dev/null
obtiene el resultado que escribí, pero si desea una entrada de varias líneas mientras lo hace de forma interactiva, me costará unos pocos bytes. Dame un segundo, resolveré algo ...while 1:s=raw_input();c=s.count;print'('*c(')')+s+')'*c('(')
c=s.count
. Pensé que tenía que hacerc=s
,s.c()
. ¡Gracias!Pure Bash, 72 bytes
Utiliza el mismo algoritmo que la respuesta de @ undergroundmonorail:
Salida:
fuente