Целью этого Code Golf является создание программы, которая сортирует список строк (в порядке возрастания), без использования какого-либо встроенного метода сортировки (например, Array.Sort()
в .NET, sort()
в PHP, ...). Обратите внимание, что это ограничение исключает использование встроенного метода, который сортирует массив по убыванию, а затем переворачивает массив.
Некоторые детали:
Ваша программа должна запросить ввод, и этот ввод представляет собой список строк, содержащих только строчные буквы ASCII
a-z
, разделенные запятыми без пробелов. Например:code,sorting,hello,golf
Выходными данными должен быть заданный список строк, но отсортированный в порядке возрастания, по-прежнему без пробелов. Например:
code,golf,hello,sorting
Руби
765451 символовисточник
x=gets.scan /\w+/
к (16 символов)
Вероятно, на самом деле не соответствует духу проблемы. В k нет встроенного оператора сортировки .
<x
возвращает список индексов элементов в x в отсортированном порядке.источник
САС, 135
Основано на моей предыдущей записи сортировки
источник
Рубин, 99 символов ( сортировка гномов )
Это едва ли превосходит мою реализацию сортировки пузырьков:
Рубин,
110104101 символов ( Bubble sort )Это делает
list.length
итерации, потому что сценарий наихудшего случая беретlist.length - 1
итерации, и еще одна действительно не имеет значения, и экономит 2 символа.Просто для удовольствия, версия Quicksort:
Рубин, 113 символов ( Quicksort )
источник
Хаскелл, 141
По крайней мере, это ... вроде как эффективно.
источник
m=minimum
s[]=[]
s l=m l:(s$l\\[m l])
(замените строки 2–4 на эти строки).init
Не представляется необходимыми , поскольку есть ни замыкающий,
, ни завершающий символ новой строки.t s=let(a,b)=span(/=',')s in a:t(drop 1 b)
может быть сокращено с помощью шаблона охранника, используя(>',')
и капельного пространство между1 b
:t s|(a,b)<-span(>',')s=a:t(drop 1b)
.x#(y:r)|y<x=y:x#r;x#r=x:r
короче. Он может быть использован непосредственноt
и, поскольку он не используется(\\)
иintercalate","
может быть замененtail.((',':)=<<)
, импорт может быть отброшен. Все вместе 101 байт: попробуйте онлайн!vba, 165
источник
Split
.c=","
и вызовc
дважды фактически увеличивает количество байтов в этом случае, добавляя 7 байтов к числу байтов, тогда как при использовании «,» дважды получит 6 байтов. Вы можете уменьшить свой байт-код, взяв ввод непосредственно из вызова sub (sub q(s)
) и предположив, что s имеет тип option \ string. Вы можете потерять еще один байт, изменивFor i=1 to
наfor i=1To
. Вы можете потерять 5 байтов, изменивDebug.Print Join...
наDebug.?Join...
Scala, 122 байта
Как однострочник (88 байт):
(это будет сортировать список, просто делая
list.permutations.fil...
)В качестве программы (122 байта):
Более длинная версия, если вы хотите, чтобы она читалась со стандартного ввода.
Это повторяет все перестановки данного списка, пока он не наткнется на отсортированный. Это не быстро, так как для сортировки списка из 10 элементов требуется около 12 секунд, а для 11 элементов - более минуты.
Элементы [Редактировать] должны быть уникальными или
<
могут быть заменены на<=
. Также извините за некро.источник
JavaScript 128
ДЕМО скрипка .
Я ищу способ устранить
b
.источник
[]
вокруг части после,?
чтобы сохранить 2SyntaxError: missing : in conditional expression
потому что?:;
(сокращениеif/else
), как предполагается, принимает только две части кода для выполнения (то естьtrue?b++:b--;
), используя[
,]
является хаком, я все еще не уверен, почему это работает, я думаю, что его понимают как пустой массив объявление, как размещение случайной строки или числа в качестве отдельной команды. но вы все еще можете свободно высказываться.?:
приоритет оператора ниже, чем,
{
,}
и это не сработало - я получаюSyntaxError: missing : after property id
. что касается приоритета, круглые скобки всегда первые. я все еще хотел бы upvote ....PHP 83 байта
О (п 3 ) осуществление выбора вида. Это
Ó
персонаж 211; немного запятая.Пример использования:
источник
Python 3 (80 символов)
Вот вариант оператора while равной длины:
источник
Mathematica
6656Некоторые другие решения без встроенного символа
Ordering
:Богосорт:
8474Пузырьковая сортировка:
9383Другое решение, столь же неэффективное, как bogosort:
8272источник
Python 3.5+, 73 байта
Это черпает вдохновение из ответа Стивена Румбальски, но использует понимание списка вместо цикла времени; количество итераций берется из скопированного списка,
l
поэтому для этого требуются дополнительные обобщения распаковки и Python 3.5источник
р
Bubble Sort:
122118 символовБогосорт: 100 знаков
источник
Perl, 159
У этого никогда не было шансов на победу, но я решил поделиться им, потому что мне понравилась логика, даже если это беспорядок :) Идея, стоящая за этим, состоит в том, чтобы преобразовать каждое слово в целое число (сделано с помощью функции ord ), мы сохраняем число в качестве ключа в хэше, а строку - в качестве значения, а затем мы все больше перебираем все целые числа (в данном случае 1..10 ** 100) и таким образом сортируем наши строки.
ПРЕДУПРЕЖДЕНИЕ . Не запускайте этот код на своем компьютере, поскольку он перебирает триллионы + целых чисел. Если вы хотите проверить это, вы можете снизить верхний предел диапазона и ввести недлинные строки. Если по какой-либо причине это противоречит правилам, пожалуйста, дайте мне знать, и я удалю запись!
источник
JS: 107 символов - Bubble Sort
Я посмотрел на ответ @ tryToGetProgrammingStraight и попытался улучшить его, но в итоге реализовал его немного по-другому.
источник
Java, 134 байта
Метод, который реализует сортировку Gnome.
источник
Swift, 101 байт
Ungolfed:
источник
𝔼𝕊𝕄𝕚𝕟, 24 символа / 30 байтов (неконкурентный)
Try it here (Firefox only).
Используя сортировку выбора!
объяснение
В основном рекурсивно удаляет и помещает минимум из входных данных в другой массив.
источник
Цейлон (Богосорт), 119
Попробуйте онлайн!
Я нашел
permutations
метод и, таким образом, получил Bogosort (неслучайный вариант).Отформатировано и прокомментировано:
Без форматирования и разбора он становится всего 90 байтов:
Попробуйте онлайн!
источник
Perl 5 , 77 байт
Попробуйте онлайн!
Простая пузырьковая сортировка.
источник
ruby -plaF,
70 байтO (n), если вы делаете вид, что изменение размера и сжатие массива бесплатны (это очень не бесплатно).
Мы создаем глубоко и неравномерно вложенный массив
o
, помещая строку с байтами b 1 , b 2 ... b n в массив в позиции o [b 1 ] [b 2 ] ... [b n ]. Результат выглядит как[,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,["a,",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, [,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, ["abc,"], ["abd,"], ["abe,"]], ["ac,"], ["ad,"]],, ["c,"]]
Затем мы выравниваем и выводим его.
источник
Tcl , 211 байт
Попробуйте онлайн!
источник