Polynomial long division: Difference between revisions
Content added Content deleted
(→{{header|Kotlin}}: Restored original version as Swift and Wren entries are translations of it.) |
(→{{header|Wren}}: Added a translation of Kotlin version 2.) |
||
Line 3,825: | Line 3,825: | ||
=={{header|Wren}}== |
=={{header|Wren}}== |
||
{{trans|Kotlin}} |
{{trans|Kotlin}} |
||
===Version 1=== |
|||
{{libheader|Wren-dynamic}} |
{{libheader|Wren-dynamic}} |
||
<lang ecmascript>import "/dynamic" for Tuple |
<lang ecmascript>import "/dynamic" for Tuple |
||
Line 3,922: | Line 3,923: | ||
Quotient : x^2 - 9x - 27 |
Quotient : x^2 - 9x - 27 |
||
Remainder : -123 |
Remainder : -123 |
||
</pre> |
|||
===Version 2=== |
|||
<lang ecmascript>class Polynom { |
|||
construct new(factors) { |
|||
_factors = factors.toList |
|||
} |
|||
factors { _factors.toList } |
|||
/(divisor) { |
|||
var curr = canonical().factors |
|||
var right = divisor.canonical().factors |
|||
var result = [] |
|||
var base = curr.count - right.count |
|||
while (base >= 0) { |
|||
var res = curr[-1] / right[-1] |
|||
result.add(res) |
|||
curr = curr[0...-1] |
|||
for (i in 0...right.count-1) { |
|||
curr[base + i] = curr[base + i] - res * right[i] |
|||
} |
|||
base = base - 1 |
|||
} |
|||
var quot = Polynom.new(result[-1..0]) |
|||
var rem = Polynom.new(curr).canonical() |
|||
return [quot, rem] |
|||
} |
|||
canonical() { |
|||
if (_factors[-1] != 0) return this |
|||
var newLen = factors.count |
|||
while (newLen > 0) { |
|||
if (_factors[newLen-1] != 0) return Polynom.new(_factors[0...newLen]) |
|||
newLen = newLen - 1 |
|||
} |
|||
return Polynom.new(_factors[0..0]) |
|||
} |
|||
toString { "Polynomial(%(_factors.join(", ")))" } |
|||
} |
|||
var num = Polynom.new([-42, 0, -12, 1]) |
|||
var den = Polynom.new([-3, 1, 0, 0]) |
|||
var res = num / den |
|||
var quot = res[0] |
|||
var rem = res[1] |
|||
System.print("%(num) / %(den) = %(quot) remainder %(rem)")</lang> |
|||
{{out}} |
|||
<pre> |
|||
Polynomial(-42, 0, -12, 1) / Polynomial(-3, 1, 0, 0) = Polynomial(-27, -9, 1) remainder Polynomial(-123) |
|||
</pre> |
</pre> |
||