Рассмотрим последовательность, основанную на рекуррентных отношениях f(n) = f(n-1)+f(n-2)
, начиная с f(1) = x1, f(2) = x2
. Ибо x1 = 2, x2 = 1
последовательность начинается так:
2 1 3 4 7 11 18 29 47 76 123 199 322 521 843
Объединение этого в строку даст:
213471118294776123199322521843
Теперь разделите этот список на наименьшие возможные числа y(n) > y(n-1)
. Начните с первого номера, затем второго и т. Д. Первый выходной номер всегда должен быть одной цифрой. Дополните последний номер требуемым количеством нулей.
2 13 47 111 829 4776 12319 93225 218430
В (x1, x2)
качестве входных данных вы получите два числа в любом удобном формате, и задача состоит в том, чтобы вывести отсортированный список.
Правила:
- Функция и программы в порядке
- Начальная последовательность должна иметь ровно 15 цифр (последняя цифра
f(15)
). x1
иx2
неотрицательны (возможен ноль).- Вывод может быть в любом удобном формате
- Выходной вектор
y
должен быть создан таким образомy2 > y1
.- Сначала наименьшее возможное
y1
, затем наименьшее возможноеy2
, затемy3
и так далее.
- Сначала наименьшее возможное
- Если
x1 = x2 = 0
затем выведите 15 нулей (в том же формате, что и другие выходные данные, т.е. нет000000000000000
).
Примеры :
Input: 1 1
Output: 1 12 35 81 321 345 589 1442 3337 7610
Input: 3 2
Output: 3 25 71 219 315 0811 3121 23435 55898 145300
|
Optional leading zero
Input: 0 0
Output: 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Самый короткий код в байтах побеждает. Пожалуйста, включите ссылку на онлайн-переводчика, если это возможно.
code-golf
math
arithmetic
Стьюи Гриффин
источник
источник
5467
?54 67
?5 46 70
?Ответы:
Pyth, 56 байт
Тестирование
Объяснение:
Сначала мы проверяем, является ли ввод точным
0, 0
. Если это так, выведите 15 нулей.В противном случае мы производим последовательность, с
jkhM.u,eNsN14Q
. Это похоже на стандартный алгоритм Пита для последовательности Фибоначчи.Далее мы уменьшаем эту строку. Аккумулятор представляет собой список строк, представляющих каждое число в разделенной последовательности. На каждом шаге сокращения мы берем следующий символ и проверяем, находится ли аккумулятор в порядке, используя вспомогательную функцию
y
, определенную с помощьюLsgM.:sMb2
, что верно, если входные данные не в порядке. Если это в порядке, мы добавляем следующий символ в список как его собственный номер. Если нет, мы добавляем следующий символ в конец последней строки. Это достигается сu?yGX_1GHaGH ... Y
.Далее мы выполняем функциональный цикл while. Цикл продолжается до тех пор, пока рабочий список не будет в порядке, повторно используя вспомогательную функцию. На каждом шаге знак a
0
добавляется в конец последней строки в списке. Это достигается с.WyHX_1Z`0
.Наконец, строки преобразуются в целые числа с помощью
sM
и печатаются.Pyth, 51 байт
Я считаю, что это работает, но это слишком медленно для тестирования - это решение методом грубой силы для разделения строки.
Я буду вносить некоторые улучшения в
X
функцию, но приведенный выше код работает в той версии Pyth, которая была самой последней, когда был опубликован вопрос.источник
JavaScript ES6, 127
135Тестовое задание
источник
JavaScript ES6,
187180187184182179175172165160155154 байтаЯ получаю аналогичные результаты при запуске его
1,1
и3,2
тестов.0,0
занял лишние 26 байт ...Де-гольф + преобразованный в ES5 + демо:
источник
n <= 15
.f(n) = f(n-1)+f(n-2)
имеет максимальное значение ровно 15. Количество выходных значений определяется на основе алгоритма, ничего больше.f(1)=x1
иf(2)=x2
может быть выше , чем 15. число выходных значений определяются на основании входных значений. Для3 2
него будет 10.JavaScript (ES6), 162 байта
объяснение
Тестовое задание
Показать фрагмент кода
источник
Mathematica, 192 байта
Тестовые случаи:
Длина имен функций убивает меня.
источник
Haskell,
165159152142141 байтПример использования:
3 % 2
->[3,25,71,219,315,811,3121,23435,55898,145300]
.Демо онлайн (с
main
оберткой).Как это устроено:
источник
PowerShell,
167166 байтСохраненный байт, исключив
$s
переменную и просто подавая выходной цикл напрямую.Развернулся и прокомментировал:
источник
Perl 6 , 107 байт
Использование:
объяснение
создает последовательность Фибоначчи, начиная с arguments (
@_
) slipped (|
) взанимает первые 15 элементов этой последовательности
объединяет это в одну строку (
.join
), разбивает ее на последовательность отдельных символов (.comb
) и сохраняет это в скаляре «по умолчанию» ($_
) после приведения последовательности в изменяемый массив, сначала сохраняя его в анонимном массиве (@
)он находит сумму значений в скаляре по умолчанию, а если он равен нулю, возвращает скаляр по умолчанию, который будет содержать массив из 15 нулей
если сумма не равна нулю, она создает список, сначала сдвигая первый элемент в скаляре по умолчанию
с последующим генерированием остальных значений, проверяя его по сравнению с предыдущим (
$^b
),если в скаляре по умолчанию заканчиваются значения, вместо этого используйте 0 (
//0
)остановка при отсутствии элементов в скаляре по умолчанию
источник
until (my$a...
? Разве это(
не специальный разделитель?until
, которая не существует.