1
+ # Runtime: 62 ms (Top 83.61%) | Memory: 14.1 MB (Top 62.30%)
1
2
class Term :
2
3
def __init__ (self , exp : Optional [str ]= '' , * , term : Optional [Mapping [str , int ]]= {}) -> None :
3
4
self .d = defaultdict (int , ** term )
4
5
if re .match (r'^\-?\d+$' , exp ):
5
6
self .d ['' ] += int (exp )
6
7
elif exp :
7
8
self .d [exp ] += 1
8
-
9
+
9
10
def __add__ (self , other : 'Term' ) -> 'Term' :
10
11
return self ._pm (other , add = True )
11
-
12
+
12
13
def __mul__ (self , other : 'Term' ) -> 'Term' :
13
14
res = defaultdict (int )
14
15
for (l_var , l_coef ), (r_var , r_coef ) in product (self .d .items (), other .d .items ()):
15
16
res ['*' .join (sorted (self ._exp (l_var )+ self ._exp (r_var )))] += l_coef * r_coef
16
17
return Term (term = res )
17
-
18
+
18
19
def __sub__ (self , other : 'Term' ) -> 'Term' :
19
20
return self ._pm (other , add = False )
20
21
21
22
def get (self ) -> List [str ]:
22
23
return [str (coef )+ '*' * bool (var )+ var \
23
24
for var , coef in sorted (self .d .items (), key = lambda t : (- len (self ._exp (t [0 ])), t [0 ])) if coef ]
24
-
25
+
25
26
def _exp (self , var : str ) -> List [str ]:
26
27
return list (filter (bool , var .split ('*' )))
27
-
28
+
28
29
def _pm (self , other : 'Term' , * , add : bool ) -> 'Term' :
29
30
res = copy .copy (self .d )
30
31
for var , coef in other .d .items ():
@@ -34,4 +35,4 @@ def _pm(self, other: 'Term', *, add: bool) -> 'Term':
34
35
class Solution :
35
36
def basicCalculatorIV (self , expression : str , evalvars : List [str ], evalints : List [int ]) -> List [str ]:
36
37
vals = dict (zip (evalvars , evalints ))
37
- return eval (re .sub (r'[a-z0-9]+' , lambda m : "Term('" + str (vals .get (m .group (), m .group ()))+ "')" , expression )).get ()
38
+ return eval (re .sub (r'[a-z0-9]+' , lambda m : "Term('" + str (vals .get (m .group (), m .group ()))+ "')" , expression )).get ()
0 commit comments