Ca c'est bien que l'opérateur d'addition '+' ne fasse plus exception !
Bon, tout cela m'a fait parcourir tout cet excellent MPO et je trouve qu'il n'y a pas assez de codes en RPN.
J'ai donc sorti mon HP-15C et avec bien du mal, voici un petit bout de code qui trouve les solutions en quelques minutes :
Code : Tout sélectionner
┌──────────┐ ┌──────────┐ ┌──────────┐ ┌──────────┐ ┌──────────┐ ┌──────────┐
f A 21.4s│0. │ 1.8s │1. │ 13.4s │153. │ 38.2s │370. │ 1.8s │371. │ 6.3s │407. │1'35.5s
└──────────┘ └──────────┘ └──────────┘ └──────────┘ └──────────┘ └──────────┘
L'algorithme est celui que j'ai posté plus haut pour SHARP PC-1211 qui précalcule les sixièmes (10.d-d^3)/6
Les LBL correspondent d'ailleurs dans leur fonctionnement aux lignes du code BASIC. Sauf GSB 9 qui est en fait un sous-programme pour l'affichage des solutions.
Code : Tout sélectionner
000- 020- 0 0 ┙041- 43 20 g x=0? │061- 8 8 │081-45,40,24 RCL+(i) │
001-42,21,11 f LBL A ┑021-42,21, 2 f LBL 2 ╕042-43, 5, 0 g CF 0 │062-45,40,.5 RCL+.5 │082- 44 .4 STO .4 │
002- 42 34 f CLR REG│022- 44 .2 STO .2 │043- 1 1 │063- 45 .2 RCL .2 │083- 1 1 │
003- 1 1 │023- 44 25 STO I │044- 48 . │064-43,30, 9 g x≥y? │084-45,30,.5 RCL-.5 │
004- 0 0 │024- 45 .4 RCl .4 │045- 5 5 │065- 22 4 GTO 4 ┿085- 44 .5 STO .5 │
005- 44 .0 STO .0 │025-45,40,24 RCL+(i)│046- 20 x │066- 2 2 │086- 22 2 GTO 2 ╛
006- 9 9 │026- 43 44 g INT │047-45,30,24 RCL-(i)│067 40 + │
007- 44 25 STO I │027- 43 36 g lastx │048-43,30, 6 g x≠y? │068- 22 2 GTO 2 ╛087-42,21, 9 f LBL 9 ╗
│028- 44 16 g ABS │049- 22 3 GTO 3 ┿ 088- 45 .1 RCL .1 ║
008-42,21, 1 f LBL 1 ┑029-43,30, 6 x≠y? │050- 45 .3 RCL .3 │069-42,21, 4 f LBL 4 ┑089-45,20,.0 RCL×.0 ║
009- 45 .0 RCL .0 │030- 22 3 GTO 3 ┿051- 32 9 GSB 9 ║070- 9 9 │090-45,40,.2 RCL+.2 ║
010-45,20,25 RCL×I │031- 48 . │052-43, 6, 0 g F? 0 │071- 45 .1 RCL .1 │091-45,20,.0 RCL×.0 ║
011- 45 25 RCL I │032- 3 3 │053- 22 3 GTO 3 ┿072-43,30, 9 g x≥y? │092- 40 + ║
012- 3 3 │033- 2 2 │054- 34 x<>y │073- 43 32 g RTN ╳093- 31 R/S ║
013- 14 y^x │034- 14 y^x │055- 1 1 │074- 1 1 │094- 43 32 g RTN ╝
014- 30 - │035- 2 2 │056- 32 9 GSB 9 ║075- 40 + │
015- 6 6 │036- 20 × │ │076- 44 .1 STO .1 │
016- 10 ÷ │037- 43 44 g INT │057-42,21, 3 f LBL 3 ┑077- 44 25 STO I │
017- 44 24 STO (i)│038-43, 4, 0 g SF 0 │058- 33 RDN │078- 1 1 │
018-42, 5,25 f DSE I │039- 44 .3 STO .3 │059-43,30, 4 g x≤0? │079- 5 5 │
019- 22 1 GTO 1 │040- 44 25 STO I │060- 22 4 GTO 4 ┿080- 20 × │
Registres:
R0 à R9 : valeurs des sixièmes B(d) calculées en début de programme pour chaque chiffre d.
R.0 : constante 10
R.1 : a = chiffre des centaines
R.2 : b = chiffre des dizaines
R.3 : c = chiffre des unités
R.4 : z = sixième pour les centaine A(a) = 15a+B(a)
R.5 : y = parité de a et b 0/1 : pair/impair
Le registre d'indirection I est largement utilisé.
Code : Tout sélectionner
000-
001- LBL A
002- CLR REG 10 STO .0 9 STO I
008- LBL 1
009- RCL .0 RCL×I RCL I 3 y^x - 6 ÷ STO (i) DSE I GTO 1 0
021- LBL 2
022- STO .2 STO I RCl .4 RCL+(i) INT lastx ABS x≠y? GTO 3
031- .32 y^x 2 × INT SF 0 STO .3 STO I x=0? CF 0
043- 1.5 × RCL-(i) x≠y? GTO 3
050- RCL .3 GSB 9 F? 0 GTO 3
054- x<>y 1 GSB 9
057- LBL 3
058- RDN x≤0? GTO 4
061- 8 RCL+.5 RCL .2 x≥y? GTO 4
066- 2 + GTO 2
069- LBL 4
070- 9 RCL .1 x≥y? RTN
074- 1 + STO .1 STO I 15 × RCL+(i) STO .4 1 RCL-.5 STO .5 GTO 2
087- LBL 9
088- RCL .1 RCL×.0 RCL+.2 RCL×.0 + R/S RTN