Reto
Dada una lista de enteros, muestre cómo se haría la clasificación por gravedad.
Ordenar por gravedad
En gravedad, imagine los números como filas de asteriscos. Entonces, todo cae, y las nuevas filas obviamente se ordenarán. Veamos un ejemplo:
[2, 7, 4, 6]
:
**
*******
****
******
-------
**
****
*******
******
-------
** | 2
**** | 4
****** | 6
******* | 7
Tenga en cuenta que esto es más o menos una clasificación de burbujas paralela.
Especificaciones exactas
En cada iteración, comenzando desde la fila superior, tome cada asterisco de la fila que no tenga un asterisco debajo y muévalo hacia abajo una fila. Sigue haciendo eso hasta que la lista esté ordenada.
Entrada
La entrada será una lista de enteros estrictamente positivos.
Salida
Para la salida, debe generar cada paso. Puede elegir dos caracteres ASCII imprimibles que no sean espacios en blanco, uno para ser los "asteriscos" y otro para ser los "guiones" de separación. Las filas de asteriscos se deben separar con una nueva línea estándar de algún tipo (p . Ej. \n
O \r\f
). La fila de guiones debe ser al menos del ancho de la fila más ancha (de lo contrario, ¡los asteriscos caerán demasiado!). Una fila de guiones en la parte inferior es opcional. Se permite una nueva línea al final. Se permiten espacios finales en cada línea.
Casos de prueba
la entrada se representará como una lista, luego la salida se enumerará inmediatamente debajo. Los casos de prueba están separados por una doble línea nueva.
[4, 3, 2, 1]
****
***
**
*
----
***
** *
* *
**
----
**
* *
** *
***
----
*
**
***
****
[6, 4, 2, 5, 3, 1]
******
****
**
*****
***
*
------
****
** **
****
***
* **
***
------
**
****
*** **
* *
***
*****
------
**
***
* *
*** **
****
*****
------
**
*
***
****
******
*****
------
*
**
***
****
*****
******
[8, 4, 2, 1]
********
****
**
*
--------
****
** ****
* **
**
--------
**
* **
** ****
****
--------
*
**
****
********
No dude en corregir mis casos de prueba si están equivocados, los hice a mano :)
Nota: No envíe la lista ordenada al final. :)
Tanteo
Todos sus programas se escribirán uno encima del otro. No querrás que se caigan partes de tu programa, ¡así que asegúrate de tener el código más corto!
Respuestas:
Pyth , 27 bytes
Pruébalo en línea!
fuente
Perl 5 , 118 bytes
115 bytes de código +
-pla
banderas.Pruébalo en línea!
Parece un poco largo. Pero, de nuevo, lidiar con cadenas multilínea con expresiones regulares generalmente no es fácil.
Estoy usando en
Y
lugar de*
y en_
lugar de-
.fuente
Octava, 104 bytes
* Requiere paquete de imágenes.
Pruébalo en línea!
Explicación:
fuente
Python,
203199 bytesfuente
map
devuelve una matriz de inmediato para que no necesite salpicarla. Sin embargo, querrá asignar una variable para'\n'.join
ayudarlo a compensar la faltasep='\n'
, pero probablemente aún sea más corto de esa manera.Japt ,
6962 bytes-7 bytes gracias a @Shaggy
Aprendí Japt y quise probar un desafío más complicado. Salidas con
x
sy"
s en lugar de asteriscos y guiones; toma la entrada como una matriz de números. Asume que la clasificación se completará eninput.length
pasos; corrígeme si ese no es el caso.Pruébalo en línea!
Explicación
fuente
R ,
210205 bytesPruébalo en línea!
lee en la lista de stdin; separados por
+
caracteres en lugar de-
. Es mucho más largo de lo que hubiera pensado que sería. Aprovecha el hecho de que la comparación se'*'>'+'
evalúaFALSE
pero'*'>' '
esTRUE
, al menos en TIO (en mi máquina que usé,'='
que se veía un poco mejor).Logré jugar golf 5 bytes por debajo de todas las técnicas que aprendí desde que escribí la respuesta original.
Pruébalo en línea!
fuente
Haskell ,
213211208 bytesPruébalo en línea!
fuente
Javascript, 274 bytes
Fragmento de código de ejemplo:
fuente