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!
Respostas:
Pitão , 27 bytes
Experimente online!
fonte
Perl 5 , 118 bytes
115 bytes de código +
-pla
sinalizadores.Experimente online!
Parece um pouco longo demais. Mas, novamente, lidar com cadeias de linhas múltiplas com regex geralmente não é fácil.
Estou usando em
Y
vez de*
e em_
vez de-
.fonte
Oitava, 104 bytes
* Requer pacote de imagem.
Experimente online!
Explicação:
fonte
Python,
203199 bytesfonte
map
retorna uma matriz imediatamente para que você não precise dividi-la. Você gostaria de atribuir uma variável para'\n'.join
ajudá-lo a compensar a faltasep='\n'
, mas provavelmente ainda é mais curto dessa maneira.Japt ,
6962 bytes-7 bytes graças a @Shaggy
Aprender japonês e queria experimentar um desafio mais complicado. Saídas com
x
s e"
s em vez de asteriscos e traços; recebe entrada como uma matriz de números. Assume que a classificação será concluída eminput.length
etapas; me corrija se esse nunca for o caso.Experimente online!
Explicação
fonte
R ,
210bytes 205Experimente online!
lê na lista de stdin; separados por
+
caracteres em vez de-
. É muito mais longo do que eu pensava que seria. Aproveita o fato de a comparação ser'*'>'+'
avaliada como,FALSE
mas'*'>' '
éTRUE
, pelo menos no TIO (na minha máquina que usei'='
que parecia um pouco melhor).Consegui reduzir 5 bytes de todas as técnicas que aprendi desde que escrevi a resposta original.
Experimente online!
fonte
Haskell ,
213211208 bytesExperimente online!
fonte
Javascript, 274 bytes
Exemplo de trecho de código:
fonte