MPO 110 : une énigme doublement diabolique

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
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: MPO 110 : une énigme doublement diabolique

Message par C.Ret »

Si si c'est très clair, les cotés a et b (nomenclature identique à ma figure) ne peuvent être simultanément impairs car sinon leur produit serait alors lui aussi impair; Or ce produit doit être pair sinon la surface du triangle rectangle n'est pas entière.

Donc, si l'un des deux est un multiple impair de 5, l'autre sera pair (multiple de deux) et la surface sera alors un multiple de 10; ce qui n'est pas souhaitable car sa valeur ne peut se terminer par un zéro; tous ces chiffres ne seraient pas identiques.

Par contre, il pourrait arriver qu'un multiple de cinq pair puisse faire partie d'une solution car l'autre facteur pourrait être un nombre impair (par exemple un multiple de 3 ou de 7 etc...). Dans ce cas, le produit des deux facteurs serait donc bien pair et une surface entière serait possible. Dans le code, j'ai bien peur que les tests des lignes 5: et 10: écartent tous les multiples de cinq sans se soucier de leur parité. Par chance, cela n'a pas d'impacte sur la découvert de La Solution (et fait gagner quelques secondes).

Cela montre que la clef est bel et bien dans les multiplicités afin de garantir une surface entière.

Mon raisonnement fait l'inverse. Je pars de la surface S du triangle rectangle dont les valeurs envisagées sont vraiment très spéciales et cela me permet de déduire quelles longueurs de cotés sont possibles pour a et b.

On observant les surfaces envisagées:
11 22 33 44 55 66 77 88 99 sont pour la plupart des nombres très peu composés (11 est premier, 22=2×11, 33 = 3×11, 44=2²×11, 55=5×11, 66=2×3×11, 77=7×11, 88=2³×11, 99=3²×11 , huuu ) et ainsi de suite :
111 222 333 444 555 ...
1111 2222 3333 ....
11111 ...
Il n'y a pas tant de facteurs que cela ce qui pourrait être mis à profit pour une recherche plus rapide !!.
Il n'y a pas tant de facteurs que cela ce qui pourrait être mis à profit pour une recherche plus rapide !!.
MPO110 - Surfaces HomoMonoDigitales et Facteurs Premiers.gif (50.73 Kio) Vu 1791 fois
Par exemple, 11111 = 41*271, cela ne fait pas beaucoup de couples de longueurs (a,b) candidates !
C'est comme cela que j'arrive à seulement 342 triplets pythagoriciens envisagés jusqu'à La Solution.
L'idée sous-jacente est la même que pour le QDD 220313.

Je vais aller me coucher en méditant cela, l'idée d'Over_score d'écarter les couples (a,b) selon la parité de a et b pourrait encore diminuer l'effort nécessaire et raccourcissant un peu le chemin à parcourir.
Modifié en dernier par C.Ret le 05 juin 2022 09:03, 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
gege
Fonctionne à 14400 bauds
Fonctionne à 14400 bauds
Messages : 7141
Enregistré le : 31 janv. 2008 14:24
Localisation : Banlieue Paârisienne
Contact :

Re: MPO 110 : une énigme doublement diabolique

Message par gege »

Bonjour,
Purée vous êtes très forts !
Je pensais donner quelques indices mais cela semble inutile.
Démontrer qu'il n'y a qu'une solution semble compliqué et l'affirmation est probablement un peu bravache...

Peut-être qu'on peut partir des diviseurs des nombres de la forme 111....11 et du fait que les triplets pythagoriciens sont tous de la forme (m²-n², 2mn, m²+n²) ?

Mmmm faudrait que je m'y mette au lieu de soumettre des énigmes lues dans un livre...
Bravo en tout cas.
G.E.
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: MPO 110 : une énigme doublement diabolique

Message par C.Ret »

Oh! La boulette !

C'est tout moi ça ...

Je fais un premier programme sur mon HP-71B où pour chaque triplet pythagoriens { A,B,C} , je teste que B est un entier avant de prendre un peu de temps pour calculer C. L'idée est d'économiser le calcul de C = f( A,B ) lorsque A ou B ne conviennent pas. Notamment lorsque le B calculé à partir de A et de la surface S n'est pas un entier.

Peu convaincu par la pertinence de ma boucle de recherche générant les A, je décide alors de perfectionner considérablement mon code afin de ne produire que des A diviseurs de la surface S, ce qui fait que tous les B obtenus seront des entiers. C'est le BUT de presque six lignes supplémentaires remplies d'instructions et de commandes et surtout B=2*S/A avec A divisant S !!


Mais, je laisse le test vérifiant que les B calculés sont des entiers ! C'est bête.
Je m'en rends compte seulement ce soir. J'ai un peu modifié mon algorithme.

Pour chaque surface homomonodigitalogique S= sss...sss , je cherche les couples d'entiers (A,B) avec A<B et A indifféremment pair ou impair mais B pair qui divisent respectivement S et 2*S. (A divise S) et B divise (2*S)

Parmi ces couples d'entiers diviseurs de S et 2S, certains correspondent à la base et de la hauteur d'un triangle rectangle de surface S.
A condition évidemment qu'il forment avec la longueur de l'hypoténuse un triplet pythagoricien c'est à dire que A²+B² = C² avec C entier.

Bon, sur le HP-71B, il n'y a que 12 chiffres significatifs, il faut faire attention à ne pas obtenir des C entiers par arrondi...

Avec les nouvelles conditions sur les entiers A et B, je ne teste maintenant plus que 340 triplets candidats avant de trouver le triplet doublement diabolique. Et sans les tests inutiles de la précédente version, mon code mets maintenant 78.74" (1'18"74)

Je donne l'organigramme ci-dessous :
La partie (Add F) est sur la figure suivante
La partie (Add F) est sur la figure suivante
MPO110 - organigram HP-71B (part.1).png (56.4 Kio) Vu 1780 fois
La partie Add F est un sous-programme
La partie Add F est un sous-programme
MPO110 - organigram HP-71B (part.2).png (60.89 Kio) Vu 1780 fois

Code : Tout sélectionner

10 DESTROY ALL @ T=TIME @ INTEGER D(99)
 @ LOOP
12    W=10*W+1
 @    FOR M=1 TO 9
 @       S=M*W @ R=SQR(S) @ F=1 @ P=1 @ N=0 @ D(1)=1
14       WHILE F
 @          GOSUB 20 @ P=P*F @ F=PRIM(S/P)
 @       END WHILE
18       F=S/P @ GOSUB 20
 @    NEXT M
 @ END LOOP
//--------------------------------------------- Add F
20 IF L=F THEN I=J @ J=N
          ELSE I=0 @ J=N+(N=0)
22 WHILE I<J
 @    I=I+1 @ D(N+1)=F*D(I)
 @    IF RES<R THEN N=N+1 @ GOSUB 30
24 END WHILE @ L=F @ RETURN
//-------------------------------------------- Pythagore ? 
30 A=D(N) @ B=2*S/A @ C=SQR(A*A+B*B) @ IF B=C OR FP(C) THEN RETURN
32 BEEP @ DISP A;B;C;S;TIME-T @ PAUSE 
Modifié en dernier par C.Ret le 05 juin 2022 17:18, modifié 5 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
bernouilli92
Fonctionne à 14400 bauds
Fonctionne à 14400 bauds
Messages : 5226
Enregistré le : 21 nov. 2012 13:03
Localisation : Ile de France

Re: MPO 110 : une énigme doublement diabolique

Message par bernouilli92 »

Voici ma solution pour hp48 qui part de la surface pour trouver x et y :

Code : Tout sélectionner

« 
  2 6
  FOR I
    I ALOG 1 - 9 / → E
    « 1 9
      FOR I I E * 2 * → S
        « 2 S √
          FOR X 
            S X /
            IF FP NOT
            THEN 
              X SQ S X / SQ + √
              IF FP NOT
              THEN 
                X S X / 2 →LIST
              END
            END
          NEXT
        »
      NEXT
    »
  NEXT
»
Il donne le résultat en quelques secondes sur un émulateur et en plusieurs minutes sur une vraie hp48.

Je teste x à partir de 2 seulement pour éviter les problèmes où x*x dépasse les capacités de la machine et cela donne de faux positifs.
HP, Casio, Sharp, Psion, quelques TI et divers autres
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: MPO 110 : une énigme doublement diabolique

Message par C.Ret »

bernouilli92 a écrit : 03 juin 2022 11:47Je teste x à partir de 2 seulement pour éviter les problèmes où x*x dépasse les capacités de la machine et cela donne de faux positifs.
Bien, mais pour les tests de divisibilité, j'aurais opté pour une instruction MOD en espérant que ce soit un peu plus rapide qu'une division ?

Bonne idée de ne pas commencer à 1. Je vais revoir un peu aussi ma stratégie.
Je crois que je vais prendre A impair et commencer à A=3 avec B pair comme préalablement.

Oui, mais c'est un peu bête ça, il y a clairement des surfaces comme 22222 ou 44444 qui ne sont pas des multiples de 3.
Alors, pourquoi ne pas commencer en fonction du chiffre qui se répète dans la surface ??
gege a écrit : 01 juin 2022 23:44 Peut-être qu'on peut partir des diviseurs des nombres de la forme 111....11 et du fait que les triplets pythagoriciens sont tous de la forme (m²-n², 2mn, m²+n²) ?
Huhuh uhuh , voilà une idée qui est bonne. Au lieu de partir de chaque surface homomonodigitale, pourquoi ne pas générer des triplets pythagoriciens { a b c }, en déduire la surface S = a.b/2 du triangle rectangle correspondant (même que c n'a pas besoin d'être calculé :ugeek: ) et s'arrêter sur les surfaces monohomodigitale S = ss...sss.

Car l'air de rien, il y a pas mal de surfaces possibles et les tester toutes dans l'ordre séquentiel 1,2,3,...9,11,22,33,...,88,99,111,222,333,... n'est peut-être pas la solution la plus simple.

C'est peut-être plus lent à trouver, mais bien plus simple à programmer (n'oublions pas qu'il s'agit d'un MPO et que le week-end va être long et pluvieux...)

Et l'accélérateur serait de choisir les nombres générateurs n et m de façon à maximiser les chance de tomber sur une surface digimonohomotale !
Voyons, voyons....
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
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: MPO 110 : une énigme doublement diabolique

Message par C.Ret »

La proposition de gege suggérant d'énumérer les triplets pythagoricien primitifs à l'aide de deux entiers premiers entre eux a porté ses fruits !


Je trouve maintenant La Solution doublement diabolique en 48.19" sur mon véloce HP-71B avec un programme qui ne fait plus que 157 octets.

Les triplets pythagoriciens primitifs sont énumérés à l'aide de deux entiers p et q de parité opposée et premiers entre-eux, avec p>q.

La primalité réciproque de p et q est vérifiée à l'aide de leur PGCD.

Si PGCD(p,q)=1 alors le triplet { p²-q² , 2pq , p²+q² } est pythagoricien primitif.
Je calcule alors la surface du triangle rectangle correspondant S=p.q.(p²-q²) et j'arrête le programme lorsque S est homomonodigitale.
C'est à dire lorsque FN H(S)=0 avec FN H la fonction utilisateur définie par FN H(n) = n MOD (10*10^EXPONENT(n)-1)/9

La solution doublement diabolique se trouve au 37 26
336 triplets sont générés dont 279 sont pythagoriciens occasionnant le calcul d'autant de surfaces.

Je vous donne le listing de cet infernal algorithme:

Code : Tout sélectionner

CAT MPO110   BASIC 157 06/04/22 07:03
10 T=TIME @ DEF FNH(N)=MOD(N,(10*10^EXPONENT(N)-1)/9)=0
20 FOR P=3 TO INF @ FOR Q=1+MOD(P,2) TO P-1 STEP 2 @ IF PGCD(P,Q)>1 THEN 40
30 S=P*Q*(P*P-Q*Q) @ IF FNH(S) THEN BEEP @ DISP P*P-Q*Q;2*P*Q;P*P+Q*Q;S;TIME-T @ PAUSE
40 NEXT Q @ NEXT P

TIME renvoie, au centième près, le nombre de secondes écoulée depuis minuit.
MOD(a,b) fonction module qui renvoie le reste de la division de a par b.
EXPONENT(x) renvoie l'exposant de son argument x normalisé.
INF renvoie la représentation machine de l'infini positif. Rappelons ici que l'HP-71B est historiquement la première machine HP utilisant pleinement et nativement le format numérique IEEE 854-1987.
PGCD(a,b,...,j) (version JPC-ROM E) ou GCD (version JPC-ROM X) renvoie le plus grand diviseur commun de deux ou plusieurs nombres.
PAUSE interrompt l'exécution d'un programme en rendant la main à l'opérateur qui peut utiliser l'HP-71B dans l'environnement ainsi crée puis reprendre l'exécution du code par CONT ou revenir à l'environnement de base par STOP ou END ALL.

Comme vous pouvez le constater, il s'agit du même algorithme que celui du code présenté ci-dessus par Over_Score
A la différence, que je ne retire pas les multiples de 5 et que je prends soin de toujours avoir p et q de parité opposée.

Voici, donc afin de comparer les performances , mon algorithme implémenté pour un SHARP PC-1360, comme le SHARP PC-E220, il n'y a pas de fonction MOD ou utilisateur, encore moins d'instruction GCD ou PGCD ou autre. Il faut tout faire "à la main".
Si comme Over_Score, je fais tout faire par mon pauvre PC-1360, il suit bravement l'algorithme et trouve La Solution Doublement Diabolique au bout de 5'17"32.

Il passe la plus clair de son temps à calculer les PGCD par une boucle réalisant l'algorithme d'Euclide.

J'ai donc court-circuité le calcul des PGCD, je ne vérifie plus que p et q sont premiers entre-eux, je vérifie juste que le triplet { A , B , C } est pythagoricien en vérifiant A²+B²=C² directement.

Code : Tout sélectionner

1:FOR P=3 TO 99: FOR Q=1+(P AND 1) TO P-1 STEP 2
3:A=P*P-Q*Q,B=2*Q*P,C=P*P+Q*Q:IF A*A+B*B<>C*C NEXT Q: NEXT P
5:S=A*B/2,W=(10*10^ INT LOG S-1)/9:IF S-W* INT (S/W) NEXT Q: NEXT P
7:WAIT 0: PRINT A;B;C: PRINT "S=",S: BEEP 1
Ce code de 147 octets (et 7 registres) met 3'48"97 sur mon PC-1360 pour trouver La SDD.

Doublets p q générés:

Code : Tout sélectionner

3-2,4-1,4-3,5*2,5*4,6-1,6*5,7-2,7-4,7-6,8-1,8-3,8-5,8-7,9-2,9-4,9-8,10*1,10*3,10*7,10*9,11-2,11-4,11-6,11-8,11*10,12-1,12-5,12-7,12-11,13-2,
13-4,13-6,13-8,13*10,13-12,14-1,14-3,14*5,14-9,14-11,14-13,15*2,15-4,15*8,15*14,16-1,16-3,16*5,16-7,16-9,16-11,16-13,16*15,17-2,17-4,17-6,
17-8,17*10,17-12,17-14,17-16,18-1,18*5,18-7,18-11,18-13,18-17,19-2,19-4,19-6,19-8,19*10,19-12,19-14,19-16,19-18,20*1,20*3,20*7,20*9,20*11,20*13,
20*17,20*19,21-2,21-4,21-8,21*10,21-16,21*20,22-1,22-3,22*5,22-7,22-9,22-13,22-15,22-17,22-19,22-21,23-2,23-4,23-6,23-8,23*10,23-12,23-14,
23-16,23-18,23*20,23-22,24-1,24*5,24-7,24-11,24-13,24-17,24-19,24-23,25*2,25*4,25*6,25*8,25*12,25*14,25*16,25*18,25*22,25*24,26-1,26-3,26*5,
26-7,26-9,26-11,26*15,26-17,26-19,26-21,26-23,26*25,27-2,27-4,27-6,27-8,27*10,27-14,27-16,27*20,27-22,27-26,28-1,28-3,28-5,28-9,28-11,28-13,
28*15,28-17,28-19,28-23,28*25,28-27,29-2,29-4,29-6,29-8,29*10,29-12,29-14,29-16,29-18,29*20,29-22,29-24,29-6,29-28,30*1,30*7,30*11,30*13,
30*17,30*19,30*23,30*29,31-2,31-4,31-6,31-8,31*10,31-12,31-14,31-16,31-18,31*20,31-22,31-24,31-26,31-28,31*30,32-1,32-3,32*5,32-7,32-9,32-11,
32-13,32*15,32-17,32-19,32-21,32-23,32-25,32-27,32-29,32-31,33-2,33-4,33-8,33*10,33-14,33-16,33*20,33-26,33-28,33-32,34-1,34-3,34-5,34-7,34-9,
34-11,34-13,34-15,34-19,34-21,34-23,34-25,34-27,34-29,34-31,34-33,35*2,35*4,35*6,35*8,35*12,35*16,35*18,35*22,35*24,35*26,35*32,35*34,36-1,
36*5,36-7,36-11,36-13,36-17,36-19,36-23,36*25,36-29,36-31,36*35,37-2,37-4,37-6,37-8,37*10,37-12,37-14,37-16,37-18,37*20,37-22,37-24,37-26.
Les doublets marqués d'une astérisque * sont ceux ayant un multiple de 5. L'idée est d'évaluer le gain à retirer ceux-ci, comme P et Q sont de parité opposée, on sait maintenant qu'il ne formeront pas de solution.

D'où mon code le plus court (84 octets+6 registres) pour PC-1211:

Code : Tout sélectionner

1:W=10W+1:FOR M=1TO 9:S=MW:FOR A=MTO √S:B=2S/A:IF B=INT BLET C=√(AA+BB:IF B<CIF C=INT CBEEP 1:PRINT A;B;C;S
2:NEXT A:NEXT M:GOTO 1
CLEAR (enter) RUN (enter) sonne et affiche la solution au bout de 1 heure, 12 minutes et environ 30 secondes.

Temps de recherche à comparer avec le code suivant qui n'est que 48% plus long, mais permet d'obtenir La Solution Doublement Diabolique en seulement 12'57"98 sur la même machine (presque une heure de gagnée !):

Code : Tout sélectionner

1:I=1:FOR P=3TO 99:I=3-I:FOR Q=ITO P-1STEP 2:A=PP-QQ,B=2PQ,C=PP+QQ:IF AA+BB<>CCNEXT Q:NEXT P
3:S=AB/2,W=(10*10^INT LOG S-1)/9:IF S<>W*INT (S/WNEXT Q:NEXT P
5:BEEP 1:PRINT A;B;C;S
(125 octets+8 registres)

ce qui prouve que lalgorithme d'Over_Score est le bon :)
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
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: MPO 110 : une énigme doublement diabolique

Message par C.Ret »

gege a écrit : 31 mai 2022 21:44Quelle est cette surface ?
En composant un code très élégant et complet pour Ti58C, je me sui rendu compte que gege ne demande que la surface.
Conclusion, le programme complet qui fait en totalité une centaine de pas et utilise six registres, peut être réduit à uniquement 63 pas (soit 63 octets) en utilisant seulement trois registres.

Evidemment, les autres parties du programme vous seront utiles si vous souhaitez voir s'afficher les longueurs a, b et c des trois cotés du triangle (respectivement labels A B et C) ou afficher à nouveau la surface doublement diabolique (Label E).

Réduit à 63 pas, le programme (le label D du lot complet) se contente de chercher La Solution Doublement Diabolique. On entre l'indice de recherche 1 pour obtenir en moins de 3" la solution signalée par bernouilli92 S=6. (Une pression sur A B puis C affichera le triplet pythagoricien { 3 4 5 } )
L'indice de recherche 2 puis D conduira au bout de 7'06" à l'affichage de la surface dont on ne peut indiquer, prononcer, écrire ou recopier la valeur au risque d'être à jamais bani…
Un indice supérieur puis D conduira au même trépas; ce qui est bien pratique pour reprendre une recherche prématurément interrompue sans avoir à recommencer depuis le début...

Code : Tout sélectionner

000 76 14       Lbl D         026 65            ×           044 43 00        RCL 0        064 76 15       Lbl E     
002 42 04        STO 4        027 53            (           046 28           log          066 43 00        RCL 0
004 29           C.t          028 43 04        RCL 4        047 59           Int          068 91           R/S 
005 76 19       Lbl D'        030 33            x²          048 22 28        10^x
007 69 24        OP 24        031 75            -           050 75            -
009 43 04        RCL 4        032 43 05        RCL 5        051 01            1
011 66           Pause        034 33            x²          052 54            )
012 42 05        STO 5        035 95            =           053 55            ÷ 
014 76 10       Lbl E'        036 42 00        STO 0        054 09            9
016 22 97 05 19  INV Dsz 5 D' 038 55            ÷           055 95            =
020 25           CLR          039 53            (           056 22 59        Frac
021 43 04        RCL 4        040 53            (           058 67 15        x≠t? E 
023 65            ×           041 01 00        10           060 69 35        OP 35
024 43 05        RCL 5        043 65            ×           062 61 10        GTO E'
Listing des programmes Lbl D (réponse à ce MPO - 63 pas - 3 registres) et Lbl E (Enfer et damnations affichant La Solution doublement Diabolique à partir de son registre en 5 pas)

J'ai longtemps cherché un moyen pour que le compteur q de boucle interne (RCL 5 ci-dessus) soit d'une parité différente du compteur p de la boucle externe (RCL 4 ci-dessus).
J'ai échafaudé des systèmes fort complexes, j'ai utilisé un registre dédié (comme la variable I de mon code pour PC-1211), j'ai cherché milles et une astuces, les unes plus tarabiscotés que les autres… sans trouver quelque chose d'approprié à ma Ti58C…
...
Puis dans la nuit, Satan en personne m'est apparu et il s'est moqué de moi en me traitant de gros nigaud et d'incapable. Il s'est vanté de connaitre une solution si simple, si petite et si pure qu'elle serait optimale et permettrait d'écrire le meilleur code ...
Et qu'il était persuadé que jamais je ne saurai la trouver, ... trop bête, trop aveugle ou trop mauvais... pas assez malin... Lui par contre la connaissait ...

J'ai donc vendu mon âme et maintenant je suis damné et je suis condamné à d'atroces souffrances et à la honte de ne pas y avoir pensé plus tôt et par moi-même. J'ai signé le Parchemin Maudit et Satan a rit très fort tout en me donnant la solution :
« ... quelque soit la parité de p, qu'il soit ange ou démon, pair ou impair, bique ou bouc, peu importe !! ... à coup sûr (p-1) sera de l'autre bord ... »

.. ahhh ahhhh : C'était si simple ! Pourquoi me suis-je damné pour si peu !!

Je me vois donc maintenant contraint de vous présenter le code que nous avons élaboré, code pour SHARP PC-1211 qui est lui aussi doublement diabolique car à la fois plus court (2 lignes,76 octets,4 registres) et plus rapide (8'53")

Code : Tout sélectionner

1:FOR P=3TO 99:FOR Q=P-1TO 2STEP -2:S=PQ*(PP-QQ,W=(10*10^INT LOG S-1)/9:IF S<>W*INT(S/WNEXT Q:NEXT P
2:BEEP 1:PRINT S
Evidemment, comme son homologue pour Ti-58c, il ne calcule pas les longueurs des cotés du triangle. Si d'aventure ces valeurs vous intéressent, n'hésitez pas à me contacter personnellement en votre âme et conscience. Ou, à défaut tous autres suppôts de Satan, qui saura vous renseigner. Nous nous ferons un plaisir de vous indiquer comment obtenir ces valeurs en un minium de sacrifices et d'efforts (munissez-vous de votre calculatrice tout de même)... :twisted:
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 »