РЕДАКТИРОВАТЬ: я буду принимать ответ понедельник, 15.02.2016. Пусть байты всегда будут в твою пользу!
В своем задании «Распечатать последовательность N-Боначчи» @DJMcGoathem описывает последовательности N-Боначчи, в которых предыдущие N чисел суммируются вместо традиционных 2 последовательности Фибоначчи ( называемой «последовательность дуэт- nacci»). Затем он попросил взять два входа, X и N, а затем вывести X- й номер N- nacci.
Я предлагаю обратное.
Для заданной последовательности выведите, какой N- последовательностью она является подмножеством. Я говорю "подмножество", потому что:
- А) эти последовательности бесконечны
- Б) если дано начало последовательности, вы можете просто посчитать количество ведущих 1
В случае, если он может принадлежать нескольким последовательностям N- nacci, выберите самую низкую.
В случае, если он не принадлежит ни к какой последовательности N-nacci , ваша программа может сделать что-либо, кроме печати чего-то, что может быть ошибочно принято за вывод. Эти поведения включают (но не ограничиваются ими): бесконечный цикл, ошибку, сбой, удаление самого себя (* кашель * бдение * кашель кашель *) или создание черной дыры (до тех пор, пока эта черная дыра не производит ничего, что могло бы ошибочно принять за верный вывод).
Ради этого вызова эти последовательности начинаются с 1. Это означает, что любая последовательность N- nacci начинается с N единиц. Кроме того, Nдолжно быть положительным целым числом. Так что без -1 -нач и т. Д.
Тестовые случаи:
1,1,1 -> 1
49, 97 -> 7
55, 89, 144 -> 2
1 -> 1
6765 -> 2
12, 23, 45, 89 -> 12
100, 199 -> 100
create a black hole (as long as this black hole does not produce anything that could be mistaken for valid output).
О, спирали черной дыры сходятся к золотому сечению! Это должен быть действительный вывод для последовательности duoacci!Ответы:
Руби, 94
Я очень удивлен, насколько далеко я смог сыграть в гольф в рамках того же алгоритма! Я начал с более чем 200!
Ungolfed:
источник
x=[1]*(s+z=a.size)
именно работает?n == 1
, то мы никогда не будем увеличивать, поэтому нам нужен массив из 1, как бы долго ни был вход. Еслиn > 1
, тогда нам нужно по крайней мереn
1 для последовательности. Так чтоs+a.size
охватываетn == 1
любую длинуa
, и это охватывает начало любой другой последовательности, поэтому мы можем просто начать добавлятьs
цифры от батареи. Имеет ли это смысл?[1]*number
выдает массив из 1 с длинойnumber
. Такx=[1]*(s+z=a.size)
правопреемниковa.size
кz
, затем присваиваетx
массив длины 1 вs+z
.Python 2, 176 байт
Обратите внимание, что это требует ввода в следующем формате:
скорее, чем
Довольно простое решение, просто для того, чтобы все заработало. Я буду больше работать над игрой в гольф, как только кто-нибудь ответит. При этом используется слегка измененная версия генератора N-Bonnaci из ответа @ Data , так что подпирайте его. Затем для каждого N-Bonnaci в диапазоне ввода, проверяет, является ли вход подпоследовательности этого.
источник
f.append
наf+=
;
?Луа,
324323 байтаКогда я вижу другое представление, я чувствую, что с моим кодом что-то не так ... Но потом я помню, что это Lua, и не все эти причудливые функции: '(
Это было очень весело, заняло у меня некоторое время.
Редактировать: 1 байт сохранен простым трюком: вместо него используется
::label::
+goto label
бесконечный циклwhile''
.Ungolfed и объяснения
Lua не может определить набор, подмножество или даже проверить, содержит ли массив / таблица значение без использования его индекса / ключа. Вот почему я решил удалить элементы из массива, который я беру в качестве параметра. таким образом я веду учет того, какие элементы уже были вычислены и соответствуют ли они.
Вы можете попробовать Lua онлайн и скопировать / вставить следующий пример кода для запуска некоторых тестов. Когда эта функция завершит работу, когда найдет ответ (в противном случае - бесконечный цикл), вам придется изменить индекс
test[]
используемых (не забывайте, что lua индексируется 1) :).источник