Introducción
La mayoría de los golfistas de código aquí agregan explicaciones a sus presentaciones, por lo que es más fácil entender lo que está sucediendo. Por lo general, las líneas de código van a la izquierda y la explicación correspondiente a la derecha con algún tipo de separador. Para que se vea bonito, los separadores están todos en la misma columna. Además, el texto de explicación largo generalmente se ajusta a la siguiente línea, por lo que los lectores no tienen que desplazarse horizontalmente para leer todo.
Sin embargo, cuando quieres editar esta explicación porque hiciste algunos campos de golf locos, a menudo terminas pasando tiempo para hacer que tu explicación vuelva a ser bonita. Dado que esta es una tarea muy repetitiva, desea escribir un programa para esto.
El reto
Dadas varias líneas de código con explicación y un separador, genera el código bien formateado con explicación.
Ejemplo
Entrada
shM-crz1dc4. "ANDBYOROF # z = input
rz1 # convierte la entrada a mayúsculas
cd # entrada dividida en espacios
c4. "ANDBYOROF # crea una lista de las palabras de una cadena empaquetada que debe ignorarse
- # filtra esas palabras
hM # solo toma la primera letra de todas las palabras
s # únelos en una cadena
Salida
shM-crz1dc4. "ANDBYOROF # z = input
rz1 # convierte la entrada a mayúsculas
cd # entrada dividida en espacios
c4. "ANDBYOROF # crea una lista de las palabras de una cadena empaquetada que será
# ignorado
- # filtra esas palabras
hM # solo toma la primera letra de todas las palabras
s # únelos en una cadena
Una cookie para el primero que puede descubrir qué hace este código.
El algoritmo de formateo
- Encuentre la línea de código más larga (excluyendo la explicación y los espacios entre el código y el separador).
- Agregue 5 espacios después de esta línea de código y agregue el separador correspondiente con explicación. Esta es ahora la línea de referencia.
- Ajuste cada dos líneas a esta línea de referencia, de modo que los separadores estén todos en la misma columna.
- Ajuste todas las líneas que tengan más de 93 caracteres en una nueva línea de la siguiente manera:
- Encuentre la última palabra cuyo final está en la columna 93 o inferior.
- Tome todas las palabras después de esta y envuélvalas a una nueva línea con el separador principal y el espacio correcto. El espacio entre esas dos palabras debe eliminarse, por lo que la primera línea termina con un carácter de palabra y la segunda línea comienza con una después del separador.
- Si la línea resultante aún tiene más de 93 caracteres, haga lo mismo nuevamente hasta que cada línea tenga menos de 94 caracteres.
Notas
- Una palabra consta de caracteres que no son espacios en blanco. Las palabras están separadas por un solo espacio.
- La palabra envoltura siempre es posible. Esto significa que ninguna palabra es tan larga que haría imposible el ajuste.
- La entrada solo contendrá ASCII imprimible y no tendrá espacios en blanco al final
- El separador solo aparecerá una vez por línea.
- Si bien la explicación puede tener una longitud ilimitada, el separador y el código solo pueden tener una longitud máxima combinada de
93 - 5 = 87caracteres. Los 5 caracteres son los espacios entre el código y el separador. El código y el separador siempre tendrán al menos un carácter. - La entrada puede contener líneas vacías. Esos nunca contendrán ningún carácter (excepto una nueva línea si toma la entrada como cadena multilínea). Esas líneas vacías también deben estar presentes en la salida.
- Cada línea tendrá un código, un separador y una explicación. Las excepciones son líneas vacías.
- Puede tomar la entrada en cualquier formato razonable, siempre que no se procese previamente. Deje claro en su respuesta cuál usa.
- La salida puede ser una cadena multilínea o una lista de cadenas.
Reglas
- Función o programa completo permitido.
- Reglas predeterminadas para entrada / salida.
- Se aplican lagunas estándar .
- Este es el código de golf , por lo que gana el conteo de bytes más bajo. Tiebreaker es una presentación anterior.
Casos de prueba
El formato de entrada aquí es una lista de cadenas que representan las líneas y una sola cadena para el separador. Ambos están separados por una coma. La salida es una lista de cadenas.
['shM-crz1dc4. "ANDBYOROF # z = input', '', 'rz1 # convierte la entrada a mayúsculas', 'cd # divide la entrada en espacios', 'c4." ANDBYOROF # crea una lista de las palabras de un paquete cadena que se ignorará ',' - # filtra esas palabras ',' hM # solo toma la primera letra de todas las palabras ',' s # únelas en una cadena '], "#" -> [' shM-crz1dc4 . "ANDBYOROF # z = input ',' ',' rz1 # convierte la entrada a mayúsculas ',' cd # divide la entrada en espacios ',' c4." ANDBYOROF # crea una lista de las palabras de una cadena empaquetada que será ' , '# ignorado', '- # filtra esas palabras ',' hM # solo toma la primera letra de todas las palabras ',' s # únelas en una cadena '] ['codecodecode e # Explicación', 'sdf dsf sdf e # A Muy muy muy muy muy muy muy muy muy largo largo largo largo largo largo largo largo largo largo largo explicación larga y larga y larga', '', 'algunos más codee # y alguna explicación más '], "e #" -> [' codecodecode e # Explicación ',' sdf dsf sdf e # A Muy muy muy muy muy muy muy muy muy largo largo largo largo largo largo ',' e # largo larga, larga, larga, larga, larga explicación y se vuelve más larga ',' e # y más larga ',' ',' algo más de código e # y alguna explicación más ']
¡Feliz codificación!
length of the longest code-line + 5. Esto también se aplica a las líneas que solo contienen una explicación, ya que fueron ajustadas.