Gestion de l'espace-temps par le Tardis (1/2)

... mais c'est le firmware 1.0, avant la mise à jour

Ce défi est tiré de c0d1ngUP 2023

Le Tardis est équipé d'un interpréteur un peu particulier pour qu'on lui communique des dates. Dans la version 1.0 du firmware, les programmes sont fournis sous forme d'une série de petits carrés de couleur, représentée par le codage (rouge, vert, bleu). Chaque carré de couleur vaut pour une des instructions suivantes : PUSH, ADD, MUL, WRITE, NOP qui opèrent sur une structure de pile ne contenant que des entiers compris entre 0 et 255.

  • l'instruction PUSH v, représentée par un carré de couleur rouge (v, 0, 0), permet de placer la valeur v, qui doit être comprise entre 1 et 255, au sommet de la pile.
  • l'instruction ADD, représentée par un carré de couleur bleu (0, 0, 230), permet de retirer les deux éléments en sommet de pile, de les additionner, puis de replacer le résultat en sommet de pile.
  • l'instruction MUL, représentée par un carré de couleur bleu (0, 0, 240), permet de retirer les deux éléments en sommet de pile, de les multiplier, puis de replacer le résultat en sommet de pile.
  • l'instruction WRITE, représentée par un carré de couleur gris clair (200, 200, 200), permet d'afficher la valeur située au sommet de la pile.
  • l'instruction NOP, représentée par un carré noir (0, 0, 0), ne fait rien.

Toutes les opérations sont faites modulo 256.

Les carrés se lisent sur une image, de gauche à droite, puis de haut en bas, comme un livre européen.

Voici un exemple :

Ce programme représente, dans cet ordre, les instructions PUSH 12, PUSH 134, PUSH 60, PUSH 7, MUL, ADD, WRITE, ADD, WRITE. La pile est initialement vide, au début de l'interprétation du programme. Après les 4 premières instructions, la pile contiendra [12, 134, 60, 7] (le sommet de la pile est ici à droite). Après l'opération MUL, la pile contiendra [12, 134, 164] (puisque (60 x 7) modulo 256 donne 164). Après l'opération ADD, la pile contiendra [12, 42] (puisque (134 + 164) modulo 256 donne 42). Puis l'opération WRITE affiche le sommet de pile, c'est à dire 42. Après la seconde opération ADD, la pile ne contiendra plus que 54, qui sera finalement affiché par WRITE.

Le programme de l'image précédente affiche donc : 42 54

Ces deux nombres a et b sont ensuite combinés pour former une année (qui peut être négative ou positive) : année ← (256 x a + b - 10000). Dans l'exemple précédent, le Docteur aurait donc été envoyé en 806 (256 x 42 + 54 - 10000), peut-être à temps pour assister au début du règne de l'empereur du Japon Heizei.

Fidèle à son habitude, le Docteur a barbouillé des carrés au hasard, histoire de ne pas trop en savoir à l'avance. Pour valider le défi, déterminez en quelle année se retrouvera le Docteur avec le programme ci-dessous, et fournissez cette année pour valider le défi :

Type de retour
un nombre entier
Entrées du problème
Pas de données d'entrée
Vous devez être connecté.e pour proposer une réponse au défi
Vous devez être connecté.e pour accéder aux forums.