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