From f76cc9e06d4f0a1b509b8f9d565849cefcb81865 Mon Sep 17 00:00:00 2001 From: Szymon Wojciechowski Date: Wed, 27 Jun 2018 17:38:32 +0000 Subject: [PATCH] import poly --- crc16.py | 70 ++------------------------------------------------------ 1 file changed, 2 insertions(+), 68 deletions(-) diff --git a/crc16.py b/crc16.py index ade6f26..0a44f74 100644 --- a/crc16.py +++ b/crc16.py @@ -1,74 +1,8 @@ +from poly import Polynomial import sys import ast -class Polynomial: - - def __init__(self, coef_list): - self.degree = len(coef_list) - 1 - self.coefficients = coef_list - - @staticmethod - def add(p1, p2): - result = [] - f = p1.coefficients - g = p2.coefficients - if len(f) >= len(g): - result = f - for i in range(0, len(g)): - result[i] = f[i] + g[i] - else: - result = g - for i in range(0, len(f)): - result[i] = f[i] + g[i] - result = [x % int(n) for x in result] - return Polynomial(result) - - @staticmethod - def multiply(p1, p2): - result = [0] * (p1.degree + p2.degree + 1) - f = p1.coefficients - g = p2.coefficients - for i in range(0, len(f)): - for j in range(0, len(g)): - result[i+j] += f[i] * g[j] - result = [x % int(n) for x in result] - return Polynomial(result) - - @staticmethod - def divide(p1, p2): - def inverse(x): - for i in range(1, int(n)): - r = (i * x) % int(n) - if r == 1: - break - else: - raise ZeroDivisionError - return i - if p1.degree < p2.degree: - return p1 - f = p1.coefficients - g = p2.coefficients - g_lead_coef = g[-1] - g_deg = p2.degree - while len(f) >= len(g): - f_lead_coef = f[-1] - tmp_coef = f_lead_coef * inverse(g_lead_coef) - tmp_exp = len(f) - 1 - g_deg - tmp = [] - for _ in range(tmp_exp): - tmp.append(0) - tmp.append(tmp_coef) - tmp_poly = Polynomial(tmp) - sub = Polynomial.multiply(p2, tmp_poly) - f = [x - y for x, y in zip(f, sub.coefficients)] - f = [x % int(n) for x in f] - while f and f[-1] == 0: - f.pop() - return Polynomial(f) - - -n = 2 - +Polynomial.n = 2 def normalize_byte(data): while len(data) != 8: