Wyzwanie
Biorąc pod uwagę listę liczb całkowitych, pokaż, jak zostanie wykonane sortowanie grawitacyjne.
Sortowanie grawitacyjne
W sortowaniu grawitacyjnym wyobraź sobie liczby jako rzędy gwiazdek. Wtedy wszystko spada, a nowe rzędy zostaną oczywiście posortowane. Spójrzmy na przykład:
[2, 7, 4, 6]
:
**
*******
****
******
-------
**
****
*******
******
-------
** | 2
**** | 4
****** | 6
******* | 7
Zauważ, że jest to właściwie tylko równoległe sortowanie bąbelkowe.
Dokładne specyfikacje
Na każdej iteracji, zaczynając od górnego rzędu, weź każdą gwiazdkę z rzędu, który nie ma gwiazdki pod nią, i przesuń ją w dół o rząd. Rób tak, dopóki lista nie zostanie posortowana.
Wkład
Dane wejściowe będą listą liczb całkowitych ściśle dodatnich.
Wydajność
W przypadku danych wyjściowych należy wyprowadzić każdy krok. Możesz wybrać dowolne dwa znaki ASCII drukowalne bez białych znaków, jeden jako „gwiazdki”, a drugi jako „myślniki”. Rzędy gwiazdek muszą być oddzielone standardowym rodzajem nowej linii (np. \n
Lub \r\f
). Rząd myślników musi mieć co najmniej szerokość najszerszego rzędu (w przeciwnym razie Twoje gwiazdki spadną zbyt głęboko!). Rząd myślników na samym dole jest opcjonalny. Końcowy znak nowej linii na końcu jest dozwolony. Końcowe spacje w każdej linii są dozwolone.
Przypadki testowe
dane wejściowe będą reprezentowane jako lista, a następnie dane wyjściowe zostaną wymienione bezpośrednio poniżej. Przypadki testowe są oddzielone podwójnym znakiem nowej linii.
[4, 3, 2, 1]
****
***
**
*
----
***
** *
* *
**
----
**
* *
** *
***
----
*
**
***
****
[6, 4, 2, 5, 3, 1]
******
****
**
*****
***
*
------
****
** **
****
***
* **
***
------
**
****
*** **
* *
***
*****
------
**
***
* *
*** **
****
*****
------
**
*
***
****
******
*****
------
*
**
***
****
*****
******
[8, 4, 2, 1]
********
****
**
*
--------
****
** ****
* **
**
--------
**
* **
** ****
****
--------
*
**
****
********
Prosimy o poprawienie moich przypadków testowych, jeśli są błędne, zrobiłem je ręcznie :)
Uwaga: Nie wysyłaj posortowanej listy na końcu. :)
Punktacja
Wszystkie twoje programy będą pisane jeden na drugim. Nie chciałbyś, aby części twojego programu upadały, więc upewnij się, że masz najkrótszy kod!