Добрый вечер, гольфисты!
Ваша задача состоит в том, чтобы полностью перебрать ряд чисел.
вход
Точно 100 целых чисел будет передано в вашу программу. Ваша программа может принять ввод либо в виде файла, либо через стандартный ввод. Каждое целое число будет разделено символом новой строки.
Эти 100 целых чисел будут варьироваться от минимальных до максимальных значений целого числа со знаком на выбранном вами языке.
Там не будет повторяющихся значений. Значения могут быть упорядочены, неупорядочены или частично упорядочены - ваша программа должна иметь возможность обрабатывать каждый случай.
Выход
Выходными данными должно быть каждое из 100 целых чисел, полностью не отсортированных, каждое из которых должно быть разделено символом новой строки. Вывод может быть через стандартный вывод или в файл.
Полностью не отсортированный означает, что никакое значение не является смежным с любым значением, к которому оно было бы примыкало, если бы список был полностью отсортирован в упорядоченной последовательности.
Гол
1 очко за персонажа, и выигрывает самая низкая оценка. Существует бонус -100 для любого решения, не использующего встроенные или библиотечные функции сортировки. Существует бонус -20 для любых решений, не использующих встроенные функции случайных чисел.
Я попытался определить этот вопрос максимально полно. Если у вас есть какие либо вопросы, пожалуйста спрашивайте. Если у вас есть какие-либо комментарии о том, как я мог бы сделать лучше в следующий раз, пожалуйста, дайте мне знать.
Fore!
Ответы:
GolfScript (оценка 27 - 120 = -93)
Примечание: это
$
ссылка на элемент в стеке. Есть сортировка, но это делается с помощью пузырьковой сортировки, закодированной вручную.Спасибо Говарду за -90 => -92; и Илмари, который вдохновил -92 => -93.
источник
$
- вот почему я упомянул, что$
в программе нет сортировок (это зависит от контекста). Большая часть программы (28 из 42 символов) определяет функцию^
; первая версия, использующая встроенную сортировку, была всего 14 символов.2/{~p}%n*
.2/zip~+n*
а.);\+2%n*
также выполнить трюк для того же числа символов, что и версия @ Howard's. Увы, мне пока не удалось найти ничего более короткого.Python -26
(94-120): новый, грубый подход. Продолжайте вставлять самые низкие элементы в новый список, чтобы отсортировать элементы, а затем выполните итерации:
Python -13
(107-120): Первый подход: удаляет четыре младших элемента за один раз, затем выводит эти четыре в другом порядке:
источник
t=l=[]
иexec't+=[input()];'*100
сэкономит вам несколько символовexec
оператор для более чем одного цикла.t=l=[]
t и l указывают на один и тот же объект, и он не работает. Пропускать скобкиexec
приятно.t=t+[input()];
, это создает новый объект каждый раз. И вы можете даже сделать цикл печати в ехесе заявления:';i+=1;print l[i*3%100]'*100
.%3
и избегание повторения100
.С: 11 (131 - 120)
Программа читает из stdin и выполняет простую сортировку вставки, после чего печатает n-е вместе с th n + 50-м числом, как и многие другие решения.
источник
Mathematica
-56 44 4(95-120) = -25Редактировать :
Эта версия не использует ни встроенных функций для сортировки списков, ни функций рандомизации.
источник
Sort
не встроенная функция сортировки?J, -63 (57-120) символов
Поскольку все остальные идут по самописному маршруту сортировки ...
Не использует ни функцию случайных чисел, ни встроенную сортировку.
Для сортировки входных данных используется простая рекурсивная сортировка выбора.
источник
Рубин 1.9, -59
(61-120)
Рекурсия! На самом деле этот, в отличие от моих предыдущих попыток Ruby, не сортирует список независимо от их первоначального порядка.
Предыдущие попытки
Симпатичный однострочник, теперь использующий встроенную сортировку для правильной работы:
Первый - необязательно отменять последние 4 значения:
источник
Python 2: 90 символов
ленивая попытка, но только для начала
источник
Python 48 = (148 - 100)
Не проверял это, потому что он не гарантирован (или не может) работать в любое разумное количество времени, но теоретически должен работать, учитывая бесконечное время.
источник
x=map(input,['']*100)
[]
s, просто любая строка символов.Питон 27 (147 - 100 - 20)
Примечание: перед пробелами
if L[i]>...
должна быть табуляция, но, видимо, они отображаются как пробелы в блоке кода.источник
R=range
вы можете сохранить 5 символов.a=map(input,['']*100)
Perl 5: 95 - 120 = -25 символов
Считая следующую командную строку:
источник
Рубин: -50 (70 символов - 120)
Я сделал то же самое, что и многие другие ответы: итеративно удаляю max и min из списка ввода и добавляю их к выводу. Однако я понял, что если 2 числа по обе стороны от медианы являются последовательными, выходные данные будут неправильными (потому что эти 2 последовательных числа появятся вместе в конце выходных данных). Чтобы это исправить, я поворачиваю «несортированный» список вправо на 1 элемент:
Или, чтобы работать с произвольным количеством входов (используя только 4 символа):
Примечание. Некоторые ответы на Ruby с меньшим количеством символов уже опубликованы, но эти решения не решали медианную проблему (и / или предполагали отсортированный входной список).
источник
J 37 - 100 = -63
Не использует сортировку (хотя использует ранжирование вверх) Использует случайные числа.
Объяснение:
источник
Брахилог , 22 байта - 120 = -98
Попробуйте онлайн!
Ссылка TIO имеет только восемь целых чисел, а не сто, потому что это так ужасно медленно, что не может больше обрабатывать в течение 60 секунд. Причина этого заключается в том, что, помимо прочего, вместо того, чтобы реализовать какой-то простой, но нормальный алгоритм сортировки для обязательного бонуса, я для краткости использовал то, что составляет детерминированный bogosort:
p≤₁
отслеживает каждую перестановку входных данных, пока не найдет один который не уменьшается. Хотя более важной причиной, вероятно, было бы то, что он использует подобную степень грубой силы, чтобы найти вывод, и что он пересчитывает отсортированную версию каждый раз ... Я пытался проверить это на фактическом вводе размера 100, но я не уверен, сколько дней это займет.В целом лучшая версия:
Брахилог , 14 байтов - 20 = -6
Попробуйте онлайн!
Это игнорирует устаревшие требования к вводу / выводу для краткости и не учитывает бонус -100, поэтому его можно протестировать без суперкомпьютера (хотя на момент написания этого документа он работал только на 20 элементах в течение нескольких минут, и это до сих пор не дал мне ничего).
источник
Forth (gforth) , 79 - 120 = -21 байт
Попробуйте онлайн!
Игнорировать устаревшие требования к вводу и принимает ввод как адрес в памяти, где хранятся числа.
объяснение
Перебирает все числа от 0 до 99. Для каждого числа (n):
Остальное (четное):
Вывести новую строку
Код Объяснение
источник