MPO 102 : nombres ondulants carrés

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
pir2
Fonctionne à 9600 bauds
Fonctionne à 9600 bauds
Messages : 4647
Enregistré le : 31 oct. 2006 15:08
Localisation : 67310 Westhoffen
Contact :

Re: MPO 102 : nombres ondulants carrés

Message par pir2 »

J'avais commencé à jouer sur ma DM41X, mais vous avez été bien plus rapide et efficaces que moi, je n'ai d'ailleurs pas fini puisque la solution est maintenant sous mes yeux :) (pour une fois que je participe).

Merci gege pour le sujet, et aux autres pour les solutions :)
Image
Image
Avatar du membre
C.Ret
Fonctionne à 9600 bauds
Fonctionne à 9600 bauds
Messages : 3419
Enregistré le : 31 mai 2008 23:43
Localisation : N 49°22 E 6°10

Re: MPO 102 : nombres ondulants carrés

Message par C.Ret »

pir2 a écrit : 11 juil. 2021 09:54J'avais commencé à jouer sur ma DM41X, mais ...
Je suis justement en train d'essayer quelque chose sur mon HP-41C.
Dommage que tu ne publie rien, j'aurais bien volontiers comparés nos jeux :) d'instructions :D
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
gege
Fonctionne à 14400 bauds
Fonctionne à 14400 bauds
Messages : 7147
Enregistré le : 31 janv. 2008 14:24
Localisation : Banlieue Paârisienne
Contact :

Re: MPO 102 : nombres ondulants carrés

Message par gege »

Bonjour,
Il y a encore de la place pour d'autres machines !
Tiens sur la Lexibook GC2000 :

Code : Tout sélectionner

P0 :
Prog 3:Prog 4:Prog 5
P3 :
9->I:Lbl 1:I+1->I:10*I+Int(I/10)->J:0=/=Frac Rac I=>Goto 2:J¶Lbl 2:99>I=>Goto 1
P4 :
9->I:Lbl 1:I+1->I:101*I->J:0=/=Frac Rac I=>Goto 2:J¶Lbl 2:99>I=>Goto 1
P5 :
9->I:Lbl 1:I+1->I:1010*I+Int(I/10)->J:0=/=Frac Rac I=>Goto 2:J¶Lbl 2:99>I=>Goto 1
Avec ¶ étant le petit triangle d'affichage de résultat et =/= le symbole "différent".

On remarque que ce code pourrait être compacté en mettant tout dans une seule boucle, mais on n'a droit qu'à 111 octets par programme...
Et en plus la machine est buggée :
Lbl1:Prog 1:Goto 1
plante sur le Goto, apparemment l'appel de sous-programmes détruit les labels situés avant lui...
Sinon ça va très vite, genre 10 secondes (j'ai eu la flemme de retirer les Disp pour chronométrer, il faut taper EXE à chaque affichage).
G.E.
Avatar du membre
Schraf
Fonctionne à 1200 bauds
Fonctionne à 1200 bauds
Messages : 499
Enregistré le : 05 mars 2020 20:45
Contact :

Re: MPO 102 : nombres ondulants carrés

Message par Schraf »

Version Python pour les calculatrices actuelles :

Code : Tout sélectionner

for n in range(10,316):
 c = str(n * n)
 while len(c) < 6 : c += c[-2]
 if int(c) == int(c[-2:]) * 10101: print(n * n)
L'idée est de partir des carrés et de vérifier s'ils sont ondulants (comme C.Ret), mon "astuce" est de me ramener systématiquement à un nombre de 6 chiffres car alors il doit être égal aux 2 derniers chiffres * 10101. Pour ça on ajoute l'avant dernier chiffre à la fin : 323 -> 3232 -> 32323 etc.

Spoiler : https://my.numworks.com/python/schraf/nbmysteres
Avatar du membre
C.Ret
Fonctionne à 9600 bauds
Fonctionne à 9600 bauds
Messages : 3419
Enregistré le : 31 mai 2008 23:43
Localisation : N 49°22 E 6°10

Re: MPO 102 : nombres ondulants carrés

Message par C.Ret »

@gege

Interressant comme algorithme, surtout la manipulation que tu fais pour fabriquer la valeur J. Du coup, tu viens de me donner la clef pour mettre dans l'ordre les listes que créent mes codes !

Dommage que l'on ne puisse pas réduire le code sur cette Lexibook GC200 boguée, car sinon, mon nouvel algorithme donnerai le code suivant:

Code : Tout sélectionner

P0: 
    1.0101→F: Prog 1: Prog 1: Prog 1: Prog 1
P1: 
    11→A: Lbl 1: 1+A→A: Int(F*A)→N: 0=Frac √ N ⇒ N◢: 98>A ⇒ Goto 1: 10*F→F
Je n'ai pas de Lexibook, merci de corriger et de me signaler les éventuelles erreurs de syntaxe ou de retranscription de ce code improvisé.

Je n'ai toujours pas réparer mon imprimante SHARP CE-122 (j'attends des condos et un pont de diode), mais voici ce que ce nouvel algorithme donne sur un SHARP PC-1211. L'affichage est compatible avec les 16 caractères de l'imprimante (d'où le USING ):

Code : Tout sélectionner

1:USING "######":F=1.0101:GOSUB 2:GOSUB 2:GOSUB 2:GOSUB 2:END
2:FOR A=12TO 98:N=INT FA,R=√N:IF R=INT R PRINT N;"=";R;"^2"
3:NEXT A:F=10F:RETURN
C'est exactement l'algorithme du code ci-dessus pour la Lexibook.

L'astuce est d'utiliser un facteur fractionnaire contenant le motif 10101 afin de générer facilement (grâce au compteur FOR ab =12 TO 98 ) les nombres ondulants ababab. Leur mise à la bonne échelle se fait à l'aide d'une fonction INT en lieu et place de l'instruction MOD absente ici.
Ce facteur F évite les manipulations de variable I et J du code de gege.

Quand ma CE-122 daignera bien à nouveau s'alimenter convenablement et fonctionner, elle affichera la liste dans le bon ordre (contrairement aux code précédemment publiés dans mes précédents messages !


@Schraf


Oui, la transformation utilisée pour détecter les nombres ondulants en ajoutant les deux derniers afin d'avoir un séquence complète plus facile à tester est effectivement l'idée initiale de mon dernier code pour HP-71B. Mais, on composant le code, je me suis rendu compte qu'il était plus facile et plus direct de vérifier que le nombre à tester R$ est bien inscrit dans la séquence complète S$&S$&S$.
D'où l'utilisation du test POS(S$&S$&S$,R$)=1.

Je ne sais toujours pas ce qui est le plus efficace:
  • vérifier si les 316 carrés sont des nombres ondulants
    OU
  • trouver parmi les 400 nombres ondulants ceux qui sont un carré parfait
A priori, cela dépend surtout de l'efficacité des astuces de détection et de test de chaque machine !!

Code : Tout sélectionner

1:F=10.101:FOR I=1TO 3:FOR A=12TO 98:R=√INT FA:IF R=INT RPRINT RR,R
2:NEXT A:F=10F:NEXT I                                                    ( 59+32 octets dont 4 registres de 8bits)
Modifié en dernier par C.Ret le 26 juil. 2021 19:46, modifié 2 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.
Avatar du membre
Schraf
Fonctionne à 1200 bauds
Fonctionne à 1200 bauds
Messages : 499
Enregistré le : 05 mars 2020 20:45
Contact :

Re: MPO 102 : nombres ondulants carrés

Message par Schraf »

@C.Ret, je n'avais regardé en détail toutes les versions proposées, effectivement rien d'original avec ma version Python.

Pour le fun, transcription en APL de ta dernière version :

Code : Tout sélectionner

n/⍨0=1|.5*⍨n←,⌊(1.0101×10*⍳4)∘.×10+⍳88
A copier-coller ici : https://tryapl.org/

Ou encore en précision multiple Cliquez pour voir le résultat

Code : Tout sélectionner

⎕FR ← 1287 ⍝ Floating-point Representation: 128-bit decimal
MPO102 ← {n /⍨ 0 = 1|.5 *⍨ n ← ,⌊((100 ÷ 99) × 10 * ⍳⍵) ∘.× 10 + ⍳88}

Code : Tout sélectionner

      MPO102 4
121 484 676 69696
      MPO102 51
121 484 676 69696 4.141414141E52 7.878787879E52 7.97979798E52 8.787878788E52
      9.090909091E52
Avec 20 35046 47156 13109 09942 93668 ^ 2 = 414 14141 41414 14141 41414 14141 64188 01318 49613 82248 94224 qui n'est donc pas ondulant.
Avatar du membre
C.Ret
Fonctionne à 9600 bauds
Fonctionne à 9600 bauds
Messages : 3419
Enregistré le : 31 mai 2008 23:43
Localisation : N 49°22 E 6°10

Re: MPO 102 : nombres ondulants carrés

Message par C.Ret »

Schraf a écrit : 12 juil. 2021 09:08@C.Ret, je n'avais regardé en détail toutes les versions proposées, effectivement rien d'original avec ma version Python.
Au contraire, ce qui est important c'est que ta version a le mérite d'exister et sa structure m'a donnée l'idée pour un code cas-PPL qui va me permettre de rechercher d'éventuels nombres ondulant carrés beaucoup plus grands. je ne suis pas sûr qu'ils existent d'ailleurs, pas pris le temps de chercher une résolution formelle.

L'idée de la chasse aux grands ondulants carrés vient d'ailleurs des résultats de tes essais en APL ! Je suis par ailleurs complètement rouillé en APL, je pratique pas assez régulièrement.


Ensuite, ce doit être l'âge ou la bière, mais même sur mes antiquités je commence à être gâteux, je fais des MOP maintenant. C'est pas grave et je ne suis pas encore assez mûr pour l'HEPAD, le seul truc qui me gêne c'est que j'avais enclanché le mode TRACE de mon HP-82240A et le module IR a bien fonctionné, on comprend vite ce qui c'est passé en parcourant le ruban de papier
MPO102 HP-41C with or without printer.gif
MPO102 HP-41C with or without printer.gif (119.89 Kio) Vu 5239 fois
(j'ai flouté la fin du papier pour ne pas spoiler les résultats !):
Modifié en dernier par C.Ret le 14 juil. 2021 15:08, 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.
Avatar du membre
Schraf
Fonctionne à 1200 bauds
Fonctionne à 1200 bauds
Messages : 499
Enregistré le : 05 mars 2020 20:45
Contact :

Re: MPO 102 : nombres ondulants carrés

Message par Schraf »

@C.Ret, c'est pareil, même si je me force à faire quelques exos en APL, j'oublie vite et je reste avec des techniques de base.

D'ailleurs, pour ne pas être trop hors sujet (car j'ai utilisé une écriture APL actuelle), je mets également ci-dessous un programme qui tournerait sur un IBM 5110 de 1978 (un petit pocket de 25 kg si vous préférez :mrgreen: )

ibm5110MPO102.png
ibm5110MPO102.png (11.29 Kio) Vu 5222 fois
Je n'ai hélas pas cette machine en vrai, par contre j'ai trouvé cette bête là (Terminal Texas Instrument Silent 700 : https://fr.wikipedia.org/wiki/Silent_700)
silent700.jpg
silent700.jpg (63.06 Kio) Vu 5222 fois
Gilles59
Fonctionne à 2400 bauds
Fonctionne à 2400 bauds
Messages : 1602
Enregistré le : 27 oct. 2010 20:46

Re: MPO 102 : nombres ondulants carrés

Message par Gilles59 »

Hello... Bon faut que je me dérouille avec 602/603P.

Pour la question 1, réponse instantanée :

Code : Tout sélectionner

9 Min00
LBL0
 60606 + MR00 * 1010 = Min01
 √  FRAC x=0 GOTO9
DSZ GOTO0
LBL9 MR01
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
C.Ret
Fonctionne à 9600 bauds
Fonctionne à 9600 bauds
Messages : 3419
Enregistré le : 31 mai 2008 23:43
Localisation : N 49°22 E 6°10

Re: MPO 102 : nombres ondulants carrés

Message par C.Ret »

Ah! Zut tiens ! Voilà un code bien astucieux.

C'est en analysant ce code de Gilles59 que je me suis rendu compte que je n'avais pas tenu compte d'une information primordiale donné par l'énoncé initial de gégé :
Le plus grand nombre ondulant qui est aussi un carré connu comporte 5 chiffres et commence par 6.


Je dois donc pouvoir faire bien plus court pour répondre à la première question !

Code : Tout sélectionner

CAT MPO102     BASIC   53       07/26/21    21:09
              
10 N=60606 @ WHILE FP(SQRT(N)) @ N=N+1010 @ END WHILE @ DISP N;"=";SQRT(N);"^2"
Et pour gagner trois pas sur CASIO fx-602p, j'utilise le registre Alpha et je me dispense d'arrêter le programme lorsqu'il a trouvé la solution

Code : Tout sélectionner

P0      60606  MinF                    :006:     
  LBL0  1010  M+F  MRF  √  FRAC        :015:
        x=0  " arF "  Goto0            :020:
Une fois la solution affichée, l'utilisateur a le temps de la noter et d'arrêter mon code en pressant la touche HLT ou AC avant que sa fx-602p n'affiche autre chose !

Oui, c'est pas très sérieux comme mode d'utilisation, mais c'est le seul moyen que j'ai trouvé pour faire plus courts (et moins rapide) que le code de Gilles59. Je fais ce comme je peux...
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 « Tous les Pockets »