Fondo
(Basado en una historia verdadera y desgarradora)
En mi tiempo, he jugado con Lisp y lenguajes similares a menudo. He escrito con ellos, los ejecuté, los interpreté, los diseñé e hice que las máquinas escribieran con ellos por mí ... Y si hay algo que me molesta, es ver a Lisp que no cumple con mi estilo de formato específico.
Desafortunadamente, algunos editores de texto ( tos XCode tos ) tienden a eliminar mis hermosas pestañas y espacios cada vez que se copia y pega el código ... Tome esta sintaxis tipo Lisp bellamente espaciada:
(A
(B
(C)
(D))
(E))
(¿Dónde ABCDE
están las funciones arbitrarias)
ALGUNOS editores de texto descifran este hermoso código con el siguiente fin:
(A
(B
(C)
(D))
(E))
¡Que desastre! ¡Eso no es legible!
¿Ayudame aqui?
El reto
Su objetivo en este desafío es tomar una serie de funciones separadas por líneas nuevas en un formato que se describe a continuación y devolver un arreglo más hermoso que resalte la legibilidad y la elegancia.
La entrada
Definimos una función F
de N
argumentos de aridad como una construcción similar a la siguiente:
(F (G1 ...) (G2 ...) (G3 ...) ... (GN ...))
donde G1, G2, ..., GN
están todas las funciones en sí mismas. Una 0
función arity A
es simplemente (A)
, mientras que una 2
función arity B
es de la forma(B (...) (...))
Su código debe tomar la entrada como una serie de funciones con una sola línea nueva antes del paréntesis principal de cada función (excepto la primera función). El ejemplo anterior es una entrada válida.
Puedes asumir:
- Los paréntesis son equilibrados.
- Una función nunca tendrá que sangrarse más de 250 veces.
- CADA función está rodeada de paréntesis:
()
- El nombre de una función solo contendrá caracteres ASCII imprimibles.
- El nombre de una función nunca contendrá paréntesis o espacios.
- Hay una nueva línea final opcional en la entrada.
La salida
Su código debe generar el mismo conjunto de funciones, donde los únicos cambios realizados son las adiciones de espacios o pestañas antes de los paréntesis principales de las funciones. La salida debe cumplir con las siguientes reglas:
- La primera función (y las funciones de nivel superior posteriores) proporcionadas no deben tener espacios anteriores
- Un argumento sobre la ubicación horizontal de una función es exactamente una pestaña a la derecha de la ubicación horizontal de esa función.
- Una pestaña está definida por la implementación, pero debe tener al menos 3 espacios.
- Opcionalmente, puede imprimir un máximo de dos espacios después de cada línea.
Reglas
- Este es el código de golf: ¡el código más corto gana!
- Las lagunas estándar no están permitidas.
Ejemplos
Entrada:
(A
(B
(C)
(D))
(E))
Salida:
(A
(B
(C)
(D))
(E))
Entrada:
(!@#$%^&*
(asdfghjklm
(this_string_is_particularly_long
(...))
(123456789)))
(THIS_IS_TOP_LEVEL_AGAIN
(HERE'S_AN_ARGUMENT))
Salida:
(!@#$%^&*
(asdfghjklm
(this_string_is_particularly_long
(...))
(123456789)))
(THIS_IS_TOP_LEVEL_AGAIN
(HERE'S_AN_ARGUMENT))
Entrada:
(-:0
(*:0
(%:0
(Arg:6)
(Write:0
(Read:0
(Arg:30))
(Write:0
(Const:-6)
(Arg:10))))
(%:0
(Const:9)
(/:0
(Const:-13)
(%:0
(Arg:14)
(Arg:0)))))
(WriteArg:22
(-:0
(Const:45)
(?:0
(Arg:3)
(Arg:22)
(Arg:0)))))
Salida:
(-:0
(*:0
(%:0
(Arg:6)
(Write:0
(Read:0
(Arg:30))
(Write:0
(Const:-6)
(Arg:10))))
(%:0
(Const:9)
(/:0
(Const:-13)
(%:0
(Arg:14)
(Arg:0)))))
(WriteArg:22
(-:0
(Const:45)
(?:0
(Arg:3)
(Arg:22)
(Arg:0)))))
()
?