diff --git a/main.py b/main.py index ac6268daa7e0f4aa0a9d11039def542261e2af99..5d71befdf8e8fb9a92432374ff8b8ae8b0503abe 100644 --- a/main.py +++ b/main.py @@ -56,39 +56,42 @@ def mul_mod(a, b): return format(res, '04b') -def xor(a,b):#a XOR b = str(binaire) -# CODE SPAGHETTI | À OPTIMISER SI POSSIBLE -# accepte des nombres (décimaux & binaires-str) qui n'ont pas la même taille (100 et 7, ou encore '101' et '10101010101'par exemple) +# Return a string of the result of a XOR b +def xor(a, b): res = '' - if(type(a) != str): #transforme les int en str (5 = 101 ; pas 0b101) - a = format(a, "b") - - if(type(b) != str): #transforme les int en str (7 = 111 ; pas 0b101) - b = format(b, "b") - - if(len(a) > len(b)):#si len(a) > len(b), met b --> a & a --> b pour étape suivante où len(a) pourra être comme len(b) - tmp = a - a = b - b = tmp - - if(len(a) < len(b)): #partie ou on met les 2 strings à la même taille. - l_a = len(a) #int - l_b = len(b) #int - list = [] - list = ((l_b - l_a) * '0', a) #à gauche, le nombre de '0' nécessaire pour avoir la même taille que 'b' - # & à droite 'a' qui est le plus petit str - a = ''.join(list) #fusion des '0' et du str(a) + # Format to binary string + if type(a) != str: + a = format(a, "04b") + if type(b) != str: + b = format(b, "04b") + + # Adjust the size of a and b + if len(a) != len(b): + # Add leading zero to the smallest value + if len(a) > len(b): + tmp = a + a = b + b = tmp + + if len(a) < len(b): + # Create a list with the first element containing the leading zeroes and the second the initial value + value_as_list = ((len(b) - len(a)) * '0', a) + # Then concatenate the two elements into a string + a = ''.join(value_as_list) + + # Parse the strings and apply the XOR operation i = 0 - size = len(a) #choisis 'a', mais on aurait pu mettre 'b'; same + size = len(a) - while i < size: #fonction XOR + while i < size: if a[i] == b[i]: res += '0' else: res += '1' i += 1 + return res