Нить ментов
В этой теме ваша задача - создать рекурсивную программу / функцию для генерации любых целочисленных рядов. Грабители попытаются найти более короткое нерекурсивное решение в теме Грабителей .
Краткий обзор задачи
Во многих языках рекурсивные функции могут значительно упростить задачу программирования. Тем не менее, синтаксические издержки для правильной рекурсии могут ограничивать ее применимость в коде-гольфе.
В копы будут создавать программу или функцию , принимая одно целое число n
, которое будет генерировать первые n
записи целочисленного ряда, используя только рекурсии 1 . Они также должны убедиться, что существует более короткий нерекурсивный способ генерации последовательности, чтобы пометить их запись как безопасную.
В разбойниках будут пытаться найти более короткую программу или функцию на том же языке, генерируя то же целое ряд, не используя рекурсии 2 .
Если представление полицейских не будет взломано в течение десяти дней (240 часов), полицейский докажет, что на самом деле можно было использовать более короткий нерекурсивный подход, раскрыв свое собственное решение. Затем они могут пометить свое представление как безопасное .
Победителем соревнования полицейских станет самое короткое (согласно code-golf ) представление на основе рекурсии, помеченное как безопасное.
Победителем конкурса грабителей станет грабитель, взломавший большинство решений.
1: он должен быть только рекурсивным в синтаксисе; Вам не нужно беспокоиться, например, об оптимизации хвостового вызова.
2: опять же, не рекурсивный в синтаксисе; поэтому вы не можете опубликовать рекурсивное решение и заявить, что оно скомпилировано в цикл благодаря оптимизации хвостового вызова.
Требования к подаче
Каждое представление будет принимать одно целое число n
(от нуля до единицы). Затем отправка выведет или вернет первые n
записи целочисленной серии по выбору. (обратите внимание, что этот целочисленный ряд не должен зависеть отn
). Метод ввода и вывода может отличаться между рекурсивным и нерекурсивным подходом. Целочисленный ряд может быть любым детерминированным рядом с длиной не менее 5. Ряд должен быть объяснен должным образом.
Ваше представление не должно работать для произвольно большого n
, но должно работать по крайней мере n=5
. Нерекурсивный подход должен быть способен работать, по крайней мере, так же, n
как рекурсивный подход, или до n=2^15-1
того, что меньше.
Рекурсия
Ради этой задачи рекурсия определяется как создание желаемой последовательности с использованием функции (или подобной функции конструкции), которая вызывает себя (или вызывает последовательность функций, которая в конечном итоге вызывает сама себя; это включает в себя конструкции, подобные комбинатору Y). Глубина рекурсии должна уходить в бесконечность, а n
в бесконечность. Нерекурсивный подход - это все, что не является рекурсивным.
источник
for
делается рекурсивный позади,for
рекурсивный или цикл?n
если он теоретически верен, но его нельзя запустить из-за нехватки времени или памяти?n=5
должен быть вычисленxfor
не доступен через какой-то импорт?), Поэтому, возможно, этот язык не может конкурировать.Ответы:
Python 3 , 65 байт (безопасно)
Попробуйте онлайн!
Еще одна попытка в Python.
Последовательность - это «количество способов заполнить доску размером 2 на n домино в трех цветах, чтобы никакие домино одного цвета не соприкасались друг с другом». Не в OEIS.
Давайте скажем
n=6
. Доска выглядит так:и это действительные плитки домино в трех цветах (
1-3
представляют цвет каждый):но это не так (два домино одного цвета касаются друг друга):
Последовательность подсчитывает все возможные значения домино, которые удовлетворяют правилам для каждого
n
.Предполагаемое решение, 58 байт
Попробуйте онлайн!
К сожалению, похоже, никто не удосужился упростить рекуррентное отношение, что было ясно показано в рекурсивном коде. Создание программы с заданным двойным повторением как есть, не работает, так как это Python 3.
источник
Октава , 47 байт, трещины на l4m2
Попробуйте онлайн!
Например, вот запись Octave, которая генерирует первые
n
положительные целые числа, https://oeis.org/A000027 .источник
l4m2
побил вас.Python 3 , 75 байт, взломан xnor
Попробуйте онлайн!
Знаменитые числа Хэмминга, или 5-гладкие числа ( A051037 ).
Взломанное решение, 51 байт
Попробуйте онлайн!
Предполагаемое решение, 74 байта
Попробуйте онлайн!
источник
Forth (gforth) , 39 байт, взломан NieDzejkob
Попробуйте онлайн!
источник
[1,2,...,n]
, вы знаете, правильно?Рёда , 40 байт
Попробуйте онлайн!
Эта функция дает следующую конечную последовательность (90 первых чисел Фибоначчи):
Я знаю, что он может генерировать больше чисел Фибоначчи, но для этой задачи достаточно произвести эти числа.
источник
JavaScript (Node.js) , 91 байт, взломан l4m2
Попробуйте онлайн!
Печатает первые n членов последовательности OEIS A022559 (начиная с i = 1).
l4m2 поместил 3 петли в
7472 байта и взломал мой пост полицейского:Тем не менее, мой предполагаемый ответ на самом деле имеет только 2 для циклов:
Попробуйте онлайн!
источник
x86 .COM функция, 12 байт, взломан NieDzejkob
Вход DX, Выход [DI] ~ [DI + 2 * DX-1]
Взломщик решение:
Предполагаемое решение:
источник
Python 3 , 62 байт, Cracked по mwchase
Попробуйте онлайн!
Я чувствую, что это будет слишком легко ...
Последовательность представляет собой последовательность Фибоначчи
f(n) = f(n-1) + f(n-2)
сf(0) = f(1) = 1
источник
Gol> <> , 15 байт, взломан mbomb007
Попробуйте онлайн!
Серия
0,1,2,3,4,5
каждый элемент, за которым следует столько нулей.Например, первые несколько значений:
источник
JavaScript, 63 байта, взломан
Попробуйте онлайн!
Возвращает первые n элементов в обращенном массиве
источник
Windows .BAT, 80 байт
Использование:
Версия цикла может предполагаться в текущем словаре, но должна быть инициализирована или сброшена
источник
Python, 82 байта; Трещины
Это рекурсивная реализация Python последовательности OEIS A004001 в 82 байта. Дополнительную информацию об этой серии можно найти на Mathworld Вольфрама .
Первые 30 чисел в этой последовательности:
источник