Misez p'tit, Optimisez - N°116 : Jeu "RamiSum"

Ici, on fait dans le petit, le LCD qui déchire sa race, on y cause même calculatrices quand on est en manque !

Modérateur : Politburo

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 - N°116 : Jeu "RamiSum"

Message par Schraf »

En TI BASIC (TI 80, 82, 83, 84) :

Programme TI BASIC
Programme TI BASIC
MPO116.png (5.41 Kio) Vu 3751 fois
Exemples
Exemples
MPO116b.png (4.42 Kio) Vu 3751 fois
Je cherche à le faire sur une TI-57 mais pour le moment je dépasse les 50 pas... 😥
Avatar du membre
Marge
Fonctionne à 14400 bauds
Fonctionne à 14400 bauds
Messages : 6172
Enregistré le : 01 oct. 2008 14:39
Localisation : En bas, tout au fond à gauche.

Re: Misez p'tit, Optimisez - N°116 : Jeu "RamiSum"

Message par Marge »

Je cherche à le faire sur une TI-57 mais pour le moment je dépasse les 50 pas... 😥
Ah oui, chapeau si tu y arrives...
3 hommes, 3 demis, un 3a... Magnéto, Serge !

Quelques-uns de mes petits programmes pour machines Hewlett-Packard :
15C : Knight's Tour ;
29C : (k-)Permutations, Combinations, Linear Regression and Pseudo-random number ;
34C : Hanoi Towers - Automatic & Manual resolutions ;
67
__: A L I E N .

« Boris », c'était juste Maurice enrhumé.
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 - N°116 : Jeu "RamiSum"

Message par Schraf »

Version pour TI-57 :

Code : Tout sélectionner

00	32	4	STO 4
01	00		0
02	32	1	ST0 1
03	33	5	RCL 5
04	32	0	STO 0
05	86	1	Lbl 1
06	33	4	RCL 4
07	32	3	STO 3
08	00		0
09	32	2	STO 2
10	-56		INV Dsz
11	51	5	GTO 5
12	86	2	Lbl 2
13	33	5	RCL 5
14	-39	3	INV Prd 3
15	55		×
16	33	3	RCL 3
17	-49		INV Int
18	85		=
19	19		C.t
20	22		x ⇄ t
21	66		x = t ?
22	51	3	GTO 3
23	33	0	RCL 0
24	-66		x ≠ t ?
25	51	4	GTO 4
26	01		1
27	34	2	SUM 2
28	86	4	Lbl 4
29	33	3	RCL 3
30	49		Int
31	32	3	STO 3
32	51	2	GTO 2
33	86	3	Lbl 3
34	33	2	RCL 2
35	22		x ⇄ t
36	02		2
37	76		x ≥ t ?
38	51	1	GTO 1
39	33	1	RCL 1
40	22		x ⇄ t
41	33	0	RCL 0
42	39	2	Prd 2
43	33	2	RCL 2
44	76		x ≥ t ?
45	32	1	STO 1
46	51	1	GTO 1
47	86	5	Lbl 5
48	33	1	RCL 1
49	81		R/S
Initialisation avant de lancer le programme : 10 STO 5

Tapez un nombre, par exemple 4444999 puis RST R/S. Le résultat 27 s'affiche après quelques minutes...

Ti-57 en ligne

Note : J'ai mis à jour le programme précédent en utilisant INV Dsz qui permet de diminuer de 1 le registre 0 et en même temps de faire un test, le résultat final peut maintenant s'afficher sans clignoter.
Modifié en dernier par Schraf le 25 mars 2023 08:29, modifié 3 fois.
Avatar du membre
Marge
Fonctionne à 14400 bauds
Fonctionne à 14400 bauds
Messages : 6172
Enregistré le : 01 oct. 2008 14:39
Localisation : En bas, tout au fond à gauche.

Re: Misez p'tit, Optimisez - N°116 : Jeu "RamiSum"

Message par Marge »

https://media4.giphy.com/media/Kan0VWbN ... y.gif&ct=g

Tu as gagné une image !

Sans blague, je suis admiratif. Il faudra que je décortique ce code quand j’aurai réveillé ma vieille au bois dormant.
3 hommes, 3 demis, un 3a... Magnéto, Serge !

Quelques-uns de mes petits programmes pour machines Hewlett-Packard :
15C : Knight's Tour ;
29C : (k-)Permutations, Combinations, Linear Regression and Pseudo-random number ;
34C : Hanoi Towers - Automatic & Manual resolutions ;
67
__: A L I E N .

« Boris », c'était juste Maurice enrhumé.
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 - N°116 : Jeu "RamiSum"

Message par Schraf »

@Marge : Voici l'organigramme pour mieux s'y repérer :

Image
Avatar du membre
C.Ret
Fonctionne à 9600 bauds
Fonctionne à 9600 bauds
Messages : 3404
Enregistré le : 31 mai 2008 23:43
Localisation : N 49°22 E 6°10

Re: Misez p'tit, Optimisez - N°116 : Jeu "RamiSum"

Message par C.Ret »

Le programme d'Eric ainsi que son ordigramme, m'ont bien inspirés.

Voici, ma version de son programme pour Ti-57. Je n'ai pas réussi à faire une version pour Ti-57 LCD; trop peu de mémoire.

Code : Tout sélectionner

00   32 1  STO 1        13   01     1           26   01     1           38   39 7  Prd 7        
01   00     0           14   00     0           27  -34 1  SUM 3        39   33 4  RCL 4        
02   32 4  STO 4        15  -39 2  Div 2        28*  34 1 *Lbl 2        40  -76    x<t ?        
03   09     9           16   55     ×           29   33 2  RCL 2        41   22    x⇌t          
04   32 0  STO 0        17   33 2  RCL 2        30   51 1  GTO 1        42   32 4  STO 4        
05*  86 0 *Lbl 0        18  -49    Frc                                  43*  86 4 *Lbl 4        
06   15    CLR          19   65     -           31*  86 3 *Lbl 3        44   56    Dsz          
07   32 3  STO 3        20   66    x=t ?        32   33 3  RCL 3        45   51 0  GTO 0        
08   32 7  STO 7        21   51 3  GTO 3        33   22    x⇌t          46   33 4  RCL 4        
09   33 1  RCL 1        22   33 0  RCL 0        34   02     2           47   81    R/S          
10*  86 1 *Lbl 1        23   85     =           35   76    x≥t ?        48   71    RST          
11   49    Int          24  -66    x≠t ?        36   51 4  GTO 4                                
12   32 2  STO 2        25   51 2  GTO 2        37   33 0  RCL 0
Utilisation:
Faire RST pour la première utilisation.
Saisir la composition de la main (jusqu'à 8 cartes de valeur 1 à 9)
Le Score maximal possible s'affiche après quelques dizaines de secondes.

Registres:
R0: Indice boucle sur chiffre c de 9 à 1.
R1: Composition main initiale
R2: Décomposition chiffre à chiffre de la main en cours
R3: Compteur Nc occurrences du chiffre c
R4: Score maximal
R7/t : Registre de test, produit c*Nc

Structure:
01~04..: Saisie de la main (R1) et initialisation générale du score (R4) et du premier chiffre recherché (R0).
05~09..: Lbl 0: Initialisation boucle de recherche d'un chiffre. RAZ registre test, compteur d'occurrences et main décomposée.
10~30..: Lbl 1: Décomposition chiffre à chiffre de la main (R2) et comptage de occurrences du chiffre recherché (R0) dans le compteur.
..20~21: test de sortie de la boucle lorsque dernier chiffre est nul (décomposition épuisée)
..24~27: test évitement incrémentation du compteur lorsque le dernier chiffre ne correspond pas via GTO 2.
..28~29: Lbl 2: enchainement boucle de décomposition vers label 1.
30~42..: Evaluation du score du chiffre recherché.
..34~36: test détection nombre insuffisant d'occurrences ou chiffre non trouvé (2≥nc).
..37~39: calcul de la puissance d*nc du score
..39~42: comparaison de la puissance avec le score maximal.
43~45..: Lbl 4: Chiffre recherché suivant utilisant DSZ et bouclage au label 0.
46~48..: Affichage score final, arrêt du programme et RST pour valeur suivante.
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.
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 - N°116 : Jeu "RamiSum"

Message par Schraf »

Bien vu @C.Ret ! Mettre 9 dans la mémoire 0 au lieu de 10 et le Dsz à la fin font déjà gagner 3 pas.
J'aime bien aussi le RCL 4 STO 4 lorsque le max n'est pas dépassé 😆

Et en plus pas besoin d'initialisation et on peut enchainer les calculs donc nette amélioration de ma version.
Avatar du membre
C.Ret
Fonctionne à 9600 bauds
Fonctionne à 9600 bauds
Messages : 3404
Enregistré le : 31 mai 2008 23:43
Localisation : N 49°22 E 6°10

Re: Misez p'tit, Optimisez - N°116 : Jeu "RamiSum"

Message par C.Ret »

Oui, mais à part quelques astuces, c'est bien ton algorithme.

Petite astuce que j'aime bien aussi est de faire directement Prd 7 pour calculer le score dans le registre t.
Cette astuce est impossible à reproduire sur Ti-59/Ti-58/Ti-58C car le registre t n'est pas confondu avec l'un ou l'autre des registres mémoires.

La séquence RCL 4 STO 4 est peut-être à améliorer, c'est le résultat de nombreuses tergiversations tentant d'utiliser un EXC 4 qui n'ont pas abouties.

Voici donc la version pour ces machines, qui fait un peu plus de pas:

Code : Tout sélectionner

000  47         CMs            020  67 52      x=t ?→ EE      041  22 77 97   x<t ?→ Dsz     
001  42 10      STO 10         022  42 00      STO 00         044  42 11      STO 11         
003* 76 97     *Lbl Dsz        024  01          1             046  61 97      GTO Dsz        
005  29         C.t            025  74 00      SUM Ind 00
006  01 00      10             027  03          3             048* 76 52     *Lbl EE         
008  22 49 10   Div 10         028  32         x⇌t            050  43 11      RCL 11         
011  65          ×             029  73 00      RCL Ind 00     052  91         R/S            
012  43 10      RCL 10         031  22 77 97   x<t ?→ Dsz     053  81         RST            
014  59         Intg           034  49 00      Prd 00
015  48 10      Exc 10         036  43 11      RCL 11
017  22 59      Frac           038  32         x⇌t
019  95          =             039  43 00      RCL 00
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.
Avatar du membre
Docd
Fonctionne à 300 bauds
Fonctionne à 300 bauds
Messages : 195
Enregistré le : 13 déc. 2022 16:24
Localisation : Belgique

Re: Misez p'tit, Optimisez - N°116 : Jeu "RamiSum"

Message par Docd »

Bonsoir,
Ma solution sur Canon x-07, en BASIC basique :D (sans carte "Math")
Un tableau de 9 éléments, 6 variables et 209 bytes avant RUN, 354 bytes après RUN pour 20 tirages.

Listing:

Code : Tout sélectionner

1CLS:CLEAR:DIMA(9)
2N$=INKEY$
3IFN$=""THENGOTO2:IFN$="Q"THENEND
4N=VAL(N$):IFN=0GOTO2
5T$=T$+N$:LOCATE0,0:?T$:A(N)=A(N)+1
6IFA(N)>=3ANDA(N)<=4THENB=A(N)*N
7IFR<BTHENR=B:R$="("+STR$(A(N))+" *"+MID$(STR$(N,2,1))+" )"
8LOCATE0,1:?R;R$:GOTO2
Fonctionnement:
1. RUN (nooon? si!)
2. Taper sur une touche (si possible, un chiffre, S.V.P.):
2.1. Le chiffre 0 est ignoré.
2.2. Les touches non numériques et non attendues sont ignorées (sauf "break")
3. La lettre "Q" permet de quitter le programme proprement.
4. Le programme accepte 20 tirages, mais le dépassement n'est pas testé.

En cours d'exécution, le programme affiche ceci:
MPO116 - Canon X-07.jpg
MPO116 - Canon X-07.jpg (32.94 Kio) Vu 3579 fois
1ère ligne, les jetons tirés
2ème ligne, le score avec sa composition entre parenthèses.

Limitations:
En fait, le programme accepte 25 tirages avant de sortir sur une erreur "OS - String Overflow". Il s'agit d'une limitation, non-documentée (ou je n'ai pas encore trouvé de référence à ce comportement pour MS-BASIC 1983 sur le web), lors de concaténations répétées dans un programme (quelles que soient les variables concaténées), probablement le buffer interne qui déconne ou qui est limité à 25, ou qui ne se re-set-te pas une fois l'opération faite, ou ... De toute manière, il vaut mieux se limiter à 20 tirages, pour respecter l'affichage du résultat (LOCATE se f..t de ce qu'il y a à l'écran, normal, quoi!!!).

Logique:
Tout se fait à la volée: une fois le chiffre entré, il est comptabilisé, le nombre d'occurrences stocké et le score calculé si nécessaire. Puis le chiffre est affiché et la boucle recommence, sauf si "Q" est pressé (en ce cas, on sort et la suite +résultat restent lisibles). En ligne 7, le maximum est stocké et l'affichage de la composition modifié si nécessaire (pour 11 score=0 pas de composition, pour 444, score de 12 et composition ( 3*4 ), par exemple).

Essais d'optimisation foireux:
1. En ligne 3 et 4, 2 IF successifs fonctionnent, pas 3 (le test "0" est ignoré). J'ai dû le séparer.
2. Les lignes de calcul/concaténation pourraient être un peu plus compactes, mais si on dépasse 59 caractères par ligne d'instructions, il n'est plus possible de lister et éditer cette ligne par après car l'afficheur (de 4 x 20 caractères) monte d'un cran lorsque le système revient au prompt. Donc, 59 car. + "return" ça passe (le N° de ligne est en 0,0 et le prompt en 0,4) mais 61 et plus, la première ligne disparaît (et le n° avec!).

Commentaire sans importance:
LOCATE travaille en mode colonne,ligne et non ligne,colonne et part de 0,0. Donc LOCATE 1,1 désigne le 2ème caractère de la 2ème ligne). J'ai eu du mal à m'y faire. :mrgreen:

Cordialement,

Didier
[edit: typos]
Fonctionne à piles.
Sujet à des crises de tetrapilectomie sévère, parfois aigüe.
Avatar du membre
Marge
Fonctionne à 14400 bauds
Fonctionne à 14400 bauds
Messages : 6172
Enregistré le : 01 oct. 2008 14:39
Localisation : En bas, tout au fond à gauche.

Re: Misez p'tit, Optimisez - N°116 : Jeu "RamiSum"

Message par Marge »

Bonsoir, bravo pour ton enthousiasme !
Cela fait toujours plaisir de voir ces petits défis apporter de l’eau aux moulins… des rivières.
Je me demandais justement si je n’allais pas reprendre un de ceux-là, « à c’t’heure ».
3 hommes, 3 demis, un 3a... Magnéto, Serge !

Quelques-uns de mes petits programmes pour machines Hewlett-Packard :
15C : Knight's Tour ;
29C : (k-)Permutations, Combinations, Linear Regression and Pseudo-random number ;
34C : Hanoi Towers - Automatic & Manual resolutions ;
67
__: A L I E N .

« Boris », c'était juste Maurice enrhumé.
Zebulon
Fonctionne à 1200 bauds
Fonctionne à 1200 bauds
Messages : 575
Enregistré le : 28 juin 2022 10:21

Re: Misez p'tit, Optimisez - N°116 : Jeu "RamiSum"

Message par Zebulon »

Quejedétestelesbasicoùonpeuttoutcollersansespaces. :D

Merci pour ce programme. Est-ce que le test de la lettre Q fonctionne ? Je ne connais pas ce basic en particulier, mais dans la plupart il me semble que les instructions GOTO2:IFN$="Q"THENEND font toutes partie de la clause THEN du IFN$="" non ?
Avatar du membre
Docd
Fonctionne à 300 bauds
Fonctionne à 300 bauds
Messages : 195
Enregistré le : 13 déc. 2022 16:24
Localisation : Belgique

Re: Misez p'tit, Optimisez - N°116 : Jeu "RamiSum"

Message par Docd »

Bonjour,
@Marge: Merci, pour ce commentaire chaleureux. En fait, je suis trop lent pour participer à la course aux algorithmes des MPO (dans mon mode de pensée à moi, "faut qu'ça percole" :? ) et je ne me suis pas encore fait aux "nouvelles" technologies (RPL et autres Python). Donc je réfléchis à l'aise, je peaufine tant que je peux, je teste et tant pis si je publie après la fin. Bof, l'important c'est de participer.

@Zebulon: Moi aussi, je déteste. Quand j'écris, je mets des " ", puis je les supprime pour la publication et le calcul de taille du programme (MPO oblige).
Pour la suite de tests, je le mets en remarque "Essais d'optimisation foireux": 2 à la suite fonctionnent (sur X-07) pas 3. Donc, je confirme bien le fonctionnement suivant:
- chiffre 0 ignoré et retour à INKEY$
- caractère "Q" attrapé et le programme se termine par un retour au prompt
- toute entrée qui n'est pas dans la liste 1,2,..,9,Break) est ignorée et renvoie à INKEY$
C'est le plus compact que j'aie réussi à faire, mais je ne doute pas qu'il pourrait y avoir une meilleure manière de procéder.

Le BASIC du X-07 est Microsoft + Canon 1983. A ce sujet, le X-07 pourrait-il être dérivé d'un MSX? Il est très proche de la norme HW MSX (69 touches au lieu de 72, Interfaces série/parallèle/extension, son évolué, affichage graphique - limité, cartouche programme - via port carte RAM, extension mémoire par circuit CMOS, MS-BASIC83 avec gestion de fichiers - limitée à 1 à la fois - sans instruction CLOSE) et peut communiquer avec un MSX de table (selon divers articles de l'époque) sans modifier la syntaxe de ses programmes. Mais, bon, je phantasme peut-être.

Cordialement,

Didier
[Edit] Typos et virgules diverses
Fonctionne à piles.
Sujet à des crises de tetrapilectomie sévère, parfois aigüe.
FLISZT
Fonctionne à 1200 bauds
Fonctionne à 1200 bauds
Messages : 655
Enregistré le : 09 mars 2022 19:14

Re: Misez p'tit, Optimisez - N°116 : Jeu "RamiSum"

Message par FLISZT »

Bonjour,


Je viens de me replonger "vite fait" dans ce MPO et plus particulièrement dans la proposition RPL de Schraf.
Schraf a écrit : 23 mars 2023 12:58 @FLIZT : Ca ressemble effectivement à un réacteur nucléaire, je cours acheter une carte 256Mo à mettre sur ma HP 50g pour tester ton programme 😆 !
… celle-là, je l'ai reprise parce qu'elle m'amuse !
Pis un réacteur nucléaire de la taille d'une hp-50g… ma fortune est faite ! :lol:
Schraf a écrit : 23 mars 2023 12:58 (…)
Voici ma version pour la HP 50g (j'ai pas testé sur les HP 48-49 mais a priori ça devrait fonctionner) :

Code : Tout sélectionner

« 0 + →t 	' j'ajoute 0 à la liste car ΣLIST ne fonctionne pas lorsqu'il y a un unique élément
« 0 1 9 FOR i 	' On teste les chiffres de 1 à 9. Le '0' correspond à l'initialisation du MAX
  t i - NOT	' On cherche les éléments égaux à 'i', astuce avec '-' puis NOT car '==' ne fonctionne pas
  ΣLIST		' Calcul du nombre d'éléments dans 't' égaux à 'i'
  DUP 2 > * i *	' Si > 2 on a 1 dans la pile sinon 0. Même astuce que @zpalm et @C.Ret en faisant ensuite le produit par 'i'
  MAX NEXT » »	' MAX entre le résultat et le maximum précédent
(…)
Schraf a écrit : 23 mars 2023 12:58
(…)

Code : Tout sélectionner

Astuce du "- NOT "pour remplacer le "==" :

[code]2: {4 4 9 4 9 9}
1: 4
==	'PRG - TEST - ==
1: 0	' Ne fonctionne pas, alors que cela marche avec >, < etc.

(…)
Mais pourquoi donc ?! (que ça ne marche pas)
N'y aurait-il pas un moyen ?

Si… et même deux ! Et toc ! :D

La première solution qui m'est venu à l'esprit est de remplacer

Code : Tout sélectionner

<< ... << ... t i − NOT ... >> >>
par

Code : Tout sélectionner

<< ... << ... t << i == >> MAP ... >> >>
la seconde est :

Code : Tout sélectionner

<< ... << ... t 1 << i == >> DOLIST... >> >>             @ le "1" est un argument de DOLIST
Cette dernière solution est la plus lourde avec 101 octets, contre 98,5 pour la solution MAP, et seulement 83 octets pour la proposition de Schraf, qui sans surprise est la plus légère mais aussi à priori (je n'ai pas chronométré autrement qu'en comptant) la plus rapide.

Il semble également que la solution DOLIST, bien que plus lourde, soit plus rapide que celle avec MAP.

− NOT est donc très astucieux !
Bruno
Sanyo CZ-0124 ? TI-57 ? HP-15C ? Canon X-07 + XP-140 Monitor Card ? HP-41CX ? HP-28S ? HP-50G ? HP-50G
Gilles59
Fonctionne à 2400 bauds
Fonctionne à 2400 bauds
Messages : 1602
Enregistré le : 27 oct. 2010 20:46

Re: Misez p'tit, Optimisez - N°116 : Jeu "RamiSum"

Message par Gilles59 »

Enfin un peu de temps pour revenir parmi vous ;D

Une petite version CASIO Fx 501->603P.
Entrer la combinaison puis P0

Code : Tout sélectionner

***P0  39 steps
 MAC
  / LOG INT 10^x =
   LBL0
     - INT x=0 GOTO1
      Min00 IND M+00 = * 10 Min00 = GOTO0
    LBL1
       2 * MR00 - IND MR00 =  x>=0 GOTO2
       IND Mr00 x>=F MinF
     LBL2
       DSZ GOTO1
    MRF
  
EX : 1234554559 -> 20
Casio FX-502P /602P / 603P / FX180P+ / FX4000P / TI57 / TI66 / TI74 Basicalc / TI95 Procalc / HP12C / HP15C LE / DM41L / HP 30B / HP39GII / HP 48SX USA / 49G / 49g+ / 50G / 50G NewRPL / HP Prime / Oric 1 / Amstrad CPC 6128+ CM14 et MM12 / Alice 32
Avatar du membre
ledudu
Fonctionne à 14400 bauds
Fonctionne à 14400 bauds
Messages : 5631
Enregistré le : 26 mars 2009 13:07
Localisation : Ile de France
Contact :

Re: Misez p'tit, Optimisez - N°116 : Jeu "RamiSum"

Message par ledudu »

Machine : CASIO PRO 101
Langage : Fortran Casio
162 pas sur 256

Voici mon premier programme sur PRO 101.
Elle dispose de plus de mémoire que ses copines et 15 zones de programmes - je n'ai pas utilisé les zones de programmes mais j'ai dépassé les 117 pas des autres machines Fortran.
Je me suis rendu compte qu'on pouvait faire DELETE sur une instruction (c) et que l'insertion était automatique (sur toute la série d'ailleurs).

L'algorithme est assez classique, je parcours le nombre en partant de la droite et j'incrémente les registres 1 à 9 à chaque chiffre extrait.
Pour cela, j'utilise l'adressage indirect - si I contient un entier [1,9] - IM désigne le registre correspondant. Très utile.
Ensuite, je parcours les registres pour trouver le chiffre gagnant s'il existe.

Rappel : 1 désigne le registre 1 - K1 est la constante 1

Code : Tout sélectionner

ST#1:MAC                                         ' La fonction MAC efface les registres et n'est pas suivie de : 
15=K10 a^n K9:ENT 11:                            ' Pour calculer int(N) = N+15-15
ST#2:10=11/K10+15-15 x K10 : I=11-10:11=10/K10:  ' Extraction du chiffre de droite et décalage d'un digit
IM=IM+K1:IF 11=K0:3:3:2:                         ' On incrémente le bon registre et on itère
ST#3:I=K9:                                       ' Recherche du meilleur score à partir de 9
ST#7:IF IM=K2:5:5:8:                             ' Est-ce que la fréquence de ce chiffre est >2 ?
ST#8:13=I x IM-12:IF 13=K0:5:5:4:                ' oui - Donc est-ce que le score est meilleur que le précédent conservé ?
ST#4:14=I:12=I x IM:                             ' oui - On stocke le score et le chiffre
ST#5:I=I-K1:IF I=K0:6:6:7:                       ' On passe au chiffre suivant jusqu'a 1
ST#6:ANS 14:12:GOTO 1:END                        ' Affichage du résultat
Avec 4444999 résultat = 27 en 13 secondes
Avec 1234554559 résultat = 20 en 15 secondes

Challenge : gagner 35 pas pour passer sur les autres machines et leurs 127 pas... -10 c'est jouable sans changer d'algo, après...

[EDIT] challenge : je suis à 148

Autres programmes CASIO Fortran
Répondre

Retourner vers « Tous les Pockets »