#!/usr/bin/ruby
#
## https://rosettacode.org/wiki/Polynomial_synthetic_division
#
func extended_synthetic_division(dividend, divisor) {
var end = divisor.end
var out = dividend.clone
var normalizer = divisor[0]
for i in ^(dividend.len - end) {
out[i] /= normalizer
var coef = -out[i]
if (coef != 0) {
for j in (1 .. end) {
out[i+j] += divisor[j]*coef
}
}
}
var remainder = out.splice(-end)
var quotient = out
return(quotient, remainder)
}
var (n, d) = ([1, -12, 0, -42], [1, -3])
var (q, r) = extended_synthetic_division(n, d)
print(" %s / %s =" % (n, d))
print(" %s remainder %s\n" % (q, r))
assert_eq(q, [1, -9, -27])
assert_eq(r, [-123])