Мне нужно перестать думать о пустяковых именах
Ваша задача состоит в том, чтобы создать как можно больше фрагментов (программ, которые имеют встроенный ввод и вывод), функций или полных программ, которые будут сортировать любые целочисленные массивы вашего языка в порядке возрастания, но для каждой программы вам разрешено только использовать символы в ASCII (или кодовую страницу вашего языка, если она прямо указана как не ASCII), которые не использовались в предыдущих программах.
Это пример ответа (отдельные программы разделены символами новой строки):
Derp
ASdFGHJKLAAA
qwEEERtyRty
В этом (вымышленном языке), мой первый ответ Derp
, который израсходован D
, e
, r
и p
. Во второй программе мне не разрешено использовать этот символ снова, но я могу использовать столько символов, сколько захочу. То же самое с третьей программой и так далее.
Каждая программа должна принимать массив целых чисел, что-то вроде этого (см. Примеры ввода / вывода для правильных стилей ввода / вывода):
[3 4 -2 5 7 196 -44 -2]
И он должен выводить элементы в массиве в виде массива в порядке возрастания:
[-44 -2 -2 3 4 5 7 196]
Ваша оценка будет общая сумма представлений. Если есть связь, выигрывает самый низкий счетчик (минимальное количество байтов в вашем коде)!
Правила для программ:
- Все материалы должны работать правильно в одной языковой версии (так
Python 2 != Python 3
). - Ваши представления могут быть фрагментами, функциями или полными программами. Вам даже разрешено смешивать и сопоставлять их - однако вы должны сказать, что есть что, и предоставить ссылки на рабочие материалы.
- Пожалуйста, предоставьте онлайн-ссылки на все решения, если это возможно.
- Все материалы должны принимать массив (или строку, разделенную любым символом) в качестве входных данных и выводить отсортированный массив (в форме массива вашего языка или в виде
{any character}
строки с -delimited). - Вам не разрешается использовать любые символы за пределами ASCII (или кодовой страницы вашего языка).
Например, это допустимые входы / выходы:
[1 2 3 4] (Clojure style arrays)
[1, 2, 3, 4] (Python style arrays)
1 2 3 4 5 (Space-delimited - separated by spaces)
1#2#3#4#5 ("#"-delimited - separated by "#" characters)
1\n2\n3\n4\n (newline-delimited)
Спецификации для ввода:
- Вам гарантировано, что массив содержит только целые числа. Однако могут быть отрицательные числа, и числа могут повторяться бесконечно.
источник
Ответы:
Желе , 10 программ, 65 байт
Есть некоторые неизбежные совпадения с ответом @ Lynn's Jelly . Кредиты на идею богосорта идут к ней.
Попробуйте онлайн! или проверить уникальность .
Как они работают
источник
Желе, 8 программ
Последняя программа действительно раздражает ...
Если я могу удалить
œṡ
из<;0œṡ0⁸ṁjµ/
, есть также это странно один:²SNr²ZFœ&
. Помощь приветствуется.источник
Roots → polynomial, polynomial → roots
это гений!U
, свободен05AB1E , оценка = 6
05AB1E использует кодировку CP-1252 .
Спасибо Кевину Круйссену за программу 4.
Спасибо Райли за вдохновение к программе 6.
Программа 1
Попробуйте онлайн!
Программа 2
Попробуйте онлайн!
Программа 3
Попробуйте онлайн!
Программа 4
Попробуйте онлайн!
Программа 5
Попробуйте онлайн!
Программа 6
Попробуйте онлайн!
источник
ϧ
Может быть использован для дополнительной оценки. Попробуй это здесь.œ
решение, но я даже не знал оß
:)€Ý逤
будет работать, если¤
вместо этого получит значение, если просто получит его.Брахилог , оценка =
45Программа 1 - случайная сортировка
Мы перемешиваем и проверяем, что обратный список не увеличивается. Если нет, мы повторяем рекурсивно.
Программа 2 - сортировка перестановок
Выведите первую перестановку, которая не уменьшается.
Программа 3 - Встроенная
Порядок.
Программа 4 - Встроенная
Заказ по маркировке. Поскольку целые числа в списке уже зафиксированы, это делает так же, как
o
.Программа 5 - Мин. Печать
Вот объяснение этому чудовищу Природы:
источник
RecursionError: maximum call stack size exceeded
JavaScript, оценка
12Удвоил счет благодаря @ETHproductions, который напомнил мне о побегах строк
Фрагмент 1 (21 байт, символы
\ ,-.=>289`Facehilnorstux
)Фрагмент 2 (9117 байт, символы
(+)[!]
)Вы можете проверить обе версии в консоли вашего браузера. Первая версия - это просто функция, вторая версия - это фрагмент кода, для которого необходимо добавить скобки и аргумент.
Примеры
Как?
Первый фрагмент вызывает метод sort для массива, который вы передаете. По умолчанию метод сортировки сортирует лексикографически, что плохо для целых чисел (особенно многозначных отрицательных чисел). Таким образом, мы должны передать ему обратный вызов в виде функции стрелки, которая берет два элемента и вычитает последний из первого. В зависимости от полученного значения два элемента переставляются: если он меньше 0,
a
появится раньшеb
, если он больше 0,a
появится позжеb
, а если он равен 0, оба элемента окажутся рядом друг с другом.Второй фрагмент - это не что иное, как закодированная версия первого фрагмента, и он использует тот факт, что в JavaScript он
object.function()
равенobject["function"]()
. Он также использует пустые массивы,!
операторы и преобразование чисел для генерации всех видов строк, в которых можно найти необходимые символы для имени функции. Затем скобки используются еще раз, чтобы получить символ с определенным индексом в строке, и все эти символы объединяются, что приводит к следующему коду JavaScript:[]["fill"]
равно[].fill
, чей["constructor"]
этоFunction
объект. Затем мы вызываем это с помощью строки (которая должна оцениваться при вызове функции), которая является первой функцией, но обратите внимание, что аргумент был заменен наthis
. Чтобы установить значениеthis
аргумента, нам нужно вызвать функцию этой функции, а именно["call"]
. В обычном JavaScript вы бы написали это так:источник
Function`return a=>a.sort\x28\x28a,b\x29=>a-b\x29`
например, но без использования символов, которые вы уже использовали'
и выполнив, например,'('
вместо того, что JSF генерирует этот символ. (также используйтеf
иt
в качестве переменных вместоa
иb
,b
буквально стоит около 3000 символов)V , оценка
3, 4Это было действительно забавное испытание! К счастью, в vim есть встроенная функция сортировки, иначе это было бы невозможно. К сожалению, поскольку V / vim основаны на строках, для сортировки по числовым значениям необходим аргумент. Так я звоню
Сортировать по числовому значению
n
,Сортировать по шестнадцатеричному значению
x
иСортировать по значению с плавающей точкой
f
Небольшое примечание: когда я пишу что-то вроде
<esc>
или<C-r>
, это фактически однобайтовый. Он представляет непечатаемые символы, и, к сожалению, V сильно зависит от непечатаемых символов, этот метод делает все проще. Ссылки TIO имеют-v
флаг, который заставляет интерпретатор V читать их, как если бы они были символами, которые они представляют.Программа 1, 2 байта
Попробуйте онлайн!
Это вызывает специфический V функцию сортировки
Программа 2, 10 байт
Это просто вызывает «сортировку» напрямую. Единственная интересная вещь об этом - то, что мы делаем это из
ex
режима, который является странным режимом, который подражает текстовому редактору 'ex', прапрадеду V.vi
является ярлыком дляvisual
команды, используемой для выхода из режима ex. Это требует завершающей новой строки.Попробуйте онлайн!
Программа 3, 14 байт
Попробуйте онлайн!
Хорошо, вот где объяснения начинают становиться немного странными. Если мы можем создать текст
sor x
, мы можем удалить его и вставить в текущую команду с помощью<C-r><register-name>
. Поэтому мы введем его заглавными буквами.Программа 4, 19 байт
Попробуйте онлайн!
И вот здесь объяснения начинают становиться очень странными. Как и в прошлый раз, мы создадим команду в обычном режиме, чтобы мы могли использовать разные ключи.
источник
CJam, оценка 4
Программа 1: Встроенная
Программа 2: Eval'ed Встроенный
36 - значение ASCII
$
.Программа 3: сортировка перестановок
Программа 4: Минимальные значения
Объяснение этого неземного чудовища:
источник
(+
вместо,1m<
если хотите.<
в этом фрагменте, поэтому лучше придерживаться1m<
Japt , оценка = 4
Программа 1
Попробуйте онлайн!
Программа 2
Попробуйте онлайн!
Программа 3
Попробуйте онлайн!
Программа 4
Попробуйте онлайн!
источник
s)$.sort(...
, но не уверен, что это полезно.O
и$
были использованы. Я открыт для предложений, если вы можете придумать какие-либо другие способы сортировки! :)Октава, 2 балла
Трудно конкурировать с esolangs, но здесь идет:
Я впечатлен, если кто-то победит это.
unique
может использоваться для сортировки значений, но это удалит дубликаты. Чтобы вставить дубликаты, вам понадобятся круглые скобки, и они интенсивно используются в пузырьковой сортировке. Вам также нужно@
, что тоже используется.Номер 1:
Это довольно просто: создайте анонимную функцию, назначенную переменной
ans
.Назовите это следующим образом:
ans([-5, 3, 0, -2, 100])
. Он не работает на TIO, но он работает на октаву-онлайн .Номер 2:
Это просто реализация пузырьковой сортировки без использования символов
@sort
. Мы не можем сделать это функцией из-заo
, и мы не можем использоватьinput
из-заt
. Поэтому мы застряли сeval
.eval(['a=inpu',116,'("");']);
оценивает:,a=input("");
что мы можем использовать для ввода нашего входного вектора. Остальное - сортировка пузырьков без использованияfor
илиmod
. Обратите внимание, что это должно быть сохранено в сценарии и вызвано из GUI / CLI. Вы не можете скопировать и вставить его из-заinput("")
(он будет использовать оставшуюся часть кода в качестве ввода, таким образом, с треском провалится).источник
Haskell (lambdabot), 3 функции
Я использую среду lambdabot, чтобы избежать множества
import
утверждений. Дажеsort
потребностиimport Data.List
. По умолчанию lambdabot импортирует несколько модулей. Помимо отсутствующегоimports
, это стандартный код Haskell в соответствии с нашими правилами.Попробуйте онлайн! ,
Функция 1
Функция библиотеки из
Data.List
. Здесь нечего сказать.Функция 2
Функция
v
реализует вставку-сортировку.Я использую шаблонные охранники, чтобы избежать
()
параметров. Сравнитеvv v|vvv:vvvv<-v=...
сvv(vvv:vvvv)=...
.Первая строка, function
vv
- это вспомогательная функция для создания пустого списка. С ним мне не нужно[]
писать буквальные пустые списки. Более читабельно:(==:)
is insert, которая вставляет элемент в отсортированный список, так что результирующий список все еще сортируется. Более читабельно:(=:)
это уменьшить. Более читабельно:И, наконец,
v
что уменьшает входной список, начиная с[]
:Функция 3
sort
от функции 1 делает большинство из списка-прогулочных функций (fold
,scan
,until
) нет. Необходима рекурсия,=
которая используется в функции 2. Единственная оставшаяся опция - использование комбинатора с фиксированной точкойfix
. Я начал скоторый является сортировкой выбора. Превращение его в бессмысленное (я не могу использовать лямбда-выражения
\f x ->...
, потому-
что оно используется шаблонами в функции 2) дает:return
Запрещаетсяpure
создавать одноэлементные списки из значения со значением (то же самое для ), поэтому я должен создать свою собственную функцию:\x -> map (\y -> x+0*y) [1]
или без точкиflip map[1].(.(0*)).(+)
. Заменаreturn
урожайностиисточник
MATL , 3 программы
Программа 1
Это просто использует встроенную функцию с неявным вводом и отображением.
Попробуйте это в MATL онлайн .
Программа 2
Это продолжает генерировать случайные перестановки входных данных до тех пор, пока все последовательные различия результата не будут отрицательными (это bogosort , как отмечено @cz ). Время выполнения является недетерминированным, и его среднее значение очень быстро увеличивается с размером ввода (а именно, 𝒪 ( n! ) Для массива размера n со всеми различными записями).
Попробуйте это в MATL Online .
Программа 3
Это цикл, который вычисляет минимум массива, удаляет все элементы, равные этому значению, и выполняет остальные операции. Это делается столько раз, сколько вводится размер. Если не все записи во входных данных различны, некоторые из итераций будут бесполезными (но безвредными), поскольку массив уже будет очищен.
Попробуйте это в MATL онлайн .
источник
зернышко , 4 программы
Программа 1 - встроенная
Сниппет; предполагает список в
x
.(
SN
для сортировки числовой)Программа 2 - фильтр перестановок
Сниппет; предполагает список в
y
. Очень медленно для входов длиннее, чем около 7 предметов.Программа 3 - Eval
Сниппет; предполагает список в
z
.Программа 4 - MergeSort
Анонимная функция; вызов со списком в качестве аргумента (например,
({...} [1 2])
илиf:{...} (f [1 2])
.Ungolfed:
источник
PowerShell , 2
Попробуйте онлайн!
Это фрагмент, который работает (например) в PowerShell, как REPL. Ссылка TIO показывает использование.
sort
Является псевдонимом дляSort-Object
командлета.Попробуйте онлайн!
Команды PowerShell нечувствительны к регистру, поэтому мы можем использовать как
sort
для одного, так иSORT
для другого. Это берет входной массив, сортирует его на месте, а затем выводит его.источник
Ruby, 2 программы
Первое - прямолинейное:
Второе - сложная часть:
источник
J
Программа первая: 3 байта
как в
/:~ 3,1,2,1
выходах1 1 2 3
Попробуйте онлайн!
ПРИМЕЧАНИЕ в J, отрицательным числам предшествует _ не - так что вы можете попробовать 4, _10,56, _333 и т. Д.
Программа вторая: 5 байтов
источник
Try it online
предмет ссылки на веб - страницы на TIO, чтобы связать страницу в ответ вы можете сделать это:[displayed text](link)
.:
и~
встречаются в обоих из них.PHP 7, 2 программы
Обе программы можно играть в гольф больше.
Программа 1, 254 байта, символы
! "$&+.01:;=>?[]adeginoprtv
Пузырьковая сортировка. Используется
goto
для создания цикла, как того требуют встроенные циклы()
.Программа 2, 155 байт, символы
#%'(),-67ACEFINORTUYZ^_{|}~
IF(...){}
избегает использования;
. Основной код закодирован XOR, потому что$
он уже использовался в предыдущей программе. Код:источник