Вы вводите список / последовательность / вектор / массив из 5-255 натуральных чисел, не обязательно уникальных. Вы можете предположить, что любой входной формат является наиболее подходящим, и что каждое целое число (а также количество целых чисел) выбирается случайным образом равномерно из диапазона 5-255.
Цель состоит в том, чтобы вывести тот же список в том же (или эквивалентном) формате, но отсортированный в порядке возрастания (неубывания). Обычное раннее упражнение в изучении языка. Представления должны включать:
Ответ, который работает правильно и достигает цели; а также
Второй ответ, который содержит досадную ошибку. Между 1% и 10% времени выходные данные должны быть списком в правильном формате и содержать правильные элементы, но в неправильном порядке (любой порядок, кроме правильно отсортированных). В остальное время программа должна работать правильно и достигать цели.
Два ответа должны иметь расстояние Левенштейна один; то есть мы можем получить одно из другого, удалив один байт или добавив один байт или изменив один байт.
Подсчет очков, как обычно, в Code-Golf (на основе более короткого из двух ваших ответов), с обычными лазейками, запрещенными.
Бонус 10% (уменьшение до оценки), если надоедливая ошибка не зависит от ввода, то есть повторное использование того же ввода не воспроизводит ошибку (за исключением случаев от 1% до 10% времени).
источник
[5,5,5]
как невозможно произвести неправильный порядокОтветы:
Python 3 , 36 байт
Баг-бесплатная версия, 37 байт
Попробуйте онлайн!
Раздражающая версия, 36 байт
Попробуйте онлайн!
Это зависит от ввода и, следовательно, не претендует на бонус.
Вероятность сбоя составляет около 2%. Сбой, когда входная длина меньше 10.
В сочетании с ответом LyricLy это дает 34 байта:
источник
or1
интерпретируется как имя переменной и вызывает синтаксическую ошибку.05AB1E , 5 * 0,9 = 4,5 байта
Рабочий раствор
Попробуйте онлайн!
объяснение
Решение, содержащее ошибку
Дает неправильное решение 10% времени (независимо от ввода).
Попробуйте онлайн!
объяснение
То же, что и рабочее решение, за исключением того, что он переворачивает список, если выбранное число истинно.
источник
100F
и нижний колонтитулы,},
которые помогают нам визуализировать результат функции, вызываемой на входе несколько раз. Это показывает нам, что рабочее решение всегда возвращает правильные результаты, в то время как ошибочное решение имеет некорректный вывод.Желе , 7 * (100% - 10%) = 6,3 байта
Попробуйте онлайн!
Багги версия:
Попробуйте онлайн!
В обеих ссылках есть тестовая программа, которая будет запускать код 100 раз, каждый раз со списком, который вы даете в качестве аргумента, и затем возвращать результаты.
Вероятность каждой входной длины:
Таким образом, для длины 1 существует вероятность 0%, для длины 2 5%, для длины 3 8,83̅%, для длины 4 9,583̅% и т. Д. До длины ∞, которая имеет 10% вероятности.
источник
0.1 - 0.1/(length!)
.Ṣ⁵X’¤¡
иṢ⁵X¤¡
должно работать тоже: глючная версия возвращает список несортированным <10% времени, и, учитывая, что входные данные выбраны равномерно случайным образом, они должны работать, экономя 2 байта.¹
чтобы сохранить 1 байт (число правил число байтов = более короткий); также есть посторонний комбинирующий оверлей после второго6
в6.6̅%
.¹
», потому что тогда он не будет сортироваться вообще 10% времени.Python 3, оценка
5857 - 10% = 51,3Сохраненный байт благодаря овс.
Без ошибок версия, 57 байт
Попробуйте онлайн!
Версия с ошибками, 57 байт
Попробуйте онлайн!
Я решил попробовать решение, которое использует бонус. Это не побеждает другой ответ Python, но мне было весело думать об этом.
источник
C 71 * 0,9 = 63,9 байта
Без ошибок:
Попробуйте онлайн!
Багги:
Попробуйте онлайн!
источник
Groovy , 31 байт
Ошибка решения:
Рабочий раствор:
Оператор индекса Groovy (
getAt
метод) возвращает ноль для списков, если индекс больше размера. Поэтому, если есть девятый элемент, он останется таким же, как и отсортированный список, но если нет (вероятность 1.99203187%), он будет перевернут. Однако всегда будет первый элемент, потому что размер списка всегда больше или равен 5. Таким образом, 0 вa[0]
можно поменять местами с 1, 2, 3 или 4.источник
Wolfram Language (Mathematica) , 29 байт
Это 26,1 байта с бонусом, но я не совсем уверен, что получу бонус; на уже отсортированном вводе обе версии всегда выдают отсортированный вывод.
Без ошибок версия (29 байт)
Попробуйте онлайн!
Раздражающая версия (30 байт)
Попробуйте онлайн!
источник
PHP, 70 байт
Баг-бесплатная версия, 70 байт
Попробуйте онлайн!
Ошибка версии, 70 байт
Попробуйте онлайн!
Версия с ошибками сортируется в обратном порядке 10% времени (на основе генератора случайных чисел).
источник
-r
(-2 байта). присоединение подчеркиванием; это должно быть эквивалентно (-2 байта). использоватьasort
вместоsort
(-1 байт).unset($argv[0]);(rand(1,9)?sort:rsort)($argv);echo join(_,$argv);
(также 65 байтов)Python 2 , 26 байт
Багги:
Попробуйте онлайн!
Выходы путем изменения списка ввода . Сортирует список только в том случае, если его длина составляет не менее 10. Не
9
содержащая ошибок версия заменяет символ a0
на сортировку всегда.За работой:
Попробуйте онлайн!
Мы можем изменить функцию, чтобы она возвращала список по стоимости 4 байта, всего 30 байтов:
Попробуйте онлайн!
25 байт с некоторыми отрезками правил:
Попробуйте онлайн!
Выводит функциональный литерал, который либо сортирует, либо является идентификатором, используя его
id(0)
в качестве случайного источника. Изменить>
на>=
исправить или0
на~0
.источник
Шелуха , 6 байт
Багги версия:
Попробуйте онлайн!
Правильная версия:
Попробуйте онлайн!
объяснение
Эти программы полностью детерминированы. Фактически, Husk в настоящее время вообще не поддерживает случайные числа.
Я утверждаю, что выходные данные программы с ошибками не сортируются с вероятностью от 1% до 2%. Обозначим через N = 251 количество возможных значений элементов. Вероятность того, что случайный список длины L не содержит кратных 9, равна ((NK) / N) ^ L , где K - количество значений, кратных 9 (в нашем случае K = 28 ). Общая вероятность - это среднее значение для 5 ≤ L ≤ 255 , что составляет около 1,98%. Некоторые из этих списков являются ложными срабатываниями, поскольку они уже отсортированы. Вероятность сортировки случайного списка длины L не более ((N + N * (N-1) / 2) / N ^ 2) ^ ⌊L / 2⌋ : если мы разбиваем список на куски длины 2, каждый изКуски ⌋L / 2⌋ должны быть отсортированы. Общая вероятность сортировки списка ограничена средним значением для 5 ≤ L ≤ 255 , что составляет около 0,30%. Таким образом, вероятность того, что функция вернет несортированный список, находится между 1,67% и 1,98%.
источник
↓9
вместоV¦9
, и сократить его только9
для правильной версии? Это будет всегда приводить к сбою на коротких входах и всегда корректно работать на более длинных, но поскольку длина входного сигнала соответствует случайному распределению, он все равно должен быть верным ответомБаш , 26 байт
Правильная версия
Попробуйте онлайн! или проверьте вероятности .
Ошибка версии
Попробуйте онлайн! или проверьте вероятности .
Принимает ввод в виде разделенных новой строкой чисел. Использует встроенную переменную
RANDOM
, которая всегда возвращает (псевдо) случайное число в диапазоне от 0 до 32767 . Использование%20
результатов примерно на 5% отказов (спасибо @Titus за разъяснения проблем с%10
).Эта случайность означает, что частота отказов не зависит от входных данных, но для этого требуется, чтобы входной массив содержал хотя бы одно число с более чем одной цифрой, поскольку выходные данные об ошибках отсортированы лексикографически.
Альтернативная версия, 27 байт
Исправленная версия заменяет
+
собой%
. Попробуйте онлайн или попробуйте .источник
%10
него больше шансов вернуться0
к7
чем8
или9
, так что вероятность неудачи выше 10%;)%20
как ваш ответ.Pyth , оценка 8 * 0,9 = 7,2
Первый фрагмент (правильный):
Попробуй это здесь!
Второй фрагмент (прослушанный):
Попробуй это здесь!
Сохранено два байта (и 1,8 балла) благодаря isaacg !
источник
.S
вернуть входные данные без изменений означает, что в этих (редких) случаях наши шансы получить неправильный ответ снижаются с 10% до 0%, так что в среднем они все еще находятся в правильном диапазоне. Конечно, 10 копий тоже подойдут..S
может также вернуть сам ввод (что не будет проблемой), но я имел в виду, что.S
может также вернуть отсортированный список .O.uSNT.S
JavaScript (ES6), 24 байта
Безошибочная версия (по крайней мере, для целых чисел в диапазоне 0-2147483647, поэтому все в указанном диапазоне):
Багги версия:
Зависит от а) алгоритма сортировки движка и б) списка входных данных, содержащего два значения в неправильном порядке, которые отличаются на 1. (Если вероятность этого оказывается слишком низкой, то значение
1
можно увеличить, но к тому времени, когда вы получите к8
этому просто не будет ничего сортировать в диапазоне5-255
.)источник
PHP, 62 байта
Вдохновленный решением Джо (и я только что заметил: это порт Джастина Маринера ):
рабочая (сортировка по возрастанию):
багги (около 5% вероятности убывания):
Бежать с
-nr
источник
Pushy , 9 байт - 10% = 8,1
Ошибка решения:
Попробуйте онлайн!
Рабочее решение:
Попробуйте онлайн!
Код ошибки делает следующее:
Фиксированный код просто меняется
0
на1
. Какrandom(1, 10)
никогда0
, оператор if никогда не будет выполнен.источник
MATL ,
7 * 0,9 = 6,36 * 0,9 = 5,4 байтаБагги версия:
Попробуйте онлайн!
Объяснение:
Баг-бесплатная версия:
Попробуйте онлайн!
Объяснение:
источник
Jq 1,5 , 42 байта
детская коляска
Рабочая (удалить =)
Предполагая, что длины линий одинаковы в диапазоне [5,255], около 7% вызовут ошибку
Попробуйте онлайн!
источник
J, 22,5 байта (25 байтов - 10%)
с ошибкой:
без ошибок:
Попробуйте онлайн!
источник
R 30 * .9 = 27 байт
(Глючит)
Попробуйте онлайн!
(не глючит)
Версия с ошибками сортируется в
decreasing=T
10% случаев, выборка производится из равномерного (0,1) распределения. Версия без ошибок всегдаdecreasing=F
источник
Рёда , 42 байта - 10% = 37,8
Без ошибок:
Багги:
Попробуйте онлайн!
Это использует
currentTime
функцию для создания случайных чисел. Кажется, что их распределение немного различается между машинами. Соотношение20//19
может быть скорректировано, чтобы получить разные результаты без потери байтов (если оно не меньше99//98
).источник
октава , 36 * 0,9 = 32,4 байта
Багги версия:
Попробуйте онлайн!
Баг-бесплатная версия:
Попробуйте онлайн!
Это сортирует вектор, а затем сдвигает все числа на один вправо, если случайное число меньше 0,1.
источник
Java 8,
4534,2 (5038 - 10%) байтовНормальная версия:
Объяснение:
Попробуй это здесь.
Ошибка версии (
5139 байт):LD 1:
1
добавлено.Объяснение:
Попробуй это здесь.
источник
JavaScript, 25 * 0,9 = 22,5
вход х
источник