diff --git a/reed_solomon.py b/reed_solomon.py index 9952ec01d48439ccc0e4a82b7d0a6a8cafc8067b..0e675621383f9c081a302f070f7bfb2875fa7c80 100644 --- a/reed_solomon.py +++ b/reed_solomon.py @@ -26,9 +26,9 @@ def lagrange_compute(l: list) -> polynome: for x_i, y_i in enumerate(l): poly_n = polynome([1]) for x_k, y_k in enumerate(l): - if x_k != x_i: - d = inverse_mult((x_i-x_k) % poly_n.prime_mod, poly_n.prime_mod) - poly_n = poly_n.mul(polynome([-x_k * d % poly_n.prime_mod, d % poly_n.prime_mod])) + if y_k[0] != y_i[0]: + d = inverse_mult((y_i[0]-y_k[0]) % poly_n.prime_mod, poly_n.prime_mod) + poly_n = poly_n.mul(polynome([-y_k[0] * d % poly_n.prime_mod, d % poly_n.prime_mod])) poly_n = poly_n.mul(polynome([y_i[1] % poly_n.prime_mod])) poly = poly.add(poly_n) return poly @@ -38,18 +38,17 @@ def check_nb_error(l: list, p: polynome) -> int: nbr_error = 0 for item in l: if (item[1] % p.prime_mod) != (p.evaluate(item[0]) % p.prime_mod): - print(f"DEBUG PURPOSES ONLY {item[1]} != p.evaluate({item[0]}) = {p.evaluate(item[0])}") + # print(f"DEBUG PURPOSES ONLY {item[1]} != p.evaluate({item[0]}) = {p.evaluate(item[0])}") nbr_error += 1 return nbr_error def reed_decode(l: list) -> polynome: # print("test") - for points in get_possibilities(l): - # print(f"{points}") - # lagrange_compute(points).show() + for points in get_possibilities(l, 20): err = check_nb_error(l, lagrange_compute(points)) print(f"{err=}") if ((err) <= 9): + # ? Chercher un polynome avec moins de 9 erreurs ? # Possibilité d'optimiser en evitant de compute 2 fois le poly return lagrange_compute(points) \ No newline at end of file