diff --git a/polynomial.py b/polynomial.py index b1d8233827581576beb7b2accfc3857819cbb0cf..498b28bdc31f17e7979531e530cd6c458feaf8a9 100644 --- a/polynomial.py +++ b/polynomial.py @@ -4,7 +4,8 @@ import json def unicode_superscripts(value): - exponent_dict = {"0": "⁰", "1": "¹", "2": "²", "3": "³", "4": "⁴", "5": "⁵", "6": "⁶", "7": "⁷", "8": "⁸", "9": "⁹"} + exponent_dict = {"0": "⁰", "1": "¹", "2": "²", "3": "³", + "4": "⁴", "5": "⁵", "6": "⁶", "7": "⁷", "8": "⁸", "9": "⁹"} return ("⁻" if value < 0 else "") + "".join(exponent_dict[x] for x in str(abs(value))) @@ -20,27 +21,37 @@ class Polynomial: def __add__(self, other): a = list(self.value) b = list(other.value) - + a_count = len(a) b_count = len(b) if a_count > b_count: - diff = b_count-a_count + diff = a_count-b_count for x in range(diff): b.append(0) else: - diff = a_count-b_count + diff = b_count-a_count for x in range(diff): a.append(0) - - c = [0] * a_count + + c = [0] * len(a) for x in range(len(a)): c[x] = a[x]+b[x] - + return Polynomial(tuple(c)) - def __mul__(self, other): - pass + a = list(self.value) + b = list(other.value) + a_count = len(a) + b_count = len(b) + size = ((a_count - 1) + (b_count - 1) + 1) + c = [0] * size + + for i in range(a_count): + for j in range(b_count): + c[i+j] += a[i]*b[j] + + return Polynomial(tuple(c)) def __mod__(self, other): pass @@ -72,13 +83,22 @@ def reed_solomon(points, data_length, last_error_index, prime_number): def main(): + + p1 = Polynomial((5, 1, 4)) + p2 = Polynomial((5, 2, 3, 4)) + p3 = p1*p2 + print(p1) + print(p2) + print(p3) + with open("messages.json") as f: messages = json.load(f) print(len(messages)) for message in messages: points = [(x, y) for x, y in enumerate(message["points"])] - corrected_data = reed_solomon(points, message["data_length"], message["last_error_index"], message["prime_number"]) + corrected_data = reed_solomon( + points, message["data_length"], message["last_error_index"], message["prime_number"]) print(corrected_data) break