Последовательность плюс-минус
Последовательность плюс-минус - та, которая начинается с двух семян, a(0)
и b(0)
. Каждая итерация этой последовательности представляет собой сложение и вычитание двух предыдущих членов последовательности. То есть a(N) = a(N-1) + b(N-1)
и b(N) = a(N-1) - b(N-1)
.
Цель Произведите последовательность плюс-минус, в бесконечности или первых K
шагах K
. Вы можете сделать это с помощью бесконечной программы вывода, генератора или функции / программы, которая дает первые K
шаги. Порядок вывода не имеет значения, если он согласован. (Т. Е. b(K) a(K)
Или a(K) b(K)
с некоторым нечисловым разделителем без перевода строки между ними.) Вывод должен начинаться с ввода.
Контрольные примеры
Для входных данных 10 2
(из a(0) b(0)
, это возможный выход для первого подхода K (или подраздела бесконечного подхода):
10 2
12 8
20 4
24 16
40 8
48 32
80 16
96 64
160 32
192 128
320 64
384 256
640 128
768 512
1280 256
1536 1024
2560 512
3072 2048
5120 1024
6144 4096
10240 2048
12288 8192
20480 4096
24576 16384
40960 8192
49152 32768
81920 16384
98304 65536
Для входов 2 20 10
( a(0) b(0) k
):
2 20
22 -18
4 40
44 -36
8 80
88 -72
16 160
176 -144
32 320
352 -288
Это код-гольф , поэтому выигрывает самая короткая программа в байтах.
a
иb
быть символом новой строки?Ответы:
Желе , 5 байт
Это рекурсивный подход. Из-за оптимизации хвостовых вызовов единственным ограничением является возможность помещать оба целых числа в память. Выход - один список на строку.
Попробуйте онлайн!
Как это работает
источник
Main link
самом деле означает?¶
и переводы строк могут использоваться взаимозаменяемо. Вы можете использовать оба в режиме UTF-8, но только\x7f
представить их в кодовой странице Jelly.Python 2, 31 байт
Отпечатки навсегда. Ну, в конце концов вы превышаете предел рекурсии, но это системное ограничение.
источник
sys.setrecursionlimit
while
цикл ведет себя иначе, чем то, что вы делаете.f=lambda a,b:print(a,b)or f(a+b,a-b)
)MATL , 10 байт
Эта версия будет выводить бесконечное количество элементов в последовательности плюс-минус.
Попробуйте онлайн! (остановите его после запуска из-за бесконечного цикла)
объяснение
источник
Haskell, 19 байтов
Создает бесконечную последовательность чисел. Пример использования:
источник
Pyth,
109 байтовСпасибо @isaacg за 1 байт.
Печатает бесконечную последовательность пар.
источник
Q
s могут быть удалены - Pyth будет заполнять их неявно.C, 81 байт
источник
05AB1E , 7 байтов
Использует метод first-k . Введите следующее для:
Код:
Объяснение:
Использует кодировку CP-1252 . Попробуйте онлайн!
источник
к, 12
,
Можно также назвать в форме
источник
APL, 37 символов
Может использоваться как
или
источник
MathGolf , 8 байт
Попробуйте онлайн!
Принимает ввод в обратном порядке, но это просто потому, что именно так они помещаются в стек. В противном случае это было бы на 1 байт длиннее. 2-3 байта приходит с выхода. Без необходимости фактической печати по одной паре на строку программа может быть
æ`‼+-∟
(заполняет стек элементами последовательности бесконечно) илиÉ‼+-∟
(печатает все элементы последовательности, кроме первого для отладки, пока-d
флаг активен) ,объяснение
источник
ABC
, я получаю сообщение об ошибкеstdin = StdIn(line)
в коде Python ..'ABC'
или"ABC"
. Внутренне,ast.literal_eval
используется для разбора ввода. Есть еще некоторые причуды, которые нужно устранить, но вы должны быть в состоянии сделать это .ABCDEF
чтобы[AB, CD, EF]
?2ô_2<\1>]
(жестко запрограммирован на длину ввода 6 и разделен на части размера 2, так как это было то, что мне было нужно, но, вероятно, должно быть изменяемый для работы для общих входных размеров и размеров деталей)./
Python 3.5,
55байт:Распечатывает правильную последовательность, казалось бы, навсегда. Я был в состоянии позволить этому продолжаться в течение приблизительно 30 минут без каких-либо ошибок, и программа напечатала 2301 цифру для первого номера и 1150 цифр для второго! Исходя из этого, я предполагаю, что при наличии достаточного количества оборудования для работы это может продолжаться WAY дольше и печатать WAY больше цифр, а также теоретически не имеет предела рекурсии, любезно предоставлено
while
циклом!источник
a
иb
соответствовать этому вопросу.while
теперь у вас есть и рекурсивный вызов ...Reng v.3.2, 9 байт (самоотвечающий, не конкурирующий)
Принимает два входа (
a b
) и выходыb a
. Попробуй это здесь!i
принимает входные данные дважды,¤
дублирует стек,æ
печатает число и пробел (и делает это дважды, если их два),ö
печатает новую строку,±
делает то , что вы ожидаете, и2.
пропускает следующие два символа, оборачивая ввод, получая символы.источник
Python 2.7,
56, 42 байта:Простой цикл, который либо печатает навсегда (иш).
источник
a,b=input()
, вы можете удалить отступ.Пакетная, 54 байта
Обратите внимание, что CMD.EXE ограничен 32-разрядными знаковыми целыми числами, поэтому он быстро переполняется и печатает сообщения об ошибках и ошибках.
источник
Юлия, 25 байт
Максимальное злоупотребление синтаксисом. Джулия странно . Попробуйте онлайн!
Альтернативная версия, 29 байт
Обратите внимание , что выход будет в конечном итоге переполнения , если вы звоните
<|
в BigInt . К сожалению,show
префикс каждого массиваBigInt
в этом случае. За счет еще четырех байтов мы можем сгенерировать разделенный пробелами вывод для всех числовых типов.Попробуйте онлайн!
Как это работает
Мы определяем бинарный оператор
<|
для наших целей. Он не определен в последних версиях Julia, но все еще распознается синтаксическим анализатором как оператор. Хотя\
(не определено явно для целых чисел) на один байт короче, его высокий приоритет потребует заменыa+b<|a-b
на(a+b)\(a-b)
(+3 байта) или\(a+b,a-b)
(+2 байта).Когда
a<|b
выполняется, он начинается с вызоваshow
печати [ab] для STDOUT. Затемa+b<|a-b
рекурсивно вызывает<|
сумму или разницу.Поскольку рекурсия (предполагается) бесконечна, сравнение
<
никогда не выполняется; единственная цель - объединение двух частей кода. Это экономит два байта по сравнению с более простой альтернативой([a b]|>show;a+b<|a-b)
.источник
Perl 6 , 23 байта (бесконечно)
Изменить: благодаря JoKing, версия последовательности теперь самая короткая (также удалена
.say
за разъяснение из OP:TIO: InfiniteSeq
Старый функциональный ответ
TIO: InfiniteFunc
Обратите внимание, что Perl 6 не имеет предела рекурсии как такового, он основан исключительно на доступной памяти, поэтому он достигнет миллионов перед бомбардировкой.
источник
Фактор, 62 байта
recursive
или же вызов стека заканчивается слишком быстро.источник
Рубин, 25 байт
Основано на решении xnor's Python . Возможно, я сделаю генератор в другом ответе, но это напечатает
a
, затемb
, затем новыйa
, затем новыйb
, до бесконечности.источник
Python 3, 42 байта
Я хотел написать генератор для этой функции, и я так и сделал.
В Python 3 последовательность генерируется следующим образом:
источник
Common Lisp, 57
Использование
psetf
, которое влияет на значения переменных параллельно, и простойloop
синтаксис.источник
bash + GNU coreutils, 75 байт
Призвание:
источник
CP / M 8080, 47 байтов
Мнемоника z80, но ничего, чего нет у 8080, прокомментировал источник, как только я решил посчитать вывод, а не ввод, но краткие имена функций сохранились, собранные вручную, так что простите хх, где я знаю количество байтов, но не сработало выходные адреса или смещения:
источник
Clojure, 44 байта
Функция, которая производит бесконечную ленивую последовательность.
источник
Perl 5, 40 байт
требует
-E
(бесплатно)или (той же длины)(Я выбрал последнее, потому что в некоторых итерациях должны быть ошибки округления.)
Шапка-наконечник.
Но я подозреваю, что должно быть более короткое решение Perl 5.
источник
ВОЗВРАТ , 21 байт
Try it here.
Рекурсивный оператор-лямбда. Использование:
объяснение
источник
> <> , 26 байт
Вызов с
a
,b
,n
в стеке, гдеn
это число витков или значение отрицательного для бесконечной мощности. Выходыa
иb
разделены пробелом.В качестве объяснения, вот как эволюционирует стек во время выполнения:
Вы можете попробовать его на онлайн-переводчике с положительным количеством поворотов, но вам нужно будет использовать официальный интерпретатор python для тестирования бесконечного режима.
источник
Нечеткое окто гуакамоле ,
1716 байтов(не конкурирует, использует функции позже, чем вызов)
Это было трудно сделать из-за ошибок на стороне клиента. Но я понял!
Прохождение:
источник
:
начало цикла и избавиться от необходимости печатать дважды?Серьезно, 12 байт
Выводит бесконечный поток, формат -
b(n) a(n)
одна пара выходов на строку.Нет онлайн-ссылки, потому что TryItOnline не очень хорошо справляется с бесконечными циклами.
Объяснение:
источник
J,
1612 байтПроизводит только первые значения k для последовательности на основе заданных начальных чисел.
Сохранено 4 байта с использованием трюка (или синтаксического сахара), показанного @randomra в этом комментарии .
использование
источник
C #, 50 байтов
Полный исходный код, включая контрольный пример:
Тип данных BigInteger используется, чтобы числа не переполнялись и не становились равными 0. Однако, поскольку это рекурсивное решение, следует ожидать переполнения стека.
источник