# 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 …

4mo ago

Vyxal, 2 bytes ``` ∆ṙ ``` …

4mo ago

[JavaScript (Node.js)], 58 byt …

4mo ago

[Haskell], 45 bytes …

4mo 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), 58 bytes

```
([x,...r],y)=>x?[0,...y=f(r)].map((v,i)=>v-x*(y[i]|0)):[1]
```

## 0 comment threads