Je suis un grand fou.
Pris de mélancolie envers ma feu calculatrice TI-82 Stat
, la superbe de toutes les autres, j'ai écrit un interpréteur Brainfuck en TI-BASIC
.
Oui oui, en TI-BASIC
.
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 | : DelVar YDelvar ZDelVar L2DelVar L3999->dim(L3
: 1->X
: Input ":",Str0
: For(I,1,length(Str0
: 1->P
: sub(Str0,I,1->Str1
: L3(X)+(Str1="+")-(Str1="-->L3(X
: X+(Str1=">")-(Str1="<->X
: If Str1=",
: Then
: Y+1->Y
: L1(Y->L3(X
: End
: If Str1=".
: Then
: Z+1->Z
: L3(X->L2(Z
: End
: If Str1="[" and 0=L3(X
: Then
: While P
: I+1->I
: sub(Str0,I,1
: P+(Ans="[")-(Ans="]->P
: End
: End
: If Str1="]" and L3(X
: Then
: While P
: I-1->I
: sub(Str0,I,1
: P+(Ans="]")-(Ans="[->P
: End
: End
: End
: L2
|
Je vous rassure, c'est normal qu'il manque des )
et des "
à certains endroits, on peut faire foule de micro-optimisations en TI-BASIC
.
D'ailleurs, si vous avez d'autres micro-optimisations, je suis preneur.
La moindre instruction d'économisée se ressent au niveau de la rapidité d'exécution.
Pour utiliser l'interpréteur, rien de plus simple.
Étant donné que les caractères en nombre, ça n'existe pas vraiment sur une calculatrice, à la place, la liste L1
fait office d'entrée standard.
Chaque élément de L1
sera lu dans l'ordre.
Même chose pour la sortie standard: ce sera la liste L2
à la place.
Notez que l'interpréteur tente d'afficher L2
automatiquement. Si vous n'avez écrit aucun nombre dans l'entrée standard, c'est normal qu'une erreur s'affiche comme quoi la liste est indéfinie.
Enfin, vous pouvez connaître le contenu de la mémoire à la fin de l'exécution.
La liste L3
fait office de tableau « infini » de nombres.
Je tiens à rappeler que ça reste très lent. C'est du TI-BASIC
, namého.
Testé sur ma feu TI-82 Stat
et fonctionnel.
EDIT: Grâce à Maëlan, l'interpréteur descend à $285$ octets dans la RAM de la calculatrice !
C'est près du double de la plupart des implémentations en assembleur sur une vraie machine.