Misez p'tit Optimisez en version APL

Vous ne possédez pas l'original ? Découvrez la machine via l'émulation !

Modérateur : Politburo

Répondre
Avatar du membre
Schraf
Fonctionne à 1200 bauds
Fonctionne à 1200 bauds
Messages : 499
Enregistré le : 05 mars 2020 20:45
Contact :

Misez p'tit Optimisez en version APL

Message par Schraf »

Bonjour à tous,

Il y a quelques années, @Marge, @Gege, @C.Ret, @Hobiecat etc. reprenaient l'idée de la rubrique "Misez p'tit Optimisez" de la revue emblématique "L'ordinateur de poche" (de 1981 à 1984).

Il s'agit de résoudre de petits problèmes en le moins d'octets possibles (vue les machines on s'intéresse moins à la notion de performance :D ).

Liste des problèmes sur Silicium : http://www.silicium.org/forum/viewtopic ... 46&t=34570

Quand on lit les solutions proposées sur Silicium (Pour les Casio, Ti, Sharp, HP...) on se rend compte que les optimisations concernent certes l'algorithme utilisé mais aussi et surtout le type de machine. Avec un programme en BASIC il est rare de trouver des subtilités impressionnantes alors que les jongleurs de pile opérationnelle font des prouesses sur les HP.

D'un autre côté, on a le langage APL (inventé en 1962 par Iverson) qui tournait en 1966 sur des machines comme l'IBM 360. Très synthétique, on est proche de l'esprit des programmeurs HP où des versions toujours plus courtes peuvent être découvertes.

C'est pourquoi j'ai pensé qu'il serait amusant de reprendre certains des problèmes proposés (ou d'en inventer) et d'essayer de les résoudre en APL. Ça permet également d'apprendre ce langage un peu (beaucoup ?) oublié et qui a pourtant un certain charme.

Comme je pense que peu parmi nous ont un clavier APL, j'ai mis cette rubrique dans "Émulateurs" et on pourra utiliser le site en ligne Try APL.
Inutile d'avoir un clavier spécial, cliquez sur PRIMER pour voir les symboles.

Pour une initiation rapide à l'APL, j'ai fait 3 petites vidéos (il y a pas mal de liens en commentaires) :

1ere partie : https://youtu.be/Nxq1BUUXobM
2e partie : https://youtu.be/s-E7BsMg_Qc
3e partie : https://youtu.be/csx2Z-GEGPw

Et pour amorcer cette rubrique, je vais proposer quelques idées que j'ai moi-même pu trouver
Modifié en dernier par Schraf le 27 mai 2020 08:45, modifié 1 fois.
Avatar du membre
Schraf
Fonctionne à 1200 bauds
Fonctionne à 1200 bauds
Messages : 499
Enregistré le : 05 mars 2020 20:45
Contact :

N° 1 : calcul du polynôme 3x^3+4x^2+x+9 par Hobiecat - avec le moins de pas possible

Message par Schraf »

L'énoncé complet : http://www.silicium.org/forum/viewtopic ... 46&t=30111

Il s'agit d'évaluer le polynôme P(x)=3x^3+4x^2+x+9 en une valeur donnée en paramètre.

En APL, ⊥ permet de décoder un vecteur à partir d'une base, par exemple 2 ⊥ 1 1 0 1 donnera 13 (1+0*2+1*4+1*8).
On peut donc voir les coefficients du polynôme comme un nombre écrit en base x, d'où la fonction :

Code : Tout sélectionner

{⍵⊥3 4 1 9}

Par exemple P(7) vaut bien 1241:

Code : Tout sélectionner

{⍵⊥3 4 1 9} 7
1241
Modifié en dernier par Schraf le 26 mai 2020 12:59, modifié 1 fois.
Avatar du membre
Schraf
Fonctionne à 1200 bauds
Fonctionne à 1200 bauds
Messages : 499
Enregistré le : 05 mars 2020 20:45
Contact :

N°10 : hommage à J. McCarthy par C.Ret. - fonction 91, récursive

Message par Schraf »

L'énoncé complet : http://www.silicium.org/forum/viewtopic ... 46&t=30336

On utilise ∇ pour l'appel récursif et ⋄ pour séparer les commandes :

Code : Tout sélectionner

{⍵>100:⍵-10 ⋄ ∇(∇ 11+⍵)} 57
91
Avatar du membre
Schraf
Fonctionne à 1200 bauds
Fonctionne à 1200 bauds
Messages : 499
Enregistré le : 05 mars 2020 20:45
Contact :

N°72: Chiffrement par transposition par dprtl- Chiffrement d'un nombre.

Message par Schraf »

L'énoncé complet : http://www.silicium.org/forum/viewtopic ... 46&t=40279

Pour la partie chiffrement :

Code : Tout sélectionner

code←{⎕PP←10 ⋄ (⍕⍵)[⍋⍕⍺]}
  • On augmente la précision à 10 chiffres (sinon 3465710298 devient 3.4657103E9)
  • ⍕ permet de transformer un nombre (ou un vecteur, ou une matrice) en chaine de caractères.
  • ⍋ pour récupérer l'ordre des "chiffres" (lettres), par exemple ⍋'40312' donne 2 4 5 3 1, ce qui signifie que le plus petit est en 2e position (c'est le '0') ensuite celui en 4e position (le '1') etc.
  • (⍕⍵)[⍋⍕⍺] : on récupère les lettres qui sont aux positions ⍋⍕⍺ de la chaine ⍕⍵. Par exemple 'ERIC'[4 2 3 1] donne CRIE

Code : Tout sélectionner

3465710298 code 6765837379
7336756897
Pour la partie déchiffrement :

Code : Tout sélectionner

decode←{⎕PP←10 ⋄ ⍎(⍕|⍵)[1+⍎¨⍕⍺]}

Code : Tout sélectionner

3465710298 decode ¯7336756897
6765837379
  • On transforme la partie de gauche ⍺ en chaine avec ⍕⍺
  • Pour chaque (¨) caractère de cette chaine, on le transforme en nombre (⍎). On passe donc de 3465710298 à un vecteur (je ne sais pas si on peut faire plus court)

Code : Tout sélectionner

⍎¨⍕3465710298
3 4 6 5 7 1 0 2 9 8
  • On ajoute 1 car le premier élément d'un vecteur est à la position 1 (et pas 0 comme dans certains langages)
  • Il suffit ensuite de récupérer ces positions de lettres dans la chaine ⍕|⍵, le "|" étant pour prendre la valeur absolue.
  • Enfin on transforme la chaine obtenue en nombre ⍎ (pas spécialement nécessaire)
Chiffrement et déchiffrement :

Ne fonctionne pas sur le site Try APL car l'évaluation ⍎ est limitée, mais fonctionne avec Dyalog APL que l'on peut installer sur Windows ou Mac OS.

Code : Tout sélectionner

code←{⎕PP←10 ⋄ (⍕|⍵)[⍎(1+⍵>0)⊃'1+⍎¨⍕⍺' '⍋⍕⍺']}

      3465710298 code 6765837379
7336756897
      3465710298 code ¯7336756897
6765837379
  • La partie commune (⍕|⍵) est mise devant (factorisation)
  • On prend (⊃) soit la première expression '1+⍎¨⍕⍺' soit la deuxième '⍋⍕⍺' suivant le signe de ⍺
Modifié en dernier par Schraf le 26 mai 2020 13:12, modifié 2 fois.
Avatar du membre
gege
Fonctionne à 14400 bauds
Fonctionne à 14400 bauds
Messages : 7141
Enregistré le : 31 janv. 2008 14:24
Localisation : Banlieue Paârisienne
Contact :

Re: Misez p'tit Optimisez en version APL

Message par gege »

Bonjour,
Wow excellente idée, mais cette nouvelle syntaxe est inhabituelle pour moi.
Tiens, je vais faire pareil en Forth…
A te lire pour la suite !!
Il y a quelques noix un peu dures à briser dans les MPO :-)
G.E.
Avatar du membre
Schraf
Fonctionne à 1200 bauds
Fonctionne à 1200 bauds
Messages : 499
Enregistré le : 05 mars 2020 20:45
Contact :

Re: Misez p'tit Optimisez en version APL

Message par Schraf »

Merci @gege !

J'ai trouvé dernièrement un (vrai) bouquin de B. Robinet "Le langage APL" et j'adore la préface faite par J.Arsac, on y voit toute la perplexité déjà à l'époque (livre de 1971)

Préface
Préface
preface2.jpg (175.31 Kio) Vu 14086 fois
Avatar du membre
Schraf
Fonctionne à 1200 bauds
Fonctionne à 1200 bauds
Messages : 499
Enregistré le : 05 mars 2020 20:45
Contact :

N° 6 : reverse d'un nombre par zpalm - 123,456 devient 654,321

Message par Schraf »

Lien vers l'énoncé : http://www.silicium.org/forum/viewtopic ... 46&t=30188

Il s'agit d'inverser les chiffres d'un nombre : 12.34 -> 43.21
Avec l'ajout d'un point lorsque c'est un entier 12 -> .21

Proposition :

Code : Tout sélectionner

inv←{('.'⍴⍨⍵=⌊⍵),⌽⍕⍵}
      inv 12.34
43.21
      inv 12
.21
  • ⌽ permet d'inverser une chaine et ⍕ de convertir le nombre en chaine donc facile
  • Pour ajouter un point, on teste si le nombre est entier ⍵=⌊⍵ (réponse 0 ou 1), et on demande à répéter le caractère '.' ce nombre de fois. Donc 0⍴'.' (répéter '.' 0 fois) donnera la chaine vide et 1⍴'.' (répéter '.' 1 fois) donnera '1'
  • On pourrait donc écrire {((⍵=⌊⍵)⍴'.'),⌽⍕⍵} sans le ⍨. Son ajout signifie "permuter les arguments à gauche et à droite" et on peut alors enlever les parenthèses autour de ⍵=⌊⍵ ce qui fait gagner 1 caractère :D
cgh
Fonctionne à 2400 bauds
Fonctionne à 2400 bauds
Messages : 2142
Enregistré le : 30 août 2011 12:23
Localisation : Vous êtes ici -> .

Re: Misez p'tit Optimisez en version APL

Message par cgh »

Excellente idee :)

Par contre, je ne pense pas que l'on puisse trouver encore ces claviers speciaux de nos jours...
Il y a ceux qui voient les choses telles qu'elles sont et se demandent pourquoi, et il y a ceux qui imaginent les choses telles qu'elles pourraient être et se disent... pourquoi pas? - George Bernard Shaw
J'adore parler de rien, c'est le seul domaine où j'ai de vagues connaissances ! - Oscar Wilde
Ce n'est pas parce que les choses sont difficiles que nous n'osons pas. C'est parce que nous n'osons pas que les choses sont difficiles. - Sénèque
Avatar du membre
Schraf
Fonctionne à 1200 bauds
Fonctionne à 1200 bauds
Messages : 499
Enregistré le : 05 mars 2020 20:45
Contact :

Misez p'tit, Optimisez - N°15 (le jour des fourmis)

Message par Schraf »

Lien vers l'énoncé : http://www.silicium.org/forum/viewtopic ... 8&start=15

Bon là je me demande moi-même comment j'ai réussi à trouver ce truc.... 8O

Code : Tout sélectionner

fourmis←{⍺=0:'*'⋄(⍺-1)∇⎕←(⊃,/)s,¨⍨+⌿⍵∘.∊s←r[⍒r←∪⍵]}
     11 fourmis 0
1 0
1 1 1 0
3 1 1 0
1 3 2 1 1 0
1 3 1 2 3 1 1 0
2 3 1 2 4 1 1 0
1 4 1 3 2 2 3 1 1 0
1 4 2 3 2 2 4 1 1 0
2 4 1 3 3 2 3 1 1 0
1 4 3 3 2 2 3 1 1 0
1 4 3 3 2 2 3 1 1 0
*

      5 fourmis 'C.RET'
1 T 1 R 1 E 1 C 1 .
1 T 1 R 1 E 1 C 1 . 5 1
1 T 1 R 1 E 1 C 1 . 1 5 6 1
1 T 1 R 1 E 1 C 1 . 1 6 1 5 7 1
1 T 1 R 1 E 1 C 1 . 1 7 1 6 1 5 8 1
  • ∪⍵ pour récupérer les chiffres de façon unique : ∪ 1 2 1 3 2 -> 1 2 3
  • ⍒ tri décroissant pour faire joli à la fin et donc r[⍒r←∪⍵] correspond aux chiffres uniques par ordre décroissant (on mémorise tout ça dans "s")
  • ⍵∘.∊s permet de générer une matrice avec des 0 ou des 1 suivant que l'élément de ⍵ est dans s ou non

Code : Tout sélectionner

      3 3 2 1 1 ∘.∊ 3 2 1
1 0 0
1 0 0
0 1 0
0 0 1
0 0 1
  • On fait alors la somme des colonnes +⌿ pour savoir combien de fois chaque lettre apparait

Code : Tout sélectionner

+⌿3 3 2 1 1 ∘.∊ 3 2 1
2 1 2
  • On fait la concaténation entre s et ces nombres (en sens inverse) : s,¨⍨
  • On rassemble les différents morceaux (⊃,/) qui contiennent chacun 2 nombres (par exemple 5 3 pour dire qu'il y a 5 fois le 3)
  • On affiche le résultat : ⎕←
  • On utilise récursivement ∇ le résultat avec ⍺-1 jusqu'à ce que ⍺=0 et on affiche "*" pour dire que c'est terminé
Version compatible avec Try APL
Comme https://tryapl.org n'a pas l'air d'accepter ⎕← pour l'affichage, en voici une qui utilise des emboitements :

Code : Tout sélectionner

   fourmis←{⍺=0:'*' ⋄ ⊆ ⍵ ((⍺-1)∇(⊃,/)s,¨⍨+⌿⍵∘.∊s←r[⍒r←∪⍵])}
      5 fourmis 0

┌─┬─────────────────────────────────────────┐
│0│┌───┬───────────────────────────────────┐│
│ ││1 0│┌───────┬─────────────────────────┐││
│ ││   ││1 1 1 0│┌───────┬───────────────┐│││
│ ││   ││       ││3 1 1 0│┌───────────┬─┐││││
│ ││   ││       ││       ││1 3 2 1 1 0│*│││││
│ ││   ││       ││       │└───────────┴─┘││││
│ ││   ││       │└───────┴───────────────┘│││
│ ││   │└───────┴─────────────────────────┘││
│ │└───┴───────────────────────────────────┘│
└─┴─────────────────────────────────────────┘
Avatar du membre
Schraf
Fonctionne à 1200 bauds
Fonctionne à 1200 bauds
Messages : 499
Enregistré le : 05 mars 2020 20:45
Contact :

N° 9 : somme des chiffres d'un nombre par Gilles59 - somme(352791) = 27

Message par Schraf »

Enoncé de l'exercice : http://www.silicium.org/forum/viewtopic ... 46&t=30285

Calculer la somme de ses chiffres.
Par exemple : 352791 doit retourner 27

Celui-là n'étant pas très compliqué, j'en propose 3 versions, la première récursive : som(352791) = som(35279) + 1 et som(x) = x si x est plus petit que 10.

Code : Tout sélectionner

som←{⍵<10:⍵ ⋄ (10|⍵) + ∇⌊⍵÷10}
      som 352791
27
La seconde version transforme le nombre en chaine puis chaque caractère en chiffre, ce qui donne un vecteur. On fait ensuite la réduction par la somme.

Code : Tout sélectionner

som←{+/⍎¨⍕⍵}
      som 352791
27
La troisième version décompose le nombre directement en vecteur (123 -> 1 2 3) puis en fait la somme :

Code : Tout sélectionner

som←{+/10(⊥⍣¯1)⍵}
Le symbole ⍣¯1 permet d'avoir l'inverse de la fonction qui est à sa gauche :

Code : Tout sélectionner

      2 ⊥ 1 1 0 1
13
      2 (⊥⍣¯1) 13
1 1 0 1
Avatar du membre
Schraf
Fonctionne à 1200 bauds
Fonctionne à 1200 bauds
Messages : 499
Enregistré le : 05 mars 2020 20:45
Contact :

N°17 : calcul par Hobiecat - S = 1+2-3+4-5+6-7+8-..... n

Message par Schraf »

Enoncé de l'exercice : http://www.silicium.org/forum/viewtopic ... 46&t=31831

Il s'agit de trouver la somme "alternée" : S_n = 1 +2 -3 +4 -5 + ... n

S1= 1 = 1
S2= 1+2 = 3
S3= 1+2-3 = 0
S4= 1+2-3+4 = 4
S5= 1+2-3+4-5 = -1
S6= 1+2-3+4-5+6 = 5
S7= 1+2-3+4-5+6-7 = -2
...

En APL, quand on fait une réduction en utilisant la soustraction, il apparait justement une somme alternée :

Code : Tout sélectionner

-/ 1 2 3 4
¯2
Ce qui signifie 1 - 2 - 3 - 4 mais on calcule de droite à gauche d'où :

1 - 2 - (3 - 4) = 1 - 2 - (-1) = 1 - 2 + 1
1 - 2 + 1 = 1 - (2 + 1) = 1 - 3 = -2 !

Une façon plus simple de voir :

1 - ( 2 - (3 - 4))) = 1 - 2 + 3 - 4 = - 2 (en faisant un calcul ordinaire)

Donc on peut obtenir facilement T_n = 1 - 2 + 3 - 4 ... n or on veut S_n = 1 + 2 - 3 + 4 ... n.
Si on fait la somme T_n + S_n tout disparait sauf les 2 premières valeurs. D'où S_n = 2 - T_n et le programme :

Code : Tout sélectionner

S←{2--/⍳⍵}
      S 7
¯2
On peut retrouver la liste des 10 premières valeurs en faisant :

Code : Tout sélectionner

S¨⍳10
1 3 0 4 ¯1 5 ¯2 6 ¯3 7
Avatar du membre
Hobiecat
Fonctionne à 9600 bauds
Fonctionne à 9600 bauds
Messages : 3626
Enregistré le : 06 sept. 2011 14:57
Localisation : Normandie

Re: Misez p'tit Optimisez en version APL

Message par Hobiecat »

Merci Schraf, c'est très intéressant ce langage, la compacité semble remarquable, beaucoup plus que le RPL pourtant déjà pas mal optimisé.

L'inconvénient de mon point de vue vient de tous ces symboles, qui sont sans doute difficiles à mémoriser et rendent la lisibilité difficile. Il n'y a pas eu de version du language avec les instructions un peu "en clair" ? Compacité, puissance et lisibilité, ça aurait fait un langage idéal.
Avatar du membre
Schraf
Fonctionne à 1200 bauds
Fonctionne à 1200 bauds
Messages : 499
Enregistré le : 05 mars 2020 20:45
Contact :

Re: Misez p'tit Optimisez en version APL

Message par Schraf »

Si, ça s'appelle le langage J. Également inventé par Iverson et on peut utiliser un clavier classique. Mais comme il date de 1990 je trouvais ça moins pertinent pour le site silicium :P
Avatar du membre
Hobiecat
Fonctionne à 9600 bauds
Fonctionne à 9600 bauds
Messages : 3626
Enregistré le : 06 sept. 2011 14:57
Localisation : Normandie

Re: Misez p'tit Optimisez en version APL

Message par Hobiecat »

Oui, on gagne déjà bien en lisibilité. La compacité du langage le nécessite un peu à mon goût. :wink:
Avatar du membre
C.Ret
Fonctionne à 9600 bauds
Fonctionne à 9600 bauds
Messages : 3405
Enregistré le : 31 mai 2008 23:43
Localisation : N 49°22 E 6°10

Re: Misez p'tit Optimisez en version APL

Message par C.Ret »

Hobiecat a écrit : 26 mai 2020 20:11 Merci Schraf, c'est très intéressant ce langage, la compacité semble remarquable, beaucoup plus que le RPL pourtant déjà pas mal optimisé.
Oui merci à Eric, c'est une bonne idée d'illustrer les principes de l'APL à l'aide de nos MPO. :)

C'est effectivement un langage très compact. Il était révolutionnaire à sa création et il a apporté des notions et une façon de faire qui ont inspirées et données naissance à de multiple environnement de programmation.
C'est clairement le père des langages et environnement tels Matlab, Mathematica et plein d'autres systèmes de ce type à usage calculatoire, statistique et scientifique.

Mais c'est aussi une nouveauté, un dialogue entre l'utilisateur et la machine où chaque expression est évaluée et retourne un résultat. Ceci bien avant l'usage intensif et systématique des terminaux écran/clavier.

Mais aussi où l'utilisateur n'a pas à ce soucier de la représentation interne des objets qu'il manipule.

C'est aussi le père des environnement RPL dont les mots clefs permettent d'utiliser toute une panoplie d'objets. Mais l'APL va plus loin que le RPL car il peut combiner des opérateurs ou prendre des opérateurs comme arguments des fonctions ou de codes ce que ne fait pas le RPL qui ne sait qu'évaluer un programme (c'est à dire l'exécuter). L'APL va plus loin, un opérateur (de base ou définit par l'utilisateur) peut être passé en argument d'une fonction (par ex. avec d'autres valeurs ou vecteurs) afin de généraliser un type de traitement, etc.

Comme le RPL, il est donc très compact et devient facilement illisible, même par l'auteur d'un code. Surtout la version utilisée ci-dessus par Eric. Les versions plus anciennes avaient un 'mode programmation' avec un entête et des numéros d'instructions présentées ligne par ligne et n'utilisaient pas les structures avec accolades { } ce qui laissait un peu plus de place pour commenter et éclaircir ses codes.

Autre point commun avec le RPL c'est la grammaire incorruptible et identique quelque soit les opérateurs qui fonctionne tous de la même façon sans exception. Le RPL fait en quelque sorte de même en prenant ces arguments dans la pile. Mais contrairement au RPL qui est comme le RPN post-fix et ne peut prendre ses arguments que dans la pile (il faut donc les y mettre avant d'utiliser tout opérateur). Le mode d'évaluation des expressions APL est plus sophistiqué et permet des notations plus naturelles infixes et suffixes, SIN 30 ou 15 LIGNES , 2+3 , 5 MOD 2 etc. Là où le RPL ne tolère que 30 SIN, 15 LIGNES, 2 3 + , 5 2 MOD , etc

Hobiecat a écrit : 26 mai 2020 20:11 L'inconvénient de mon point de vue vient de tous ces symboles, qui sont sans doute difficiles à mémoriser et rendent la lisibilité difficile. Il n'y a pas eu de version du langage avec les instructions un peu "en clair" ? Compacité, puissance et lisibilité, ça aurait fait un langage idéal.
Cette remarque concernant l'inconvénient de tous ces symboles est très pertinence. Car je partage en partie cet avis. Mais je pense que c'est aussi ce qui fait le point fort de ce langage et lui donne une bien plus grande puissance.

Ces symboles nécessitent soit un matériel adapté (comme par exemple un clavier surchargé comme le sont les claviers des Commodore CBM avec les caractères semi-graphiques) soit un overlay spécifique et des jeux de caractères à l'écran ou à l'impression adaptés.

Pour palier à cet inconvénient, le langage J a été inventé par les mêmes auteurs qui est une évolution de l'APL mais utilisant uniquement des caractères ASCII. (Edit : mon message à croisé celui d'Eric).

D'abord les symboles ne sont pas complètement aléatoires. Bien au contraire, il s'agit, pour une bonne partie d'entre eux, des symboles mathématiques (ceux que l'on trouve d'ailleurs sur nos calculettes comme +−×÷≠≤≥<=>, mais aussi certains que l'on trouve en mathématiques comme ∪∩∊⊂⌊⌈ (inclusion, exclusion, appartient à , etc.). Et d'autres plus bizarres, surtout lorsqu'ils sont composés avec des soulignement ou des trémats. Et là je suis du même avis, la signification des ces symboles altérés me parait parfois peu intuitive.

Mais avoir des opérandes qui ont leur propres symboles bien distincts des chiffres et de l'alphabet qui permet de nommer les variables et fonctions définies par l'utilisateurs fait aussi toute la puissance de ce langage. Si l'on lit A+B, on comprend qu'il faut appliquer l'opérateur d'addition aux contenus des deux variables préalablement définies A et B. Il doit y avoir plus haut quelque chose du type A←2 3 5 et B←10 52 30.

D'autres langages(comme le RPL par exemple) sont plus ambigus et il faut connaitre parfois un lexique plus grand de noms d'instructions ,commandes ou fonctions prédéfinies pour interpréter une ligne d'instruction: « A DUP B PREV + ROT PERM INVERSE » en RPL on ne sait pas s'il s'agit de variables définies ou formelles, d'instructions, de commandes ou d'opérateurs de mouvement sur la pile opérationnelle sans connaitre par cœur la bibliothèque d'instructions du langage ainsi que les instructions définies par l'auteur du code !

Donc, je suis d'accord c'est à la fois l'inconvénient et aussi un des points fort et structurant de l'APL.
Modifié en dernier par C.Ret le 07 juin 2020 09:20, modifié 1 fois.
SHARP PC-1211 PC-1360 EL-5150 PC-E500 | Commodore C=128D | Texas Instruments Ti-57LCD Ti-74BASICalc Ti-92II Ti-58c Ti-95PROCalc Ti-30XPROMathPrint | Hewlett-Packard HP-28S HP-41C HP-15C HP-Prime HP-71B | CASIO fx-602p | NUMWORKS | Graphoplex Rietz Neperlog | PockEmul | Sommaire des M.P.O. | Ma...dov'il sapone.
Répondre

Retourner vers « Emulateurs »