Desafio
Dada uma lista de números inteiros, mostre como a classificação por gravidade seria feita.
Gravity Sort
Por gravidade, imagine os números como linhas de asteriscos. Então, tudo cai e as novas linhas serão obviamente classificadas. Vejamos um exemplo:
[2, 7, 4, 6]
:
**
*******
****
******
-------
**
****
*******
******
-------
** | 2
**** | 4
****** | 6
******* | 7
Observe que esse é apenas o tipo de bolha paralelizada.
Especificações exatas
Em cada iteração, começando na linha superior, pegue todos os asteriscos da linha que não possui um asterisco abaixo e mova-o para baixo uma linha. Continue fazendo isso até que a lista seja classificada.
Entrada
A entrada será uma lista de números inteiros estritamente positivos.
Saída
Para a saída, você deve gerar cada etapa. Você pode escolher dois caracteres ASCII imprimíveis que não sejam espaços em branco, um para ser os "asteriscos" e outro para os "traços" separados. As linhas de asteriscos devem ser separadas por uma nova linha padrão de algum tipo (por exemplo, \n
ou \r\f
). A linha de traços deve ter pelo menos a largura da linha mais larga (caso contrário, seus asteriscos cairão muito!). Uma linha de traços na parte inferior é opcional. Uma nova linha final no final é permitida. Espaços à direita em cada linha são permitidos.
Casos de teste
A entrada será representada como uma lista e a saída será listada imediatamente abaixo. Os casos de teste são separados por uma nova linha dupla.
[4, 3, 2, 1]
****
***
**
*
----
***
** *
* *
**
----
**
* *
** *
***
----
*
**
***
****
[6, 4, 2, 5, 3, 1]
******
****
**
*****
***
*
------
****
** **
****
***
* **
***
------
**
****
*** **
* *
***
*****
------
**
***
* *
*** **
****
*****
------
**
*
***
****
******
*****
------
*
**
***
****
*****
******
[8, 4, 2, 1]
********
****
**
*
--------
****
** ****
* **
**
--------
**
* **
** ****
****
--------
*
**
****
********
Por favor, sinta-se livre para corrigir meus casos de teste, se eles estiverem errados, eu os criei manualmente :)
Nota: Não produza a lista classificada no final. :)
Pontuação
Todos os seus programas serão escritos uns sobre os outros. Você não gostaria que partes do seu programa caíssem, portanto, tenha o código mais curto!