Bonjour à tous amis zesteurs,
Je suis en train de m'améliorer en algorithmique avec Codingame, et je suis bloqué sur le puzzle easy de Chuck Norris, où j'ai un résultat qui ne correspond pas au résultat voulu et je ne comprend pas pourquoi
Voici le problème : Le message en entrée est constitué de caractères ASCII (7 bits) Le message encodé en sortie est constitué de blocs de 0 Un bloc est séparé d'un autre bloc par un espace Deux blocs consécutifs servent à produire une série de bits de même valeur (que des 1 ou que des 0) : - Premier bloc : il vaut toujours 0 ou 00. S'il vaut 0 la série contient des 1, sinon elle contient des 0 - Deuxième bloc : le nombre de 0 dans ce bloc correspond au nombre de bits dans la série
Prenons un exemple simple avec un message constitué d'un seul caractère : C majuscule. C en binaire vaut 1000011 ce qui donne avec la technique de Chuck Norris :
0 0 (la première série composée d'un seul 1) 00 0000 (la deuxième série composée de quatre 0) 0 00 (la troisième série composée de deux 1) C vaut donc : 0 0 00 0000 0 00
Bon le code est surement horrible et pas optimisé, mais je ne vois pas pourquoi il n'est pas fonctionnel.
Si quelqu'un pouvait m'éclairer ce serait sympa
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 | import sys import math message = input() mesage_fini = "" new_message = "" nbr_1 = 0 nbr_0 = 0 ' '.join(format(ord(x), 'b') for x in message) message.replace(" ","") message=str(message) for i in (0, len(message)-1): if message[i] == 1: for j in range (i, len(message)-1): if message[j] == 1: nbr_1 = nbr_1 + 1 else: j=len(message)+2 new_message = new_message + " 0 " + "0"*nbr_1 nbr_1 = 0 else: for k in range (i, len(message)-1): if message[k] == 0 : nbr_0 = nbr_0 + 1 else: j=len(message)+2 new_message = new_message + " 00 " + "0"*nbr_0 nbr_0 = 0 print(new_message) |