Escuché en alguna parte que una cosa que la tecnología aún no puede hacer es doblar las toallas 1 . ¡Así que ahora es tu trabajo demostrar que esa afirmación es falsa!
Dado un hilo como entrada, compuesto de rectángulos (toallas), como el siguiente, dobla cada toalla por la mitad dos veces. Por ejemplo:
+------+ +------+ +--+
| | | | | |
| | | | | |
| | -> +------+ -> +--+
| |
| |
| |
+------+
Tenga en cuenta que cuando se dobla una toalla, primero se pliega, luego de izquierda a derecha. Su programa también debe imitar este comportamiento. Observe también que en los casos de prueba, las toallas permanecen en el mismo lugar, pero dobladas.
Reglas:
- Métodos estándar de entrada / salida.
- Se aplican lagunas estándar.
- La entrada y la salida deben ser como una cadena.
- Los resultados finales están bien en la salida, siempre y cuando las toallas estén en el lugar correcto entre sí.
- Puede suponer que la longitud de cada lado de la toalla siempre será divisible por 2.
- Las toallas pasadas como entrada siempre serán rectangulares.
Las toallas siempre estarán separadas, sin embargo, pueden estar separadas por cantidades variables.
code-golf , ¡el código más corto gana!
Casos de prueba:
Input:
+------+
| |
| |
| |
| |
| |
| |
+------+
Output:
+--+
| |
| |
+--+
Input:
+--+ +--+ +--+
| | | | | |
| | | | | |
+--+ +--+ +--+
Output:
++ ++ ++
++ ++ ++
Input:
+----+
| |
| |
| |
| | ++
+----+ ++
Output:
+-+
| |
+-+
+
Input:
+--+
+--+ ++
||
||
++
Output:
++
+
+
1: Esto ha sido refutado por Geobits y Laikoni. Sin embargo, lo escuché en alguna parte.
Respuestas:
Retina , 245 bytes
Pruébalo en línea!
Nota: algunas líneas terminan en espacios. Explicación:
Elimine cualquier otra línea de cada toalla (esto funciona porque todas las toallas tienen una altura uniforme),
cambia todas las toallas desprendidas,
y arregle la parte inferior de las toallas, doblándolas efectivamente.
Dobla las toallas de ancho 2 a la derecha.
Dobla las toallas restantes a la derecha.
fuente
<-2>
es un grupo de equilibrio .NET?(?<-2>.)*
hace estallar la captura cada vez, por lo que no puede repetir más veces que la(.)*
hizo, mientras(?(2)(?!))
verifica que no quedan capturas, por lo que se repite la misma cantidad de veces.Octava con paquete de imágenes ,
277272 bytesLa entrada y la salida son matrices de caracteres 2D.
Pruébalo en línea! O verifique todos los casos de prueba: 1 , 2 , 3 , 4 . (Tenga
endfunction
en cuenta que en los casos de prueba solo es necesario separar la función del código posterior. No es necesario si la función se guarda en su propio archivo).Versión legible y explicación
fuente