Вызов
Дайте список целых чисел, покажите, как будет выполняться гравитационная сортировка.
Гравитационная сортировка
В гравитационном виде представьте числа в виде звездочек. Затем все падает, и новые строки будут явно отсортированы. Давайте посмотрим на пример:
[2, 7, 4, 6]
:
**
*******
****
******
-------
**
****
*******
******
-------
** | 2
**** | 4
****** | 6
******* | 7
Обратите внимание, что это в значительной степени просто параллельная пузырьковая сортировка.
Точные характеристики
На каждой итерации, начиная с верхней строки, возьмите каждую звездочку из строки, у которой под ней нет звездочки, и переместите ее вниз на строку. Продолжайте делать это, пока список не отсортирован.
вход
На входе будет список строго положительных чисел.
Выход
Для вывода вы должны вывести каждый шаг. Вы можете выбрать любые два непечатаемых печатных символа ASCII, один из которых будет «звездочкой», а другой - разделителем «тире». Ряды звездочек должны быть разделены стандартной новой строкой (например, \n
или \r\f
). Ряд черточек должен быть не меньше ширины самого широкого ряда (иначе ваши звездочки могут упасть слишком далеко вниз!). Ряд черточек в самом низу необязателен. Завершающий перевод строки в конце разрешен. Пробелы на каждой строке разрешены.
Тестовые случаи
входные данные будут представлены в виде списка, а выходные данные будут перечислены ниже. Контрольные примеры разделяются двойной новой строкой.
[4, 3, 2, 1]
****
***
**
*
----
***
** *
* *
**
----
**
* *
** *
***
----
*
**
***
****
[6, 4, 2, 5, 3, 1]
******
****
**
*****
***
*
------
****
** **
****
***
* **
***
------
**
****
*** **
* *
***
*****
------
**
***
* *
*** **
****
*****
------
**
*
***
****
******
*****
------
*
**
***
****
*****
******
[8, 4, 2, 1]
********
****
**
*
--------
****
** ****
* **
**
--------
**
* **
** ****
****
--------
*
**
****
********
Пожалуйста, не стесняйтесь исправлять мои тесты, если они ошибочны, я сделал их вручную :)
Примечание. Не выводите отсортированный список в конце. :)
счет
Все ваши программы будут написаны друг на друге. Вы не хотели бы, чтобы части вашей программы рухнули, поэтому убедитесь, что у вас самый короткий код!
Ответы:
Pyth , 27 байт
Попробуйте онлайн!
источник
Perl 5 , 118 байт
115 байт кода +
-pla
флаги.Попробуйте онлайн!
Это кажется слишком длинным. Но опять же, работать с многострочными строками с помощью регулярных выражений обычно непросто.
Я использую
Y
вместо*
и_
вместо-
.источник
Октава, 104 байта
* Требуется пакет изображений.
Попробуйте онлайн!
Объяснение:
источник
Python,
203199 байтисточник
map
возвращается массив, поэтому вам не нужно его разбивать на части. Вы хотели бы назначить переменную, чтобы'\n'.join
помочь вам восполнить недостатокsep='\n'
, но, вероятно, он все еще короче.Japt ,
6962 байта-7 байт благодаря @Shaggy
Изучал Джапта и хотел попробовать более сложную задачу. Вывод с
x
s и"
s вместо звездочек и тире; принимает входные данные в виде массива чисел. Предполагается, что сортировка будет завершена в течение несколькихinput.length
шагов; поправьте меня, если это не так.Попробуйте онлайн!
объяснение
источник
R ,
210205 байтПопробуйте онлайн!
читает в списке из stdin; разделенные
+
символами вместо-
. Это намного дольше, чем я думал. Использует тот факт, что сравнение'*'>'+'
оценивается,FALSE
но'*'>' '
естьTRUE
, по крайней мере, на TIO (на моей машине, которую я использовал,'='
которая выглядела немного лучше).Умудрился сыграть в гольф на 5 байт по сравнению со всеми техниками, которые я изучил с момента написания оригинального ответа.
Попробуйте онлайн!
источник
Haskell ,
213211208 байтПопробуйте онлайн!
источник
Javascript, 274 байта
Пример кода:
источник