diff --git a/polynomial.py b/polynomial.py
index 235facc209afac728561d0d7a5aad07960d952f1..0a360c260de3150d6d6dc18a60cbc4ff2f6ad2a4 100644
--- a/polynomial.py
+++ b/polynomial.py
@@ -32,7 +32,7 @@ class Polynomial:
             raise TypeError('The "value" parameter is not of type tuple.')
         self.value = value
 
-    def pass_x_throughout(self, x):
+    def evaluate_x(self, x):
         """Evaluate the polynomial by passing x
 
         Args:
@@ -60,20 +60,10 @@ class Polynomial:
         a = list(self.value)
         b = list(other.value)
 
-        a_count = len(a)
-        b_count = len(b)
-        if a_count > b_count:
-            diff = a_count - b_count
-            for x in range(diff):
-                b.append(0)
-        else:
-            diff = b_count - a_count
-            for x in range(diff):
-                a.append(0)
-
-        c = [0] * len(a)
-        for x in range(len(a)):
-            c[x] = a[x] + b[x]
+        c = []
+        # itertools pad 0 to the lowest list
+        for (a, b) in itertools.zip_longest(a, b, fillvalue=0):
+            c.append(a + b)
 
         return Polynomial(tuple(c))
 
@@ -239,7 +229,7 @@ def reed_solomon(points, data_length, last_error_index, prime_number):
         for p in points:
             x = p[0]
             # Pass the x value of each points through the lagrange polynomial
-            y = lagrange.pass_x_throughout(x) % prime_number
+            y = lagrange.evaluate_x(x) % prime_number
             # If the result is the same that the y value, then the point is correct
             if y == p[1]:
                 nb_valid_points += 1
@@ -249,7 +239,7 @@ def reed_solomon(points, data_length, last_error_index, prime_number):
             # Decode the message
             output = ""
             for i in range(data_length):
-                output += chr(lagrange.pass_x_throughout(i) % prime_number)
+                output += chr(lagrange.evaluate_x(i) % prime_number)
 
             return output