david_Yakhin_312 AsyncPoly 10857
Алмаз Сейтхазин (КФ МГУ, кафедра НДС) AsyncPoly 10839
t1import asynciot1import asyncio
22
3class YesFuture:3class YesFuture:
44
5    def __init__(self, value=None):5    def __init__(self, value=None):
6        self.value = value6        self.value = value
77
8    def set(self, value):8    def set(self, value):
9        self.value = value9        self.value = value
1010
11    def __await__(self):11    def __await__(self):
1212
13        async def _coro(v):13        async def _coro(v):
14            return v14            return v
15        return _coro(self.value).__await__()15        return _coro(self.value).__await__()
1616
17def parse_poly(poly, x):17def parse_poly(poly, x):
18    s = poly.replace(' ', '').replace('−', '-')18    s = poly.replace(' ', '').replace('−', '-')
19    supers = {'⁰': '0', '¹': '1', '²': '2', '³': '3', '⁴': '4', '⁵': '5'19    supers = {'⁰': '0', '¹': '1', '²': '2', '³': '3', '⁴': '4', '⁵': '5'
>, '⁶': '6', '⁷': '7', '⁸': '8', '⁹': '9'}>, '⁶': '6', '⁷': '7', '⁸': '8', '⁹': '9'}
20    terms = {}20    terms = {}
21    i = 021    i = 0
22    n = len(s)22    n = len(s)
23    while i < n:23    while i < n:
24        sign = 124        sign = 1
25        if s[i] == '+':25        if s[i] == '+':
26            i += 126            i += 1
27        elif s[i] == '-':27        elif s[i] == '-':
28            sign = -128            sign = -1
29            i += 129            i += 1
30        coef_str = ''30        coef_str = ''
31        while i < n and s[i].isdigit():31        while i < n and s[i].isdigit():
32            coef_str += s[i]32            coef_str += s[i]
33            i += 133            i += 1
34        coef = int(coef_str) if coef_str else None34        coef = int(coef_str) if coef_str else None
35        has_x = False35        has_x = False
36        power = 036        power = 0
37        if i < n and (s[i] == 'x' or s[i] == 'X'):37        if i < n and (s[i] == 'x' or s[i] == 'X'):
38            has_x = True38            has_x = True
39            i += 139            i += 1
40            exp_str = ''40            exp_str = ''
41            while i < n and s[i] in supers:41            while i < n and s[i] in supers:
42                exp_str += supers[s[i]]42                exp_str += supers[s[i]]
43                i += 143                i += 1
44            if exp_str:44            if exp_str:
45                power = int(exp_str)45                power = int(exp_str)
46            else:46            else:
47                power = 147                power = 1
48        if has_x:48        if has_x:
49            if coef is None:49            if coef is None:
50                coef = 150                coef = 1
51        elif coef is None:51        elif coef is None:
52            continue52            continue
53        coef *= sign53        coef *= sign
54        if power in terms:54        if power in terms:
55            terms[power] += coef55            terms[power] += coef
56        else:56        else:
57            terms[power] = coef57            terms[power] = coef
58    awaitables = []58    awaitables = []
59    for power, coef in terms.items():59    for power, coef in terms.items():
60        if coef == 0:60        if coef == 0:
61            continue61            continue
62        if power == 0:62        if power == 0:
63            awaitables.append(YesFuture(coef))63            awaitables.append(YesFuture(coef))
64        else:64        else:
65            a = x65            a = x
66            b = YesFuture(power)66            b = YesFuture(power)
67            pow_coro = Pow(a, b)67            pow_coro = Pow(a, b)
68            c = YesFuture(coef)68            c = YesFuture(coef)
69            term = Mul(c, pow_coro)69            term = Mul(c, pow_coro)
70            awaitables.append(term)70            awaitables.append(term)
71    if not awaitables:71    if not awaitables:
72        expr = YesFuture(0)72        expr = YesFuture(0)
73    else:73    else:
74        expr = awaitables[0]74        expr = awaitables[0]
75        for term in awaitables[1:]:75        for term in awaitables[1:]:
76            expr = Sum(expr, term)76            expr = Sum(expr, term)
7777
78    async def _runner():78    async def _runner():
79        return await expr79        return await expr
80    return _runner()80    return _runner()
Legends
Colors
 Added 
Changed
Deleted
Links
(f)irst change
(n)ext change
(t)op