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!
Odpowiedzi:
Pyth , 27 bajtów
Wypróbuj online!
źródło
Perl 5 , 118 bajtów
115 bajtów kodu +
-pla
flagi.Wypróbuj online!
To wydaje się trochę za długie. Ale znowu radzenie sobie z ciągami wielowierszowymi za pomocą wyrażenia regularnego zwykle nie jest łatwe.
Używam
Y
zamiast*
i_
zamiast-
.źródło
Oktawa, 104 bajty
* Wymaga pakietu obrazu.
Wypróbuj online!
Wyjaśnienie:
źródło
Python,
203199 bajtówźródło
map
tablica natychmiast zwraca, więc nie musisz jej ustawiać. Chciałbyś jednak przypisać zmienną, aby'\n'.join
pomóc ci zrekompensować braksep='\n'
, ale prawdopodobnie nadal jest ona krótsza.Japt ,
6962 bajtów-7 bajtów dzięki @Shaggy
Ucząc się Japt, chciałem wypróbować bardziej skomplikowane wyzwanie. Wyprowadza za pomocą
x
si"
si zamiast gwiazdek i myślników; przyjmuje dane wejściowe jako tablicę liczb. Zakłada, że sortowanie zostanie zakończone w kilkuinput.length
krokach; popraw mnie, jeśli tak nie jest.Wypróbuj online!
Wyjaśnienie
źródło
R ,
210205 bajtówWypróbuj online!
czyta na liście ze standardowego wejścia; oddzielone
+
znakami zamiast-
. To dużo dłużej, niż bym się spodziewał. Wykorzystuje fakt, że porównanie'*'>'+'
ocenia,FALSE
ale'*'>' '
dotyczyTRUE
przynajmniej TIO (na mojej maszynie użyłem,'='
która wyglądała nieco lepiej).Udało mi się zagrać w golfa o 5 bajtów w dół od wszystkich technik, których nauczyłem się od czasu napisania oryginalnej odpowiedzi.
Wypróbuj online!
źródło
Haskell ,
213211208 bajtówWypróbuj online!
źródło
JavaScript, 274 bajty
Przykładowy fragment kodu:
źródło