Мини-гольф по понедельникам: серия коротких соревнований по коду , публикуемых (надеюсь!) Каждый понедельник.
Последовательность, подобная Фибоначчи, получается с использованием того же метода, что и известная последовательность Фибоначчи ; то есть каждое число F (n) находится путем сложения двух предыдущих чисел в последовательности ( F (n) = F (n-1) + F (n-2) ) или путем вычитания следующих двух чисел ( F (n) = F (n + 2) - F (n + 1) ). Основное отличие состоит в том, что эти последовательности могут начинаться с любых двух чисел. Обнуление этих последовательностей является спорным, но сейчас мы собираемся использовать это правило:
- 0-е число в последовательности, подобной Фибоначчи, является последним числом, которое меньше предыдущего числа.
В качестве примера, последовательность Фибоначчи может быть записана как 1, 0, 1, 1, 2, 3, 5...
, поэтому 0-е число в последовательности является единственным 0
.
Вызов
Цель задачи - написать программу или функцию, которая принимает три целых числа в любом формате:
- A и B , два числа, с которых начинается генерация последовательности.
- N - длина полученной последовательности для вывода.
И выводит первые N чисел последовательности, начиная с 0-го.
Детали
- A , B и N могут быть взяты в любом порядке и формате, если они визуально разделены. Если вы используете другой порядок / формат, пожалуйста, укажите, что это такое.
- Вы можете предположить, что A , B и N всегда являются положительными целыми числами.
- Можно предположить, что N не более 100, и результирующая последовательность не будет содержать
x >= 2^31
. - Если A больше, чем B , то B - это 0-е число в последовательности.
- Вывод должен быть разделен пробелами, запятыми и / или символами новой строки.
- Допускается завершающий пробел или символ новой строки, но не запятая.
Тест-кейсы
Пример 1:
8 13 10
Работая задом наперед, 8 13
пока мы не найдем число больше предыдущего, мы получим 13 8 5 3 2 1 1 0 1
. Таким образом, 0
это 0-е число в этой последовательности. Работая над этим, мы распечатываем 0
и следующие 9 участников:
0 1 1 2 3 5 8 13 21 34
Пример 2:
23 37 5
Снова работая в обратном направлении, чтобы найти 0-е число, мы находим 37 23 14 9 5 4 1 3
. На этот раз 0-е число 1
, поэтому мы распечатываем его вместе со следующими 4 членами:
1 4 5 9 14
Пример 3:
4 3 8
С этим нам не нужно работать в обратном направлении, чтобы найти 0-е число, потому что 3
оно меньше, чем 4
:
3 7 10 17 27 44 71 115
Пример 4:
29 47 11
Результат:
1 3 4 7 11 18 29 47 76 123 199
счет
Это код-гольф , поэтому выигрывает самый короткий действительный код в байтах. Tiebreaker переходит к ранее опубликованному представлению. Победитель будет выбран в следующий понедельник, 28 сентября. Удачи!
Изменить: Поздравляю вашего победителя, @Jakube, используя Pyth за удивительные 23 байта!
[8, 13, 10]
)?