summaryrefslogtreecommitdiffstats
path: root/render.py
blob: 6cd3c7d48c4100425fba38dc7249e49f70898e17 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
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))