Le système de repérage des cordonnées spatiotemporelles du Tardis a été mis à jour depuis le vieillissant firmware 1.0.
Le principe reste le même, mais on dispose d'un peu plus d'instructions :
PUSH
, ADD
, MUL
, WRITE
, NOP
, POP
, SWAP
, CMPSWAP
, MOVE
qui
opèrent sur une structure composée de deux piles ne contenant que des
entiers compris entre 0 et 255. Un pointeur indique à chaque instant sur quelle
pile on opère (le pointeur peut désigner l'une ou l'autre des deux piles).
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.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.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.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.NOP
, représentée par un carré noir (0, 0, 0)
, ne fait rien.POP
, représentée par un carré bleu (0, 0, 220)
, retire la
valeur en sommet de pile.SWAP
, représentée par un carré vert
(0, 255, 0)
, bascule le pointeur de pile sur l'autre pile.CMPSWAP
, représentée par un carré jaune (255, 255, 0)
,
bascule le pointeur de pile sur l'autre pile à condition que le sommet de la pile
actuelle soit pair, et ne fait rien dans le cas contraire.MOVE
, représentée par un carré bleu (0, 0, 210)
,
déplace au sommet de la pile actuelle, la valeur située au sommet de l'autre pile.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 :
Les piles (on les appelle ici A
et B
) sont initialement vides, et le
pointeur de pile est initialement sur A
. Le programme précédent représente les
instructions : PUSH 12
, PUSH 134
, CMPSWAP
, PUSH 7
, MOVE
, ADD
,
WRITE
, SWAP
, MOVE
, ADD
, WRITE
, NOP
A
contient [12, 134]
et la
pile B
est vide, le pointeur de pile est sur A
;CMPSWAP
, puisque 134
est pair, le pointeur de pile passe sur la pile
B
;PUSH 7
, la pile B
contient maintenant [7]
, la pile A
contient
toujours [12, 134]
, le pointeur est sur B
;MOVE
, le sommet de la pile A
passe sur la pile B
, la pile A
contient maintenant [12]
, la pile B
contient [7, 134]
;ADD
, la pile B
contient [141]
;WRITE
écrit 141
;SWAP
, le pointeur de pile repasse sur A
;MOVE
déplace le sommet de la pile B
sur A
, B
est maintenant vide, et
A
contient [12, 141]
;ADD
, la pile A
contient 153
;153
est écrite.Le programme précédent affiche donc 141 153
.
Dans la version 2.0 du firmware, le programme ne doit pas simplement donner les instructions de l'année. Précisément, le programme doit écrire :
a
et b
(l'année vaudra (256 x a + b) - 10
000
comme dans la version 1.0 du firmware ;Il y aura donc 10 entiers entre 0 et 255.
Par exemple, si le programme produit les nombres :
1 46 34 1 0 23 19 3 46 247
, alors le Tardis devrait apparaître aux alentours
de 46°34' (soit 46.57°) de latitude Nord (car on a un 1 au début), et 0°23'
(soit 0.38°) de longitude Est (car le quatrième nombre est un 1), c'est à dire
pas loin d'ici, si vous êtes en train de participer à c0d1ngUP. Et le Tardis
devrait faire son apparition le 19 mars (19 3) 2023 (46 x 256 + 247 - 10 000).
Restez sur le qui-vive...
Pour son prochain voyage, le Docteur a vraiment choisi des valeurs au hasard, et voici le programme qu'il compte fournir au Tardis :
Pour valider le défi, donnez la ville de destination et l'année (en
chiffres). Dans l'exemple précédent (1 46 34 1 0 23 19 3 46 247
), il aurait fallu indiquer Poitiers 2023
.
Ne donnez pas les coordonnées géographique ou l'horaire, simplement la ville et
l'année.