Misez p'tit, Optimisez - N°116 : Jeu "RamiSum"
Modérateur : Politburo
Re: Misez p'tit, Optimisez - N°116 : Jeu "RamiSum"
En TI BASIC (TI 80, 82, 83, 84) :
Je cherche à le faire sur une TI-57 mais pour le moment je dépasse les 50 pas...
Je cherche à le faire sur une TI-57 mais pour le moment je dépasse les 50 pas...
- Marge
- Fonctionne à 14400 bauds
- Messages : 6192
- Enregistré le : 01 oct. 2008 14:39
- Localisation : En bas, tout au fond à gauche.
Re: Misez p'tit, Optimisez - N°116 : Jeu "RamiSum"
Ah oui, chapeau si tu y arrives...Je cherche à le faire sur une TI-57 mais pour le moment je dépasse les 50 pas...
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é. ♥ ♠
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é. ♥ ♠
Re: Misez p'tit, Optimisez - N°116 : Jeu "RamiSum"
Version pour TI-57 :
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.
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
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.
- Marge
- Fonctionne à 14400 bauds
- Messages : 6192
- Enregistré le : 01 oct. 2008 14:39
- Localisation : En bas, tout au fond à gauche.
Re: Misez p'tit, Optimisez - N°116 : Jeu "RamiSum"
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.
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é. ♥ ♠
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é. ♥ ♠
Re: Misez p'tit, Optimisez - N°116 : Jeu "RamiSum"
@Marge : Voici l'organigramme pour mieux s'y repérer :
- C.Ret
- Fonctionne à 9600 bauds
- Messages : 3422
- Enregistré le : 31 mai 2008 23:43
- Localisation : N 49°22 E 6°10
Re: Misez p'tit, Optimisez - N°116 : Jeu "RamiSum"
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.
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.
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
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.
Re: Misez p'tit, Optimisez - N°116 : Jeu "RamiSum"
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.
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.
- C.Ret
- Fonctionne à 9600 bauds
- Messages : 3422
- Enregistré le : 31 mai 2008 23:43
- Localisation : N 49°22 E 6°10
Re: Misez p'tit, Optimisez - N°116 : Jeu "RamiSum"
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:
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.
- Docd
- Fonctionne à 300 bauds
- Messages : 210
- Enregistré le : 13 déc. 2022 16:24
- Localisation : Belgique
Re: Misez p'tit, Optimisez - N°116 : Jeu "RamiSum"
Bonsoir,
Ma solution sur Canon x-07, en BASIC basique (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:
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:
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.
Cordialement,
Didier
[edit: typos]
Ma solution sur Canon x-07, en BASIC basique (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
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:
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.
Cordialement,
Didier
[edit: typos]
Fonctionne à piles.
Sujet à des crises de tetrapilectomie sévère, parfois aigüe.
Sujet à des crises de tetrapilectomie sévère, parfois aigüe.
- Marge
- Fonctionne à 14400 bauds
- Messages : 6192
- Enregistré le : 01 oct. 2008 14:39
- Localisation : En bas, tout au fond à gauche.
Re: Misez p'tit, Optimisez - N°116 : Jeu "RamiSum"
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 ».
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é. ♥ ♠
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é. ♥ ♠
Re: Misez p'tit, Optimisez - N°116 : Jeu "RamiSum"
Quejedétestelesbasicoùonpeuttoutcollersansespaces.
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 ?
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 ?
- Docd
- Fonctionne à 300 bauds
- Messages : 210
- Enregistré le : 13 déc. 2022 16:24
- Localisation : Belgique
Re: Misez p'tit, Optimisez - N°116 : Jeu "RamiSum"
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
@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.
Sujet à des crises de tetrapilectomie sévère, parfois aigüe.
Re: Misez p'tit, Optimisez - N°116 : Jeu "RamiSum"
Bonjour,
Je viens de me replonger "vite fait" dans ce MPO et plus particulièrement dans la proposition RPL de Schraf.
Pis un réacteur nucléaire de la taille d'une hp-50g… ma fortune est faite !
N'y aurait-il pas un moyen ?
Si… et même deux ! Et toc !
La première solution qui m'est venu à l'esprit est de remplacer
par
la seconde est :
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 !
Je viens de me replonger "vite fait" dans ce MPO et plus particulièrement dans la proposition RPL de Schraf.
… 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 !
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
Mais pourquoi donc ?! (que ça ne marche pas)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. (…)
N'y aurait-il pas un moyen ?
Si… et même deux ! Et toc !
La première solution qui m'est venu à l'esprit est de remplacer
Code : Tout sélectionner
<< ... << ... t i − NOT ... >> >>
Code : Tout sélectionner
<< ... << ... t << i == >> MAP ... >> >>
Code : Tout sélectionner
<< ... << ... t 1 << i == >> DOLIST... >> >> @ le "1" est un argument de DOLIST
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
Sanyo CZ-0124 ? TI-57 ? HP-15C ? Canon X-07 + XP-140 Monitor Card ? HP-41CX ? HP-28S ? HP-50G ? HP-50G
Re: Misez p'tit, Optimisez - N°116 : Jeu "RamiSum"
Enfin un peu de temps pour revenir parmi vous ;D
Une petite version CASIO Fx 501->603P.
Entrer la combinaison puis P0
EX : 1234554559 -> 20
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
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
- ledudu
- Fonctionne à 14400 bauds
- Messages : 5646
- Enregistré le : 26 mars 2009 13:07
- Localisation : Ile de France
- Contact :
Re: Misez p'tit, Optimisez - N°116 : Jeu "RamiSum"
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
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
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 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