Enable Javascript in your browser and then refresh this page, for a much enhanced experience.
First solution in Uncategorized category for Simplification by gyahun_dash
import collections as co, functools as ft, itertools as it, re, operator as op
def term(deg, coef):
if deg == 0: return str(coef)
c = '' if coef == 1 else '-' if coef == -1 else '{}*'.format(coef)
return '{}{}'.format(c, 'x' if deg == 1 else 'x**{}'.format(deg))
class Polynomial(co.Counter):
def __add__(self, other):
keys = set(it.chain(self, other))
return Polynomial({k: self[k] + other[k] for k in keys})
def __neg__(self):
return Polynomial({k: - v for k, v in self.items()})
def __sub__(self, other):
return self + (- other)
def __mul__(self, other):
prods = it.product(self, other)
polys = (Polynomial({j + k: self[j] * other[k]}) for j, k in prods)
return ft.reduce(op.add, polys)
def __str__(self):
nonzeros = [k for k in self if self[k] != 0]
if not nonzeros: return '0'
join = lambda s, t: ('' if t.startswith('-') else '+').join([s, t])
items = ((k, self[k]) for k in sorted(nonzeros, reverse = True))
return ft.reduce(join, it.starmap(term, items))
def simplify(expr):
pair = lambda var: (1, 1) if var == 'x' else (0, var)
polynomialize = lambda m: 'Polynomial({{{}:{}}})'.format(*pair(m.group(0)))
return str(eval(re.sub(r'x|\d+', polynomialize, expr)))
Sept. 10, 2014
Comments: