#!/usr/bin/python
# -*- coding: utf-8 -*-

""" Bosquejo de un programa para manipular polinomios 
      Autor: Antonio Carrillo Ledesma
"""


class Poly:
    C = []  # Coeficientes del polinomio
    Dim = 0  # Guarda la dimension del arreglo de coeficientes

    def __init__(self, coef):
        """Cosntructor de la clase"""
        self.Dim = len(coef)
        self.C = [0 for i in range(self.Dim)]
        for i in range(self.Dim):
            self.C[i] = coef[i]

    def __str__(self):
        """Visualiza el polinomio"""
        r = ""
        for i in range(self.Dim):
            if self.C[i] != 0:
                r += " + " + str(self.C[i])
                if i == 0:
                    continue
                r += "X^" + str(i)
        return r

    def visualiza(self):
        """Visualiza el polinomio"""
        print(self)

    def grado(self):
        """Grado del polinomio"""
        for i in range(self.Dim - 1, 0, -1):
            if self.C[i] != 0.0:
                return i
        return 0

    def suma(self, a, b):
        """suma polinomios"""
        n1, n2 = a.Dim, b.Dim
        self.Dim = n1 + n2
        self.C = [0 for i in range(self.Dim)]
        if n1 > n2:
            for i in range(n2):
                self.C[i] = a.C[i] + b.C[i]
            for i in range(n2, n1):
                self.C[i] = a.C[i]
        else:
            for i in range(n1):
                self.C[i] = a.C[i] + b.C[i]
            for i in range(n1, n2):
                self.C[i] = b.C[i]

    def multiplica(self, a, b):
        """multiplica polinomios"""
        self.Dim = a.Dim + b.Dim
        self.C = [0 for i in range(self.Dim)]
        for i in range(a.Dim):
            for j in range(b.Dim):
                self.C[i + j] += a.C[i] * b.C[j]


"""
Prueba de las clases
"""
if __name__ == "__main__":
    a = Poly([1.0, 2.0, 3.0])
    a.visualiza()

    b = Poly([4.0, 3.0, 6.0, 1.0])
    b.visualiza()

    c = Poly([0.0])
    c.suma(a, b)
    c.visualiza()
    print(c.grado())