Se scriviamo una sequenza di numeri come coefficienti di una serie di potenze, allora quella serie di potenze viene chiamata funzione (ordinaria) di generazione (o Gf) di quella sequenza. Cioè, se per alcune funzioni F(x)
e serie di numeri interi a(n)
abbiamo:
a(0) + a(1)x + a(2)x^2 + a(3)x^3 + a(4)x^4 + ... = F(x)
Quindi F(x)
è la funzione generatrice di a
. Ad esempio, la serie geometrica ci dice che:
1 + x + x^2 + x^3 + x^4 + ... = 1/(1-x)
Quindi la funzione generatrice di 1, 1, 1, ...
è 1/(1-x)
. Se differenziamo entrambi i lati dell'equazione sopra e moltiplichiamo per x
otteniamo la seguente uguaglianza:
x + 2x^2 + 3x^3 + 4x^4 + ... = x/(1-x)^2
Quindi la funzione generatrice di 1, 2, 3, ...
è x/(1-x)^2
. La generazione di funzioni è uno strumento molto potente e puoi fare molte cose utili con esse. Una breve introduzione può essere trovata qui , ma per una spiegazione davvero approfondita c'è l'incredibile generologia del libro.
In questa sfida assumerai una funzione razionale (il quoziente di due polinomi con coefficienti interi) come input come due matrici di coefficienti interi, prima il numeratore e poi il denominatore. Ad esempio, la funzione f(x) = x / (1 - x - x^2)
verrà codificata come [0, 1], [1, -1, -1]
nell'input.
Dato questo input, il programma deve stampare all'infinito i coefficienti della serie di potenze che è uguale alla funzione di generazione, una per riga, a partire dal coefficiente di x
, quindi x^2
, ecc.
Esempi:
[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, ...