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 0123456789 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))