[HELP PYTHON] Des génies d'algo ici ?
Anachorete45
2021-12-16 00:01:18
Je dois implémenter cette MERDE de multiplication. Il s'agit de la multiplication de polynômes sous forme binaire :
https://image.noelshack.com/fichiers/2021/50/4/1639609234-image.png
Voici ce que j'ai produit :
while b != "00000000":
if int(b[-1]) == 1:
res = self.add(res, a)
b = self.add(b, "00000001")
a = self.multiplyByX(self.modulo(a))
b = self.divideByX(b)
return res
Pourquoi ça foire ? Quelqu'un pour m'aider ?
Anachorete45
2021-12-16 00:07:24
up je deviens fou
Quelqu'un sait comment implémenter un modulo en F{2^8} donc en binaire ?
Foxyorki8
2021-12-16 00:11:24
a = self.multiplyByX(self.modulo(a))
j'ai pas compris cette ligne par rapport à l'algo
Anachorete45
2021-12-16 00:14:36
Le 16 décembre 2021 à 00:11:24 :
a = self.multiplyByX(self.modulo(a))
j'ai pas compris cette ligne par rapport à l'algo
En fait ça vient de cette lignehttps://image.noelshack.com/fichiers/2021/50/4/1639609976-image.png
J'ai fait une fonction modulo aussi :
def modulo(self, a):
b = "100011011"
return self.add(a, b)
qui permet de retourner le modulo dans F{2^8} parce que c'est égal à l'addition dans ce corps ?
Foxyorki8
2021-12-16 00:17:38
Le 16 décembre 2021 à 00:14:36 :
Le 16 décembre 2021 à 00:11:24 :
a = self.multiplyByX(self.modulo(a))
j'ai pas compris cette ligne par rapport à l'algo
En fait ça vient de cette lignehttps://image.noelshack.com/fichiers/2021/50/4/1639609976-image.png
J'ai fait une fonction modulo aussi :
def modulo(self, a):
b = "100011011"
return self.add(a, b)
qui permet de retourner le modulo dans F{2^8} parce que c'est égal à l'addition dans ce corps ?
je savais pas
et res te renvoie pas ce qu'il faut ?
Anachorete45
2021-12-16 00:18:18
Le 16 décembre 2021 à 00:17:38 :
Le 16 décembre 2021 à 00:14:36 :
Le 16 décembre 2021 à 00:11:24 :
a = self.multiplyByX(self.modulo(a))
j'ai pas compris cette ligne par rapport à l'algo
En fait ça vient de cette lignehttps://image.noelshack.com/fichiers/2021/50/4/1639609976-image.png
J'ai fait une fonction modulo aussi :
def modulo(self, a):
b = "100011011"
return self.add(a, b)
qui permet de retourner le modulo dans F{2^8} parce que c'est égal à l'addition dans ce corps ?
je savais pas
et res te renvoie pas ce qu'il faut ?
non
class BinaryField():
def __init__(self):
self.exist = True
def toBinary(self, n):
""" Convertit un entier n en un string contenant la séquence binaire de 8 bits."""
return ''.join(str(1 & int(n) >> i) for i in range(8)[::-1])
""" Additionne deux séquences binaires (stockées dans des strings).
La valeur de retour doit aussi être un string.
Par exemple:
"10111001" + "10010100" = "00101101"
"""
def add(self, x, y):
maxLen = max(len(x), len(y))
xLen = len(x)
yLen = len(y)
if (len(x) > len(y)):
biggest = x
smallest = y
else:
biggest = y
smallest = x
first = np.zeros(maxLen, int)
second = np.zeros(maxLen, int)
if (xLen == maxLen):
for i in range(maxLen):
first[i] += int(x[i])
for i in range(len(y)):
second[-1 - i] = int(y[-1 - i])
elif (yLen == maxLen):
for i in range(maxLen):
first[i] += int(y[i])
for i in range(len(x)):
second[-1 - i] = int(x[-1 - i])
thirdResult = first + second
filter = np.zeros(maxLen)
for i in range(maxLen):
if (thirdResult[i] == 2):
filter[i] = 0
if (thirdResult[i] == 1):
filter[i] = 1
stringToReturn = ""
for i in range(len(filter)):
stringToReturn += str(int(filter[i]))
return stringToReturn
def modulo(self, a):
b = "100011011"
return self.add(a, b)
# Il reste à implémenter la fonction modulo
def multiply(self, a, b):
""" Multiplie deux séquences binaires (stockées dans des strings).
La valeur de retour doit aussi être un string.
Par exemple:
"10111001" * "10010100" = "10110010"
"""
g = "100011011"
res = "00000000"
while b != "00000000":
if int(b[-1]) == 1:
res = self.add(res, a)
b = self.add(b, "00000001")
a = self.multiplyByX(self.modulo(a))
b = self.divideByX(b)
return self.toBinary(res)
def multiplyByX(self, s):
return s + "0"
def divideByX(self, s):
l = list(s)
return ''.join(l[-1:] + l[:-1])
def inverse(self, x):
""" Inverse un élément du corps donné sous forme d'une séquence binaire (stockée dans un string).
La valeur de retour doit aussi être un string.
Par exemple :
("10111001")^(-1) = "10001110"
"""
b = self.toBinary(1)
c = x
for _ in range(8 - 1):
c = self.multiply(c, c)
b = self.multiply(b, c)
return b
Anachorete45
2021-12-16 00:18:51
J'ai envie de pleurer res me renvoie une séquence beaucoup plus grande que juste 8 bits
Foxyorki8
2021-12-16 00:21:04
Le 16 décembre 2021 à 00:18:51 :
J'ai envie de pleurer res me renvoie une séquence beaucoup plus grande que juste 8 bits
bah c'est normal non ? ça doit renvoyer 16 bits
Anachorete45
2021-12-16 00:23:41
Le 16 décembre 2021 à 00:21:04 :
Le 16 décembre 2021 à 00:18:51 :
J'ai envie de pleurer res me renvoie une séquence beaucoup plus grande que juste 8 bits
bah c'est normal non ? ça doit renvoyer 16 bits
https://image.noelshack.com/fichiers/2021/50/4/1639610610-image.png
Le prof a donné ça comme spécification
Foxyorki8
2021-12-16 00:27:16
Le 16 décembre 2021 à 00:23:41 :
Le 16 décembre 2021 à 00:21:04 :
Le 16 décembre 2021 à 00:18:51 :
J'ai envie de pleurer res me renvoie une séquence beaucoup plus grande que juste 8 bits
bah c'est normal non ? ça doit renvoyer 16 bits
https://image.noelshack.com/fichiers/2021/50/4/1639610610-image.png
Le prof a donné ça comme spécification
bah c'est pas des polynomes alors
Anachorete45
2021-12-16 00:30:14
Le 16 décembre 2021 à 00:27:16 :
Le 16 décembre 2021 à 00:23:41 :
Le 16 décembre 2021 à 00:21:04 :
Le 16 décembre 2021 à 00:18:51 :
J'ai envie de pleurer res me renvoie une séquence beaucoup plus grande que juste 8 bits
bah c'est normal non ? ça doit renvoyer 16 bits
https://image.noelshack.com/fichiers/2021/50/4/1639610610-image.png
Le prof a donné ça comme spécification
bah c'est pas des polynomes alors
Bah c'est ce que je me disais aussi, mais pourquoi ce CHIEN de prof de MERDE nous mets ça en doc alors
Je n'en peux plus
Foxyorki8
2021-12-16 00:31:30
Le 16 décembre 2021 à 00:30:14 :
Le 16 décembre 2021 à 00:27:16 :
Le 16 décembre 2021 à 00:23:41 :
Le 16 décembre 2021 à 00:21:04 :
Le 16 décembre 2021 à 00:18:51 :
J'ai envie de pleurer res me renvoie une séquence beaucoup plus grande que juste 8 bits
bah c'est normal non ? ça doit renvoyer 16 bits
https://image.noelshack.com/fichiers/2021/50/4/1639610610-image.png
Le prof a donné ça comme spécification
bah c'est pas des polynomes alors
Bah c'est ce que je me disais aussi, mais pourquoi ce CHIEN de prof de MERDE nous mets ça en doc alors
Je n'en peux plus
"1000 0000" c'est x**7
"1000 0000" X "1000 0000" = x**14 = "0010 0000 0000 0000"
peut etre qu'il demande les huit derniers bits
Anachorete45
2021-12-16 00:32:18
Le 16 décembre 2021 à 00:31:30 :
Le 16 décembre 2021 à 00:30:14 :
Le 16 décembre 2021 à 00:27:16 :
Le 16 décembre 2021 à 00:23:41 :
Le 16 décembre 2021 à 00:21:04 :
Le 16 décembre 2021 à 00:18:51 :
J'ai envie de pleurer res me renvoie une séquence beaucoup plus grande que juste 8 bits
bah c'est normal non ? ça doit renvoyer 16 bits
https://image.noelshack.com/fichiers/2021/50/4/1639610610-image.png
Le prof a donné ça comme spécification
bah c'est pas des polynomes alors
Bah c'est ce que je me disais aussi, mais pourquoi ce CHIEN de prof de MERDE nous mets ça en doc alors
Je n'en peux plus
"1000 0000" c'est x**7
"1000 0000" X "1000 0000" = x**14 = "0010 0000 0000 0000"
Bah oui t'as raison mais ça a l'air de choquer personne dans la promo...
Je ne comprends pas