[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:02:52

up

Anachorete45
2021-12-16 00:04:05

up

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 ?

Anachorete45
2021-12-16 00:09:08

up^

Anachorete45
2021-12-16 00:11:23

Personne ?

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 ?

Anachorete45
2021-12-16 00:17:23

up

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:29:28

Le 16 décembre 2021 à 00:28:01 :
https://pythontutor.com

C'est un débugueur ?

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

Infos
Gestion du forum

contact@geevey.com

API disponible. Utilisez le paramètre "api" en GET, peu importe le contenu, sur une page du site.

Notes

    Partenaire: JVFlux
    Ce site n'est pas associé à Jeuxvideo.com ou Webedia. Nous utilisons seulement des archives publiques.
    Il est inutile de me spammer par e-mail pour supprimer un topic. Au contraire, en conséquence, je mettrais votre topic dans le bloc ci-dessous.
Non-assumage
    Personne n'a pas assumé de topic pour le moment.