Las cajas ASCII se ven así:
++ +---+ +------+ +---+ +---+
++ | | | | | | | |
| | | | | | | |
+-+ | | | | | | | |
+-+ | | | | | | +---+
+---+ | | | |
+--+ | | | | ++
| | | | | | ||
| | +------+ | | ||
+--+ | | ||
+---+ ||
||
+-----+ ||
+------------+ | | ++
| | | |
| | | |
+------------+ +-----+
Aquí hay algunos ejemplos de los mismos cuadros ASCII, implosionados:
++ +- -+ +- -+ +- -+ +- -+
++ | - | | - - | | - | | - |
| | | -- | | | | |
+-+ | | | | " | - |
+-+ | - | || | | +- -+
+- -+ | | | |
+--+ | -- | | | ++
| | | - - | " ||
| | +- -+ | | ||
+--+ | - | | |
+- -+ | |
-- ||
- - +- -+ ||
+- - - -+ | - - | ++
| -- -- | | = |
| -- -- | | - - |
+- - - -+ +- -+
- -
--
Aquí hay un enlace a todos estos cuadros de casos de prueba en un formato más fácil de copiar. El orden es todas las entradas seguidas de todas las salidas en el mismo orden.
Su objetivo es tomar un cuadro ASCII como entrada y devolver el cuadro implosionado. Las reglas de implosión son:
- "+" nunca cambia; tampoco "-" o "|" directamente adyacente a "+"
- A partir de las esquinas, el "-" y "|" muévete hacia adentro un espacio más que el mismo personaje más cerca de la esquina. Si un "-" y "|" alguna vez se movería al mismo lugar, ninguno se movería.
- Si un "-" y "-" se mueven al mismo lugar, coloque un "=" en ese lugar. Si un "|" y "|" mover al mismo lugar, poner un "en ese lugar. Estos cuentan como dos de sus respectivos personajes en el mismo lugar moviéndose en direcciones opuestas.
- Dos "-" o dos "|" pueden pasar uno al lado del otro, como se ve en el ejemplo inferior izquierdo.
- Si la caja es lo suficientemente delgada, comenzará a expandirse hacia afuera de la misma manera, siempre alejándose del lado en el que comenzó.
- El resultado debe ser simétrico a través de la línea central en las direcciones x e y (ignorando las nuevas líneas); esto incluye espacios, por lo que el resultado puede necesitar ser rellenado con espacios para satisfacer eso.
Detalles de la regla:
- Este es el código de golf, por lo que gana el programa más corto en bytes.
- Se aplican lagunas estándar.
- Puede suponer que cada línea termina en un carácter de nueva línea.
- Los únicos caracteres en la cadena de entrada serán "+", "-", "|", "" y "\ n" (nueva línea), y su cadena de salida debe seguir las mismas reglas, con la adición de "=" y "como posibles personajes.
- Opcionalmente, puede tener una nueva línea final al final de la última línea.
- El cuadro ASCII más pequeño que necesita manejar es el ejemplo superior izquierdo. Cada caja ASCII tendrá exactamente 4 "+" s, exactamente en sus esquinas.
- Deberá manejar cajas de tamaño
m x n
para cualquier número enterom,n
tal que2<=m,n<256
(el mayor tamaño de cadena posible255*(255+1)
) - Puede suponer que siempre obtendrá un único cuadro ASCII válido como entrada.
||
en ese ejemplo debe ser un"
o algo ..."
? ¿Supongo que"
solo aparece en 3 de ancho o mayor?"
iría? ¿A la izquierda o a la derecha? No puede ser ambos, pero tampoco puede serlo porque el resultado es simétrico.Respuestas:
Python 2 ,
591555545527525496436351334333303 bytesPruébalo en línea!
EDITAR : Mi antiguo método primero implosionó la parte superior e inferior, y luego la izquierda y la derecha. En cambio, podemos implosionar la parte superior, rotar 90 grados y hacerlo 4 veces. Además, estaba usando el código fácil de usar, este requiere que la entrada esté en la forma
[['+', '-', '-', '-', '-', '-', '+'], ['|', ' ', ' ', ' ', ' ', ' ', '|'], ['|', ' ', ' ', ' ', ' ', ' ', '|'], ['|', ' ', ' ', ' ', ' ', ' ', '|'], ['+', '-', '-', '-', '-', '-', '+']]
que es fea pero más corta para el programa: P (Gracias a Phoenix por atrapar eso)Créditos a Leaky Nun por el código de encabezado en el enlace TIO utilizado para convertir entradas legibles por humanos en entradas legibles por computadora.
-85 bytes gracias a Leaky Nun!
-17 bytes cambiando de implosión superior a implosión izquierda, lo que permite almacenar toda la fila en una variable y modificarla. ¡Gracias a Leaky Nun por la sugerencia!
-1 byte cambiando las cosas para eliminar un espacio.
-30 bytes gracias a Leaky Nun!
fuente
s[0]
yS[0]
a variables para guardar unos pocos bytesp=s[0]
yP=S[0]
conp=z(s[0])
yP=z(S[0])
, respectivamente, y luego reemplazar todas las apariciones dez(p)
withp
y allz(P)
withP
para guardar 18 bytes.(z(s)-1)/2-p
conz(s)/2-.5-p
y(p-1)/2-z(s)
conp/2-.5-z(s)
para guardar 2 bytes más.C (clang) , 693 bytes
Nuevas líneas agregadas para facilitar la lectura. Los dos primeros son obligatorios pero el resto no.
Gracias por el gran reto! Fue bastante complicado, pero todavía me divertí mucho.
Esto toma la entrada como argumentos de línea de comandos y salidas a STDOUT una cadena de varias líneas del cuadro implosionado. Como siempre, los consejos de golf son muy apreciados.
Pruébalo en línea!
fuente