diff options
author | syn <isaqtm@gmail.com> | 2020-02-16 11:56:52 +0300 |
---|---|---|
committer | syn <isaqtm@gmail.com> | 2020-02-16 11:56:52 +0300 |
commit | fd78d0fd00e6b98ae8b9894db8be028575e205ac (patch) | |
tree | ee9dd35e871d222aa60a1958e9b6f28eaa6ecc54 /render.py | |
download | alg3-fd78d0fd00e6b98ae8b9894db8be028575e205ac.tar.gz |
Init commit
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)) |