Alice es pasante en una empresa que utiliza Brainfuck como idioma principal para el desarrollo tanto del lado del cliente como del lado del servidor. Alice acaba de escribir su primer código y está un poco nerviosa mientras se prepara para su primera revisión de código.
Alice quiere que su código tenga el formato correcto y se vea bien, pero no tiene tiempo para leer la guía de estilo de código de la compañía de 328 páginas, por lo que decidió formatearlo como un cuadrado perfecto . Por desgracia, la longitud del código puede ser insuficiente para formar un cuadrado, por lo que decidió dejar un espacio rectangular en el medio. Los espacios deben estar perfectamente centrados y tan cerca del cuadrado como sea posible.
Ejemplos
++++++ +++++ +++++ +++++ +++++ +++++
++++++ +++++ +++++ + ++ ++ ++ +++++
++++++ ++ ++ + + + ++ + +
++++++ +++++ +++++ +++++ ++ ++ +++++
++++++ +++++ +++++ +++++ +++++ +++++
Perfect OK Acceptable Unacceptable No way! Nope.
Escribe un programa o una función para ayudar a Alice. Dado el código de Alice como una cadena de entrada, emite un código formateado correctamente como se describe a continuación si es posible. Si el formateo es imposible, muestra emoji llorando :~(
.
Este es el código de golf, por lo que las respuestas se puntúan en bytes con menos bytes como objetivo.
Restricciones
- Su programa o función debe tomar una sola cadena como entrada y generar una o más líneas de texto (o devolver una cadena de varias líneas o una matriz de cadenas, si implementa una función).
- La cadena de entrada puede contener caracteres ASCII, incluidos espacios en blanco.
- Todos los espacios en blanco en la entrada deben ignorarse. No deben contar para la longitud del código y no deben usarse en la salida.
- La cadena de entrada contiene al menos un carácter que no es un espacio en blanco.
- El código formateado debe tener los mismos caracteres que no sean espacios en blanco en el mismo orden que en el código de entrada.
- El código formateado debe ser un cuadrado perfecto, es decir, todas las líneas deben tener la misma longitud, y el número de líneas debe ser igual a la longitud de las líneas.
- El código formateado puede contener un espacio en el medio.
- Solo se pueden usar caracteres de espacio (código ASCII 32) en el espacio.
- La brecha (si está presente) debe ser rectangular.
- Cada línea de código formateado debe contener al menos un carácter que no sea un espacio en blanco, es decir, el ancho del espacio debe ser estrictamente menor que el ancho cuadrado (el espacio 5x1 es inaceptable para el cuadrado 5x5).
- El espacio debe ser horizontal, es decir, el ancho del espacio debe ser mayor o igual que la altura del espacio.
- La brecha debe estar perfectamente centrada.
- En consecuencia, la paridad del ancho y la altura del espacio debe ser igual a la paridad del ancho cuadrado (por ejemplo, para un espacio cuadrado de 5x5 puede ser 1x1, 3x1 o 3x3).
- Si es posible, salida cuadrada sin espacio en absoluto.
- En el caso de múltiples soluciones, elija una con el espacio más cercano al cuadrado, es decir, la diferencia entre el ancho del espacio y la altura del espacio es mínima (por ejemplo: el espacio 10x10 es más preferible que 8x6, y 8x6 es más preferible que 6x2).
- Si todavía hay un empate, elija una solución con un área de separación mínima (por ejemplo, la separación 2x2 es más preferible que 4x4).
- Si es imposible formatear el código, salida
:~(
. - Nueva línea después de la última línea es opcional.
- [Nuevo] Puede suponer con seguridad que cualquier personaje con código inferior a 33 es un espacio en blanco. Espero que te ayude a jugar golf.
Pruebas
Input Output Code length Comment
+++++++++ +++ 9 Alice is lucky,
+++ her code perfectly fits a square.
+++
++++++++ +++ 8 Though code length isn't enough for a square,
+ + a small gap fixes it.
+++
++++++ :~( 6 No luck, code cannot be formatted.
Hello, Hell 12 Input may contain any ASCII characters,
World! o , but whitespaces in input should be ignored.
W o
rld!
+++++ + +++++ +++++ 22 Gap is not required to be a square,
+++++ + +++++ +++++ it can be a rectangle.
+ +
+++++
+++++
+++ + +++ ++++++++ 28 There exists another solution:
+++ + +++ + + 6x6 square with 4x2 gap,
+++ + +++ + + but in Alice's opinion square gap
+++ + +++ + + makes code more readable.
+ +
+ +
+ +
++++++++
Pruebas difíciles
This must be Thism 24 7x7 with 5x5 gap looks good,
5x5 with 1x1 ustbe but 5x5 with 1x1 gap is better,
gap. 5x 5w because gap area is smaller.
ith1x
1gap.
+++ +++ +++ :~( 18 In case you tried 5x5 square
+++ +++ +++ with 7x1 gap ;)
Recursos
Para ahorrar espacio, puede encontrar código de muestra y casos de prueba adicionales en tio.run
[Nuevo] Puede echar un vistazo a la tabla de soluciones aceptadas para entradas de hasta 100 caracteres . Cambié ancho y alto porque parece parecer más intuitivo.
Inspirado en: un cuadrado de texto
Cambios
Se agregaron 2 pruebas, se corrigió el error en el código de muestra.
Se agregó una tabla de soluciones hasta 100, se agregó una aclaración de espacios en blanco.