MPO n°68 : les tours de Hanoï

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 de l’utilisateur
zpalm
Fonctionne à 9600 bauds
Fonctionne à 9600 bauds
Messages : 2499
Inscription : 03 mai 2008 15:33
Localisation : Grenoble

Re: MPO n°68 : les tours de Hanoï

Message par zpalm » 23 oct. 2017 22:54

Marge a écrit :
23 oct. 2017 22:12
zpalm a écrit :
23 oct. 2017 22:01
XEQ ALPHA X shift COS shift TAN ALPHA
Merci z., mais c'est exactement ce que j'ai fait, suivi du n° de registre, et la machine m'a affiché : xeq 'x<>04'
Il faut entrer le numéro de registre après être sorti du mode Alpha, lorsque la 41C affiche X<>__

Avatar de l’utilisateur
Hobiecat
Fonctionne à 9600 bauds
Fonctionne à 9600 bauds
Messages : 3017
Inscription : 06 sept. 2011 14:57
Localisation : Normandie / Antwerpen

Re: MPO n°68 : les tours de Hanoï

Message par Hobiecat » 23 oct. 2017 23:03

Pour éclaircir pour Marge, "X<>" est en fait une fonction de la 41 : tu la trouves d'ailleurs dans les CATALOG écrite comme ça.

Avatar de l’utilisateur
Marge
Fonctionne à 9600 bauds
Fonctionne à 9600 bauds
Messages : 4702
Inscription : 01 oct. 2008 14:39
Localisation : En bas, tout au fond à gauche.

Re: MPO n°68 : les tours de Hanoï

Message par Marge » 24 oct. 2017 02:03

Oui, je sais bien qu'il faut sortir du mode ALPHA pour entrer le numéro, c'est d'ailleurs assez logique ; je me suis probablement mal exprimé dans l'affichage présenté que je citais de mémoire. J'essaierai quand j'aurai une minute.

Merci à vous deux !
3 hommes, 3 demis, un 3a... Magnéto, Serge !

« Boris », c'est juste Maurice enrhumé.

Avatar de l’utilisateur
Marge
Fonctionne à 9600 bauds
Fonctionne à 9600 bauds
Messages : 4702
Inscription : 01 oct. 2008 14:39
Localisation : En bas, tout au fond à gauche.

Re: MPO n°68 : les tours de Hanoï

Message par Marge » 25 oct. 2017 20:45

Bonjour,

Voici l'adaptation à la HP-41CX de ma version itérative pour HP-34C en mode automatique.

Les rares modifications concernent le registre I (inexistant sur la 41) remplacé par le registre 04. Pour être juste dans le bilan du "poids" du programme (j'ai encore un doute sur le mot à utiliser, entre "taille", "poids" ou autre chose...), j'ai modifié le comptage final de la 34C en prenant en compte ce registre I (7 octets). Celui de la HP-41CX est de 230 octets + 6*7 = 272 octets - avec TIME, BEEP et un registre supplémentaire.

Avec les pauses nécessaires à la visualisation des coups (tour décapitée, disque retiré, tour bénéficiaire, environ une seconde à chaque fois), la HP-41CX résout le problème en une heure huit minutes environ (1 h 08 mn 14 s 38/100 exactement sur la CX, mais il faudrait ajouter les temps infimes du premier LABEL, de l'effacement des registres et du dernier RTN), soit presque deux fois et demie plus rapidement que la 34C (2 heures 32 minutes et 25 secondes) ; j'ignorais cette différence qu'il faudrait que je confirme sur la 41 première mouture...
En tout cas, le temps d'exécution de ces 511 (2^9-1) coups (*) semble maintenant plus proche de celui d'un être humain (voir plus bas).

Voici le code avec l'ajout des pas nécessaires au chronométrage de cette "performance" :

Code : Tout sélectionner

001	LBL A	014	XEQ 01	027	XEQ 00	040	RCL 00	053	X<>Y	066	FRC	079	1		092	ST+ 00
002	CLRG	015	LBL 08	028	RCL 03	041	FRC	054	XEQ 01	067	X=0?	080	-		093	RDN
003	TIME	016	XEQ 05	029	9	042	X=0?	055	XEQ 01	068	XEQ 01	081	STO IND 04	094	RDN
004	HR	017	.1	030	X<=Y?	043	GTO 09	056	LBL 09	069	XEQ 01	082	XEQ 00		095	RTN
005	STO 05	018	X=Y?	031	GTO 04	044	X>Y?	057	XEQ 05	070	RCL 00	083	Ru		096	LBL 05
006	81	019	GTO 09	032	XEQ 01	045	GTO 09	058	XEQ 06	071	FRC	084	1		097	RCL IND 04		
007	1/X	020	XEQ 01	033	XEQ 05	046	X<>Y	059	RCL 00	072	XEQ 02	085	X<>04		098	ENTER
008	ST- 01	021	GTO 08	034	RLC 00	047	XEQ 01	060	INT	073	XEQ 00	086	FIX IND 04	099	INT
009	10	022	LBL 09	035	INT	048	XEQ 01	061	+	074	GTO 08	087	X<>Y		100	1
010	ST+ 01	023	RDN	036	+	049	LBL 09	062	STO 00	075	LBL 06	088	PSE		101	-
011	1	024	XEQ 06	037	STO 00	050	X<>Y	063	FRC	076	-	089	X<>Y		102	10^X
012	STO 04	025	XEQ 01	038	XEQ 01	051	X#0?	064	5	077	X<>Y	090	X<>04		103	*
013	XEQ 00	026	XEQ 02	039	XEQ 05	052	GTO 09	065	*	078	/	091	1		104	LAST X

105	X<>Y	118	LBL 02			131	STO 04			144	FIX IND 04
106	FRC	119	RCL IND 04		132	RDN			145	PSE
107	LAST X	120	INT			133	LBL 09			146	Ru
108	X<>Y	121	10^X			134	RTN			147	X<>04
109	RTN	122	/			135	LBL 00			148	RTN
110	LBL 04	123	ST+ IND 04		136	RCL 04			
111	RCL 00	124	1			137	RCL IND 04		
112	FIX 0	125	ST+ IND 04		138	FRC			
113	TIME	126	RTN			139	+			
114	HR	127	LBL 01			140	RCL INT 04		
115	ST- 05	128	DSE 04			141	INT			
116	BEEP	129	GTO 09			142	X<>04			
117	RTN	130	3			143	RDN			

Ajout du soir

J'ai chronométré 50 pauses à la suite pour estimer le temps de chacune : j'obtiens une moyenne de 1,278 seconde.

À raison de 511 mouvements nécessaires pour la résolution du problème, le temps de calcul pur de la 41 est de 57 m 21 s (et 32 201/100 000).

(*) : Je m'étais trompé plus haut en estimant ce nombre au double ; c'est corrigé.
3 hommes, 3 demis, un 3a... Magnéto, Serge !

« Boris », c'est juste Maurice enrhumé.

Avatar de l’utilisateur
Hobiecat
Fonctionne à 9600 bauds
Fonctionne à 9600 bauds
Messages : 3017
Inscription : 06 sept. 2011 14:57
Localisation : Normandie / Antwerpen

Re: MPO n°68 : les tours de Hanoï

Message par Hobiecat » 28 oct. 2017 08:42

Beau travail Marge !

Avatar de l’utilisateur
Marge
Fonctionne à 9600 bauds
Fonctionne à 9600 bauds
Messages : 4702
Inscription : 01 oct. 2008 14:39
Localisation : En bas, tout au fond à gauche.

Re: MPO n°68 : les tours de Hanoï

Message par Marge » 02 nov. 2017 22:14

Ma 41 CV (2745S...) boucle le problème en une heure neuf minutes trente-cinq secondes et une bricole (51/100èmes). C'est un peu plus que ma CX (3022S...), de pas beaucoup.

La 41C
ne démarre plus...
3 hommes, 3 demis, un 3a... Magnéto, Serge !

« Boris », c'est juste Maurice enrhumé.

Avatar de l’utilisateur
Marge
Fonctionne à 9600 bauds
Fonctionne à 9600 bauds
Messages : 4702
Inscription : 01 oct. 2008 14:39
Localisation : En bas, tout au fond à gauche.

Re: MPO n°68 : les tours de Hanoï

Message par Marge » 28 nov. 2019 22:32

« Qui vivra verra... »

J'ai enfin complété mon programme Voir Hanoï et mourir sur HP-34C. Ce n'était pas une mince affaire car je ne suis pas spécialement doué en programmation et je voulais intégrer la résolution manuelle au premier programme de résolution automatique.

Vous avez maintenant deux options :
  • Soit vous optez pour la résolution automatique en pressant la touche A ; le programme affiche alors toutes les tours réceptrices jusqu'à s'arrêter lorsqu'il a tout placé dans l'ordre sur la tige n° 3 ;
  • Soit vous tentez vous-même l'expérience (ce sera peut-être plus rapide !) en pressant la touche B : à chaque tour de jeu, le programme vous présente les trois tours dans l'ordre et vous devez donner vos consignes en entrant la tour de départ, en pressant [ENTER] puis en entrant la tour d'arrivée avant de presser [R/S]. Vous pouvez vous tromper, bien sûr, mais il n'y a aucun contrôle de la validité de votre coup, comme dans la réalité !
    À chaque arrêt au pas R/S, vous pouvez de nouveau visualiser les tours en pressant [FIX] [9] puis [RCL] et le numéro de tour de votre choix : contrairement à ce qui se passe dans le programme où les tours sont visualisées avec l'entier représentant le numéro de tour, par ce moyen manuel, au début, les tours s'affichent sous le format 9,987654321, 0,000000000 et 0,000000000 ; l'entier exprime en effet le nombre de disques que contient la tour. Vous pouvez également connaître le nombre de tentatives en rappelant le registre 0 par [RCL] [0].
    Vous pouvez aussi faire une vraie pause ! Éteignez la machine quand elle attend votre réponse, allez vous détendre et reprenez le jeu : allumez-la, pressez [GTO] [.] [022] et reprenez votre patient labeur !
Voici le programme pour HP-34C, HP-15C(*) et leurs émulateurs, divisé en deux parties pour faciliter sa lecture (encore que sur téléphone...) :

Code : Tout sélectionner

001 LBL A  013 STO I  025 R↓     037 GTO 0  049 RCL 0  061 x<=y?  073 /      085 GTO 9  097 X><Y   
002 SF0    014 F?0    026 GSB 4  038 GSB 7  050 STO I  062 GSB 7  074 FRAC   086 LBL 7  098 10^x   
003 LBL B  015 GTO 9  027 GSB 5  039 GTO 9  051 GSB 7  063 x=0?   075 x=0?   087 DSE    099 *       
004 Cl.Rg  016 LBL 8  028 X><I   040 LBL 0  052 GSB 4  064 GSB 7  076 GSB 7  088 RTN    100 Lst x 
005 1      017 1      029 R↓     041 R↓     053 STO 0  065 GSB 4  077 GSB 7  089 3      101 R↓
006 0      018 STO+0  030 GSB 6  042 GSB 5  054 GSB 7  066 GSB 5  078 R↓     090 STO I  102 +
007 STO+1  019 GSB 1  031 GTO 8  043 R↓     055 GSB 4  067 R↓     079 GSB 6  091 R↓     103 R↑ 
008 8      020 GSB 2  032 LBL 9  044 GSB 7  056 x=0?   068 ENTER  080 RCL I  092 RTN    104 /
009 1      021 GSB 3  033 GSB 4  045 GSB 6  057 1      069 1      081 STO 0  093 LBL 6  105 1
010 1/x    022 R/S    034 .      046 RCL I  058 RCL 0  070 0      082 GSB I  094 RCL(i) 106 +
011 STO-1  023 X><Y   035 1      047 STO 0  059 x<=y?  071 *      083 RCL 0  095 INT    107 STO(i)
012 1      024 X><I   036 x=y?   048 GSB I  060 GSB 7  072 2      084 STO I  096 Lst x  108 9
Deuxième partie :

Code : Tout sélectionner

109 RCL 3  121 X<>Y   133 -      145 RCL 1  157 RTN    169 DSP I | :     AFFECTATION DES VARIABLES     :
110 x>y?   122 /      134 10^x   146 INT    158 LBL 3  170  PSE  | :  Mode auto.  ::    Mode manuel    :
111 GTO 6  123 Lst x  135 RCL(i) 147 X><I   159 RCL 3  171 RTN   | :-----------------------------------:
112 RTN    124 LOG    136 FRAC   148 1      160 INT   |----------|                ::                   :
113 LBL 6  125 +      137 X<>Y   149 GSB 0  161 X><I  |    R0 ->    Déc. comparée :: Nbre déplacements :
114 FIX 9  126 STO(i) 138 *      150 RTN    162 3     |    R1 ->    Tour 1   (Nbre décim, disques)     :
115 6      127 R↓     139 Lst x  151 LBL 2  163 GSB 0 |    R2 ->    Tour 2   (Nbre décim, disques)     : 
116 -      128 RTN    140 X<>Y   152 RCL 2  164 RTN   |    R3 ->    Tour 3   (Nbre décim, disques)     :
117 R/S    129 LBL 4  141 ENTER  153 INT    165 LBL 0 |    RI ->  Gest. Affichage :: Gestion affichage :
118 LBL 5  130 RCL(i) 142 FRAC   154 X><I   166 Lst x |          / Sélection Tour ::        -          :
119 R↓     131 INT    143 RTN    155 2      167 FRAC  | -----------------------------------------------:
120 INT    132 1      144 LBL 1  156 GSB 0  168  +    |           171 pas, 5 registres : 206 octets    :

Le programme était déjà assez complexe en raison du registre I utilisé à deux fins (gestion de la sélection des registres/tours et gestion de l'affichage) et les choses ne se sont pas arrangées avec la décomposition des tâches en huit sous-programmes à partir des deux principaux - Automatique avec A et la boucle 9 et Manuel avec B et la boucle 8.

En mode automatique, la HP-34C assiste à la fin du monde en un peu plus de deux heures (2 h 7 m 24 s) ; c'est un bien meilleur temps que le programme précédent (2 h 32 m 25 s) dû pour une petite part à l'avantage de n'effectuer qu'un affichage au cours de la boucle principale.
Avec un peu de savoir-faire, un être humain devrait faire mieux ! C'est le monde à l'envers...



Image
Retrouvez cette superbe machine sur ce joli site français consacré à ces merveilles de technologie !

« Qui a vu vit ! »

(*) : pour la HP-15C, il faut spécifier le registre à décrémenter au moyen de [f DSE f I] (pas 087) et autoriser l'affichage variable en fonction du nombre de disques par [f FIX f I] (pas 169). Enfin, comme l'état des drapeaux est mémorisé à l'extinction de la machine (ce n'est pas le cas sur la 34C), il convient d'ajouter un pas qui désarme le drapeau pour jouer manuellement :

Code : Tout sélectionner

032 LBL 9
033 CF 0
034 GSB 4
...
Vous pouvez bien sûr ajouter ce pas au programme de la 34C, mais comme il est fréquent d'éteindre cet engin gourmand en énergie, je n'ai pas cru que c'était utile.



La première version de ce message a été modifiée, et le programme également : un GSB manuel renvoie malheureusement en tête de programme, c'est donc un RCL qui le remplace. Le programme a aussi été légèrement allongé pour permettre un affichage correct en fin de partie. Enfin, j'ai procédé ce 2 décembre 2019 à l'adaptation correcte à la 15C originale - la 15C Limited Edition demeure hors-jeu en raison du fameux bogue de la pause.
Dernière édition par Marge le 03 déc. 2019 14:32, édité 8 fois.
3 hommes, 3 demis, un 3a... Magnéto, Serge !

« Boris », c'est juste Maurice enrhumé.

Avatar de l’utilisateur
C.Ret
Fonctionne à 2400 bauds
Fonctionne à 2400 bauds
Messages : 2029
Inscription : 31 mai 2008 23:43
Localisation : N 49°22 E 6°10

Re: MPO n°68 : les tours de Hanoï

Message par C.Ret » 29 nov. 2019 21:26

Waaaooow ! J'adore.

Demain je saisi cela sur mon HP-15C et je passe la matinée à jouer à Hanoï !
Je vous ferai une ou deux petite photo de mon installation :)
SHARP PC-1211 + CE-121 + CE-122. | VIC 20 Commodore 128D + Printer P-803 + SD2iec. | TI-57 LCD | TI-74 BasiCalc | TI-92 II | HP-28S + HP82240A | HP-41C + (2 memory + stat + IR) modules. | HP Prime Wireless Graphing Calculator | HP-15C | CASIO fx-602p + FA-1. .Sommaire des M.P.O.. . Sommaire du P.C.T.M. .

Avatar de l’utilisateur
Marge
Fonctionne à 9600 bauds
Fonctionne à 9600 bauds
Messages : 4702
Inscription : 01 oct. 2008 14:39
Localisation : En bas, tout au fond à gauche.

Re: MPO n°68 : les tours de Hanoï

Message par Marge » 30 nov. 2019 05:46

Ça fait plaisir de voir que tu reviens sur ce vieux sujet !

Il y avait une petite erreur d'affichage à la fin du programme et le GSB manuel a été remplacé par un RCL.

À bientôt !
3 hommes, 3 demis, un 3a... Magnéto, Serge !

« Boris », c'est juste Maurice enrhumé.

Avatar de l’utilisateur
Marge
Fonctionne à 9600 bauds
Fonctionne à 9600 bauds
Messages : 4702
Inscription : 01 oct. 2008 14:39
Localisation : En bas, tout au fond à gauche.

Re: MPO n°68 : les tours de Hanoï

Message par Marge » 03 déc. 2019 00:27

J'ai entré le jeu dans ma 15C en modifiant les deux pas dont je parle dans le message comportant le programme.

C'est une vieille machine que j'ai acquise en mauvais état esthétique (surtout dans la partie supérieure, mais fonctionnelle. J'aimerais trouver une solution au problème de l'huile noire dont elle souffre, et notamment savoir si un don de pièce de HP-12C serait envisageable, mais j'en doute... Édith, qui vient de consulter le HP Museum, me souffle que ce serait possible à la condition de trouver une 12C à peu près du même âge que ma 15C. Pas gagné.

C'est néanmoins un engin intéressant à manier que cette 15C. Le gros avantage que j'y vois, en comparaison de la 34C, est peut-être une meilleure disposition du clavier rendue possible par la disparition de la plupart des tests des touches (par exemple, si vous voulez le test x=y, vous devez taper [g] [test] et [5]), ce qui nécessite la consultation du dos de la machine où se trouve le mémo ; on gagne un accès direct au [R↓], au [SST], au [10^x], etc. Elle est aussi plus rapide. J'indiquerai le temps quand elle aura fini le travail, elle tourne encore et j'ai été surpris par sa rapidité qui m'a empêché d'arrêter le chrono lors d'une première tentative.
Édition : la 15C résout le problème en 1 h 52 m 45 s, soit presque un gain de 11,5 % sur la 34C. Pas mal.

Voici la bête (et non la belle) :

15C_petite.JPG
15C_petite.JPG (40.97 Kio) Consulté 371 fois
3 hommes, 3 demis, un 3a... Magnéto, Serge !

« Boris », c'est juste Maurice enrhumé.

Avatar de l’utilisateur
C.Ret
Fonctionne à 2400 bauds
Fonctionne à 2400 bauds
Messages : 2029
Inscription : 31 mai 2008 23:43
Localisation : N 49°22 E 6°10

Re: MPO n°68 : les tours de Hanoï

Message par C.Ret » 04 déc. 2019 12:28

Marge, c'est vrai que ton code fonctionne à merveille sur une HP-15C.

J'ai pu faire quelques parties et faire tourner le mode 'DEMO'. Ayant remplacé un collègue à l'usine le Week-End dernier, je n'ai pas eut le temps de vous présenter mon installation.

Cela m'a donné l'envie de reprendre mes notes et de continuer mes recherches sur ce sujet.
Sur les Pocket BASIC, une méthode générale de résolution interactive (comme pour mon code sur SHARP PC-1211 l'utilisateur peu jouer et à tout moment demander à sa machine d'avancer d'un pas ou de résoudre les tours) est bien avancée basée sur un triangle de Pascal mût par un moteur à joint de culasse de Warclaw Sierpiński.

Image

La version qui m'occupe en ce moment est une résolution interactive (comme pour mon code sur SHARP PC-1211 l'utilisateur peu jouer et à tout moment demander à sa machine d'avancer d'un pas ou de résoudre les tours) basée sur un algorithme généralisé récursif. La pile quasi infinie des systèmes RPL permet des codes très courts et efficaces si l'on supporte l'empilement des centaines d'étages emboités.

Quelques drapeaux globaux (CF/SF) bien placés permettent l'affichage dynamiques de la progression (ou plus prosaïquement de pouvoir débuggé le code). Il pourrait même arriver, ce qui est très difficile en RPL, que l'auteur du code comprenne , au moins en partie, ce que fait son HP-28S entre deux pressions des touches du soft-MENU et qu'il puisse présenter ici le fruit de ses laborieux et délicats travaux. Un simple copier-coller est facile à réaliser, mais bien expliquer la mécanique ésotérique de l'implémentation R.P.L. est plus ardue !

Même pour lorsque l'auditoire est composé d'acharnées adeptes et accrocs du RPN !!
SHARP PC-1211 + CE-121 + CE-122. | VIC 20 Commodore 128D + Printer P-803 + SD2iec. | TI-57 LCD | TI-74 BasiCalc | TI-92 II | HP-28S + HP82240A | HP-41C + (2 memory + stat + IR) modules. | HP Prime Wireless Graphing Calculator | HP-15C | CASIO fx-602p + FA-1. .Sommaire des M.P.O.. . Sommaire du P.C.T.M. .

Répondre

Revenir vers « Tous les Pockets »