Unicode polynomial equation: Difference between revisions

m
(mark for attention)
m (→‎{{header|Wren}}: Minor tidy)
 
(15 intermediate revisions by 6 users not shown)
Line 1:
{{clarify taskdifficulty}}{{draft task}}<!--{{Wikipedia|Polynomial}}-->
The objective of this task is to parse in a difficult [[wp:polynomial|polynomial]], and generate a "pretty" representation of the polynomial in Unicode.
 
Line 57:
Either one, or all of these approaches are accepted and appear as a subtitle.
[[Category:Mathematics]]
 
=={{header|Go}}==
Although this program provides full support for Unicode vulgar fractions, note that there is no guarantee that they (or arithmetic on them) will successfully 'round trip' due to floating point arithmetic being used in the underlying calculations and some of them being recurring rather than exact decimals in any case.
<syntaxhighlight lang="go">package main
 
import (
"fmt"
"log"
"math"
"regexp"
"strconv"
"strings"
)
 
var powers = strings.NewReplacer(
"0", "⁰",
"1", "¹",
"2", "²",
"3", "³",
"4", "⁴",
"5", "⁵",
"6", "⁶",
"7", "⁷",
"8", "⁸",
"9", "⁹",
"-", "⁻",
)
 
var fractions = [][2]string{
{".25", "¼"},
{".5", "½"},
{".75", "¾"},
{".14285714285714285", "⅐"},
{".1111111111111111", "⅑"},
{".1", "⅒"},
{".3333333333333333", "⅓"},
{".6666666666666666", "⅔"},
{".2", "⅕"},
{".4", "⅖"},
{".6", "⅗"},
{".8", "⅘"},
{".16666666666666666", "⅙"},
{".8333333333333334", "⅚"},
{".125", "⅛"},
{".375", "⅜"},
{".625", "⅝"},
{".875", "⅞"},
}
 
func printEquation(coefs map[int]float64) {
fmt.Print("=> ")
if len(coefs) == 0 {
fmt.Println("0\n")
return
}
max, min := math.MinInt32, math.MaxInt32
for k := range coefs {
if k > max {
max = k
}
if k < min {
min = k
}
}
for p := max; p >= min; p-- {
if c := coefs[p]; c != 0 {
if p < max {
sign := "+"
if c < 0 {
sign = "-"
c = -c
}
fmt.Printf(" %s ", sign)
}
if c != 1 || (c == 1 && p == 0) {
cs := fmt.Sprintf("%v", c)
ix := strings.Index(cs, ".")
if ix >= 0 {
dec := cs[ix:]
for _, frac := range fractions {
if dec == frac[0] {
cs = strings.Replace(cs, dec, frac[1], 1)
break
}
}
}
if cs[0] == '0' && len(cs) > 1 && cs[1] != '.' {
cs = cs[1:]
}
fmt.Print(cs)
}
if p != 0 {
ps := strconv.Itoa(p)
ps = powers.Replace(ps)
if ps == "¹" {
ps = ""
}
fmt.Printf("x%s", ps)
}
}
}
fmt.Println("\n")
}
 
func check(err error) {
if err != nil {
log.Fatal(err)
}
}
 
func main() {
equs := []string{
`-0.00x⁺¹⁰ + 1.0·x ** 5 + -2e0x^4 + +0,042.00 × x ⁺³ + +.0x² + 20.000 000 000x¹ - -1x⁺⁰ + .0x⁻¹ + 20.x¹`,
`x⁵ - 2x⁴ + 42x³ + 0x² + 40x + 1`,
`0e+0x⁰⁰⁷ + 00e-00x + 0x + .0x⁰⁵ - 0.x⁴ + 0×x³ + 0x⁻⁰ + 0/x + 0/x³ + 0x⁻⁵`,
`1x⁵ - 2x⁴ + 42x³ + 40x + 1x⁰`,
`+x⁺⁵ + -2x⁻⁻⁴ + 42x⁺⁺³ + +40x - -1`,
`x^5 - 2x**4 + 42x^3 + 40x + 1`,
`x↑5 - 2.00·x⁴ + 42.00·x³ + 40.00·x + 1`,
`x⁻⁵ - 2⁄x⁴ + 42x⁻³ + 40/x + 1x⁻⁰`,
`x⁵ - 2x⁴ + 42.000 000x³ + 40x + 1`,
`x⁵ - 2x⁴ + 0,042x³ + 40.000,000x + 1`,
`0x⁷ + 10x + 10x + x⁵ - 2x⁴ + 42x³ + 20x + 1`,
`1E0x⁵ - 2,000,000.e-6x⁴ + 4.2⏨1x³ + .40e+2x + 1`,
`x⁵ - x⁴⁄2 + 405x³⁄4 + 403x⁄4 + 5⁄2`,
`x⁵ - 0.5x⁴ + 101.25x³ + 100.75x + 2.5`,
`x⁻⁵ - 2⁄x⁴ + 42x⁻³ - 40/x`,
`⅐x⁵ - ⅓x⁴ - ⅔x⁴ + 42⅕x³ + ⅑x - 40⅛ - ⅝`,
}
rgx := regexp.MustCompile(`\s+(\+|-)\s+`)
rep := strings.NewReplacer(
",", "",
" ", "",
"¼", ".25",
"½", ".5",
"¾", ".75",
"⅐", ".14285714285714285",
"⅑", ".1111111111111111",
"⅒", ".1",
"⅓", ".3333333333333333",
"⅔", ".6666666666666666",
"⅕", ".2",
"⅖", ".4",
"⅗", ".6",
"⅘", ".8",
"⅙", ".16666666666666666",
"⅚", ".8333333333333334",
"⅛", ".125",
"⅜", ".375",
"⅝", ".625",
"⅞", ".875",
"↉", ".0",
"⏨", "e",
"⁄", "/",
)
rep2 := strings.NewReplacer(
"⁰", "0",
"¹", "1",
"²", "2",
"³", "3",
"⁴", "4",
"⁵", "5",
"⁶", "6",
"⁷", "7",
"⁸", "8",
"⁹", "9",
"⁻⁻", "",
"⁻", "-",
"⁺", "",
"**", "",
"^", "",
"↑", "",
"⁄", "/",
)
var err error
for _, equ := range equs {
fmt.Println(equ)
terms := rgx.Split(equ, -1)
ops := rgx.FindAllString(equ, -1)
for i := 0; i < len(ops); i++ {
ops[i] = strings.TrimSpace(ops[i])
}
coefs := make(map[int]float64)
for i, term := range terms {
s := strings.Split(term, "x")
t := s[0]
t = strings.TrimRight(t, "·× ")
t = rep.Replace(t)
c := 1.0
inverse := false
if t == "" || t == "+" || t == "-" {
t += "1"
}
ix := strings.Index(t, "/")
if ix == len(t)-1 {
inverse = true
t = t[0 : len(t)-1]
c, err = strconv.ParseFloat(t, 64)
check(err)
} else if ix >= 0 {
u := strings.Split(t, "/")
m, err := strconv.ParseFloat(u[0], 64)
check(err)
n, err := strconv.ParseFloat(u[1], 64)
check(err)
c = m / n
} else {
c, err = strconv.ParseFloat(t, 64)
check(err)
}
if i > 0 && ops[i-1] == "-" {
c = -c
}
if c == -0.0 {
c = 0
}
if len(s) == 1 {
coefs[0] += c
continue
}
u := s[1]
u = strings.TrimSpace(u)
if u == "" {
p := 1
if inverse {
p = -1
}
if c != 0 {
coefs[p] += c
}
continue
}
u = rep2.Replace(u)
jx := strings.Index(u, "/")
p := 1
if jx >= 0 {
v := strings.Split(u, "/")
p, err = strconv.Atoi(v[0])
if (err != nil) {
p = 1
}
d, err := strconv.ParseFloat(v[1], 64)
check(err)
c /= d
} else {
p, err = strconv.Atoi(strings.TrimSpace(u))
if (err != nil) {
p = 1
}
}
if inverse {
p = -p
}
if c != 0 {
coefs[p] += c
}
}
printEquation(coefs)
}
}</syntaxhighlight>
 
{{out}}
<pre>
-0.00x⁺¹⁰ + 1.0·x ** 5 + -2e0x^4 + +0,042.00 × x ⁺³ + +.0x² + 20.000 000 000x¹ - -1x⁺⁰ + .0x⁻¹ + 20.x¹
=> x⁵ - 2x⁴ + 42x³ + 40x + 1
 
x⁵ - 2x⁴ + 42x³ + 0x² + 40x + 1
=> x⁵ - 2x⁴ + 42x³ + 40x + 1
 
0e+0x⁰⁰⁷ + 00e-00x + 0x + .0x⁰⁵ - 0.x⁴ + 0×x³ + 0x⁻⁰ + 0/x + 0/x³ + 0x⁻⁵
=> 0
 
1x⁵ - 2x⁴ + 42x³ + 40x + 1x⁰
=> x⁵ - 2x⁴ + 42x³ + 40x + 1
 
+x⁺⁵ + -2x⁻⁻⁴ + 42x⁺⁺³ + +40x - -1
=> x⁵ - 2x⁴ + 42x³ + 40x + 1
 
x^5 - 2x**4 + 42x^3 + 40x + 1
=> x⁵ - 2x⁴ + 42x³ + 40x + 1
 
x↑5 - 2.00·x⁴ + 42.00·x³ + 40.00·x + 1
=> x⁵ - 2x⁴ + 42x³ + 40x + 1
 
x⁻⁵ - 2⁄x⁴ + 42x⁻³ + 40/x + 1x⁻⁰
=> 1 + 40x⁻¹ + 42x⁻³ - 2x⁻⁴ + x⁻⁵
 
x⁵ - 2x⁴ + 42.000 000x³ + 40x + 1
=> x⁵ - 2x⁴ + 42x³ + 40x + 1
 
x⁵ - 2x⁴ + 0,042x³ + 40.000,000x + 1
=> x⁵ - 2x⁴ + 42x³ + 40x + 1
 
0x⁷ + 10x + 10x + x⁵ - 2x⁴ + 42x³ + 20x + 1
=> x⁵ - 2x⁴ + 42x³ + 40x + 1
 
1E0x⁵ - 2,000,000.e-6x⁴ + 4.2⏨1x³ + .40e+2x + 1
=> x⁵ - 2x⁴ + 42x³ + 40x + 1
 
x⁵ - x⁴⁄2 + 405x³⁄4 + 403x⁄4 + 5⁄2
=> x⁵ - ½x⁴ + 101¼x³ + 100¾x + 2½
 
x⁵ - 0.5x⁴ + 101.25x³ + 100.75x + 2.5
=> x⁵ - ½x⁴ + 101¼x³ + 100¾x + 2½
 
x⁻⁵ - 2⁄x⁴ + 42x⁻³ - 40/x
=> -40x⁻¹ + 42x⁻³ - 2x⁻⁴ + x⁻⁵
 
⅐x⁵ - ⅓x⁴ - ⅔x⁴ + 42⅕x³ + ⅑x - 40⅛ - ⅝
=> ⅐x⁵ - x⁴ + 42⅕x³ + ⅑x - 40¾
</pre>
 
=={{header|Julia}}==
The task allows the "polynomials" to be parsed to have negative exponents. This makes them <em>Laurent</em> polynomials, not ordinary polynomials.
<syntaxhighlight lang="julia">import Base.print
 
struct LaurentPolynomial{T}
powtocoef::Dict{Int,T}
varname::Char
end
 
function tosuper(i)
s = ""
if i != 1
if i < 0
s = "\u207b"
i = -i
end
s *= prod([reverseudi[x] for x in reverse(digits(i))])
end
return s
end
 
function print(io::IO, lp::LaurentPolynomial)
if isempty(lp.powtocoef) || all(iszero, values(lp.powtocoef))
print("0")
return
end
firstterm = true
dorev = minimum(keys(lp.powtocoef)) >= 0
for p in sort!(collect(lp.powtocoef), lt =(a,b)->a[1]<b[1], rev=dorev)
e, c = p[1], p[2]
if c != 0
if !firstterm
print(c < 0 ? " - " : " + ")
c = abs(c)
end
sfrac = get(tofracs, c - trunc(c), "")
sint = string(Int(trunc(c)))
s = round(c) == c ? sint : sfrac == "" ? string(c) :
sint == "0" ? sfrac : sint * sfrac
print(c == 1 && e != 0 ? "" : s)
e != 0 && print(lp.varname, tosuper(e))
firstterm = false
end
end
end
 
const uniexp = [['\u2070', '\u00b9', '\u00b2', '\u00b3']; collect('\u2074':'\u2079')]
const allsuper = String(vcat(uniexp, ['\u207a', '\u207b']))
const udi = Dict([u => i-1 for (i, u) in enumerate(uniexp)])
const reverseudi = Dict([v => k for (k, v) in udi])
const uch = Dict(['\u207a' => '+', '\u207b' => '-', '\u00b7' => ' ',
'\u00d7' => ' ', '\u2091' => '^', '\u23e8' => 'E'])
const fracs = Dict(['¼' => "$(1/4)", '½' => "$(1/2)", '¾' => "$(3/4)", '⅐' => "$(1/7)",
'⅑' => "$(1/9)", '⅒' => "$(1/10)", '⅓' => "$(1/3)", '⅔' => "$(2/3)", '⅕' => "$(1/5)",
'⅖' => "$(2/5)", '⅗' => "$(3/5)", '⅘' => "$(4/5)", '⅙' => "(1/6)", '⅚' => "$(5/6)",
'⅛' => "$(1/8)", '⅜' => "$(3/8)", '⅝' => "$(5/8)", '⅞' => "$(7/8)", '↉' => "$(0/3)"])
const tofracs = Dict(0.25 => '¼', 0.5 => '½', 0.75 => '¾', 0.2 => '⅕')
allfrac = join(vcat(collect(keys(fracs))), "|")
 
utoascii(c) = (x = haskey(udi, c) ? Char('0' + udi[c]) : haskey(uch, c) ? uch[c] : c)
 
function fcoef(termstring, varname)
m = match(r"(\d+)⁄(\d+)", termstring).captures
return "$(parse(Float64, m[1])/parse(Float64, m[2]))$varname^0"
end
 
function xcoef(termstring, varname)
m = match(Regex("(\\d+)$varname([^⁄\\+]*)⁄(\\d+)"), termstring).captures
coe = parse(Float64, m[1])/parse(Float64, m[3])
return "$(coe)$varname$(m[2])"
end
 
function fromvfrac(termstring)
m = match(r"(\d*)(\D+)", termstring).captures
s = string((m[1] == "" ? 0 : parse(Float64, m[1])) + parse(Float64, fracs[m[2][1]]))
end
 
function normalizeexpression(s, varname='x')
s = replace(s, Regex("\\d*(" * allfrac * ")") => (x) -> fromvfrac(x))
s = replace(replace(s, r"[^\+].+" => (x) -> "+$x"), r".+[^\+]$" => (x) -> "$x+")
s = replace(replace(replace(s, r"\s+" => ""), r"\*\*|↑" => "^"), "\u23e8" => "e")
s = replace(s, Regex(varname * "(?=[$allsuper]+)") => "$varname^")
s = replace(prod([utoascii(c) for c in s]), r"\s+" => "")
s = replace(s, r"[\-\+]+" => (x) -> isodd(count(y -> y == '-', x)) ? "+-" : "+")
s = replace(replace(s, r"\^\+\-" => "^-"), r"\^\+" => "^")
s = replace(s, Regex("(?<=[\\-\\+])$varname") => "1$varname")
s = replace(s, r"(\d+)x([^⁄\+]*)⁄(\d+)" => (x) -> xcoef(x, varname))
s = replace(s, r"(?<=[0-9])(,)(?=[0-9])" => "")
s = replace(s, r"\d+⁄\d+" => (x) -> fcoef(x, varname))
s = replace(s, r"\+([\d\.]+)\+" => SubstitutionString("+\\1$varname^0+"))
return replace(s, Regex("(⁄|/)(" * varname * ")\\^?") =>
(x) -> varname * (x[end] == '^' ? "^-" : "^-1"))
end
 
function topoly(s::String, varname='x')
allcoef = Dict{Int,Float64}(0 => 0.0)
s = normalizeexpression(s, varname)
reg = Regex("[\\.\\-\\+\\deE\\/]*" * varname * "(?:\\^[\\d\\-]+)?(?=(?:[^\\+\\-]?(?:\\+|\\-)))")
matched = collect(eachmatch(reg, s))
pairs = [split(x.match, varname * "^") for x in matched]
for p in pairs
p[1] = replace(p[1], "+-" => "-")
if length(p) == 1
push!(p, "1")
p[1] = replace(p[1], Regex(varname * "\$") => "")
end
coef, expo = tryparse(Float64, p[1]), tryparse(Int, p[2])
coef = coef == nothing ? 1.0 : coef
expo = expo == nothing ? 1 : expo
if haskey(allcoef, expo)
coef += allcoef[expo]
end
allcoef[expo] = coef
end
return LaurentPolynomial(allcoef, varname)
end
 
testcases = [
"1x⁵ - 2x⁴ + 42x³ + 0x² + 40x + 1",
"0e+0x⁰⁰⁷ + 00e-00x + 0x + .0x⁰⁵ - 0.x⁴ + 0×x³ + 0x⁻⁰ + 0/x + 0/x³ + 0x⁻⁵",
"1x⁵ - 2x⁴ + 42x³ + 40x + 1x⁰",
"+x⁺⁵ + -2x⁻⁻⁴ + 42x⁺⁺³ + +40x - -1",
"x^5 - 2x**4 + 42x^3 + 40x + 1",
"x↑5 - 2.00·x⁴ + 42.00·x³ + 40.00·x + 1",
"x⁻⁵ - 2⁄x⁴ + 42x⁻³ + 40/x + 1x⁻⁰",
"x⁵ - 2x⁴ + 42.000 000x³ + 40x + 1",
"x⁵ - 2x⁴ + 0,042x³ + 40.000,000x + 1",
"0x⁷ + 10x + 10x + x⁵ - 2x⁴ + 42x³ + 20x + 1",
"1E0x⁵ - 2,000,000.e-6x⁴ + 4.2⏨1x³ + .40e+2x + 1",
"x⁵ - x⁴⁄2 + 405x³⁄4 + 403x⁄4 + 5⁄2",
"x⁵ - ½x⁴ + 101¼x³ + 100¾x + 2½",
]
 
for s in testcases
println(lpad(s, 48), " => ", topoly(s, 'x'))
end
</syntaxhighlight>{{out}}
<pre>
1x⁵ - 2x⁴ + 42x³ + 0x² + 40x + 1 => x⁵ - 2x⁴ + 42x³ + 40x + 1
0e+0x⁰⁰⁷ + 00e-00x + 0x + .0x⁰⁵ - 0.x⁴ + 0×x³ + 0x⁻⁰ + 0/x + 0/x³ + 0x⁻⁵ => 0
1x⁵ - 2x⁴ + 42x³ + 40x + 1x⁰ => x⁵ - 2x⁴ + 42x³ + 40x + 1
+x⁺⁵ + -2x⁻⁻⁴ + 42x⁺⁺³ + +40x - -1 => x⁵ - 2x⁴ + 42x³ + 40x + 1
x^5 - 2x**4 + 42x^3 + 40x + 1 => x⁵ - 2x⁴ + 42x³ + 40x + 1
x↑5 - 2.00·x⁴ + 42.00·x³ + 40.00·x + 1 => x⁵ - 2x⁴ + 42x³ + 40x + 1
x⁻⁵ - 2⁄x⁴ + 42x⁻³ + 40/x + 1x⁻⁰ => x⁻⁵ - 2x⁻⁴ + 42x⁻³ + 40x⁻¹ + 1
x⁵ - 2x⁴ + 42.000 000x³ + 40x + 1 => x⁵ - 2x⁴ + 42x³ + 40x + 1
x⁵ - 2x⁴ + 0,042x³ + 40.000,000x + 1 => x⁵ - 2x⁴ + 42x³ + 40x + 1
0x⁷ + 10x + 10x + x⁵ - 2x⁴ + 42x³ + 20x + 1 => x⁵ - 2x⁴ + 42x³ + 40x + 1
1E0x⁵ - 2,000,000.e-6x⁴ + 4.2⏨1x³ + .40e+2x + 1 => x⁵ - 2x⁴ + 42x³ + 40x + 1
x⁵ - x⁴⁄2 + 405x³⁄4 + 403x⁄4 + 5⁄2 => x⁵ - ½x⁴ + 101¼x³ + 100¾x + 2½
x⁵ - ½x⁴ + 101¼x³ + 100¾x + 2½ => x⁵ - ½x⁴ + 101¼x³ + 100¾x + 2½
</pre>
 
=={{header|Nim}}==
{{trans|Go}}
<syntaxhighlight lang="nim">import re, sequtils, strutils, tables
from unicode import toRunes
 
const
 
Powers = [("0", "⁰"), ("1", "¹"), ("2", "²"), ("3", "³"), ("4", "⁴"),
("5", "⁵"), ("6", "⁶"), ("7", "⁷"), ("8", "⁸"), ("9", "⁹")]
 
Fractions = [(".25", "¼"), (".5", "½"), (".75", "¾"), (".14285714285714", "⅐"),
(".11111111111111", "⅑"), (".1", "⅒"), (".33333333333333", "⅓"),
(".66666666666667", "⅔"), (".2", "⅕"), (".4", "⅖"), (".6", "⅗"),
(".8", "⅘"), (".16666666666667", "⅙"), (".83333333333333", "⅚"),
(".125", "⅛"), (".375", "⅜"), (".625", "⅝"), (".875", "⅞")]
 
Reps1 = [(",", ""), (" ", ""), ("¼", ".25"), ("½", ".5"), ("¾", ".75"),
("⅐", ".14285714285714"), ("⅑", ".11111111111111"), ("⅒", ".1"),
("⅓", ".33333333333333"), ("⅔", ".66666666666667"), ("⅕", ".2"),
("⅖", ".4"), ("⅗", ".6"), ("⅘", ".8"), ("⅙", ".16666666666667"),
("⅚", ".83333333333333"), ("⅛", ".125"), ("⅜", ".375"), ("⅝", ".625"),
("⅞", ".875"), ("↉", ".0"), ("⏨", "e"), ("⁄", "/")]
 
Reps2 = [("⁰", "0"), ("¹", "1"), ("²", "2"), ("³", "3"), ("⁴", "4"), ("⁵", "5"),
("⁶", "6"), ("⁷", "7"), ("⁸", "8"), ("⁹", "9"), ("⁻⁻", ""), ("⁻", "-"),
("⁺", ""), ("**", ""), ("^", ""), ("↑", ""), ("⁄", "/")]
 
Eqs = [
"-0.00x⁺¹⁰ + 1.0·x ** 5 + -2e0x^4 + +0,042.00 × x ⁺³ + +.0x² + 20.000 000 000x¹ - -1x⁺⁰ + .0x⁻¹ + 20.x¹",
"x⁵ - 2x⁴ + 42x³ + 0x² + 40x + 1",
"0e+0x⁰⁰⁷ + 00e-00x + 0x + .0x⁰⁵ - 0.x⁴ + 0×x³ + 0x⁻⁰ + 0/x + 0/x³ + 0x⁻⁵",
"1x⁵ - 2x⁴ + 42x³ + 40x + 1x⁰",
"+x⁺⁵ + -2x⁻⁻⁴ + 42x⁺⁺³ + +40x - -1",
"x^5 - 2x**4 + 42x^3 + 40x + 1",
"x↑5 - 2.00·x⁴ + 42.00·x³ + 40.00·x + 1",
"x⁻⁵ - 2⁄x⁴ + 42x⁻³ + 40/x + 1x⁻⁰",
"x⁵ - 2x⁴ + 42.000 000x³ + 40x + 1",
"x⁵ - 2x⁴ + 0,042x³ + 40.000,000x + 1",
"0x⁷ + 10x + 10x + x⁵ - 2x⁴ + 42x³ + 20x + 1",
"1E0x⁵ - 2,000,000.e-6x⁴ + 4.2⏨1x³ + .40e+2x + 1",
"x⁵ - x⁴⁄2 + 405x³⁄4 + 403x⁄4 + 5⁄2",
"x⁵ - 0.5x⁴ + 101.25x³ + 100.75x + 2.5",
"x⁻⁵ - 2⁄x⁴ + 42x⁻³ - 40/x",
"⅐x⁵ - ⅓x⁴ - ⅔x⁴ + 42⅕x³ + ⅑x - 40⅛ - ⅝"]
 
type Coefs = Table[int, float]
 
proc printEquation(coefs: Coefs) =
stdout.write "=> "
if coefs.len == 0:
echo "0\n"
return
 
var max = int.low
var min = int.high
for k in coefs.keys:
if k > max: max = k
if k < min: min = k
 
for p in countdown(max, min):
var c = coefs.getOrDefault(p)
if c != 0:
if p < max:
var sign = '+'
if c < 0:
sign = '-'
c = -c
stdout.write ' ', sign, ' '
 
if c != 1 or (c == 1 and p == 0):
var cs = $c
cs.trimZeros()
let ix = cs.find('.')
if ix >= 0:
let d = cs[ix..^1]
for frac in Fractions:
if d == frac[0]:
cs = cs.replace(d, frac[1])
break
if cs[0] == '0' and cs.len > 1 and cs[1] != '.':
cs = cs[1..^1]
stdout.write cs
 
if p != 0:
var ps = ($p).multiReplace(Powers)
if ps == "¹": ps = ""
stdout.write 'x', ps
 
echo '\n'
 
 
template getFloat(s: string): float =
try:
s.parseFloat()
except ValueError:
quit "Expected float, got: " & s, QuitFailure
 
let rgx = re"\s+(\+|-)\s+"
 
for eq in Eqs:
echo eq
let terms = eq.split(rgx)
let ops = toSeq(eq.findAll(rgx)).mapIt(it.strip())
var coefs: Coefs
for i, term in terms:
 
let s = term.split("x")
var t = s[0]
t = unicode.strip(t, runes = "·× ".toRunes)
t = t.multiReplace(Reps1)
var c = 1.0
var inverse = false
if t == "" or t == "+" or t == "-": t &= '1'
 
let ix = t.find('/')
if ix == t.high:
inverse = true
t.setLen(t.high)
c = t.getFloat()
elif ix >= 0:
let u = t.split('/')
let m = u[0].getFloat()
let n = u[1].getFloat()
c = m / n
else:
c = t.getFloat()
if i > 0 and ops[i - 1] == "-": c = -c
if c == -0.0: c = 0.0
 
if s.len == 1:
coefs[0] = coefs.getOrDefault(0) + c
continue
 
var u = s[1].strip()
if u.len == 0:
let p = if inverse: -1 else: 1
if c != 0:
coefs[p] = coefs.getOrDefault(p) + c
continue
 
u = u.multiReplace(Reps2)
let jx = u.find('/')
var p: int
if jx >= 0:
let v = u.split('/')
p = try: v[0].parseInt() except ValueError: 1
let d = v[1].getFloat()
c /= d
else:
p = try: u.strip().parseInt() except ValueError: 1
if inverse: p = -p
if c != 0: coefs[p] = coefs.getOrDefault(p) + c
 
printEquation(coefs)</syntaxhighlight>
 
{{out}}
<pre>-0.00x⁺¹⁰ + 1.0·x ** 5 + -2e0x^4 + +0,042.00 × x ⁺³ + +.0x² + 20.000 000 000x¹ - -1x⁺⁰ + .0x⁻¹ + 20.x¹
=> x⁵ - 2x⁴ + 42x³ + 40x + 1
 
x⁵ - 2x⁴ + 42x³ + 0x² + 40x + 1
=> x⁵ - 2x⁴ + 42x³ + 40x + 1
 
0e+0x⁰⁰⁷ + 00e-00x + 0x + .0x⁰⁵ - 0.x⁴ + 0×x³ + 0x⁻⁰ + 0/x + 0/x³ + 0x⁻⁵
=> 0
 
1x⁵ - 2x⁴ + 42x³ + 40x + 1x⁰
=> x⁵ - 2x⁴ + 42x³ + 40x + 1
 
+x⁺⁵ + -2x⁻⁻⁴ + 42x⁺⁺³ + +40x - -1
=> x⁵ - 2x⁴ + 42x³ + 40x + 1
 
x^5 - 2x**4 + 42x^3 + 40x + 1
=> x⁵ - 2x⁴ + 42x³ + 40x + 1
 
x↑5 - 2.00·x⁴ + 42.00·x³ + 40.00·x + 1
=> x⁵ - 2x⁴ + 42x³ + 40x + 1
 
x⁻⁵ - 2⁄x⁴ + 42x⁻³ + 40/x + 1x⁻⁰
=> 1 + 40x-¹ + 42x-³ - 2x-⁴ + x-⁵
 
x⁵ - 2x⁴ + 42.000 000x³ + 40x + 1
=> x⁵ - 2x⁴ + 42x³ + 40x + 1
 
x⁵ - 2x⁴ + 0,042x³ + 40.000,000x + 1
=> x⁵ - 2x⁴ + 42x³ + 40x + 1
 
0x⁷ + 10x + 10x + x⁵ - 2x⁴ + 42x³ + 20x + 1
=> x⁵ - 2x⁴ + 42x³ + 40x + 1
 
1E0x⁵ - 2,000,000.e-6x⁴ + 4.2⏨1x³ + .40e+2x + 1
=> x⁵ - 2x⁴ + 42x³ + 40x + 1
 
x⁵ - x⁴⁄2 + 405x³⁄4 + 403x⁄4 + 5⁄2
=> x⁵ - ½x⁴ + 101¼x³ + 100¾x + 2½
 
x⁵ - 0.5x⁴ + 101.25x³ + 100.75x + 2.5
=> x⁵ - ½x⁴ + 101¼x³ + 100¾x + 2½
 
x⁻⁵ - 2⁄x⁴ + 42x⁻³ - 40/x
=> -40x-¹ + 42x-³ - 2x-⁴ + x-⁵
 
⅐x⁵ - ⅓x⁴ - ⅔x⁴ + 42⅕x³ + ⅑x - 40⅛ - ⅝
=> ⅐x⁵ - x⁴ + 42⅕x³ + ⅑x - 40¾</pre>
 
=={{header|Phix}}==
To simplify this task I first created a test file (save as utf8, Unicode_polynomial_equation.e):
<!--<syntaxhighlight lang="phix">(phixonline)-->
<span style="color: #008080;">constant</span> <span style="color: #000000;">raw_text</span> <span style="color: #0000FF;">=</span> <span style="color: #008000;">"""
-0.00x⁺¹⁰ + 1.0·x ** 5 + -2e0x^4 + +0,042.00 × x ⁺³ + +.0x² + 20.000 000 000x¹ - -1x⁺⁰ + .0x⁻¹ + 20.x¹
==&gt; x⁵ - 2x⁴ + 42x³ + 40x + 1
===&gt; x^5 - 2x^4 + 42x^3 + 40x + 1
x⁵ - 2x⁴ + 42x³ + 0x² + 40x + 1
==&gt; x⁵ - 2x⁴ + 42x³ + 40x + 1
0e+0x⁰⁰⁷ + 00e-00x + 0x + .0x⁰⁵ - 0.x⁴ + 0×x³ + 0x⁻⁰ + 0/x + 0/x³ + 0x⁻⁵
==&gt; 0
1x⁵ - 2x⁴ + 42x³ + 40x + 1x⁰
==&gt; x⁵ - 2x⁴ + 42x³ + 40x + 1
+x⁺⁵ + -2x⁻⁻⁴ + 42x⁺⁺³ + +40x - -1
==&gt; x⁵ - 2x⁴ + 42x³ + 40x + 1
x^5 - 2x**4 + 42x^3 + 40x + 1
==&gt; x⁵ - 2x⁴ + 42x³ + 40x + 1
x↑5 - 2.00·x⁴ + 42.00·x³ + 40.00·x + 1
==&gt; x⁵ - 2x⁴ + 42x³ + 40x + 1
x⁻⁵ - 2⁄x⁴ + 42x⁻³ + 40/x + 1x⁻⁰
==&gt; 1 + 40x⁻¹ + 42x⁻³ - 2x⁻⁴ + x⁻⁵
===&gt; 1 + 40x^-1 + 42x^-3 - 2x^-4 + x^-5
x⁵ - 2x⁴ + 42.000 000x³ + 40x + 1
==&gt; x⁵ - 2x⁴ + 42x³ + 40x + 1
x⁵ - 2x⁴ + 0,042x³ + 40.000,000x + 1
==&gt; x⁵ - 2x⁴ + 42x³ + 40x + 1
0x⁷ + 10x + 10x + x⁵ - 2x⁴ + 42x³ + 20x + 1
==&gt; x⁵ - 2x⁴ + 42x³ + 40x + 1
1E0x⁵ - 2,000,000.e-6x⁴ + 4.2⏨1x³ + .40e+2x + 1
==&gt; x⁵ - 2x⁴ + 42x³ + 40x + 1
x⁵ - x⁴⁄2 + 405x³⁄4 + 403x⁄4 + 5⁄2
==&gt; x⁵ - ½x⁴ + 101¼x³ + 100¾x + 2½
===&gt; x^5 - 0.5x^4 + 101.25x^3 + 100.75x + 2.5
x⁵ - ½x⁴ + 101¼x³ + 100¾x + 2½
==&gt; x⁵ - ½x⁴ + 101¼x³ + 100¾x + 2½
x&lt;sup&gt;5&lt;/sup&gt; - 2x&lt;sup&gt;4&lt;/sup&gt; + 42x&lt;sup&gt;3&lt;/sup&gt; + 40x + 1
==&gt; x⁵ - 2x⁴ + 42x³ + 40x + 1
x^5 - 2x^4 + 42x^3 + 40x + 1
==&gt; x⁵ - 2x⁴ + 42x³ + 40x + 1
x⁵ - 2x⁴ + 42x³ + 40x + 1
==&gt; x⁵ - 2x⁴ + 42x³ + 40x + 1
x5 - 2x4 + 42x3 + 40x + 1
==&gt; x⁵ - 2x⁴ + 42x³ + 40x + 1
"""</span>
<span style="color: #008080;">global</span> <span style="color: #008080;">function</span> <span style="color: #000000;">get_lines</span><span style="color: #0000FF;">()</span>
<span style="color: #008080;">return</span> <span style="color: #7060A8;">split</span><span style="color: #0000FF;">(</span><span style="color: #000000;">raw_text</span><span style="color: #0000FF;">,</span><span style="color: #008000;">"\n"</span><span style="color: #0000FF;">)</span>
<span style="color: #008080;">end</span> <span style="color: #008080;">function</span>
<!--</syntaxhighlight>-->
Explanation: <br>
On finding a line beginning with "==> ", parse the previous line and check that the output matches the rest of the line.<br>
Lines beginning "===> " contain alternative (valid) representations of the previous line, for use when uni_frac is false. Note these equivalences can then be used further on, eg the result on line 5 maps to line 3 via 2, not that it matters should the same equivalent be defined twice, and also note that "==> " should always be the unicode version and "===> " the ascii one.
 
Obviously this is not well tested and //will// fail on the next thing thrown at it, but
it shows the basic approach. Error handling omitted using that good ol' standby excuse
"for clarity".
 
Note that space is not skipped when getting exponents, otherwise it might wrongly treat
say "x + 2" as "x^2", since we /are/ allowing exponentiation symbols to be omitted. At
the start of parse() we strip spaces around '^' (etc) to help with that.
 
Processing the input in utf32 form is a complete no-brainer; whereas constructing utf8
output is a little more subtle, but avoids creating a utf32 "string" just because all
bytes happen to be less than 255, which would not necessarily be valid utf8/32.
 
<!--<syntaxhighlight lang="phix">(phixonline)-->
<span style="color: #000080;font-style:italic;">-- demo\rosetta\Unicode_polynomial_equation.exw</span>
<span style="color: #008080;">constant</span> <span style="color: #000000;">uni_frac</span> <span style="color: #0000FF;">=</span> <span style="color: #7060A8;">platform</span><span style="color: #0000FF;">()!=</span><span style="color: #004600;">WINDOWS</span> <span style="color: #000080;font-style:italic;">-- if true output unicode superscripts and vulgar fractions</span>
<span style="color: #008080;">constant</span> <span style="color: #000000;">UTF8BOM</span> <span style="color: #0000FF;">=</span> <span style="color: #0000FF;">{</span><span style="color: #000000;">#EF</span><span style="color: #0000FF;">,</span><span style="color: #000000;">#BB</span><span style="color: #0000FF;">,</span><span style="color: #000000;">#BF</span><span style="color: #0000FF;">},</span>
<span style="color: #000000;">SPTWO</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">#00B2</span><span style="color: #0000FF;">,</span> <span style="color: #000080;font-style:italic;">-- superscript two</span>
<span style="color: #000000;">STHRE</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">#00B3</span><span style="color: #0000FF;">,</span> <span style="color: #000080;font-style:italic;">-- superscript three</span>
<span style="color: #000000;">MIDOT</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">#00B7</span><span style="color: #0000FF;">,</span> <span style="color: #000080;font-style:italic;">-- middle dot</span>
<span style="color: #000000;">SPONE</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">#00B9</span><span style="color: #0000FF;">,</span> <span style="color: #000080;font-style:italic;">-- superscript one</span>
<span style="color: #000000;">QUART</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">#00BC</span><span style="color: #0000FF;">,</span> <span style="color: #000080;font-style:italic;">-- one quarter</span>
<span style="color: #000000;">AHALF</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">#00BD</span><span style="color: #0000FF;">,</span> <span style="color: #000080;font-style:italic;">-- one half</span>
<span style="color: #000000;">THQTR</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">#00BE</span><span style="color: #0000FF;">,</span> <span style="color: #000080;font-style:italic;">-- three quarters</span>
<span style="color: #000000;">MULTY</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">#00D7</span><span style="color: #0000FF;">,</span> <span style="color: #000080;font-style:italic;">-- multiplication sign</span>
<span style="color: #000000;">DIVDE</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">#2044</span><span style="color: #0000FF;">,</span> <span style="color: #000080;font-style:italic;">-- division sign</span>
<span style="color: #000000;">SZERO</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">#2070</span><span style="color: #0000FF;">,</span> <span style="color: #000080;font-style:italic;">-- superscript zero</span>
<span style="color: #000000;">SFOUR</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">#2074</span><span style="color: #0000FF;">,</span> <span style="color: #000080;font-style:italic;">-- superscript four</span>
<span style="color: #000000;">SFIVE</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">#2075</span><span style="color: #0000FF;">,</span> <span style="color: #000080;font-style:italic;">-- superscript five</span>
<span style="color: #000000;">SPSIX</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">#2076</span><span style="color: #0000FF;">,</span> <span style="color: #000080;font-style:italic;">-- superscript six</span>
<span style="color: #000000;">SSEVN</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">#2077</span><span style="color: #0000FF;">,</span> <span style="color: #000080;font-style:italic;">-- superscript seven</span>
<span style="color: #000000;">SEGHT</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">#2078</span><span style="color: #0000FF;">,</span> <span style="color: #000080;font-style:italic;">-- superscript eight</span>
<span style="color: #000000;">SNINE</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">#2079</span><span style="color: #0000FF;">,</span> <span style="color: #000080;font-style:italic;">-- superscript nine</span>
<span style="color: #000000;">SPLUS</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">#207A</span><span style="color: #0000FF;">,</span> <span style="color: #000080;font-style:italic;">-- superscript plus</span>
<span style="color: #000000;">SMNUS</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">#207B</span><span style="color: #0000FF;">,</span> <span style="color: #000080;font-style:italic;">-- superscript minus</span>
<span style="color: #000000;">SVNTH</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">#2150</span><span style="color: #0000FF;">,</span> <span style="color: #000080;font-style:italic;">-- one seventh</span>
<span style="color: #000000;">NINTH</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">#2151</span><span style="color: #0000FF;">,</span> <span style="color: #000080;font-style:italic;">-- one ninth</span>
<span style="color: #000000;">TENTH</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">#2152</span><span style="color: #0000FF;">,</span> <span style="color: #000080;font-style:italic;">-- one tenth</span>
<span style="color: #000000;">THIRD</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">#2153</span><span style="color: #0000FF;">,</span> <span style="color: #000080;font-style:italic;">-- one third</span>
<span style="color: #000000;">TWTHD</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">#2154</span><span style="color: #0000FF;">,</span> <span style="color: #000080;font-style:italic;">-- two thirds</span>
<span style="color: #000000;">FIFTH</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">#2155</span><span style="color: #0000FF;">,</span> <span style="color: #000080;font-style:italic;">-- one fifth</span>
<span style="color: #000000;">TWFTH</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">#2156</span><span style="color: #0000FF;">,</span> <span style="color: #000080;font-style:italic;">-- two fifths</span>
<span style="color: #000000;">THFTH</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">#2157</span><span style="color: #0000FF;">,</span> <span style="color: #000080;font-style:italic;">-- three fifths</span>
<span style="color: #000000;">FRFTH</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">#2158</span><span style="color: #0000FF;">,</span> <span style="color: #000080;font-style:italic;">-- four fifths</span>
<span style="color: #000000;">SIXTH</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">#2159</span><span style="color: #0000FF;">,</span> <span style="color: #000080;font-style:italic;">-- one sixth</span>
<span style="color: #000000;">FVSIX</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">#215A</span><span style="color: #0000FF;">,</span> <span style="color: #000080;font-style:italic;">-- five sixths</span>
<span style="color: #000000;">EIGTH</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">#215B</span><span style="color: #0000FF;">,</span> <span style="color: #000080;font-style:italic;">-- one eigth</span>
<span style="color: #000000;">THEGH</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">#215C</span><span style="color: #0000FF;">,</span> <span style="color: #000080;font-style:italic;">-- three eigths</span>
<span style="color: #000000;">FVEGH</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">#215D</span><span style="color: #0000FF;">,</span> <span style="color: #000080;font-style:italic;">-- five eigths</span>
<span style="color: #000000;">UPARW</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">#2191</span><span style="color: #0000FF;">,</span> <span style="color: #000080;font-style:italic;">-- uparrow</span>
<span style="color: #000000;">BASET</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">#23E8</span><span style="color: #0000FF;">,</span> <span style="color: #000080;font-style:italic;">-- base 10</span>
<span style="color: #000000;">SPACE</span> <span style="color: #0000FF;">=</span> <span style="color: #008000;">' '</span><span style="color: #0000FF;">,</span> <span style="color: #000080;font-style:italic;">-- space</span>
<span style="color: #000000;">T</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">10</span> <span style="color: #000080;font-style:italic;">-- align nxt tbl</span>
<span style="color: #008080;">constant</span> <span style="color: #0000FF;">{</span><span style="color: #000000;">vulgar_fractions</span><span style="color: #0000FF;">,</span><span style="color: #000000;">unicode_vulgar_fractions</span><span style="color: #0000FF;">}</span> <span style="color: #0000FF;">=</span> <span style="color: #7060A8;">columnize</span><span style="color: #0000FF;">({{{</span><span style="color: #000000;">1</span><span style="color: #0000FF;">,</span><span style="color: #000000;">4</span><span style="color: #0000FF;">},</span><span style="color: #000000;">QUART</span><span style="color: #0000FF;">},</span>
<span style="color: #0000FF;">{{</span><span style="color: #000000;">1</span><span style="color: #0000FF;">,</span><span style="color: #000000;">2</span><span style="color: #0000FF;">},</span><span style="color: #000000;">AHALF</span><span style="color: #0000FF;">},</span>
<span style="color: #0000FF;">{{</span><span style="color: #000000;">3</span><span style="color: #0000FF;">,</span><span style="color: #000000;">4</span><span style="color: #0000FF;">},</span><span style="color: #000000;">THQTR</span><span style="color: #0000FF;">},</span>
<span style="color: #0000FF;">{{</span><span style="color: #000000;">1</span><span style="color: #0000FF;">,</span><span style="color: #000000;">7</span><span style="color: #0000FF;">},</span><span style="color: #000000;">SVNTH</span><span style="color: #0000FF;">},</span>
<span style="color: #0000FF;">{{</span><span style="color: #000000;">1</span><span style="color: #0000FF;">,</span><span style="color: #000000;">9</span><span style="color: #0000FF;">},</span><span style="color: #000000;">NINTH</span><span style="color: #0000FF;">},</span>
<span style="color: #0000FF;">{{</span><span style="color: #000000;">1</span><span style="color: #0000FF;">,</span><span style="color: #000000;">T</span><span style="color: #0000FF;">},</span><span style="color: #000000;">TENTH</span><span style="color: #0000FF;">},</span>
<span style="color: #0000FF;">{{</span><span style="color: #000000;">1</span><span style="color: #0000FF;">,</span><span style="color: #000000;">3</span><span style="color: #0000FF;">},</span><span style="color: #000000;">THIRD</span><span style="color: #0000FF;">},</span>
<span style="color: #0000FF;">{{</span><span style="color: #000000;">2</span><span style="color: #0000FF;">,</span><span style="color: #000000;">3</span><span style="color: #0000FF;">},</span><span style="color: #000000;">TWTHD</span><span style="color: #0000FF;">},</span>
<span style="color: #0000FF;">{{</span><span style="color: #000000;">1</span><span style="color: #0000FF;">,</span><span style="color: #000000;">5</span><span style="color: #0000FF;">},</span><span style="color: #000000;">FIFTH</span><span style="color: #0000FF;">},</span>
<span style="color: #0000FF;">{{</span><span style="color: #000000;">2</span><span style="color: #0000FF;">,</span><span style="color: #000000;">5</span><span style="color: #0000FF;">},</span><span style="color: #000000;">TWFTH</span><span style="color: #0000FF;">},</span>
<span style="color: #0000FF;">{{</span><span style="color: #000000;">3</span><span style="color: #0000FF;">,</span><span style="color: #000000;">5</span><span style="color: #0000FF;">},</span><span style="color: #000000;">THFTH</span><span style="color: #0000FF;">},</span>
<span style="color: #0000FF;">{{</span><span style="color: #000000;">4</span><span style="color: #0000FF;">,</span><span style="color: #000000;">5</span><span style="color: #0000FF;">},</span><span style="color: #000000;">FRFTH</span><span style="color: #0000FF;">},</span>
<span style="color: #0000FF;">{{</span><span style="color: #000000;">1</span><span style="color: #0000FF;">,</span><span style="color: #000000;">6</span><span style="color: #0000FF;">},</span><span style="color: #000000;">SIXTH</span><span style="color: #0000FF;">},</span>
<span style="color: #0000FF;">{{</span><span style="color: #000000;">5</span><span style="color: #0000FF;">,</span><span style="color: #000000;">6</span><span style="color: #0000FF;">},</span><span style="color: #000000;">FVSIX</span><span style="color: #0000FF;">},</span>
<span style="color: #0000FF;">{{</span><span style="color: #000000;">1</span><span style="color: #0000FF;">,</span><span style="color: #000000;">8</span><span style="color: #0000FF;">},</span><span style="color: #000000;">EIGTH</span><span style="color: #0000FF;">},</span>
<span style="color: #0000FF;">{{</span><span style="color: #000000;">3</span><span style="color: #0000FF;">,</span><span style="color: #000000;">8</span><span style="color: #0000FF;">},</span><span style="color: #000000;">THEGH</span><span style="color: #0000FF;">},</span>
<span style="color: #0000FF;">{{</span><span style="color: #000000;">5</span><span style="color: #0000FF;">,</span><span style="color: #000000;">8</span><span style="color: #0000FF;">},</span><span style="color: #000000;">FVEGH</span><span style="color: #0000FF;">}})</span>
<span style="color: #008080;">constant</span> <span style="color: #000000;">EXPONENTS</span> <span style="color: #0000FF;">=</span> <span style="color: #0000FF;">{</span><span style="color: #000000;">SZERO</span><span style="color: #0000FF;">,</span><span style="color: #000000;">SPONE</span><span style="color: #0000FF;">,</span><span style="color: #000000;">SPTWO</span><span style="color: #0000FF;">,</span><span style="color: #000000;">STHRE</span><span style="color: #0000FF;">,</span><span style="color: #000000;">SFOUR</span><span style="color: #0000FF;">,</span><span style="color: #000000;">SFIVE</span><span style="color: #0000FF;">,</span><span style="color: #000000;">SPSIX</span><span style="color: #0000FF;">,</span><span style="color: #000000;">SSEVN</span><span style="color: #0000FF;">,</span><span style="color: #000000;">SEGHT</span><span style="color: #0000FF;">,</span><span style="color: #000000;">SNINE</span><span style="color: #0000FF;">}</span>
<span style="color: #008080;">function</span> <span style="color: #000000;">skip</span><span style="color: #0000FF;">(</span><span style="color: #004080;">sequence</span> <span style="color: #000000;">s</span><span style="color: #0000FF;">,</span> <span style="color: #004080;">integer</span> <span style="color: #000000;">sdx</span><span style="color: #0000FF;">,</span> <span style="color: #004080;">sequence</span> <span style="color: #000000;">set</span><span style="color: #0000FF;">)</span>
<span style="color: #008080;">while</span> <span style="color: #000000;">sdx</span><span style="color: #0000FF;"><=</span><span style="color: #7060A8;">length</span><span style="color: #0000FF;">(</span><span style="color: #000000;">s</span><span style="color: #0000FF;">)</span>
<span style="color: #008080;">and</span> <span style="color: #7060A8;">find</span><span style="color: #0000FF;">(</span><span style="color: #000000;">s</span><span style="color: #0000FF;">[</span><span style="color: #000000;">sdx</span><span style="color: #0000FF;">],</span><span style="color: #000000;">set</span><span style="color: #0000FF;">)</span> <span style="color: #008080;">do</span>
<span style="color: #000000;">sdx</span> <span style="color: #0000FF;">+=</span> <span style="color: #000000;">1</span>
<span style="color: #008080;">end</span> <span style="color: #008080;">while</span>
<span style="color: #008080;">return</span> <span style="color: #000000;">sdx</span>
<span style="color: #008080;">end</span> <span style="color: #008080;">function</span>
<span style="color: #008080;">function</span> <span style="color: #000000;">get_sign</span><span style="color: #0000FF;">(</span><span style="color: #004080;">sequence</span> <span style="color: #000000;">s</span><span style="color: #0000FF;">,</span> <span style="color: #004080;">integer</span> <span style="color: #000000;">sdx</span><span style="color: #0000FF;">,</span> <span style="color: #004080;">bool</span> <span style="color: #000000;">allow_superscripts</span><span style="color: #0000FF;">)</span>
<span style="color: #004080;">integer</span> <span style="color: #000000;">sgn</span> <span style="color: #0000FF;">=</span> <span style="color: #0000FF;">+</span><span style="color: #000000;">1</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">ch</span>
<span style="color: #008080;">for</span> <span style="color: #000000;">i</span><span style="color: #0000FF;">=</span><span style="color: #000000;">sdx</span> <span style="color: #008080;">to</span> <span style="color: #7060A8;">length</span><span style="color: #0000FF;">(</span><span style="color: #000000;">s</span><span style="color: #0000FF;">)</span> <span style="color: #008080;">do</span>
<span style="color: #000000;">ch</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">s</span><span style="color: #0000FF;">[</span><span style="color: #000000;">sdx</span><span style="color: #0000FF;">]</span>
<span style="color: #008080;">if</span> <span style="color: #000000;">allow_superscripts</span> <span style="color: #008080;">then</span>
<span style="color: #000000;">ch</span> <span style="color: #0000FF;">=</span> <span style="color: #008080;">iff</span><span style="color: #0000FF;">(</span><span style="color: #000000;">ch</span><span style="color: #0000FF;">=</span><span style="color: #000000;">SPLUS</span><span style="color: #0000FF;">?</span><span style="color: #008000;">'+'</span><span style="color: #0000FF;">:</span>
<span style="color: #008080;">iff</span><span style="color: #0000FF;">(</span><span style="color: #000000;">ch</span><span style="color: #0000FF;">=</span><span style="color: #000000;">SMNUS</span><span style="color: #0000FF;">?</span><span style="color: #008000;">'-'</span><span style="color: #0000FF;">:</span>
<span style="color: #008080;">iff</span><span style="color: #0000FF;">(</span><span style="color: #000000;">ch</span><span style="color: #0000FF;">=</span><span style="color: #000000;">SPACE</span><span style="color: #0000FF;">?</span><span style="color: #008000;">'?'</span><span style="color: #0000FF;">:</span><span style="color: #000000;">ch</span><span style="color: #0000FF;">)))</span> <span style="color: #000080;font-style:italic;">-- (do not skip spaces, see note)</span>
<span style="color: #008080;">end</span> <span style="color: #008080;">if</span>
<span style="color: #008080;">if</span> <span style="color: #000000;">ch</span><span style="color: #0000FF;">!=</span><span style="color: #008000;">'+'</span>
<span style="color: #008080;">and</span> <span style="color: #000000;">ch</span><span style="color: #0000FF;">!=</span><span style="color: #008000;">' '</span> <span style="color: #008080;">then</span>
<span style="color: #008080;">if</span> <span style="color: #000000;">ch</span><span style="color: #0000FF;">!=</span><span style="color: #008000;">'-'</span> <span style="color: #008080;">then</span> <span style="color: #008080;">exit</span> <span style="color: #008080;">end</span> <span style="color: #008080;">if</span>
<span style="color: #000000;">sgn</span> <span style="color: #0000FF;">*=</span> <span style="color: #0000FF;">-</span><span style="color: #000000;">1</span>
<span style="color: #008080;">end</span> <span style="color: #008080;">if</span>
<span style="color: #000000;">sdx</span> <span style="color: #0000FF;">+=</span> <span style="color: #000000;">1</span>
<span style="color: #008080;">end</span> <span style="color: #008080;">for</span>
<span style="color: #008080;">return</span> <span style="color: #0000FF;">{</span><span style="color: #000000;">sgn</span><span style="color: #0000FF;">,</span><span style="color: #000000;">sdx</span><span style="color: #0000FF;">}</span>
<span style="color: #008080;">end</span> <span style="color: #008080;">function</span>
<span style="color: #008080;">function</span> <span style="color: #000000;">get_num</span><span style="color: #0000FF;">(</span><span style="color: #004080;">sequence</span> <span style="color: #000000;">s</span><span style="color: #0000FF;">,</span> <span style="color: #004080;">integer</span> <span style="color: #000000;">sdx</span><span style="color: #0000FF;">,</span> <span style="color: #004080;">atom</span> <span style="color: #000000;">n</span><span style="color: #0000FF;">=</span><span style="color: #000000;">0</span><span style="color: #0000FF;">,</span> <span style="color: #004080;">bool</span> <span style="color: #000000;">allow_superscripts</span><span style="color: #0000FF;">=</span><span style="color: #004600;">false</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">as_fraction</span><span style="color: #0000FF;">=</span><span style="color: #004600;">false</span><span style="color: #0000FF;">)</span>
<span style="color: #004080;">integer</span> <span style="color: #000000;">sgn</span> <span style="color: #0000FF;">=</span> <span style="color: #0000FF;">+</span><span style="color: #000000;">1</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">ch</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">f</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">e10</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">d</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">1</span>
<span style="color: #004080;">atom</span> <span style="color: #000000;">p10</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">10</span>
<span style="color: #004080;">bool</span> <span style="color: #000000;">none</span> <span style="color: #0000FF;">=</span> <span style="color: #008080;">not</span> <span style="color: #000000;">as_fraction</span> <span style="color: #000080;font-style:italic;">-- (cope with "x" == "1x^1" and != "0x^0")
-- (but not when processing the "34" of "12.34", obvs)</span>
<span style="color: #008080;">if</span> <span style="color: #008080;">not</span> <span style="color: #000000;">as_fraction</span> <span style="color: #008080;">then</span>
<span style="color: #0000FF;">{</span><span style="color: #000000;">sgn</span><span style="color: #0000FF;">,</span><span style="color: #000000;">sdx</span><span style="color: #0000FF;">}</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">get_sign</span><span style="color: #0000FF;">(</span><span style="color: #000000;">s</span><span style="color: #0000FF;">,</span><span style="color: #000000;">sdx</span><span style="color: #0000FF;">,</span><span style="color: #000000;">allow_superscripts</span><span style="color: #0000FF;">)</span>
<span style="color: #008080;">end</span> <span style="color: #008080;">if</span>
<span style="color: #008080;">if</span> <span style="color: #008080;">not</span> <span style="color: #000000;">allow_superscripts</span> <span style="color: #008080;">then</span>
<span style="color: #000000;">sdx</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">skip</span><span style="color: #0000FF;">(</span><span style="color: #000000;">s</span><span style="color: #0000FF;">,</span><span style="color: #000000;">sdx</span><span style="color: #0000FF;">,{</span><span style="color: #008000;">' '</span><span style="color: #0000FF;">})</span>
<span style="color: #008080;">end</span> <span style="color: #008080;">if</span>
<span style="color: #008080;">for</span> <span style="color: #000000;">i</span><span style="color: #0000FF;">=</span><span style="color: #000000;">sdx</span> <span style="color: #008080;">to</span> <span style="color: #7060A8;">length</span><span style="color: #0000FF;">(</span><span style="color: #000000;">s</span><span style="color: #0000FF;">)</span> <span style="color: #008080;">do</span>
<span style="color: #000000;">ch</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">s</span><span style="color: #0000FF;">[</span><span style="color: #000000;">sdx</span><span style="color: #0000FF;">]</span>
<span style="color: #008080;">if</span> <span style="color: #000000;">ch</span><span style="color: #0000FF;">>=</span><span style="color: #008000;">'0'</span> <span style="color: #008080;">and</span> <span style="color: #000000;">ch</span><span style="color: #0000FF;"><=</span><span style="color: #008000;">'9'</span> <span style="color: #008080;">then</span>
<span style="color: #008080;">if</span> <span style="color: #000000;">as_fraction</span> <span style="color: #008080;">then</span>
<span style="color: #000000;">n</span> <span style="color: #0000FF;">+=</span> <span style="color: #0000FF;">(</span><span style="color: #000000;">ch</span><span style="color: #0000FF;">-</span><span style="color: #008000;">'0'</span><span style="color: #0000FF;">)/</span><span style="color: #000000;">p10</span>
<span style="color: #000000;">p10</span> <span style="color: #0000FF;">*=</span> <span style="color: #000000;">10</span>
<span style="color: #008080;">else</span>
<span style="color: #000000;">n</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">n</span><span style="color: #0000FF;">*</span><span style="color: #000000;">10</span><span style="color: #0000FF;">+</span><span style="color: #000000;">ch</span><span style="color: #0000FF;">-</span><span style="color: #008000;">'0'</span>
<span style="color: #008080;">end</span> <span style="color: #008080;">if</span>
<span style="color: #000000;">none</span> <span style="color: #0000FF;">=</span> <span style="color: #004600;">false</span>
<span style="color: #008080;">elsif</span> <span style="color: #000000;">allow_superscripts</span> <span style="color: #008080;">then</span>
<span style="color: #000000;">f</span> <span style="color: #0000FF;">=</span> <span style="color: #7060A8;">find</span><span style="color: #0000FF;">(</span><span style="color: #000000;">ch</span><span style="color: #0000FF;">,</span><span style="color: #000000;">EXPONENTS</span><span style="color: #0000FF;">)</span>
<span style="color: #008080;">if</span> <span style="color: #000000;">f</span><span style="color: #0000FF;">=</span><span style="color: #000000;">0</span> <span style="color: #008080;">then</span> <span style="color: #008080;">exit</span> <span style="color: #008080;">end</span> <span style="color: #008080;">if</span>
<span style="color: #000000;">n</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">n</span><span style="color: #0000FF;">*</span><span style="color: #000000;">10</span><span style="color: #0000FF;">+</span><span style="color: #000000;">f</span><span style="color: #0000FF;">-</span><span style="color: #000000;">1</span>
<span style="color: #000000;">none</span> <span style="color: #0000FF;">=</span> <span style="color: #004600;">false</span>
<span style="color: #008080;">elsif</span> <span style="color: #008080;">not</span> <span style="color: #7060A8;">find</span><span style="color: #0000FF;">(</span><span style="color: #000000;">ch</span><span style="color: #0000FF;">,</span><span style="color: #008000;">" ,"</span><span style="color: #0000FF;">)</span> <span style="color: #008080;">then</span>
<span style="color: #008080;">exit</span>
<span style="color: #008080;">end</span> <span style="color: #008080;">if</span>
<span style="color: #000000;">sdx</span> <span style="color: #0000FF;">+=</span> <span style="color: #000000;">1</span>
<span style="color: #008080;">end</span> <span style="color: #008080;">for</span>
<span style="color: #008080;">if</span> <span style="color: #008080;">not</span> <span style="color: #000000;">allow_superscripts</span> <span style="color: #008080;">then</span>
<span style="color: #008080;">if</span> <span style="color: #7060A8;">find</span><span style="color: #0000FF;">(</span><span style="color: #000000;">ch</span><span style="color: #0000FF;">,{</span><span style="color: #008000;">'e'</span><span style="color: #0000FF;">,</span><span style="color: #008000;">'E'</span><span style="color: #0000FF;">,</span><span style="color: #000000;">BASET</span><span style="color: #0000FF;">})</span> <span style="color: #008080;">then</span>
<span style="color: #0000FF;">{</span><span style="color: #000000;">e10</span><span style="color: #0000FF;">,</span><span style="color: #000000;">f</span><span style="color: #0000FF;">,</span><span style="color: #000000;">sdx</span><span style="color: #0000FF;">}</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">get_num</span><span style="color: #0000FF;">(</span><span style="color: #000000;">s</span><span style="color: #0000FF;">,</span><span style="color: #000000;">sdx</span><span style="color: #0000FF;">+</span><span style="color: #000000;">1</span><span style="color: #0000FF;">)</span>
<span style="color: #008080;">if</span> <span style="color: #000000;">f</span><span style="color: #0000FF;">!=</span><span style="color: #000000;">1</span> <span style="color: #008080;">then</span> <span style="color: #0000FF;">?</span><span style="color: #000000;">9</span><span style="color: #0000FF;">/</span><span style="color: #000000;">0</span> <span style="color: #008080;">end</span> <span style="color: #008080;">if</span>
<span style="color: #000000;">n</span> <span style="color: #0000FF;">*=</span> <span style="color: #7060A8;">power</span><span style="color: #0000FF;">(</span><span style="color: #000000;">10</span><span style="color: #0000FF;">,</span><span style="color: #000000;">e10</span><span style="color: #0000FF;">)</span>
<span style="color: #008080;">elsif</span> <span style="color: #000000;">ch</span><span style="color: #0000FF;">=</span><span style="color: #008000;">'.'</span> <span style="color: #008080;">then</span>
<span style="color: #008080;">if</span> <span style="color: #000000;">as_fraction</span> <span style="color: #008080;">then</span> <span style="color: #0000FF;">?</span><span style="color: #000000;">9</span><span style="color: #0000FF;">/</span><span style="color: #000000;">0</span> <span style="color: #008080;">end</span> <span style="color: #008080;">if</span>
<span style="color: #0000FF;">{</span><span style="color: #000000;">n</span><span style="color: #0000FF;">,</span><span style="color: #000000;">f</span><span style="color: #0000FF;">,</span><span style="color: #000000;">sdx</span><span style="color: #0000FF;">}</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">get_num</span><span style="color: #0000FF;">(</span><span style="color: #000000;">s</span><span style="color: #0000FF;">,</span><span style="color: #000000;">sdx</span><span style="color: #0000FF;">+</span><span style="color: #000000;">1</span><span style="color: #0000FF;">,</span><span style="color: #000000;">n</span><span style="color: #0000FF;">,</span><span style="color: #000000;">as_fraction</span><span style="color: #0000FF;">:=</span><span style="color: #004600;">true</span><span style="color: #0000FF;">)</span>
<span style="color: #008080;">if</span> <span style="color: #000000;">f</span><span style="color: #0000FF;">!=</span><span style="color: #000000;">1</span> <span style="color: #008080;">then</span> <span style="color: #0000FF;">?</span><span style="color: #000000;">9</span><span style="color: #0000FF;">/</span><span style="color: #000000;">0</span> <span style="color: #008080;">end</span> <span style="color: #008080;">if</span>
<span style="color: #000000;">none</span> <span style="color: #0000FF;">=</span> <span style="color: #004600;">false</span>
<span style="color: #008080;">else</span>
<span style="color: #000000;">f</span> <span style="color: #0000FF;">=</span> <span style="color: #7060A8;">find</span><span style="color: #0000FF;">(</span><span style="color: #000000;">ch</span><span style="color: #0000FF;">,</span><span style="color: #000000;">unicode_vulgar_fractions</span><span style="color: #0000FF;">)</span>
<span style="color: #008080;">if</span> <span style="color: #000000;">f</span><span style="color: #0000FF;">!=</span><span style="color: #000000;">0</span> <span style="color: #008080;">then</span>
<span style="color: #008080;">if</span> <span style="color: #000000;">as_fraction</span> <span style="color: #008080;">then</span> <span style="color: #0000FF;">?</span><span style="color: #000000;">9</span><span style="color: #0000FF;">/</span><span style="color: #000000;">0</span> <span style="color: #008080;">end</span> <span style="color: #008080;">if</span>
<span style="color: #004080;">integer</span> <span style="color: #0000FF;">{</span><span style="color: #000000;">vfn</span><span style="color: #0000FF;">,</span><span style="color: #000000;">vfd</span><span style="color: #0000FF;">}</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">vulgar_fractions</span><span style="color: #0000FF;">[</span><span style="color: #000000;">f</span><span style="color: #0000FF;">]</span>
<span style="color: #008080;">if</span> <span style="color: #000000;">uni_frac</span> <span style="color: #008080;">then</span>
<span style="color: #000000;">n</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">n</span><span style="color: #0000FF;">*</span><span style="color: #000000;">vfd</span> <span style="color: #0000FF;">+</span> <span style="color: #000000;">vfn</span>
<span style="color: #008080;">if</span> <span style="color: #000000;">d</span><span style="color: #0000FF;">!=</span><span style="color: #000000;">1</span> <span style="color: #008080;">then</span> <span style="color: #0000FF;">?</span><span style="color: #000000;">9</span><span style="color: #0000FF;">/</span><span style="color: #000000;">0</span> <span style="color: #008080;">end</span> <span style="color: #008080;">if</span>
<span style="color: #000000;">d</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">vfd</span>
<span style="color: #008080;">else</span>
<span style="color: #000000;">n</span> <span style="color: #0000FF;">+=</span> <span style="color: #000000;">vfn</span><span style="color: #0000FF;">/</span><span style="color: #000000;">vfd</span>
<span style="color: #008080;">end</span> <span style="color: #008080;">if</span>
<span style="color: #000000;">sdx</span> <span style="color: #0000FF;">+=</span> <span style="color: #000000;">1</span>
<span style="color: #000000;">none</span> <span style="color: #0000FF;">=</span> <span style="color: #004600;">false</span>
<span style="color: #008080;">end</span> <span style="color: #008080;">if</span>
<span style="color: #008080;">end</span> <span style="color: #008080;">if</span>
<span style="color: #008080;">end</span> <span style="color: #008080;">if</span>
<span style="color: #008080;">if</span> <span style="color: #000000;">none</span> <span style="color: #008080;">then</span> <span style="color: #000000;">n</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">1</span> <span style="color: #008080;">end</span> <span style="color: #008080;">if</span>
<span style="color: #000000;">n</span> <span style="color: #0000FF;">*=</span> <span style="color: #000000;">sgn</span>
<span style="color: #008080;">return</span> <span style="color: #0000FF;">{</span><span style="color: #000000;">n</span><span style="color: #0000FF;">,</span><span style="color: #000000;">d</span><span style="color: #0000FF;">,</span><span style="color: #000000;">sdx</span><span style="color: #0000FF;">}</span>
<span style="color: #008080;">end</span> <span style="color: #008080;">function</span>
<span style="color: #008080;">function</span> <span style="color: #000000;">get_term</span><span style="color: #0000FF;">(</span><span style="color: #004080;">sequence</span> <span style="color: #000000;">s</span><span style="color: #0000FF;">,</span> <span style="color: #004080;">integer</span> <span style="color: #000000;">sdx</span><span style="color: #0000FF;">)</span>
<span style="color: #004080;">integer</span> <span style="color: #000000;">last_sdx</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">sdx</span><span style="color: #0000FF;">,</span> <span style="color: #000080;font-style:italic;">-- (infinite loop check/prevent)</span>
<span style="color: #000000;">e</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">0</span>
<span style="color: #004080;">atom</span> <span style="color: #000000;">c</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">d</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">1</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">f</span>
<span style="color: #004080;">bool</span> <span style="color: #000000;">sdiv</span> <span style="color: #0000FF;">=</span> <span style="color: #004600;">false</span>
<span style="color: #0000FF;">{</span><span style="color: #000000;">c</span><span style="color: #0000FF;">,</span><span style="color: #000000;">d</span><span style="color: #0000FF;">,</span><span style="color: #000000;">sdx</span><span style="color: #0000FF;">}</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">get_num</span><span style="color: #0000FF;">(</span><span style="color: #000000;">s</span><span style="color: #0000FF;">,</span><span style="color: #000000;">sdx</span><span style="color: #0000FF;">)</span>
<span style="color: #000000;">sdx</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">skip</span><span style="color: #0000FF;">(</span><span style="color: #000000;">s</span><span style="color: #0000FF;">,</span><span style="color: #000000;">sdx</span><span style="color: #0000FF;">,{</span><span style="color: #008000;">' '</span><span style="color: #0000FF;">,</span><span style="color: #000000;">MIDOT</span><span style="color: #0000FF;">,</span><span style="color: #000000;">MULTY</span><span style="color: #0000FF;">})</span>
<span style="color: #008080;">if</span> <span style="color: #000000;">sdx</span><span style="color: #0000FF;"><=</span><span style="color: #7060A8;">length</span><span style="color: #0000FF;">(</span><span style="color: #000000;">s</span><span style="color: #0000FF;">)</span>
<span style="color: #008080;">and</span> <span style="color: #0000FF;">(</span><span style="color: #000000;">s</span><span style="color: #0000FF;">[</span><span style="color: #000000;">sdx</span><span style="color: #0000FF;">]=</span><span style="color: #008000;">'/'</span> <span style="color: #008080;">or</span>
<span style="color: #000000;">s</span><span style="color: #0000FF;">[</span><span style="color: #000000;">sdx</span><span style="color: #0000FF;">]=</span><span style="color: #000000;">DIVDE</span><span style="color: #0000FF;">)</span> <span style="color: #008080;">then</span>
<span style="color: #000000;">sdx</span> <span style="color: #0000FF;">+=</span> <span style="color: #000000;">1</span>
<span style="color: #008080;">if</span> <span style="color: #000000;">sdx</span><span style="color: #0000FF;"><=</span><span style="color: #7060A8;">length</span><span style="color: #0000FF;">(</span><span style="color: #000000;">s</span><span style="color: #0000FF;">)</span> <span style="color: #008080;">and</span> <span style="color: #000000;">s</span><span style="color: #0000FF;">[</span><span style="color: #000000;">sdx</span><span style="color: #0000FF;">]!=</span><span style="color: #008000;">'x'</span> <span style="color: #008080;">then</span>
<span style="color: #0000FF;">{</span><span style="color: #000000;">d</span><span style="color: #0000FF;">,</span><span style="color: #000000;">f</span><span style="color: #0000FF;">,</span><span style="color: #000000;">sdx</span><span style="color: #0000FF;">}</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">get_num</span><span style="color: #0000FF;">(</span><span style="color: #000000;">s</span><span style="color: #0000FF;">,</span><span style="color: #000000;">sdx</span><span style="color: #0000FF;">)</span>
<span style="color: #008080;">if</span> <span style="color: #000000;">f</span><span style="color: #0000FF;">!=</span><span style="color: #000000;">1</span> <span style="color: #008080;">then</span> <span style="color: #0000FF;">?</span><span style="color: #000000;">9</span><span style="color: #0000FF;">/</span><span style="color: #000000;">0</span> <span style="color: #008080;">end</span> <span style="color: #008080;">if</span>
<span style="color: #008080;">if</span> <span style="color: #008080;">not</span> <span style="color: #000000;">uni_frac</span> <span style="color: #008080;">then</span>
<span style="color: #000000;">c</span> <span style="color: #0000FF;">/=</span> <span style="color: #000000;">d</span>
<span style="color: #000000;">d</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">1</span>
<span style="color: #008080;">end</span> <span style="color: #008080;">if</span>
<span style="color: #008080;">else</span>
<span style="color: #000000;">sdiv</span> <span style="color: #0000FF;">=</span> <span style="color: #004600;">true</span>
<span style="color: #008080;">end</span> <span style="color: #008080;">if</span>
<span style="color: #008080;">end</span> <span style="color: #008080;">if</span>
<span style="color: #008080;">if</span> <span style="color: #000000;">sdx</span><span style="color: #0000FF;"><=</span><span style="color: #7060A8;">length</span><span style="color: #0000FF;">(</span><span style="color: #000000;">s</span><span style="color: #0000FF;">)</span> <span style="color: #008080;">and</span> <span style="color: #000000;">s</span><span style="color: #0000FF;">[</span><span style="color: #000000;">sdx</span><span style="color: #0000FF;">]=</span><span style="color: #008000;">'x'</span> <span style="color: #008080;">then</span>
<span style="color: #000000;">sdx</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">skip</span><span style="color: #0000FF;">(</span><span style="color: #000000;">s</span><span style="color: #0000FF;">,</span><span style="color: #000000;">sdx</span><span style="color: #0000FF;">+</span><span style="color: #000000;">1</span><span style="color: #0000FF;">,{</span><span style="color: #008000;">'^'</span><span style="color: #0000FF;">,</span><span style="color: #008000;">'*'</span><span style="color: #0000FF;">,</span><span style="color: #000000;">SPLUS</span><span style="color: #0000FF;">,</span><span style="color: #000000;">UPARW</span><span style="color: #0000FF;">})</span>
<span style="color: #0000FF;">{</span><span style="color: #000000;">e</span><span style="color: #0000FF;">,</span><span style="color: #000000;">f</span><span style="color: #0000FF;">,</span><span style="color: #000000;">sdx</span><span style="color: #0000FF;">}</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">get_num</span><span style="color: #0000FF;">(</span><span style="color: #000000;">s</span><span style="color: #0000FF;">,</span><span style="color: #000000;">sdx</span><span style="color: #0000FF;">,</span><span style="color: #000000;">allow_superscripts</span><span style="color: #0000FF;">:=</span><span style="color: #004600;">true</span><span style="color: #0000FF;">)</span>
<span style="color: #008080;">if</span> <span style="color: #000000;">f</span><span style="color: #0000FF;">!=</span><span style="color: #000000;">1</span> <span style="color: #008080;">then</span> <span style="color: #0000FF;">?</span><span style="color: #000000;">9</span><span style="color: #0000FF;">/</span><span style="color: #000000;">0</span> <span style="color: #008080;">end</span> <span style="color: #008080;">if</span>
<span style="color: #008080;">if</span> <span style="color: #000000;">sdiv</span> <span style="color: #008080;">then</span> <span style="color: #000000;">e</span> <span style="color: #0000FF;">=</span> <span style="color: #0000FF;">-</span><span style="color: #000000;">e</span> <span style="color: #008080;">end</span> <span style="color: #008080;">if</span>
<span style="color: #008080;">else</span>
<span style="color: #008080;">if</span> <span style="color: #000000;">sdiv</span> <span style="color: #008080;">then</span> <span style="color: #0000FF;">?</span><span style="color: #000000;">9</span><span style="color: #0000FF;">/</span><span style="color: #000000;">0</span> <span style="color: #008080;">end</span> <span style="color: #008080;">if</span>
<span style="color: #008080;">end</span> <span style="color: #008080;">if</span>
<span style="color: #008080;">if</span> <span style="color: #000000;">sdx</span><span style="color: #0000FF;"><=</span><span style="color: #7060A8;">length</span><span style="color: #0000FF;">(</span><span style="color: #000000;">s</span><span style="color: #0000FF;">)</span>
<span style="color: #008080;">and</span> <span style="color: #0000FF;">(</span><span style="color: #000000;">s</span><span style="color: #0000FF;">[</span><span style="color: #000000;">sdx</span><span style="color: #0000FF;">]=</span><span style="color: #008000;">'/'</span> <span style="color: #008080;">or</span>
<span style="color: #000000;">s</span><span style="color: #0000FF;">[</span><span style="color: #000000;">sdx</span><span style="color: #0000FF;">]=</span><span style="color: #000000;">DIVDE</span><span style="color: #0000FF;">)</span> <span style="color: #008080;">then</span>
<span style="color: #008080;">if</span> <span style="color: #000000;">d</span><span style="color: #0000FF;">!=</span><span style="color: #000000;">1</span> <span style="color: #008080;">then</span> <span style="color: #0000FF;">?</span><span style="color: #000000;">9</span><span style="color: #0000FF;">/</span><span style="color: #000000;">0</span> <span style="color: #008080;">end</span> <span style="color: #008080;">if</span>
<span style="color: #0000FF;">{</span><span style="color: #000000;">d</span><span style="color: #0000FF;">,</span><span style="color: #000000;">f</span><span style="color: #0000FF;">,</span><span style="color: #000000;">sdx</span><span style="color: #0000FF;">}</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">get_num</span><span style="color: #0000FF;">(</span><span style="color: #000000;">s</span><span style="color: #0000FF;">,</span><span style="color: #000000;">sdx</span><span style="color: #0000FF;">+</span><span style="color: #000000;">1</span><span style="color: #0000FF;">)</span>
<span style="color: #008080;">if</span> <span style="color: #000000;">f</span><span style="color: #0000FF;">!=</span><span style="color: #000000;">1</span> <span style="color: #008080;">then</span> <span style="color: #0000FF;">?</span><span style="color: #000000;">9</span><span style="color: #0000FF;">/</span><span style="color: #000000;">0</span> <span style="color: #008080;">end</span> <span style="color: #008080;">if</span>
<span style="color: #008080;">if</span> <span style="color: #008080;">not</span> <span style="color: #000000;">uni_frac</span> <span style="color: #008080;">then</span>
<span style="color: #000000;">c</span> <span style="color: #0000FF;">/=</span> <span style="color: #000000;">d</span>
<span style="color: #000000;">d</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">1</span>
<span style="color: #008080;">end</span> <span style="color: #008080;">if</span>
<span style="color: #008080;">end</span> <span style="color: #008080;">if</span>
<span style="color: #008080;">if</span> <span style="color: #000000;">sdx</span><span style="color: #0000FF;">=</span><span style="color: #000000;">last_sdx</span> <span style="color: #008080;">then</span> <span style="color: #0000FF;">?</span><span style="color: #000000;">9</span><span style="color: #0000FF;">/</span><span style="color: #000000;">0</span> <span style="color: #008080;">end</span> <span style="color: #008080;">if</span>
<span style="color: #008080;">return</span> <span style="color: #0000FF;">{</span><span style="color: #000000;">e</span><span style="color: #0000FF;">,</span><span style="color: #000000;">c</span><span style="color: #0000FF;">,</span><span style="color: #000000;">d</span><span style="color: #0000FF;">,</span><span style="color: #000000;">sdx</span><span style="color: #0000FF;">}</span>
<span style="color: #008080;">end</span> <span style="color: #008080;">function</span>
<span style="color: #008080;">function</span> <span style="color: #000000;">unicode_superscripts</span><span style="color: #0000FF;">(</span><span style="color: #004080;">integer</span> <span style="color: #000000;">e</span><span style="color: #0000FF;">)</span>
<span style="color: #000080;font-style:italic;">-- display helper</span>
<span style="color: #004080;">string</span> <span style="color: #000000;">res</span> <span style="color: #0000FF;">=</span> <span style="color: #008000;">""</span>
<span style="color: #008080;">if</span> <span style="color: #000000;">e</span><span style="color: #0000FF;">></span><span style="color: #000000;">9</span> <span style="color: #008080;">then</span>
<span style="color: #000000;">res</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">unicode_superscripts</span><span style="color: #0000FF;">(</span><span style="color: #7060A8;">floor</span><span style="color: #0000FF;">(</span><span style="color: #000000;">e</span><span style="color: #0000FF;">/</span><span style="color: #000000;">10</span><span style="color: #0000FF;">))</span>
<span style="color: #000000;">e</span> <span style="color: #0000FF;">=</span> <span style="color: #7060A8;">remainder</span><span style="color: #0000FF;">(</span><span style="color: #000000;">e</span><span style="color: #0000FF;">,</span><span style="color: #000000;">10</span><span style="color: #0000FF;">)</span>
<span style="color: #008080;">end</span> <span style="color: #008080;">if</span>
<span style="color: #000000;">res</span> <span style="color: #0000FF;">&=</span> <span style="color: #7060A8;">utf32_to_utf8</span><span style="color: #0000FF;">({</span><span style="color: #000000;">EXPONENTS</span><span style="color: #0000FF;">[</span><span style="color: #000000;">e</span><span style="color: #0000FF;">+</span><span style="color: #000000;">1</span><span style="color: #0000FF;">]})</span>
<span style="color: #008080;">return</span> <span style="color: #000000;">res</span>
<span style="color: #008080;">end</span> <span style="color: #008080;">function</span>
<span style="color: #008080;">enum</span> <span style="color: #000000;">EXP</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">COEF</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">FRAC</span> <span style="color: #000080;font-style:italic;">-- contents of terms[i]</span>
<span style="color: #008080;">function</span> <span style="color: #000000;">poly</span><span style="color: #0000FF;">(</span><span style="color: #004080;">sequence</span> <span style="color: #000000;">terms</span><span style="color: #0000FF;">)</span>
<span style="color: #000080;font-style:italic;">-- display helper</span>
<span style="color: #004080;">string</span> <span style="color: #000000;">r</span> <span style="color: #0000FF;">=</span> <span style="color: #008000;">""</span>
<span style="color: #008080;">for</span> <span style="color: #000000;">t</span><span style="color: #0000FF;">=</span><span style="color: #7060A8;">length</span><span style="color: #0000FF;">(</span><span style="color: #000000;">terms</span><span style="color: #0000FF;">)</span> <span style="color: #008080;">to</span> <span style="color: #000000;">1</span> <span style="color: #008080;">by</span> <span style="color: #0000FF;">-</span><span style="color: #000000;">1</span> <span style="color: #008080;">do</span>
<span style="color: #0000FF;">{</span><span style="color: #004080;">integer</span> <span style="color: #000000;">e</span><span style="color: #0000FF;">,</span> <span style="color: #004080;">atom</span> <span style="color: #000000;">c</span><span style="color: #0000FF;">,</span> <span style="color: #004080;">integer</span> <span style="color: #000000;">f</span><span style="color: #0000FF;">}</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">terms</span><span style="color: #0000FF;">[</span><span style="color: #000000;">t</span><span style="color: #0000FF;">]</span>
<span style="color: #008080;">if</span> <span style="color: #000000;">c</span><span style="color: #0000FF;">!=</span><span style="color: #000000;">0</span> <span style="color: #008080;">then</span>
<span style="color: #008080;">if</span> <span style="color: #000000;">c</span><span style="color: #0000FF;">=</span><span style="color: #000000;">1</span> <span style="color: #008080;">and</span> <span style="color: #000000;">f</span><span style="color: #0000FF;">=</span><span style="color: #000000;">1</span> <span style="color: #008080;">and</span> <span style="color: #000000;">e</span><span style="color: #0000FF;">!=</span><span style="color: #000000;">0</span> <span style="color: #008080;">then</span>
<span style="color: #000000;">r</span> <span style="color: #0000FF;">&=</span> <span style="color: #008080;">iff</span><span style="color: #0000FF;">(</span><span style="color: #000000;">r</span><span style="color: #0000FF;">=</span><span style="color: #008000;">""</span><span style="color: #0000FF;">?</span> <span style="color: #008000;">""</span><span style="color: #0000FF;">:</span><span style="color: #008000;">" + "</span><span style="color: #0000FF;">)</span>
<span style="color: #008080;">elsif</span> <span style="color: #000000;">c</span><span style="color: #0000FF;">=-</span><span style="color: #000000;">1</span> <span style="color: #008080;">and</span> <span style="color: #000000;">f</span><span style="color: #0000FF;">=</span><span style="color: #000000;">1</span> <span style="color: #008080;">and</span> <span style="color: #000000;">e</span><span style="color: #0000FF;">!=</span><span style="color: #000000;">0</span> <span style="color: #008080;">then</span>
<span style="color: #000000;">r</span> <span style="color: #0000FF;">&=</span> <span style="color: #008080;">iff</span><span style="color: #0000FF;">(</span><span style="color: #000000;">r</span><span style="color: #0000FF;">=</span><span style="color: #008000;">""</span><span style="color: #0000FF;">?</span><span style="color: #008000;">"-"</span><span style="color: #0000FF;">:</span><span style="color: #008000;">" - "</span><span style="color: #0000FF;">)</span>
<span style="color: #008080;">else</span>
<span style="color: #008080;">if</span> <span style="color: #000000;">r</span><span style="color: #0000FF;">!=</span><span style="color: #008000;">""</span> <span style="color: #008080;">then</span>
<span style="color: #000000;">r</span> <span style="color: #0000FF;">&=</span> <span style="color: #008080;">iff</span><span style="color: #0000FF;">(</span><span style="color: #000000;">c</span><span style="color: #0000FF;"><</span><span style="color: #000000;">0</span><span style="color: #0000FF;">?</span><span style="color: #008000;">" - "</span><span style="color: #0000FF;">:</span><span style="color: #008000;">" + "</span><span style="color: #0000FF;">)</span>
<span style="color: #000000;">c</span> <span style="color: #0000FF;">=</span> <span style="color: #7060A8;">abs</span><span style="color: #0000FF;">(</span><span style="color: #000000;">c</span><span style="color: #0000FF;">)</span>
<span style="color: #008080;">end</span> <span style="color: #008080;">if</span>
<span style="color: #008080;">if</span> <span style="color: #000000;">f</span><span style="color: #0000FF;">!=</span><span style="color: #000000;">1</span> <span style="color: #008080;">then</span> <span style="color: #000080;font-style:italic;">-- (hence/only when uni_frac==true)</span>
<span style="color: #004080;">integer</span> <span style="color: #000000;">k</span> <span style="color: #0000FF;">=</span> <span style="color: #7060A8;">find</span><span style="color: #0000FF;">({</span><span style="color: #7060A8;">remainder</span><span style="color: #0000FF;">(</span><span style="color: #000000;">c</span><span style="color: #0000FF;">,</span><span style="color: #000000;">f</span><span style="color: #0000FF;">),</span><span style="color: #000000;">f</span><span style="color: #0000FF;">},</span><span style="color: #000000;">vulgar_fractions</span><span style="color: #0000FF;">)</span>
<span style="color: #008080;">if</span> <span style="color: #000000;">k</span> <span style="color: #008080;">then</span>
<span style="color: #000000;">c</span> <span style="color: #0000FF;">=</span> <span style="color: #7060A8;">floor</span><span style="color: #0000FF;">(</span><span style="color: #000000;">c</span><span style="color: #0000FF;">/</span><span style="color: #000000;">f</span><span style="color: #0000FF;">)</span>
<span style="color: #008080;">if</span> <span style="color: #000000;">c</span><span style="color: #0000FF;">!=</span><span style="color: #000000;">0</span> <span style="color: #008080;">then</span> <span style="color: #000000;">r</span> <span style="color: #0000FF;">&=</span> <span style="color: #7060A8;">sprintf</span><span style="color: #0000FF;">(</span><span style="color: #008000;">"%d"</span><span style="color: #0000FF;">,</span><span style="color: #000000;">c</span><span style="color: #0000FF;">)</span> <span style="color: #008080;">end</span> <span style="color: #008080;">if</span>
<span style="color: #000000;">r</span> <span style="color: #0000FF;">&=</span> <span style="color: #7060A8;">utf32_to_utf8</span><span style="color: #0000FF;">({</span><span style="color: #000000;">unicode_vulgar_fractions</span><span style="color: #0000FF;">[</span><span style="color: #000000;">k</span><span style="color: #0000FF;">]})</span>
<span style="color: #008080;">else</span>
<span style="color: #000000;">r</span> <span style="color: #0000FF;">&=</span> <span style="color: #7060A8;">sprintf</span><span style="color: #0000FF;">(</span><span style="color: #008000;">"%g"</span><span style="color: #0000FF;">,</span><span style="color: #000000;">c</span><span style="color: #0000FF;">/</span><span style="color: #000000;">f</span><span style="color: #0000FF;">)</span>
<span style="color: #008080;">end</span> <span style="color: #008080;">if</span>
<span style="color: #008080;">else</span>
<span style="color: #000000;">r</span> <span style="color: #0000FF;">&=</span> <span style="color: #7060A8;">sprintf</span><span style="color: #0000FF;">(</span><span style="color: #008000;">"%g"</span><span style="color: #0000FF;">,</span><span style="color: #000000;">c</span><span style="color: #0000FF;">)</span>
<span style="color: #008080;">end</span> <span style="color: #008080;">if</span>
<span style="color: #008080;">end</span> <span style="color: #008080;">if</span>
<span style="color: #008080;">if</span> <span style="color: #000000;">e</span><span style="color: #0000FF;">!=</span><span style="color: #000000;">0</span> <span style="color: #008080;">then</span>
<span style="color: #000000;">r</span> <span style="color: #0000FF;">&=</span> <span style="color: #008000;">'x'</span>
<span style="color: #008080;">if</span> <span style="color: #000000;">e</span><span style="color: #0000FF;">!=</span><span style="color: #000000;">1</span> <span style="color: #008080;">then</span>
<span style="color: #008080;">if</span> <span style="color: #000000;">uni_frac</span> <span style="color: #008080;">then</span>
<span style="color: #008080;">if</span> <span style="color: #000000;">e</span><span style="color: #0000FF;"><</span><span style="color: #000000;">0</span> <span style="color: #008080;">then</span>
<span style="color: #000000;">r</span> <span style="color: #0000FF;">&=</span> <span style="color: #7060A8;">utf32_to_utf8</span><span style="color: #0000FF;">({</span><span style="color: #000000;">SMNUS</span><span style="color: #0000FF;">})</span>
<span style="color: #000000;">e</span> <span style="color: #0000FF;">=</span> <span style="color: #0000FF;">-</span><span style="color: #000000;">e</span>
<span style="color: #008080;">end</span> <span style="color: #008080;">if</span>
<span style="color: #000000;">r</span> <span style="color: #0000FF;">&=</span> <span style="color: #000000;">unicode_superscripts</span><span style="color: #0000FF;">(</span><span style="color: #000000;">e</span><span style="color: #0000FF;">)</span>
<span style="color: #008080;">else</span>
<span style="color: #000000;">r</span> <span style="color: #0000FF;">&=</span> <span style="color: #7060A8;">sprintf</span><span style="color: #0000FF;">(</span><span style="color: #008000;">"^%d"</span><span style="color: #0000FF;">,</span><span style="color: #000000;">e</span><span style="color: #0000FF;">)</span>
<span style="color: #008080;">end</span> <span style="color: #008080;">if</span>
<span style="color: #008080;">end</span> <span style="color: #008080;">if</span>
<span style="color: #008080;">end</span> <span style="color: #008080;">if</span>
<span style="color: #008080;">end</span> <span style="color: #008080;">if</span>
<span style="color: #008080;">end</span> <span style="color: #008080;">for</span>
<span style="color: #008080;">if</span> <span style="color: #000000;">r</span><span style="color: #0000FF;">=</span><span style="color: #008000;">""</span> <span style="color: #008080;">then</span> <span style="color: #000000;">r</span><span style="color: #0000FF;">=</span><span style="color: #008000;">"0"</span> <span style="color: #008080;">end</span> <span style="color: #008080;">if</span>
<span style="color: #008080;">return</span> <span style="color: #000000;">r</span>
<span style="color: #008080;">end</span> <span style="color: #008080;">function</span>
<span style="color: #008080;">function</span> <span style="color: #000000;">parse</span><span style="color: #0000FF;">(</span><span style="color: #004080;">sequence</span> <span style="color: #000000;">s</span><span style="color: #0000FF;">)</span>
<span style="color: #004080;">sequence</span> <span style="color: #000000;">terms</span> <span style="color: #0000FF;">=</span> <span style="color: #0000FF;">{}</span>
<span style="color: #004080;">integer</span> <span style="color: #000000;">sdx</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">1</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">e</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">f</span>
<span style="color: #004080;">atom</span> <span style="color: #000000;">c</span>
<span style="color: #000000;">s</span> <span style="color: #0000FF;">=</span> <span style="color: #7060A8;">match_replace</span><span style="color: #0000FF;">(</span><span style="color: #008000;">"&lt;sup&gt;"</span><span style="color: #0000FF;">,</span><span style="color: #000000;">s</span><span style="color: #0000FF;">,</span><span style="color: #008000;">"^"</span><span style="color: #0000FF;">)</span>
<span style="color: #000000;">s</span> <span style="color: #0000FF;">=</span> <span style="color: #7060A8;">match_replace</span><span style="color: #0000FF;">(</span><span style="color: #008000;">"&lt;/sup&gt;"</span><span style="color: #0000FF;">,</span><span style="color: #000000;">s</span><span style="color: #0000FF;">,</span><span style="color: #008000;">""</span><span style="color: #0000FF;">)</span>
<span style="color: #000000;">s</span> <span style="color: #0000FF;">=</span> <span style="color: #7060A8;">match_replace</span><span style="color: #0000FF;">(</span><span style="color: #008000;">"**"</span><span style="color: #0000FF;">,</span><span style="color: #000000;">s</span><span style="color: #0000FF;">,</span><span style="color: #008000;">"^"</span><span style="color: #0000FF;">)</span>
<span style="color: #000000;">s</span> <span style="color: #0000FF;">=</span> <span style="color: #7060A8;">match_replace</span><span style="color: #0000FF;">(</span><span style="color: #008000;">" ^"</span><span style="color: #0000FF;">,</span><span style="color: #000000;">s</span><span style="color: #0000FF;">,</span><span style="color: #008000;">"^"</span><span style="color: #0000FF;">)</span>
<span style="color: #000000;">s</span> <span style="color: #0000FF;">=</span> <span style="color: #7060A8;">match_replace</span><span style="color: #0000FF;">(</span><span style="color: #008000;">"^ "</span><span style="color: #0000FF;">,</span><span style="color: #000000;">s</span><span style="color: #0000FF;">,</span><span style="color: #008000;">"^"</span><span style="color: #0000FF;">)</span>
<span style="color: #000000;">s</span> <span style="color: #0000FF;">=</span> <span style="color: #7060A8;">match_replace</span><span style="color: #0000FF;">({</span><span style="color: #008000;">' '</span><span style="color: #0000FF;">,</span><span style="color: #000000;">SPLUS</span><span style="color: #0000FF;">},</span><span style="color: #000000;">s</span><span style="color: #0000FF;">,{</span><span style="color: #000000;">SPLUS</span><span style="color: #0000FF;">})</span>
<span style="color: #000000;">s</span> <span style="color: #0000FF;">=</span> <span style="color: #7060A8;">match_replace</span><span style="color: #0000FF;">({</span><span style="color: #008000;">' '</span><span style="color: #0000FF;">,</span><span style="color: #000000;">SMNUS</span><span style="color: #0000FF;">},</span><span style="color: #000000;">s</span><span style="color: #0000FF;">,{</span><span style="color: #000000;">SMNUS</span><span style="color: #0000FF;">})</span>
<span style="color: #008080;">for</span> <span style="color: #000000;">i</span><span style="color: #0000FF;">=</span><span style="color: #000000;">1</span> <span style="color: #008080;">to</span> <span style="color: #7060A8;">length</span><span style="color: #0000FF;">(</span><span style="color: #000000;">EXPONENTS</span><span style="color: #0000FF;">)</span> <span style="color: #008080;">do</span>
<span style="color: #000000;">e</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">EXPONENTS</span><span style="color: #0000FF;">[</span><span style="color: #000000;">i</span><span style="color: #0000FF;">]</span>
<span style="color: #000000;">s</span> <span style="color: #0000FF;">=</span> <span style="color: #7060A8;">match_replace</span><span style="color: #0000FF;">({</span><span style="color: #008000;">' '</span><span style="color: #0000FF;">,</span><span style="color: #000000;">e</span><span style="color: #0000FF;">},</span><span style="color: #000000;">s</span><span style="color: #0000FF;">,{</span><span style="color: #000000;">e</span><span style="color: #0000FF;">})</span>
<span style="color: #008080;">end</span> <span style="color: #008080;">for</span>
<span style="color: #008080;">while</span> <span style="color: #000000;">sdx</span><span style="color: #0000FF;"><=</span><span style="color: #7060A8;">length</span><span style="color: #0000FF;">(</span><span style="color: #000000;">s</span><span style="color: #0000FF;">)</span> <span style="color: #008080;">do</span>
<span style="color: #0000FF;">{</span><span style="color: #000000;">e</span><span style="color: #0000FF;">,</span><span style="color: #000000;">c</span><span style="color: #0000FF;">,</span><span style="color: #000000;">f</span><span style="color: #0000FF;">,</span><span style="color: #000000;">sdx</span><span style="color: #0000FF;">}</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">get_term</span><span style="color: #0000FF;">(</span><span style="color: #000000;">s</span><span style="color: #0000FF;">,</span><span style="color: #000000;">sdx</span><span style="color: #0000FF;">)</span>
<span style="color: #008080;">if</span> <span style="color: #000000;">c</span><span style="color: #0000FF;">!=</span><span style="color: #000000;">0</span> <span style="color: #008080;">then</span> <span style="color: #000080;font-style:italic;">-- (aside: +5 -5 may yet leave c==0)</span>
<span style="color: #000000;">terms</span> <span style="color: #0000FF;">=</span> <span style="color: #7060A8;">append</span><span style="color: #0000FF;">(</span><span style="color: #000000;">terms</span><span style="color: #0000FF;">,{</span><span style="color: #000000;">e</span><span style="color: #0000FF;">,</span><span style="color: #000000;">c</span><span style="color: #0000FF;">,</span><span style="color: #000000;">f</span><span style="color: #0000FF;">})</span>
<span style="color: #008080;">end</span> <span style="color: #008080;">if</span>
<span style="color: #008080;">end</span> <span style="color: #008080;">while</span>
<span style="color: #000000;">terms</span> <span style="color: #0000FF;">=</span> <span style="color: #7060A8;">sort</span><span style="color: #0000FF;">(</span><span style="color: #000000;">terms</span><span style="color: #0000FF;">)</span>
<span style="color: #000080;font-style:italic;">-- merge, eg "10x^2 + 10x^2" -&gt; 20x^2</span>
<span style="color: #008080;">for</span> <span style="color: #000000;">i</span><span style="color: #0000FF;">=</span><span style="color: #7060A8;">length</span><span style="color: #0000FF;">(</span><span style="color: #000000;">terms</span><span style="color: #0000FF;">)</span> <span style="color: #008080;">to</span> <span style="color: #000000;">2</span> <span style="color: #008080;">by</span> <span style="color: #0000FF;">-</span><span style="color: #000000;">1</span> <span style="color: #008080;">do</span>
<span style="color: #008080;">if</span> <span style="color: #000000;">terms</span><span style="color: #0000FF;">[</span><span style="color: #000000;">i</span><span style="color: #0000FF;">][</span><span style="color: #000000;">EXP</span><span style="color: #0000FF;">]</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">terms</span><span style="color: #0000FF;">[</span><span style="color: #000000;">i</span><span style="color: #0000FF;">-</span><span style="color: #000000;">1</span><span style="color: #0000FF;">][</span><span style="color: #000000;">EXP</span><span style="color: #0000FF;">]</span> <span style="color: #008080;">then</span>
<span style="color: #008080;">if</span> <span style="color: #000000;">terms</span><span style="color: #0000FF;">[</span><span style="color: #000000;">i</span><span style="color: #0000FF;">-</span><span style="color: #000000;">1</span><span style="color: #0000FF;">][</span><span style="color: #000000;">FRAC</span><span style="color: #0000FF;">]!=</span><span style="color: #000000;">terms</span><span style="color: #0000FF;">[</span><span style="color: #000000;">i</span><span style="color: #0000FF;">][</span><span style="color: #000000;">FRAC</span><span style="color: #0000FF;">]</span> <span style="color: #008080;">then</span>
<span style="color: #0000FF;">?</span><span style="color: #000000;">9</span><span style="color: #0000FF;">/</span><span style="color: #000000;">0</span> <span style="color: #000080;font-style:italic;">-- placeholder for more code</span>
<span style="color: #008080;">else</span>
<span style="color: #000000;">terms</span><span style="color: #0000FF;">[</span><span style="color: #000000;">i</span><span style="color: #0000FF;">-</span><span style="color: #000000;">1</span><span style="color: #0000FF;">][</span><span style="color: #000000;">COEF</span><span style="color: #0000FF;">]</span> <span style="color: #0000FF;">+=</span> <span style="color: #000000;">terms</span><span style="color: #0000FF;">[</span><span style="color: #000000;">i</span><span style="color: #0000FF;">][</span><span style="color: #000000;">COEF</span><span style="color: #0000FF;">]</span>
<span style="color: #008080;">end</span> <span style="color: #008080;">if</span>
<span style="color: #000000;">terms</span><span style="color: #0000FF;">[</span><span style="color: #000000;">i</span><span style="color: #0000FF;">..</span><span style="color: #000000;">i</span><span style="color: #0000FF;">]</span> <span style="color: #0000FF;">=</span> <span style="color: #0000FF;">{}</span> <span style="color: #000080;font-style:italic;">-- (delete 2nd)</span>
<span style="color: #008080;">end</span> <span style="color: #008080;">if</span>
<span style="color: #008080;">end</span> <span style="color: #008080;">for</span>
<span style="color: #008080;">return</span> <span style="color: #000000;">poly</span><span style="color: #0000FF;">(</span><span style="color: #000000;">terms</span><span style="color: #0000FF;">)</span>
<span style="color: #008080;">end</span> <span style="color: #008080;">function</span>
<span style="color: #008080;">include</span> <span style="color: #000000;">Unicode_polynomial_equation</span><span style="color: #0000FF;">.</span><span style="color: #000000;">e</span>
<span style="color: #004080;">sequence</span> <span style="color: #000000;">alts</span> <span style="color: #0000FF;">=</span> <span style="color: #0000FF;">{},</span> <span style="color: #000080;font-style:italic;">-- (unicode versions)</span>
<span style="color: #000000;">altn</span> <span style="color: #0000FF;">=</span> <span style="color: #0000FF;">{},</span> <span style="color: #000080;font-style:italic;">-- (idx of ascii equivalents)
-- lines = read_lines("Unicode_polynomial_equation.txt")</span>
<span style="color: #000000;">lines</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">get_lines</span><span style="color: #0000FF;">()</span>
<span style="color: #008080;">if</span> <span style="color: #000000;">lines</span><span style="color: #0000FF;">[</span><span style="color: #000000;">1</span><span style="color: #0000FF;">][</span><span style="color: #000000;">1</span><span style="color: #0000FF;">..</span><span style="color: #000000;">3</span><span style="color: #0000FF;">]</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">UTF8BOM</span> <span style="color: #008080;">then</span>
<span style="color: #000080;font-style:italic;">-- remove/ignore any utf8 byte order mark</span>
<span style="color: #000000;">lines</span><span style="color: #0000FF;">[</span><span style="color: #000000;">1</span><span style="color: #0000FF;">]</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">lines</span><span style="color: #0000FF;">[</span><span style="color: #000000;">1</span><span style="color: #0000FF;">][</span><span style="color: #000000;">4</span><span style="color: #0000FF;">..$]</span>
<span style="color: #008080;">end</span> <span style="color: #008080;">if</span>
<span style="color: #008080;">for</span> <span style="color: #000000;">i</span><span style="color: #0000FF;">=</span><span style="color: #000000;">2</span> <span style="color: #008080;">to</span> <span style="color: #7060A8;">length</span><span style="color: #0000FF;">(</span><span style="color: #000000;">lines</span><span style="color: #0000FF;">)</span> <span style="color: #008080;">do</span>
<span style="color: #008080;">if</span> <span style="color: #7060A8;">length</span><span style="color: #0000FF;">(</span><span style="color: #000000;">lines</span><span style="color: #0000FF;">[</span><span style="color: #000000;">i</span><span style="color: #0000FF;">])></span><span style="color: #000000;">5</span>
<span style="color: #008080;">and</span> <span style="color: #000000;">lines</span><span style="color: #0000FF;">[</span><span style="color: #000000;">i</span><span style="color: #0000FF;">][</span><span style="color: #000000;">1</span><span style="color: #0000FF;">..</span><span style="color: #000000;">5</span><span style="color: #0000FF;">]</span> <span style="color: #0000FF;">=</span> <span style="color: #008000;">"===&gt; "</span> <span style="color: #008080;">then</span>
<span style="color: #000000;">alts</span> <span style="color: #0000FF;">=</span> <span style="color: #7060A8;">append</span><span style="color: #0000FF;">(</span><span style="color: #000000;">alts</span><span style="color: #0000FF;">,</span><span style="color: #000000;">lines</span><span style="color: #0000FF;">[</span><span style="color: #000000;">i</span><span style="color: #0000FF;">-</span><span style="color: #000000;">1</span><span style="color: #0000FF;">][</span><span style="color: #000000;">5</span><span style="color: #0000FF;">..$])</span>
<span style="color: #000000;">altn</span> <span style="color: #0000FF;">=</span> <span style="color: #7060A8;">append</span><span style="color: #0000FF;">(</span><span style="color: #000000;">altn</span><span style="color: #0000FF;">,</span><span style="color: #000000;">i</span><span style="color: #0000FF;">)</span>
<span style="color: #008080;">end</span> <span style="color: #008080;">if</span>
<span style="color: #008080;">end</span> <span style="color: #008080;">for</span>
<span style="color: #008080;">for</span> <span style="color: #000000;">i</span><span style="color: #0000FF;">=</span><span style="color: #000000;">2</span> <span style="color: #008080;">to</span> <span style="color: #7060A8;">length</span><span style="color: #0000FF;">(</span><span style="color: #000000;">lines</span><span style="color: #0000FF;">)</span> <span style="color: #008080;">do</span>
<span style="color: #008080;">if</span> <span style="color: #7060A8;">length</span><span style="color: #0000FF;">(</span><span style="color: #000000;">lines</span><span style="color: #0000FF;">[</span><span style="color: #000000;">i</span><span style="color: #0000FF;">])></span><span style="color: #000000;">4</span>
<span style="color: #008080;">and</span> <span style="color: #000000;">lines</span><span style="color: #0000FF;">[</span><span style="color: #000000;">i</span><span style="color: #0000FF;">][</span><span style="color: #000000;">1</span><span style="color: #0000FF;">..</span><span style="color: #000000;">4</span><span style="color: #0000FF;">]</span> <span style="color: #0000FF;">=</span> <span style="color: #008000;">"==&gt; "</span> <span style="color: #008080;">then</span>
<span style="color: #004080;">sequence</span> <span style="color: #000000;">line</span> <span style="color: #0000FF;">=</span> <span style="color: #7060A8;">utf8_to_utf32</span><span style="color: #0000FF;">(</span><span style="color: #000000;">lines</span><span style="color: #0000FF;">[</span><span style="color: #000000;">i</span><span style="color: #0000FF;">-</span><span style="color: #000000;">1</span><span style="color: #0000FF;">]),</span>
<span style="color: #000000;">res</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">parse</span><span style="color: #0000FF;">(</span><span style="color: #000000;">line</span><span style="color: #0000FF;">),</span>
<span style="color: #000000;">expected</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">lines</span><span style="color: #0000FF;">[</span><span style="color: #000000;">i</span><span style="color: #0000FF;">][</span><span style="color: #000000;">5</span><span style="color: #0000FF;">..$]</span>
<span style="color: #008080;">if</span> <span style="color: #000000;">res</span><span style="color: #0000FF;">=</span><span style="color: #000000;">expected</span> <span style="color: #008080;">then</span>
<span style="color: #000080;font-style:italic;">-- (res is the unicode version)</span>
<span style="color: #008080;">if</span> <span style="color: #7060A8;">platform</span><span style="color: #0000FF;">()!=</span><span style="color: #004600;">WINDOWS</span> <span style="color: #008080;">or</span> <span style="color: #000000;">res</span><span style="color: #0000FF;">=</span><span style="color: #008000;">"0"</span> <span style="color: #008080;">then</span>
<span style="color: #7060A8;">printf</span><span style="color: #0000FF;">(</span><span style="color: #000000;">1</span><span style="color: #0000FF;">,</span><span style="color: #008000;">"%2d: %40s ok\n"</span><span style="color: #0000FF;">,{</span><span style="color: #000000;">i</span><span style="color: #0000FF;">-</span><span style="color: #000000;">1</span><span style="color: #0000FF;">,</span><span style="color: #000000;">res</span><span style="color: #0000FF;">})</span>
<span style="color: #008080;">else</span>
<span style="color: #000080;font-style:italic;">-- (unicode output on windows consoles is fiddly...)</span>
<span style="color: #7060A8;">printf</span><span style="color: #0000FF;">(</span><span style="color: #000000;">1</span><span style="color: #0000FF;">,</span><span style="color: #008000;">"%2d: ok\n"</span><span style="color: #0000FF;">,</span><span style="color: #000000;">i</span><span style="color: #0000FF;">-</span><span style="color: #000000;">1</span><span style="color: #0000FF;">)</span>
<span style="color: #008080;">end</span> <span style="color: #008080;">if</span>
<span style="color: #008080;">else</span>
<span style="color: #004080;">integer</span> <span style="color: #000000;">k</span> <span style="color: #0000FF;">=</span> <span style="color: #7060A8;">find</span><span style="color: #0000FF;">(</span><span style="color: #000000;">expected</span><span style="color: #0000FF;">,</span><span style="color: #000000;">alts</span><span style="color: #0000FF;">)</span>
<span style="color: #008080;">if</span> <span style="color: #000000;">k</span> <span style="color: #008080;">and</span> <span style="color: #000000;">res</span><span style="color: #0000FF;">=</span><span style="color: #000000;">lines</span><span style="color: #0000FF;">[</span><span style="color: #000000;">altn</span><span style="color: #0000FF;">[</span><span style="color: #000000;">k</span><span style="color: #0000FF;">]][</span><span style="color: #000000;">6</span><span style="color: #0000FF;">..$]</span> <span style="color: #008080;">then</span>
<span style="color: #000080;font-style:italic;">-- (res is the ascii equivalent)</span>
<span style="color: #7060A8;">printf</span><span style="color: #0000FF;">(</span><span style="color: #000000;">1</span><span style="color: #0000FF;">,</span><span style="color: #008000;">"%2d: %40s ok\n"</span><span style="color: #0000FF;">,{</span><span style="color: #000000;">i</span><span style="color: #0000FF;">-</span><span style="color: #000000;">1</span><span style="color: #0000FF;">,</span><span style="color: #000000;">res</span><span style="color: #0000FF;">})</span>
<span style="color: #008080;">else</span>
<span style="color: #7060A8;">printf</span><span style="color: #0000FF;">(</span><span style="color: #000000;">1</span><span style="color: #0000FF;">,</span><span style="color: #008000;">"%d: error - %s\n"</span><span style="color: #0000FF;">,{</span><span style="color: #000000;">i</span><span style="color: #0000FF;">-</span><span style="color: #000000;">1</span><span style="color: #0000FF;">,</span><span style="color: #000000;">res</span><span style="color: #0000FF;">})</span>
<span style="color: #008080;">end</span> <span style="color: #008080;">if</span>
<span style="color: #008080;">end</span> <span style="color: #008080;">if</span>
<span style="color: #008080;">end</span> <span style="color: #008080;">if</span>
<span style="color: #008080;">end</span> <span style="color: #008080;">for</span>
<span style="color: #0000FF;">?</span><span style="color: #008000;">"done"</span>
<span style="color: #0000FF;">{}</span> <span style="color: #0000FF;">=</span> <span style="color: #7060A8;">wait_key</span><span style="color: #0000FF;">()</span>
<!--</syntaxhighlight>-->
{{out}}
uni_frac = false (ie windows)
<pre>
1: x^5 - 2x^4 + 42x^3 + 40x + 1 ok
4: x^5 - 2x^4 + 42x^3 + 40x + 1 ok
6: 0 ok
8: x^5 - 2x^4 + 42x^3 + 40x + 1 ok
10: x^5 - 2x^4 + 42x^3 + 40x + 1 ok
12: x^5 - 2x^4 + 42x^3 + 40x + 1 ok
14: x^5 - 2x^4 + 42x^3 + 40x + 1 ok
16: 1 + 40x^-1 + 42x^-3 - 2x^-4 + x^-5 ok
19: x^5 - 2x^4 + 42x^3 + 40x + 1 ok
21: x^5 - 2x^4 + 42x^3 + 40x + 1 ok
23: x^5 - 2x^4 + 42x^3 + 40x + 1 ok
25: x^5 - 2x^4 + 42x^3 + 40x + 1 ok
27: x^5 - 0.5x^4 + 101.25x^3 + 100.75x + 2.5 ok
30: x^5 - 0.5x^4 + 101.25x^3 + 100.75x + 2.5 ok
32: x^5 - 2x^4 + 42x^3 + 40x + 1 ok
34: x^5 - 2x^4 + 42x^3 + 40x + 1 ok
36: x^5 - 2x^4 + 42x^3 + 40x + 1 ok
38: x^5 - 2x^4 + 42x^3 + 40x + 1 ok
</pre>
uni_frac = true (linux or pwa/p2js only, unless you have managed to find and install a decent windows console unicode font, which I haven't)
<pre>
1: x⁵ - 2x⁴ + 42x³ + 40x + 1 ok
4: x⁵ - 2x⁴ + 42x³ + 40x + 1 ok
6: 0 ok
8: x⁵ - 2x⁴ + 42x³ + 40x + 1 ok
10: x⁵ - 2x⁴ + 42x³ + 40x + 1 ok
12: x⁵ - 2x⁴ + 42x³ + 40x + 1 ok
14: x⁵ - 2x⁴ + 42x³ + 40x + 1 ok
16: 1 + 40x⁻¹ + 42x⁻³ - 2x⁻⁴ + x⁻⁵ ok
19: x⁵ - 2x⁴ + 42x³ + 40x + 1 ok
21: x⁵ - 2x⁴ + 42x³ + 40x + 1 ok
23: x⁵ - 2x⁴ + 42x³ + 40x + 1 ok
25: x⁵ - 2x⁴ + 42x³ + 40x + 1 ok
27: x⁵ - ½x⁴ + 101¼x³ + 100¾x + 2½ ok
30: x⁵ - ½x⁴ + 101¼x³ + 100¾x + 2½ ok
32: x⁵ - 2x⁴ + 42x³ + 40x + 1 ok
34: x⁵ - 2x⁴ + 42x³ + 40x + 1 ok
36: x⁵ - 2x⁴ + 42x³ + 40x + 1 ok
38: x⁵ - 2x⁴ + 42x³ + 40x + 1 ok
</pre>
 
=={{header|Wren}}==
{{trans|Go}}
{{libheader|Wren-pattern}}
<syntaxhighlight lang="wren">import "./pattern" for Pattern
 
var powers = [
["0", "⁰"],
["1", "¹"],
["2", "²"],
["3", "³"],
["4", "⁴"],
["5", "⁵"],
["6", "⁶"],
["7", "⁷"],
["8", "⁸"],
["9", "⁹"],
["-", "⁻"]
]
 
var fractions = [
[".25", "¼"],
[".5", "½"],
[".75", "¾"],
[".14285714285714", "⅐"],
[".11111111111111", "⅑"],
[".1", "⅒"],
[".33333333333333", "⅓"],
[".66666666666667", "⅔"],
[".2", "⅕"],
[".4", "⅖"],
[".6", "⅗"],
[".8", "⅘"],
[".16666666666667", "⅙"],
[".83333333333333", "⅚"],
[".125", "⅛"],
[".375", "⅜"],
[".625", "⅝"],
[".875", "⅞"]
]
 
var printEquation = Fn.new { |coefs|
System.write("=> ")
if (coefs.isEmpty) {
System.print("0\n")
return
}
var keys = coefs.keys.toList
var max = keys[0]
var min = keys[0]
for (k in keys.skip(1)) {
if (k > max) max = k
if (k < min) min = k
}
for (p in max..min) {
var c = coefs[p] ? coefs[p] : 0
if (c != 0) {
if (p < max) {
var sign = "+"
if (c < 0) {
sign = "-"
c = -c
}
System.write(" %(sign) ")
}
if (c != 1 || (c == 1 && p == 0)) {
var cs = c.toString
var ix = cs.indexOf(".")
if (ix >= 0) {
var dec = cs[ix..-1]
for (frac in fractions) {
if (dec == frac[0]) {
cs = cs[0...ix] + frac[1]
break
}
}
}
if (cs[0] == "0" && cs.count > 1 && cs[1] != ".") cs = cs[1..-1]
System.write(cs)
}
if (p != 0) {
var ps = p.toString
for (power in powers) ps = ps.replace(power[0], power[1])
if (ps == "¹") ps = ""
System.write("x%(ps)")
}
}
}
System.print("\n")
}
 
var equs = [
"-0.00x⁺¹⁰ + 1.0·x ** 5 + -2e0x^4 + +0,042.00 × x ⁺³ + +.0x² + 20.000 000 000x¹ - -1x⁺⁰ + .0x⁻¹ + 20.x¹",
"x⁵ - 2x⁴ + 42x³ + 0x² + 40x + 1",
"0e+0x⁰⁰⁷ + 00e-00x + 0x + .0x⁰⁵ - 0.x⁴ + 0×x³ + 0x⁻⁰ + 0/x + 0/x³ + 0x⁻⁵",
"1x⁵ - 2x⁴ + 42x³ + 40x + 1x⁰",
"+x⁺⁵ + -2x⁻⁻⁴ + 42x⁺⁺³ + +40x - -1",
"x^5 - 2x**4 + 42x^3 + 40x + 1",
"x↑5 - 2.00·x⁴ + 42.00·x³ + 40.00·x + 1",
"x⁻⁵ - 2⁄x⁴ + 42x⁻³ + 40/x + 1x⁻⁰",
"x⁵ - 2x⁴ + 42.000 000x³ + 40x + 1",
"x⁵ - 2x⁴ + 0,042x³ + 40.000,000x + 1",
"0x⁷ + 10x + 10x + x⁵ - 2x⁴ + 42x³ + 20x + 1",
"1E0x⁵ - 2,000,000.e-6x⁴ + 4.2⏨1x³ + .40e+2x + 1",
"x⁵ - x⁴⁄2 + 405x³⁄4 + 403x⁄4 + 5⁄2",
"x⁵ - 0.5x⁴ + 101.25x³ + 100.75x + 2.5",
"x⁻⁵ - 2⁄x⁴ + 42x⁻³ - 40/x",
"⅐x⁵ - ⅓x⁴ - ⅔x⁴ + 42⅕x³ + ⅑x - 40⅛ - ⅝"
]
 
var pattern = Pattern.new("+1/s/n+1/s")
 
var reps = [
[",", ""],
[" ", ""],
["¼", ".25"],
["½", ".5"],
["¾", ".75"],
["⅐", ".14285714285714"],
["⅑", ".11111111111111"],
["⅒", ".1"],
["⅓", ".33333333333333"],
["⅔", ".66666666666667"],
["⅕", ".2"],
["⅖", ".4"],
["⅗", ".6"],
["⅘", ".8"],
["⅙", ".16666666666667"],
["⅚", ".83333333333333"],
["⅛", ".125"],
["⅜", ".375"],
["⅝", ".625"],
["⅞", ".875"],
["↉", ".0"],
["⏨", "e"],
["⁄", "/"]
]
 
var reps2 = [
["⁰", "0"],
["¹", "1"],
["²", "2"],
["³", "3"],
["⁴", "4"],
["⁵", "5"],
["⁶", "6"],
["⁷", "7"],
["⁸", "8"],
["⁹", "9"],
["⁻⁻", ""],
["⁻", "-"],
["⁺", ""],
["**", ""],
["^", ""],
["↑", ""],
["⁄", "/"]
]
 
for (equ in equs) {
System.print(equ)
var terms = pattern.splitAll(equ)
var ops = pattern.findAll(equ).map { |m| m.text.trim() }.toList
var coefs = {}
var i = 0
for (term in terms) {
var s = term.split("x")
var t = s[0].trimEnd("·× ")
for (rep in reps) t = t.replace(rep[0], rep[1])
var c = 1
var inverse = false
if (t == "" || t == "+" || t == "-") t = t + "1"
var ix = t.indexOf("/")
if (ix == t.count - 1) {
inverse = true
t = t[0..-2]
c = Num.fromString(t)
} else if (ix >= 0) {
var u = t.split("/")
var m = Num.fromString(u[0])
var n = Num.fromString(u[1])
c = m / n
} else {
c = Num.fromString(t)
}
if (i > 0 && ops[i-1] == "-") c = -c
if (c == -0) c = 0
var cont = false
if (s.count == 1) {
coefs[0] = coefs[0] ? coefs[0] + c : c
cont = true
}
if (!cont) {
var u = s[1].trim()
if (u == "") {
var p = 1
if (inverse) p = -1
if (c != 0) coefs[p] = coefs[p] ? coefs[p] + c : c
cont = true
}
if (!cont) {
for (rep in reps2) u = u.replace(rep[0], rep[1])
var jx = u.indexOf("/")
var p = 1
if (jx >= 0) {
var v = u.split("/")
p = Num.fromString(v[0])
if (p == null) p = 1
var d = Num.fromString(v[1])
c = c / d
} else {
p = Num.fromString(u.trim())
if (p == null) p = 1
}
if (inverse) p = -p
if (c != 0) coefs[p] = coefs[p] ? coefs[p] + c : c
}
}
i = i + 1
}
printEquation.call(coefs)
}</syntaxhighlight>
 
{{out}}
<pre>
-0.00x⁺¹⁰ + 1.0·x ** 5 + -2e0x^4 + +0,042.00 × x ⁺³ + +.0x² + 20.000 000 000x¹ - -1x⁺⁰ + .0x⁻¹ + 20.x¹
=> x⁵ - 2x⁴ + 42x³ + 40x + 1
 
x⁵ - 2x⁴ + 42x³ + 0x² + 40x + 1
=> x⁵ - 2x⁴ + 42x³ + 40x + 1
 
0e+0x⁰⁰⁷ + 00e-00x + 0x + .0x⁰⁵ - 0.x⁴ + 0×x³ + 0x⁻⁰ + 0/x + 0/x³ + 0x⁻⁵
=> 0
 
1x⁵ - 2x⁴ + 42x³ + 40x + 1x⁰
=> x⁵ - 2x⁴ + 42x³ + 40x + 1
 
+x⁺⁵ + -2x⁻⁻⁴ + 42x⁺⁺³ + +40x - -1
=> x⁵ - 2x⁴ + 42x³ + 40x + 1
 
x^5 - 2x**4 + 42x^3 + 40x + 1
=> x⁵ - 2x⁴ + 42x³ + 40x + 1
 
x↑5 - 2.00·x⁴ + 42.00·x³ + 40.00·x + 1
=> x⁵ - 2x⁴ + 42x³ + 40x + 1
 
x⁻⁵ - 2⁄x⁴ + 42x⁻³ + 40/x + 1x⁻⁰
=> 1 + 40x⁻¹ + 42x⁻³ - 2x⁻⁴ + x⁻⁵
 
x⁵ - 2x⁴ + 42.000 000x³ + 40x + 1
=> x⁵ - 2x⁴ + 42x³ + 40x + 1
 
x⁵ - 2x⁴ + 0,042x³ + 40.000,000x + 1
=> x⁵ - 2x⁴ + 42x³ + 40x + 1
 
0x⁷ + 10x + 10x + x⁵ - 2x⁴ + 42x³ + 20x + 1
=> x⁵ - 2x⁴ + 42x³ + 40x + 1
 
1E0x⁵ - 2,000,000.e-6x⁴ + 4.2⏨1x³ + .40e+2x + 1
=> x⁵ - 2x⁴ + 42x³ + 40x + 1
 
x⁵ - x⁴⁄2 + 405x³⁄4 + 403x⁄4 + 5⁄2
=> x⁵ - ½x⁴ + 101¼x³ + 100¾x + 2½
 
x⁵ - 0.5x⁴ + 101.25x³ + 100.75x + 2.5
=> x⁵ - ½x⁴ + 101¼x³ + 100¾x + 2½
 
x⁻⁵ - 2⁄x⁴ + 42x⁻³ - 40/x
=> -40x⁻¹ + 42x⁻³ - 2x⁻⁴ + x⁻⁵
 
⅐x⁵ - ⅓x⁴ - ⅔x⁴ + 42⅕x³ + ⅑x - 40⅛ - ⅝
=> ⅐x⁵ - x⁴ + 42⅕x³ + ⅑x - 40¾
</pre>
 
{{omit from|AWK}}
9,476

edits