123456789101112131415161718192021222324252627282930313233343536 |
- #!/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])
|