Polynomial long division: Difference between revisions
Content added Content deleted
Thundergnat (talk | contribs) m (syntax highlighting fixup automation) |
|||
Line 2,367: | Line 2,367: | ||
Compute: (2x^7 - 24x^6 + 2x^5 - 108x^4 + 3x^3 - 120x^2 - 126) / (2x^4 + 2x^2 + 3) = x^3 - 12x^2 - 42 reminder 0 |
Compute: (2x^7 - 24x^6 + 2x^5 - 108x^4 + 3x^3 - 120x^2 - 126) / (2x^4 + 2x^2 + 3) = x^3 - 12x^2 - 42 reminder 0 |
||
Test: (x^3 - 12x^2 - 42) * (2x^4 + 2x^2 + 3) + (0) = 2x^7 - 24x^6 + 2x^5 - 108x^4 + 3x^3 - 120x^2 - 126 |
Test: (x^3 - 12x^2 - 42) * (2x^4 + 2x^2 + 3) + (0) = 2x^7 - 24x^6 + 2x^5 - 108x^4 + 3x^3 - 120x^2 - 126 |
||
</pre> |
|||
=={{header|jq}}== |
|||
{{works with|jq}} |
|||
'''Also works with gojq, the Go implementation of jq, and with fq''' |
|||
'''Adapted from the second version in the [[#Wren|Wren]] entry.''' |
|||
In this entry, polynomials are represented by JSON arrays exactly as |
|||
in the task description; that is, using jq notation, `.[$i]` corresponds to |
|||
the coefficient of {\displaystyle x^i}. |
|||
<syntaxhighlight lang=jq> |
|||
# Emit the canonical form of the polynomical represented by the input array |
|||
def canonical: |
|||
if length == 0 then . |
|||
elif .[-1] == 0 then .[:-1]|canonical |
|||
else . |
|||
end; |
|||
# string representation |
|||
def poly2s: "Polynomial(\(join(",")))"; |
|||
# Polynomial division |
|||
# Output [ quotient, remainder] |
|||
def divrem($divisor): |
|||
($divisor|canonical) as $divisor |
|||
| { curr: canonical} |
|||
| .base = ((.curr|length) - ($divisor|length)) |
|||
| until( .base < 0; |
|||
(.curr[-1] / $divisor[-1]) as $res |
|||
| .result += [$res] |
|||
| .curr |= .[0:-1] |
|||
| reduce range (0;$divisor|length-1) as $i (.; |
|||
.curr[.base + $i] += (- $res * $divisor[$i]) ) |
|||
| .base += -1 |
|||
) |
|||
| (.result | reverse), (.curr | canonical)]; |
|||
def demo($num; $den): |
|||
{$num, $den, |
|||
res: ($num | divrem($den)) } |
|||
| .quot = .res[0] |
|||
| .rem = .res[1] |
|||
| del(.res) |
|||
| map_values(poly2s) |
|||
| "\(.num) / \(.den) = \(.quot) remainder \(.rem)"; |
|||
demo( [-42, 0, -12, 1]; [-3, 1, 0, 0]) |
|||
</syntaxhighlight> |
|||
{{output}} |
|||
<pre> |
|||
Polynomial(-42,0,-12,1) / Polynomial(-3,1,0,0) = Polynomial(-27,-9,1) |
|||
remainder Polynomial(-123) |
|||
</pre> |
</pre> |
||