AAfroCodeurs
Hacker culturelTerminée200 points

Le Code du Griot : Chasse à l'Algorithme

Imaginée par Mr Darec · 7 résolution(s)

Le Griot Numérique a laissé un dernier défi, cette fois pour les vrais développeurs. Pas de papier et crayon ici : il faudra tracer du code, ou mieux, le faire tourner.

Étape 1 — Que renvoie cette fonction pour n = 6 ? Trace-la à la main ou exécute-la.

def mystere(n): if n <= 1: return n if n % 2 == 0: return 1 + mystere(n // 2) else: return 1 + mystere(3 * n + 1)

print(mystere(6))

Le résultat est un nombre entier. Garde-le, c'est ta clé pour la suite.

Étape 2 — Voici la fonction qui a servi à chiffrer un message :

def chiffrer(message, decalage): resultat = "" for c in message: if c.isalpha(): base = ord('A') resultat += chr((ord(c) - base + decalage) % 26 + base) else: resultat += c return resultat

Le message chiffré obtenu avec le decalage de l'étape 1 est : UNLXMNNBCUJLUN

Écris la fonction inverse (déchiffrement), exécute-la avec le bon décalage, et retrouve le message original.

Soumets ta réponse au format : AFROCODEURS{MESSAGE_EN_MAJUSCULES_AVEC_UNDERSCORES}

Explication de la solution

Étape 1 — Trace de mystere(6), c'est une suite de Collatz déguisée en compteur d'étapes : mystere(1) = 1 mystere(2) = 1 + mystere(1) = 2 mystere(4) = 1 + mystere(2) = 3 mystere(8) = 1 + mystere(4) = 4 mystere(16) = 1 + mystere(8) = 5 mystere(5) = 1 + mystere(16) = 6 mystere(10) = 1 + mystere(5) = 7 mystere(3) = 1 + mystere(10) = 8 mystere(6) = 1 + mystere(3) = 9 → mystere(6) = 9

Étape 2 — Décalage de César, decalage = 9. Le déchiffrement inverse chaque lettre de -9 : def dechiffrer(message, decalage): return chiffrer(message, -decalage)

dechiffrer("UNLXMNNBCUJLUN", 9) → "LECODEESTLACLE" → "LE CODE EST LA CLE"

Flag final : AFROCODEURS{LE_CODE_EST_LA_CLE}

Classement du défi

  1. #1Mr Darec200 pts · 1 tentative(s)
  2. #2Steve Aster Afovo200 pts · 1 tentative(s)
  3. #3@Obed200 pts · 1 tentative(s)
  4. #4Kennel KASSI200 pts · 1 tentative(s)
  5. #5code scooper200 pts · 1 tentative(s)
  6. #6David ADJA188 pts · 3 tentative(s)
  7. #7Isko184 pts · 2 tentative(s)