Introducción
Sísifo estaba teniendo algunos problemas en el trabajo últimamente. Parece que nunca hace nada, y le encantaría encontrar una solución a este problema.
Su empleo actual requiere rodar una roca cuesta arriba. Por lo general, hace bien su trabajo, pero cada vez que está cerca de la cima de la colina, cae de nuevo.
Se está realmente frustrado con su trabajo y quiere resolver el problema científicamente haciendo que una computadora simule la roca rodando cuesta abajo.
Da la casualidad de que Sísifo no es particularmente bueno en la programación, ¿entonces tal vez puedas ayudarlo?
El reto
Después de esta tonta introducción, vamos a los negocios. Su programa recibirá una ilustración de la colina y la roca que se parece a esto:
#o
##
###
######
########
Donde #representa una parte de la colina y orepresenta la roca.
Ahora debe implementar un programa que mueva la capa de roca 1 hacia abajo. Por ejemplo, el resultado de lo anterior debe ser:
#
##o
###
######
########
Si hay un área horizontalmente pareja, la colina simplemente rueda horizontalmente, así que ...
o
########
... esto solo haría que la piedra ruede de lado.
o
########
Si hay un área vertical, la roca cae un escalón, así que ...
#o
#
#
#####
... cedería ...
#
#o
#
#####
También recibirá el ancho y el alto de la imagen, respectivamente, en una línea sobre la imagen. Entonces, en total, nuestra entrada de muestra se vería así:
10 5
#o
##
###
######
#########
(Tenga en cuenta que los espacios en blanco aquí son espacios. Seleccione el texto y vea lo que quiero decir).
Algunos detalles
- Cuando la roca ya está en la última línea al ejecutar el programa, puede optar por finalizar el programa o generar la entrada sin cambios.
- La colina solo baja
Su programa debe formatear la salida exactamente igual que la entrada (incluidas las dimensiones), por lo que si canaliza la salida del programa a sí mismo, calcula el siguiente paso.
Puede suponer que siempre hay un camino hacia abajo, por lo que la entrada donde la ruta está "bloqueada" puede causar un comportamiento indefinido
Puede suponer que siempre hay un espacio en la última línea. La roca debe "descansar" allí, así que después de llamar al programa varias veces, siempre conectando su salida en sí misma, debe terminar con la roca en la última línea, colocando donde estaba el espacio anteriormente.
Puede aceptar la entrada en cualquier forma que desee (stdin, archivo, ...). Debe publicar el programa ENTERO (para que todas las variables preinicializadas cuenten como código).
Las líneas se terminan con
\n.Puede obtener algunas entradas de ejemplo aquí (¡asegúrese de copiar los espacios correctamente!)
Este es el código de golf , por lo que gana la presentación de trabajo con la menor cantidad de bytes .
El ganador será elegido el 26 de julio de 2014. Después de eso, puede publicar soluciones, pero no puede ganar.
Si tiene alguna pregunta, hágamelo saber en los comentarios.
¡Feliz golf!
#s, por lo que hay un espacio al final porque el ancho es 10. En este caso (después de algunas iteraciones) la roca se colocaría donde está el espacio en blanco (por lo tanto, en la parte inferior -esquina derecha).
