Expand a polynomial
Challenge
Given the roots of a polynomial (that is, the $x$ values where the polynomial evaluates to zero), as an array of real numbers, return the polynomial's coefficients.
That is, given real roots $r_1, r_2, \cdots , r_n$, find the coefficients of the expansion of $(x-r_1)(x-r_2)\cdots(x-r_n)$, or any non-zero scalar multiple of it.
You may use either lowest power first or highest power first order for the resulting list of coefficients.
Tests
// Note that any non-zero scalar multiple of these results is valid
[] -> [1]
[1] -> [-1, 1] // (x - 1) = -1 + 1x
[1, 2] -> [2, -3, 1] // (x - 1)(x - 2) = 2 - 3x + 1x^2
[1, 1] -> [1, -2, 1] // (x - 1)^2 = 1 -2x + 1x^2
[1, 2, 3] -> [-6, 11, -6, 1] // (x - 1)(x - 2)(x - 3) = -6 + 11x - 6x^2 + x^3
This is code golf, so the shortest answer in bytes wins!
Japt `-Q`, 15 12 bytes …
3y ago
Vyxal, 2 bytes ``` ∆ṙ ``` …
3y ago
[JavaScript (Node.js)], 60 byt …
2mo ago
[Haskell], 45 bytes …
3y ago
4 answers
Haskell, 45 bytes
foldl(\a b->zipWith((-).(*b))(0:a)$a++[0])[1]
Uses the "highest power first" convention. Sometimes multiplies the polynomial by $(-1)$.
0 comment threads
JavaScript (Node.js), 60 bytes
f=([x,...r],y)=>x?[0,...y=f(r)].map((v,i)=>v-x*(y[i]|0)):[1]
0 comment threads