Dada la siguiente entrada al programa:
- Lista de caracteres de inicio de bloque
- Lista de caracteres finales de bloque
- Una cadena para formatear
formatee la cadena con los bloques delimitados por los dos juegos de caracteres sangrados.
El formateo se realiza con dos espacios por nivel y los paréntesis se colocan como se muestra en el siguiente ejemplo. Puede suponer que los conjuntos de caracteres de apertura y cierre son disjuntos.
Por ejemplo, para {[(<
y }])>
como los conjuntos de caracteres de apertura y cierre y la siguiente cadena:
abc{xyz{text[note{comment(t{ex}t)abc}]}}
se esperaría el siguiente resultado:
abc
{
xyz
{
text
[
note
{
comment
(
t
{
ex
}
t
)
abc
}
]
}
}
No puede codificar la lista de caracteres de "paréntesis". Sin embargo, no se especifica cómo se proporciona la entrada; esto podría ser argumentos de línea de comandos o mediante entrada estándar, como lo desee.
code-golf
string
whitespace
balanced-string
Prashant Bhate
fuente
fuente
./program 'p' 'q' <<< '1p23p45q67q8'
o solo necesita soporte{[(<
y}])>
?Respuestas:
Rubí,
1061019695La entrada se proporciona a través de la línea de comando.
fuente
~-j+=1
lugar de(j+=1;j-1)
. Además, el uso en$.
todas partes en lugar de lej
permite eliminar elj=0
, lo que guarda otro personaje.Perl -
1319694 caracteresParece que debería haber espacio para eliminar expresiones comunes, al menos, pero es una toma rápida que maneja el ejemplo, así como la hipótesis hipotética de Joey Adams sobre paréntesis arbitrarios.
De hecho, había mucho margen de mejora:
... y aún un poco más:
fuente
Mathematica (golf sin código)
Prueba
Como beneficio adicional, la siguiente función se puede utilizar para formatear la expresión matemática
EDITAR (sin código de golf) Actualizado con control granular fino sobre la forma en que se representan las nuevas líneas
Salida
fuente
indent
. ¿Es su objetivo el código máximo o la legibilidad? Hay varias formas de acortar ese código, si ese es su objetivo. Además: "No puede codificar la lista de caracteres de" paréntesis ". ¿pero no es eso exactamente lo que hiciste aquí? De todos modos, lamento sonar tan negativo; Simplemente me parece una respuesta extraña a tu propio desafío.JavaScript,
255227205 caracteres¡Hey, su longitud cabe perfectamente en un byte! :REEs una función, pásala por los caracteres iniciales, los caracteres finales y luego el texto.
fuente
Python - 162 caracteres
fuente
Python 2.7.X - 136 caracteres
Uso : $ ./foo.py '(' ')' '(ab (cd (ef) gh) ij)'
Resultado resultante:
fuente
print
declaraciones?C -
213209Odio los errores estúpidos ...>. <
Lee los parentes izquierdos del primer argumento de la línea de comandos, los parentescos derechos del segundo argumento y la entrada para sangrar en stdin.
Impreso y comentado:
fuente
C (
159225 caracteres)Me costó 66 caracteres adicionales solo para corregir el error con las líneas vacías :( Francamente, necesito un nuevo enfoque, pero lo llamaré un día por ahora.
Un enfoque bastante rápido y sucio. Tiene un error de producir líneas vacías entre paréntesis de cierre consecutivos, pero de lo contrario hace el trabajo (o eso creo). Lo revisaré para una solución mejor y más limpia, en algún momento de esta semana.
char * b es el conjunto de paréntesis de apertura, char * e es el conjunto de paréntesis de cierre y char * s es la cadena de entrada.
fuente
Perl - 69 bytes
TMTOWTDI simplifica el código
fuente
Scala (2.9), 211 caracteres
fuente
Perl -
8985 bytesUna versión de la respuesta de Hojung Youn que acepta los caracteres de bloque a través de dos argumentos.
Llamado como:
fuente
Python3,
184182 caracteresEjemplo:
fuente
_,p,q,t=sys.argv
Groovy, 125
Puede guardar el script en un archivo indent.groovy y probarlo con:
groovy indent.groovy "abc {xyz {text [note {comment (t {ex} t) abc}]}}}" "{[(" ") ]} "
fuente
Python - 407
Una versión no adaptada del programa:
Los argumentos para el programa son (en orden): los paréntesis de apertura, los paréntesis de cierre y el texto para sangrar.
Ejemplo ($ es la línea de comando):
fuente
D (300)
necesita una cadena terminada en nulo para la verificación de límites (de lo contrario
if(*s)
, debe cambiarse aif(s.length)
)fuente
Java
No
codegolf version
! Suponiendo que tenemos esta versión de split () que incluye delims,fuente
StringUtils
no es parte del JDK estándar.C 284 Caracteres no blancos
No soy fanático de la ofuscación, pero bueno ...
Uso: ./program start_brackets end_brackets string_to_parse
fuente
php
(187)(153)La función toma cadenas, delimitadores de apertura, delimitadores finales como argumentos.
fuente
C, 256
Parámetros:
Rompí el código para evitar la barra de desplazamiento horizontal.
El programa completo tiene 363 caracteres.
fuente
VB.net (? C)
El lenguaje no es adecuado para el golf de código, así que utilicé un enfoque poco común. Usar un escucha de rastreo para enviar a la consola.
Utiliza argumentos de línea de comando para la entrada
fuente
Powershell, 146 bytes
Explicación sin golf
fuente
C, 181 caracteres
Prácticamente el enfoque más directo imaginable. Itere a través de la cadena (v [3]), si es una llave izquierda (como se define en v [1]), aumente el nivel de sangría, si es una llave derecha (como se define en v [2]), disminuya el nivel de sangría .
fuente
C,
114121No es muy agradable, pero una solución ... puede aparecer una línea vacía antes / después dependiendo de si la entrada comienza / termina con paréntesis.
Con la nueva restricción, este enfoque es casi inútil para el golf.
fuente