Если мы запишем последовательность чисел в качестве коэффициентов степенного ряда, то этот степенной ряд называется (обычной) производящей функцией (или Gf) этой последовательности. То есть если для некоторой функции F(x)
и серии целых чисел a(n)
имеем:
a(0) + a(1)x + a(2)x^2 + a(3)x^3 + a(4)x^4 + ... = F(x)
Тогда F(x)
является производящей функцией a
. Например, геометрический ряд говорит нам, что:
1 + x + x^2 + x^3 + x^4 + ... = 1/(1-x)
Таким образом, производящая функция 1, 1, 1, ...
есть 1/(1-x)
. Если мы дифференцируем обе части уравнения выше и умножим на, x
мы получим следующее равенство:
x + 2x^2 + 3x^3 + 4x^4 + ... = x/(1-x)^2
Таким образом, производящая функция 1, 2, 3, ...
есть x/(1-x)^2
. Генерация функций - очень мощный инструмент, и вы можете делать с ним много полезных вещей. Краткое введение можно найти здесь , но для действительно подробного объяснения есть удивительная книга, создающая функциональность.
В этом задании вы возьмете рациональную функцию (частное от двух полиномов с целыми коэффициентами) в качестве входных данных в виде двух массивов целых коэффициентов, сначала числителя, а затем знаменателя. Например, функция f(x) = x / (1 - x - x^2)
будет закодирована как [0, 1], [1, -1, -1]
на входе.
Учитывая эти входные данные, ваша программа должна бесконечно печатать коэффициенты степенного ряда, равного производящей функции, по одному на строку, начиная с коэффициента x
, затем x^2
и т. Д.
Примеры:
[1], [1, -1] -> 1, 1, 1, 1, 1, 1, 1, ...
[1], [2, -2] -> 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, ...
[0, 1], [1, -2, 1] -> 1, 2, 3, 4, 5, 6, 7, 8, ...
[0, 1], [1, -1, -1] -> 1, 1, 2, 3, 5, 8, 13, 21, 34, ...
[1], [1, -2] -> 1, 2, 4, 8, 16, 32, 64, 128, ...
[0, 1, 1], [1, -3, 3, -1] -> 1, 4, 9, 16, 25, 36, ...
источник
Ответы:
Haskell , 63 байта
Попробуйте онлайн!
Определяет оператор,
%
возвращающий бесконечный ленивый список коэффициентов. Список с нулевым индексом, поэтому постоянный коэффициент включен.источник
Математика, 64
8390байтовБлагодаря @ngenisis и @Jenny_mathy!
Принять ввод в виде двух списков.
Необходимо
Alt+.
прекратить выполнение, чтобы увидеть результат. Интерфейс может зависнуть из-за быстрого вывода.Версия 83 байта (@Jenny_mathy):
источник
64
байт:Do[Echo@Limit[D[#/#2/i!&@@Fold[x#+#2&]/@#,{x,i}],x->0],{i,∞}]&
. Предполагается, что входные данные представляют собой список из двух списков, а коэффициенты расположены в порядке убывания степени. Единственное встроенное устройство, которое я знаю, чтобы делать то, чтоv
делает,Internal`FromCoefficientList
i
в лямбду. (С другой стороны, я не совсем уверен, уместна ли способность многократно бегать, когда цель состоит в том, чтобы напечатать бесконечный список ... был ли мета-консенсус по этомуIterator {i,∞} does not have appropriate bounds
.CJam (22 байта)
Демо онлайн . Обратите внимание, что как и многие из существующих ответов, это включает в себя 0-й коэффициент в выходных данных.
рассечение
источник
Mathematica,
8679 байтовВводит в виде двух отдельных списков (коэффициенты числителя, коэффициенты знаменателя). Если входные данные могут быть взяты непосредственно как часть многочленов, а не как списки коэффициентов, это может быть значительно сокращено.
Кажется, что
Do
может работать с бесконечными границами в v11. Я не могу проверить это локально, но, если это так, то это решение может быть сокращено до 75 байт :источник
n
с 1 вместо0
, это дает те же результаты, что и ваше решение; однако оба теста терпят неудачу в последнем тестовом примере, который проходит это решение, начинаяn
с 0.Pyth , 23 байта
Попробуйте онлайн!
Как это устроено
источник
Пари / ГП , 66 байт
Попробуйте онлайн!
источник