Desafío
Dada una cuadrícula rectangular de caracteres ascii imprimibles como una cadena o mediante una entrada estándar, escriba una función o programa que contraiga los caracteres no espaciales en una pila en la parte inferior.
Las normas:
- La salida tiene las mismas dimensiones y caracteres que la entrada.
- Un carácter no espacial en
(row a,column b)
no puede tener un carácter espacial' '
en(a-1, b)
,(a-1,b-1)
o(a-1,b+1)
, donde las filas están numeradas desde la parte inferior. Esto tiene la consecuencia de que todas las pilas verticales deberían colapsar de lado. - Un personaje no espacial puede viajar en la mayoría de los
(initial height - final height)
lugares hacia la izquierda o hacia la derecha (ver Fig. 1). - Puede suponer que la imagen tiene suficiente espacio para colapsar sin que los caracteres se caigan de la pantalla.
Figura 1: posibles ubicaciones finales para los caracteres @#$
mostrados como x,y,z
, respectivamente.
..............
...@..........
..xxx.........
.xxxxx...#....
xxxxxxx.yyy.$.
El orden en que colapsan los personajes se puede elegir libremente. Los espacios finales no están bien, pero las nuevas líneas finales sí.
Este es el código de golf , por lo que gana la respuesta más corta en bytes.
Ejemplo
(__)
(oo)
/------\/
/ | ||
* /\---/\
~~ ~~
..."Have you mooed today?"...
Una salida posible:
--(_
/----|/|(o_)
/|/~\---~\\/o)
..."Have*you~mooed~today?"...
Respuestas:
JavaScript (ES6),
1009088 bytesRequiere que la cadena tenga al menos dos líneas y todas las líneas rellenadas a la misma longitud. Salida para la imagen de ejemplo:
Tenga en cuenta que si trata de mover elementos hacia la derecha si es posible,
*
no cayó entre elHave
y elyou
.Editar: ahorrado 10% gracias a @ETHproductions. Ahorró otros 2 bytes gracias a @DanielIndie.
Retina 0.8.2 , 50 bytes
Pruébalo en línea! Un enfoque ligeramente diferente a mi respuesta de JavaScript, utiliza un grupo de equilibrio para que coincida con un espacio debajo del carácter no espacial; el
(?<-1>)?
permite que el espacio sea una columna a la izquierda, mientras que el.?
permite que el espacio sea una columna a la derecha.Retina , 40 bytes
Pruébalo en línea! Puerto de mi respuesta de JavaScript. La
0L$
etapa atómica toma la entrada y sustituye las dos longitudes en la segunda línea, lo que da como resultado el comando que realmente realiza el reemplazo, que luego se evalúa en la entrada original por la~
etapa compuesta.fuente
\n
con una nueva línea literal paral=s.search`\n`
para ahorrar unos pocos bytes.f=
requiere para la recursión, pero aún me ahorra 2 bytes, ¡gracias!Python 2, 298 bytes
Toma la entrada como una lista de cadenas (una por línea)
Ejemplo: Entrada:
Salida:
fuente
C, 252 bytes
Código de prueba sin golf:
Resultado de la prueba:
fuente
Algodoo (no competidor)
Entrada: ejemplo degenerado utilizado.
Runnning: gravedad y rebote predeterminados.
Salida: la precisión se puede ajustar a través de la configuración de Fricción y Densidad de los objetos.
Algodoo es lógico programable .
fuente
JavaScript, 286 bytes
Ejemplos
Salida:
Otro ejemplo:
Salida:
Función sin golf
fuente
c>" "
dondec
representa el personaje que está probando.