Enable Javascript in your browser and then refresh this page, for a much enhanced experience.
Counter solution in Clear category for Simplification by gyahun_dash
from collections import Counter
from functools import reduce
from itertools import chain, product, starmap
from operator import add, itemgetter as getter
from re import sub
class Polynomial(Counter):
def __add__(self, other):
return Polynomial({k: self[k] + other[k] for k in chain(self, other)})
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 = ({j + k: self[j] * other[k]} for j, k in product(self, other))
return reduce(add, map(Polynomial, prods))
def __str__(self):
def term(deg, coef):
if deg == 0: return str(coef)
c = '' if coef == 1 else '-' if coef == -1 else '{}*'.format(coef)
return '{}x{}'.format(c, '**{}'.format(deg) if deg > 1 else '')
items = list(filter(getter(1), sorted(self.items(), reverse = True)))
join = lambda s, t: s + ('' if t.startswith('-') else '+') + t
return reduce(join, starmap(term, items)) if items else '0'
def simplify(expression):
dictize = lambda var: '{1:1}' if var == 'x' else '{{0:{}}}'.format(var)
polynomialize = lambda m: 'Polynomial({})'.format(dictize(m.group(0)))
return str(eval(sub(r'x|\d+', polynomialize, expression)))
Sept. 10, 2014
Comments: