Wenn wir eine Folge von Zahlen als Koeffizienten einer Potenzreihe schreiben, dann wird diese Potenzreihe die (gewöhnliche) Erzeugungsfunktion (oder Gf) dieser Folge genannt. Das heißt, wenn für einige Funktionen F(x)
und ganze a(n)
Zahlenreihen gilt:
a(0) + a(1)x + a(2)x^2 + a(3)x^3 + a(4)x^4 + ... = F(x)
Dann F(x)
ist die erzeugende Funktion von a
. Zum Beispiel sagt uns die geometrische Reihe , dass:
1 + x + x^2 + x^3 + x^4 + ... = 1/(1-x)
Die erzeugende Funktion von 1, 1, 1, ...
ist also 1/(1-x)
. Wenn wir beide Seiten der obigen Gleichung unterscheiden und mit multiplizieren, erhalten x
wir die folgende Gleichheit:
x + 2x^2 + 3x^3 + 4x^4 + ... = x/(1-x)^2
Die erzeugende Funktion von 1, 2, 3, ...
ist also x/(1-x)^2
. Das Generieren von Funktionen ist ein sehr mächtiges Werkzeug, mit dem Sie viele nützliche Dinge tun können. Eine kurze Einführung kann gefunden werden hier , aber für eine wirklich gründliche Erklärung gibt es die erstaunliche Buch generatingfunctionology.
In dieser Challenge nehmen Sie eine rationale Funktion (den Quotienten aus zwei Polynomen mit ganzzahligen Koeffizienten) als Eingabe als zwei Arrays von ganzzahligen Koeffizienten, zuerst den Zähler, dann den Nenner. Zum Beispiel wird die Funktion f(x) = x / (1 - x - x^2)
wie [0, 1], [1, -1, -1]
in der Eingabe codiert .
Anhand dieser Eingabe muss Ihr Programm die Koeffizienten der Potenzreihe, die der Erzeugungsfunktion entspricht, unendlich ausgeben, und zwar eine pro Zeile, beginnend mit dem Koeffizienten von x
, dann x^2
usw.
Beispiele:
[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, ...
quelle
Antworten:
Haskell , 63 Bytes
Probieren Sie es online!
Definiert einen Operator
%
, der eine unendliche Liste fauler Koeffizienten zurückgibt. Die Liste ist nullindexiert, sodass der konstante Koeffizient enthalten ist.quelle
Mathematica, 64
8390BytesVielen Dank an @ngenisis und @Jenny_mathy!
Nimm die Eingabe als zwei Listen.
Müssen Sie
Alt+.
die Ausführung beenden, um das Ergebnis zu sehen. Frontend kann aufgrund schneller Ausgabe abstürzen.83-Byte-Version (@Jenny_mathy):
quelle
64
Bytes:Do[Echo@Limit[D[#/#2/i!&@@Fold[x#+#2&]/@#,{x,i}],x->0],{i,∞}]&
. Dies setzt voraus, dass die Eingabe eine Liste von zwei Listen ist und die Koeffizienten in der Reihenfolge des absteigenden Grades sind. Das einzige, was ich tun kann,v
istInternal`FromCoefficientList
i
das Lambda einzufügen. (Andererseits bin ich mir nicht sicher, ob die Fähigkeit zur wiederholten Ausführung relevant ist, wenn das Ziel darin besteht, eine unendliche Liste auszudrucken. Gab es einen Metakonsens dazu?)Iterator {i,∞} does not have appropriate bounds
.CJam (22 Bytes)
Online-Demo . Beachten Sie, dass wie viele der vorhandenen Antworten auch der 0. Koeffizient in der Ausgabe enthalten ist.
Präparation
quelle
Mathematica,
8679 BytesNimmt die Eingabe als zwei separate Listen (Zählerkoeffizienten, Nennerkoeffizienten) vor. Wenn die Eingabe direkt als Bruchteil von Polynomen und nicht als Liste von Koeffizienten verwendet werden kann, kann dies erheblich verkürzt werden.
Es scheint, dass
Do
in v11 mit unendlichen Grenzen gearbeitet werden kann. Ich kann das lokal nicht testen, aber wenn dies der Fall ist, kann diese Lösung auf 75 Byte verkürzt werden :quelle
n
von 1 anstelle von erhalten Sie0
die gleichen Ergebnisse wie für Ihre Lösung. beide scheitern jedoch am vorletzten Testfall, den diese Lösung abn
0 besteht.Pyth , 23 Bytes
Probieren Sie es online!
Wie es funktioniert
quelle
Pari / GP , 66 Bytes
Probieren Sie es online!
quelle