summaryrefslogtreecommitdiffstats
path: root/render.py
diff options
context:
space:
mode:
Diffstat (limited to 'render.py')
-rw-r--r--render.py45
1 files changed, 45 insertions, 0 deletions
diff --git a/render.py b/render.py
new file mode 100644
index 0000000..6cd3c7d
--- /dev/null
+++ b/render.py
@@ -0,0 +1,45 @@
+from libsolve import Poly, PolyRenderBase
+
+
+class UnicodeRender(PolyRenderBase):
+ def __init__(self):
+ # may not work. see
+ # https://en.wikipedia.org/wiki/Unicode_subscripts_and_superscripts
+ # to test with your font
+ self.sup = '⁰¹²³⁴⁵⁶⁷⁸⁹' # must be <sup>0123456789</sup>
+
+ def render(self, poly: Poly) -> str:
+ rev = list(reversed(poly.vec))
+ if all(r == 0 for r in rev):
+ return '0'
+ d = poly.deg()
+ res = []
+ for i in range(len(rev)):
+ if rev[i] == 0:
+ continue
+ if i == 0:
+ if rev[i] < 0:
+ res.append('-')
+ else:
+ if rev[i] < 0:
+ res.append(' - ')
+ else:
+ res.append(' + ')
+
+ if abs(rev[i]) != 1 or i == d:
+ res.append(str(abs(rev[i])))
+ if i != d:
+ res.append(poly.letter)
+ if d - i != 1:
+ res.append(self._int2sup(d - i))
+ return ''.join(res)
+
+ def hint(self, poly: Poly) -> int:
+ return len(self.render(poly))
+
+ def _int2sup(self, n):
+ res = []
+ while n > 0:
+ res.append(self.sup[n % 10])
+ n //= 10
+ return ''.join(reversed(res))