diff options
author | tanyaionova <isaqtm@gmail.com> | 2019-11-21 20:57:37 +0300 |
---|---|---|
committer | tanyaionova <isaqtm@gmail.com> | 2019-11-21 20:57:37 +0300 |
commit | ea43333d6af8f30c63ff49baaa9911011c3b695b (patch) | |
tree | 6b4c2ada01b524732f09b8f16e3338fdd327f2a3 /render.py | |
parent | 7360c0ae23653ff0fddec16f91f5eaed88529dfb (diff) | |
download | alg2-ea43333d6af8f30c63ff49baaa9911011c3b695b.tar.gz |
Extract renderer
Diffstat (limited to 'render.py')
-rw-r--r-- | render.py | 45 |
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)) |