LCEB

# Le Compte est Bon for the HP-41

Overview

1°)  Progam#1
2°)  M-Code Routine
3°)  Program#2

-"Le compte est bon" is a French TV game:
-6 numbers ( n1 , n2 , n3 , n4 , n5 , n6  ) are choosen at random among the 24 integers:

1 - 1 - 2 - 2 - 3 - 3 - 4 - 4 - 5 - 5 - 6 - 6 - 7 - 7 - 8 - 8 - 9 - 9 - 10 - 10 - 25 - 50 - 75 - 100  ( for instance  1 - 9 - 8 - 4 - 3 - 100 )

and you have to find another random number N ( between 100 and 999 inclusive )  , say  N = 629 , using the 6 numbers above ( or less )
and the 4 basic operations: addition, subtraction, multiplication, division.

-For example, one solution of the above problem is:

100 - 1 = 99
99 / 3 = 33
33 + 4 = 37
9 + 8 = 17
37 * 17 = 629

-A solution has - at most - 5 operations and the same number cannot be used several times.
-More exactly, you can use "ni" twice or less if there are 2 "ni"s
and   you can use "ni" once or less if there is  1 "ni"

-The following programs can help you to find one or several solution(s) to this problem.

1°)  Program#1

Data Registers:      • R01 = n1   •  R02 = n2  ..........   •  R06 = n6     •  R07 = N   ( these 7 registers are to be initialized before executing "LCEB" )
R00 & R08 thru R17: temp

Flags:  F05-F06-F07
Subroutines: /

-Lines 01 to 39 and 127 to 356 search a solution where the result of an operation is immediately used in the next one.
-If - at this step - no solution is found, lines 40 thru 124 add a few other combinations.
-The append character is denoted  ~

 01  LBL "LCEB"   02  6   03  STO 12   04  5   05  STO 13                   06  STO 16   07  4   08  STO 14   09  STO 17   10  3   11  STO 00    12  STO 15   13  LBL 01    14  RCL 07    15  RCL 07   16  RCL 01   17  /   18  STO 08   19  CF 05   20  X#Y?   21  FRC   22  X=0?   23  XEQ 02   24  RCL 07   25  RCL 01    26  -   27  STO 08   28  SF 05   29  XEQ 02   30  RCL 07   31  RCL 01   32  +   33  STO 08   34  XEQ 02   35  RCL 01   36  X<> IND 12   37  STO 01   38  DSE 12   39  GTO 01   40  6.001   41  STO 12   42  STO 13   43  LBL 12   44  RCL 07   45  RCL 01   46  RCL 02   47  +   48  STO 08   49  /   50  STO 09   51  CF 06   52  FRC   53  X=0?   54  XEQ 03   55  RCL 07   56  RCL 07   57  RCL 01   58  RCL 02   59  X=Y?   60  GTO 00 61  -   62  ABS   63  STO 08   64  /   65  STO 09                   66  X#Y?   67  FRC   68  X=0?   69  XEQ 03   70  LBL 00   71  RCL 01    72  RCL 02   73  XY   75  STO Z   76  *   77  X=Y?   78  GTO 00   79  STO 08   80  RCL 07   81  -   82  ABS   83  STO 09   84  SF 06   85  XEQ 03   86  RCL 07    87  RCL 08   88  +   89  STO 09   90  XEQ 03   91  RCL 07   92  RCL 01   93  RCL 02   94  X>Y?   95  X<>Y   96  /   97  STO 08   98  -   99  STO 09 100  FRC 101  X#0? 102  GTO 00 103  XEQ 03 104  RCL 07 105  RCL 08 106  + 107  STO 09 108  XEQ 03 109  LBL 00 110  RCL 02 111  X<> IND 13 112  STO 02 113  DSE 13 114  GTO 12 115  RCL 12 116  INT 117  2 118  - 119  ST+ 13 120  RCL 01 121  X<> IND 12 122  STO 01 123  DSE 12 124  GTO 12 125"Nb NOT FOUND" 126  PROMPT 127  LBL 02 128  RCL 02                 129  RCL 08 130  X=Y? 131  GTO 10 132  XY 134  STO Z 135  X<>Y 136  / 137  STO 09 138  CF 06 139  X#Y? 140  FRC  141  X=0?  142  XEQ 03 143  FS? 05 144  GTO 00 145  RCL 08 146  RCL 02 147  - 148  ABS  149  STO 09 150  SF 06 151  XEQ 03 152  RCL 08 153  RCL 02 154  + 155  STO 09 156  XEQ 03 157  LBL 00 158  RCL 02 159  X<> 03 160  X<> 04 161  X<> 05 162  X<> 06 163  STO 02 164  DSE 13 165  GTO 02 166  RCL 16 167  STO 13 168  RTN 169  LBL 03 170  RCL 03 171  RCL 09 172  X=Y? 173  GTO 09 174  XY 176  STO Z 177  X<>Y 178  / 179  STO 10 180  CF 07 181  X#Y? 182  FRC 183  X=0? 184  XEQ 04 185  FS? 06 186  GTO 00 187  RCL 09                 188  RCL 03  189  - 190  ABS 191  STO 10 192  SF 07 193  XEQ 04 194  RCL 09 195  RCL 03 196  + 197  STO 10 198  XEQ 04 199  LBL 00 200  RCL 03 201  X<> 04 202  X<> 05 203  X<> 06 204  STO 03 205  DSE 14 206  GTO 03  207  RCL 17 208  STO 14 209  RTN 210  LBL 04 211  RCL 04 212  RCL 10 213  X=Y? 214  GTO 08 215  X>Y? 216  X<>Y 217  ENTER^ 218  SIGN 219  X=Y? 220  GTO 00  221  RDN 222  / 223  STO 11 224  FRC 225  X=0? 226  XEQ 05 227  RCL 04 228  RCL 10 229  * 230  STO 11 231  XEQ 05 232  LBL 00 233  FS? 07 234  GTO 00 235  RCL 10 236  RCL 04 237  - 238  ABS 239  STO 11 240  XEQ 05 241  RCL 04 242  RCL 10 243  + 244  STO 11 245  XEQ 05 246  LBL 00 247  RCL 04                 248  X<> 05 249  X<> 06 250  STO 04 251  DSE 15 252  GTO 04 253  RCL 00 254  STO 15 255  RTN 256  LBL 05 257  RCL 06 258  RCL 11 259  X=Y? 260  GTO 07 261  RCL 05 262  - 263  X=0? 264  GTO 07 265  ABS 266  RCL 06  267  X=Y? 268  GTO 06 269  RCL 11 270  RCL 05 271  + 272  X=Y? 273  GTO 06 274  RCL 11 275  RCL 05 276  X>Y? 277  X<>Y 278  / 279  RCL 06 280  X=Y? 281  GTO 06 282  RCL 11 283  RCL 05 284  * 285  X#Y? 286  RTN 287  LBL 06 288  RCL 11 289  RCL 05 290  RCL 06 291  XEQ 00 292  LBL 07 293  RCL 10 294  RCL 04 295  RCL 11 296  XEQ 00 297  LBL 08 298  RCL 09 299  RCL 03 300  RCL 10 301  XEQ 00 302  LBL 09 303  RCL 12                 304  FRC 305  X#0? 306  GTO 11 307  RCL 08  308  RCL 02 309  RCL 09 310  XEQ 00 311  LBL 10 312  RCL 07 313  RCL 01 314  RCL 08 315  GTO 00 316  LBL 11 317  RCL 08 318  RCL 01 319  RCL 02 320  XEQ 00 321  RCL 07 322  RCL 08 323  RCL 09 324  LBL 00  325  FIX 0 326  CF 29 327  XY 329  STO T 330  X<>Y 331  CLA 332  ARCL Y 333  + 334  X=Y? 335  "~+"  336  X<> T 337  LASTX 338  - 339  X=Y? 340  "~-"  341  X<> T 342  LASTX 343  ST/ T 344  * 345  X=Y? 346  "~*"  347  X<> T 348  X=Y? 349  "~/"  350  ARCL L 351  "~="  352  ARCL Y 353  FIX 4 354  SF 29 355  PROMPT 356  END

( 513 bytes / SIZE 018 )

 STACK INPUTS OUTPUTS X / /

Example1:      75 - 100 - 25 - 3 - 9 - 6  //  758             Store these 7 numbers into R01 thru R07  respectively

XEQ "LCEB"  >>>>     "75+3=78"       ( in 1 minute )
R/S        "78/6=13"
R/S        "100-13=87"
R/S        "87*9=783"
R/S        "783-25=758"

Example2:     4 - 7 - 50 - 1 - 4 - 100  //  903                4  STO 01  .........................  903  STO 07

XEQ "LCEB"   >>>>   "100/4=25"        ( in 4 minutes )
R/S      "25-4=21"
R/S      "50-7=43"
R/S      43*21=903"

Example3:     3 - 7 - 7 - 50 - 1 - 8  //  947                   3  STO 01  ............................  947  STO 07

-However, there is a solution ( see below )

Remarks:

-Press   XEQ 10  to display again a solution in 1 operation
-Press   XEQ 09  to display again a solution in 2 operations
-Press   XEQ 08  to display again a solution in 3 operations
-Press   XEQ 07  to display again a solution in 4 operations
-Press   XEQ 06  to display again a solution in 5 operations

-In order to decrease the execution time, flags F05 F06 F07 are used to avoid 2 successive additions and/or subtractions
in the beginning of the search ( i-e at the end of the solutions ).
-Additions and subtractions are only computed after a division or a multiplication and a very simple result like  100 + 7 = 107 ,  107 + 25 = 132  cannot be found!
( delete lines 157 - 144 - 143 - 28 - 19  to allow this kind of solutions )
-Moreover, the multiplication doesn't appear in the beginning of the tree ( so, a solution never ends by a division )
and many other solutions are skipped.

-Despite all these limitations, this program can solve about 90% of the soluble problems! ( only 80% if you delete lines 40 to 124 )
-Execution times are usually a few minutes ( less than 20 minutes apparently )

-Improvements are easy to make: delete all the lines involving flags F05 F06 F07 and a solution with 5 additions is now possible.
-Unfortunately, execution time can reach several hours... unless you are using an emulator like V41 in turbo mode,
( the several hours are reduced to less than 1 minute! )

-On the other hand, you can also add other operations:
for instance, add  RCL 07  RCL 01  *  STO 08  XEQ 02  after line 23  and try example 3 again

-Your HP-41 now yields in 48 seconds:

"50+8=58"
R/S      "58*7=406"
R/S      "406*7=2842"
R/S      "2842-1=2841"
R/S      "2841/3=947"

-There are 2 minor defects:
1-The solution in zero operation:  100 = 100  cannot be found, but a calculator is not absolutely necessary to find this result!
2-The HP-41 displays "2+*2=4" instead of "2+2=4" or "2*2=4"
-Of course, this program can use other integers:
-For instance, with   32 - 41 - 55 - 48 - 49 - 67  //  2007

XEQ "LCEB"  >>>>   "49-41=8"
R/S     "48/8=6"
R/S     "67-6=61"
R/S     "61*32=1952"
R/S     "1952+55=2007"

2°)  M-Code Routine

-This long routine does the most part of the job.
-All the improvements mentionned above are taken into account.

-Its name is the header of your ROM, located in block F.
-If you change its place, change all the jumps written in red too...

-This routine must be used with care:
-Synthetic register a is used.
-The 7 numbers must be integers that are stored in registers  X Y Z T L M N.
-Use it with the 2nd program listed in paragraph 3.

-Moreover, it can only be stopped by pressing ENTER^  ON on a "new" HP-41,
-So, avoid using it with older HP-41... ( unless you add the 3 words suggested hereunder before LBL 04,
but in this case, change the jumps too )

08D  "M"                   The name doesn't matter
00F   "O"
012   "R"
00E  "N"
017  "W"
00F  "O"
019  "Y"
00D  "M"
2A0  SETDEC          the 1st executable word is at the address F08C
130  LDI S&X
006  006
070  N=C ALL
270  RAMSLCT
249  ?NCXQ            ?NCXQ         to shift the digits in the right
3C8  F292                  format            part of the mantissa field
2F0  WRITDATA
0B0  C=N ALL
266  C=C-1 S&X
3C3  JNC-08
04E  C=0
01C  PT=3
090  LD@PT- 3
070  N=C ALL
2DC  PT=13
150  LD@PT- 5
110  LD@PT- 4
0D0  LD@PT- 3
130  LDI S&X
006  006
158  M=C ALL
10E  A=C ALL
0B0  C=N ALL
0EE  B<>C ALL
04E  C=0 ALL
270  RAMSLCT
304  CLRF 1
204  CLRF 2
004  CLRF 3
31A  ?A<C M
017  JC+02
0BA  A<>C M
33A  ?A<B M
077  JC+0Eh
2ED  ?NCXQ             quotient-remainder
3C8  F2BB                 subroutine
35A  ?A#0 M
1B3  JNC+36h
308  SETF 1
04E  C=0 ALL
270  RAMSLCT
10E  A=C ALL
2A1  ?NCXQ             multiplication
3C8  F2A8                 subroutine
16B  JNC+2Dh
208  SETF 2
04E  C=0 ALL
270  RAMSLCT
10E  A=C ALL
21A  C=A+C M
12B  JNC+25h
008  SETF 3
04E  C=0 ALL
270  RAMSLCT
10E  A=C ALL
31A  ?A<C M
013   JNC+02
0BA  A<>C M
25A  C=A-C M
0D3  JNC+1Ah
04E  C=0 ALL
270  RAMSLCT
10E  A=C ALL
1D8  C<>M ALL
266  C=C-1 S&X
270  RAMSLCT
1D8  C<>M ALL
0AE  A<>C ALL
2F0  WRITDATA
0AE  A<>C ALL
028  WRIT 0(T)
198  C=M ALL
2E6  ?C#0 S&X
217  JC-3Eh
3CD  ?NCGO                        GTO the 2nd part of the routine
3C6   F1F3                             if no solution has been found yet
00C  ?FSET 3
36F  JC-13h
20C  ?FSET 2
307  JC-20h
30C  ?FSET 1
2B7  JC-2Ah
263  JNC-34h
1E8  WRIT 7(O)                   LBL 02     Since we can only use 4 subroutine-levels, CPU-flags are used to avoid  ?NCXQ LBL 02
10E  A=C ALL
0B0  C=N ALL
0EE  B<>C ALL
37A  ?A#C M
325  ?NCGO                       GTO
3C6  F1C9                           end1
31A  ?A<C M
017   JC+02
0BA  A<>C M
33A  ?A<B M
037  JC+06
2ED  ?NCXQ             quotient-remainder
3C8  F2BB                 subroutine
35A  ?A#0 M
095  ?NCXQ              ?NCXQ
3C4  F125                   LBL 03
10E  A=C ALL
21A  C=A+C M
095  ?NCXQ              ?NCXQ
3C4  F125                   LBL 03
10E  A=C ALL
31A  ?A<C M
013  JNC+02
0BA  A<>C M
25A  C=C-A M
095  ?NCXQ              ?NCXQ
3C4  F125                   LBL 03
10E  A=C ALL
0AE  A<>C ALL
0A8  WRIT 2(Y)
0AE  A<>C ALL
0E8  WRIT 3(X)
0AE  A<>C ALL
128  WRIT 4(L)
068  WRIT 1(Z)
0AE  A<>C ALL
168  WRIT 5(M)
198  C=M ALL
27E  C=C-1 MS
158  M=C ALL
2FE  ?C#0 MS
267   JC-34h
2DC  PT=13
150  LD@PT- 5
158  M=C ALL
203  JNC-40h
228  WRIT 8(P)                   LBL 03      at the address  F125
10E  A=C ALL
0B0  C=N ALL
0EE  B<>C ALL
37A  ?A#C M
335  ?NCGO                       GTO
3C6  F1CD                          end2
31A  ?A<C M
017   JC+02
0BA  A<>C M
33A  ?A<B M
037  JC+06
2ED  ?NCXQ             quotient-remainder
3C8  F2BB                 subroutine
35A  ?A#0 M
171  ?NCXQ              ?NCXQ
3C4  F15C                  LBL 04
10E  A=C ALL
21A  C=A+C M
171  ?NCXQ              ?NCXQ
3C4  F15C                  LBL 04
10E  A=C ALL
31A  ?A<C M
013   JNC+02
0BA  A<>C M
25A  C=A-C M
171  ?NCXQ              ?NCXQ
3C4  F15C                  LBL 04
10E  A=C ALL
0AE A<>C ALL
0E8  WRIT 3(X)
0AE  A<>C ALL
128  WRIT 4(L)
0A8  WRIT 2(Y)
0AE  A<>C ALL
168  WRIT 5(M)
198  C=M ALL
35C  PT=12
262  C=C-1@PT
158  M=C ALL
2E2  ?C#0@PT
277  JC-32h
110  LD@PT- 4
158  M=C ALL           you could add  3CC  3A0  020   ( ?CKEY  ?NCRTN  XQ->GO )  after this line to stop the routine by pressing a key
3E0  RTN                    but it would change all the following subroutine addresses...
268  WRIT 9(Q)         LBL 04      at the address   F15C
10E  A=C ALL
0B0  C=N ALL
0EE  B<>C ALL
37A  ?A#C M
345  ?NCGO                  GTO
3C6  F1D1                     end3
31A  ?A<C M
017   JC+02
0BA  A<>C M
33A  ?A<B M
06F   JC+0Dh
2ED  ?NCXQ             quotient-remainder
3C8  F2BB                 subroutine
35A  ?A#0 M
25D  ?NCXQ             ?NCXQ
3C4   F197                  LBL 05
10E  A=C ALL
2A1  ?NCXQ             multiplication
3C8  F2A8                 subroutine
25D  ?NCXQ             ?NCXQ
3C4   F197                  LBL 05
10E  A=C ALL
21A  C=A+C M
25D  ?NCXQ             ?NCXQ
3C4   F197                  LBL 05
10E  A=C ALL
31A  ?A<C M
013   JNC+02
0BA  A<>C M
25A  C=A-C M
25D  ?NCXQ             ?NCXQ
3C4   F197                  LBL 05
10E  A=C ALL
0AE  A<>C ALL
128   WRIT 4(L)
0E8   WRIT 3(X)
0AE  A<>C ALL
168   WRIT 5(M)
198   C=M ALL
19C   PT=11
262  C=C-1@PT
158   M=C ALL
2E2  ?C#0@PT
257   JC-36h
0D0  LD@PT- 3
158  M=C ALL
3E0  RTN
2E8  WRIT 11(a)             LBL 05   at the address  F197
10E  A=C ALL
37A  ?A#C M
1CB  JNC+39h               GTO end4
37A  ?A#C M
1B3  JNC+36h                GTO end4
31A  ?A<C M
013   JNC+02
0BA  A<>C M
1DA  A=A-C M
37A  ?A#C M
19B   JNC+33h              GTO end5
10E   A=C ALL
15A  A=A+C M
37A  ?A#C M
163   JNC+2Ch              GTO end5
10E   A=C ALL
0B0   C=N ALL
0EE   B<>C ALL
31A  ?A<C M
017   JC+02
0BA  A<>C M
33A   ?A<B M
04F   JC+09
2ED  ?NCXQ             quotient-remainder
3C8  F2BB                 subroutine
35A  ?A#0 M
02F   JC+05
10E   A=C ALL
37A  ?A#C M
0D3  JNC+1Ah            GTO end5
10E   A=C ALL
2A1  ?NCXQ             multiplication
3C8  F2A8                 subroutine
10E  A=C ALL
37A  ?A#C M
360  ?C RTN
083   JNC+10h
04E   C=0 ALL           end1       address  F1C9
2DC  PT=13
110   LD@PT- 4
093   JNC+12h
04E  C=0 ALL            end2       address F1CD
2DC  PT=13
090   LD@PT- 2
06B  JNC+0Dh
04E  C=0 ALL            end3       address F1D1
23E  C=C+1 MS
04B  JNC+09
04E  C=0 ALL            end4       address F1D4
35C  PT=12
210  LD@PT- 8
023  JNC+04
04E  C=0 ALL            end5       address F1D8
35C  PT=12
110   LD@PT- 4
020  XQ->GO
020  XQ->GO
020  XQ->GO
10E  A=C ALL
20E  C=A+C ALL
3A8  WRIT 14(d)
130   LDI S&X
009   009
070   N=C ALL
270   RAMSLCT
26D  ?NCXQ                 reformat
3C8   F29B
2F0   WRITDATA
0B0   C=N ALL
266   C=C-1 S&X
3C3  JNC-08
26D  ?NCXQ                 ?NCXQ
3C8   F29B                     reformat
2E8   WRIT 14(d)
3C1  ?NCGO                Since the 4 subroutine-levels are used,
002   00F0                     we must replace 3E0  RTN by these 2 words
198   C=M ALL            2nd part of the search   address  F1F3
01C  PT=3
190   LD@PT- 6
130   LDI S&X
006   006
158   M=C ALL
04E   C=0 ALL
35C  PT=12
050  LD@PT- 1
10E  A=C ALL
20E  C=A+C ALL
3A8  WRIT 14(d)
04E  C=0 ALL                 LBL 12   address  F200
270  RAMSLCT
10E  A=C ALL
21A  C=A+C M
1E8  WRIT 7(O)
10E  A=C ALL
31A  ?A<C M
017   JC+02
0BA  A<>C M
2ED  ?NCXQ             quotient-remainder
3C8  F2BB                 subroutine
35A  ?A#0 M
095  ?NCXQ              ?NCXQ
3C4  F125                   LBL 03
04E  C=0  ALL
270  RAMSLCT
10E  A=C ALL
37A  ?A#C M
0A3  JNC+14h
31A  ?A<C M
013   JNC+02
0BA  A<>C M
25A  C=A-C M
1E8   WRIT 7(O)
10E  A=C ALL
0B0  C=N ALL
0EE  B<>C ALL
31A  ?A<C M
017   JC+02
0BA  A<>C M
33A  ?A<B M
037   JC+06
2ED  ?NCXQ             quotient-remainder
3C8  F2BB                 subroutine
35A  ?A#0 M
095  ?NCXQ              ?NCXQ
3C4  F125                   LBL 03
04E  C=0  ALL
270  RAMSLCT
10E  A=C ALL
0B0  C=N ALL
0EE  B<>C ALL
31A  ?A<C M
017  JC+02
0BA  A<>C M
33A  ?A<B M
16F  JC+2Dh
2A1  ?NCXQ             multiplication
3C8  F2A8                 subroutine
1E8  WRIT 7(O)
10E  A=C ALL
31A  ?A<C M
013   JNC+02
0BA  A<>C M
25A  C=A-C M
095  ?NCXQ              ?NCXQ
3C4  F125                   LBL 03
10E  A=C ALL
21A  C=A+C M
095  ?NCXQ              ?NCXQ
3C4  F125                   LBL 03
04E  C=0  ALL
270  RAMSLCT
10E  A=C ALL
31A  ?A<C M
017  JC+02
0BA  A<>C M
2ED  ?NCXQ             quotient-remainder
3C8  F2BB                 subroutine
35A  ?A#0 M
087   JC+10h
1E8  WRIT 7(O)
10E  A=C ALL
21A  C=A+C M
095  ?NCXQ              ?NCXQ
3C4  F125                   LBL 03
10E  A=C ALL
31A  ?A<C M
013   JNC+02
0BA  A<>C M
25A  C=A-C M
095  ?NCXQ              ?NCXQ
3C4  F125                   LBL 03
10E  A=C ALL
198  C=M ALL
01C  PT=3
262  C=C-1@PT
158  M=C ALL
03C  RCR 3
270   RAMSLCT
0EE  B<>C ALL
0AE  A<>C ALL
2F0  WRITDATA
0AE  A<>C ALL
068   WRIT 1(Z)
0EE  B<>C ALL
266  C=C-1 S&X
2E6  ?C#0 S&X
001   ?CGO                       ?C GTO
3CB  F200                         LBL 12
04E  C=0 ALL
270  RAMSLCT
10E  A=C ALL
198  C=M ALL
266  C=C-1 S&X
158  M=C ALL
270  RAMSLCT
0AE  A<>C ALL
2F0  WRITDATA
0AE  A<>C ALL
028   WRIT 0(T)
198  C=M ALL
10E  A=C ALL
1BC  RCR 11
01C  PT=3
102  A=C@PT
0AE  A<>C ALL
158  M=C ALL
266  C=C-1 S&X
2E6  ?C#0 S&X
001   ?CGO                       ?C GTO
3CB  F200                         LBL 12
04E  C=0 ALL
0E8  WRIT 3(X)
3C1  ?NCGO                    Since the 4 subroutine-levels are used,
002   00F0                         we must replace 3E0  RTN by these 2 words
006  A=0 S&X          To shift the integers in the right part of the mantissa field  address  F292
39C  PT=0
1A2  A=A-1@PT
366  ?A#C S&X
01B  JNC+03
3DA  RSHFC M
3E3  JNC-04
046  C=0 S&X
3E0  RTN
2FA  ?C#0 M            The reverse operation ( reformating )    address  F29B
3A0  ?NC RTN
130  LDI S&X
009  009
35C  PT=12
11A  A=C M
342  ?A#0@PT
027  JC+04
266  C=C-1 S&X
3FA  LSHFA M
3E3  JNC-04
0BA  A<>C M
3E0   RTN
31A  ?A<C M           Multiplication routine      address   F2A8
013   JNC+02
0AE  A<>C ALL
08E  B=A ALL
00E  A=0 ALL
01C  PT=3
2E2  ?C#0@PT
023  JNC+04
13A  A=A+B M
262  C=C-1@PT
3E3  JNC-04
3DC  PT=PT+1
07A  A<>B M
3FA  LSHFA M
07A  A<>B M
154  ?PT=6
3B3  JNC-0Ah
0AE  A<>C ALL
3E0  RTN
23A  C=C+1 M          Quotient-Remainder  Routine   address  F2BB
0EE  B<>C ALL
04E  C=0 ALL
21C  PT=2
3FA  LSHFA M
3DC  PT=PT+1
33A  ?A<B M
3EF  JC-03
39A  RSHFA M
07A  A<>B M
1BA  A=A-1 M
222   C=C+1@PT
19A  A=A-B M
33A  ?A<B M
3EB  JNC-03
3BA  RSHFB M
3D4  PT=PT-1
214  ?PT=2
3DB  JNC-05

-I'm not an expert in M-Code, so the subroutines might certainly be improved, especially the multiplication subroutine...

3°)  Program#2

Data Registers:      • R01 = n1   •  R02 = n2  ..........   •  R06 = n6     •  R07 = N     ( these 7 registers are to be initialized before executing "LCEB" )
R00 & R08 thru R10: temp

Flags:  F01 to F07
Subroutines: /

-Lines 02-03 may be replaced by  CF 01  CF 02  CF 03  CF 04  CF 05  CF 06  CF 07
-The append character is denoted  ~

 01  LBL "LCEB"   02  CLX   03  X<>F   04  RCL 07   05  STO N   06  RCL 06   07  STO M   08  RCL 05   09  SIGN   10  RCL 01   11  RCL 02   12  RCL 03   13  RCL 04   14  MYOWNROM   15  X=0?  16 "Nb NOT FOUND"   17  X=0?   18  PROMPT   19  STO 04                   20  RDN   21  STO 03   22  RDN   23  STO 02 24  X<>Y   25  STO 01   26  LASTX   27  STO 05   28  RCL M   29  STO 06   30  RCL O   31  STO 08   32  RCL P   33  STO 09                   34  RCL Q   35  STO 10    36  RCL a   37  STO 00   38  FS? 01   39  GTO 01   40  FS? 02   41  GTO 02   42  FS? 03   43  GTO 03   44  FS? 04   45  GTO 04   46  LBL 05 47  RCL 00   48  RCL 05   49  RCL 06   50  XEQ 00   51  LBL 04   52  RCL 10   53  RCL 04   54  RCL 00                   55  XEQ 00   56  LBL 03   57  RCL 09   58  RCL 03    59  RCL 10   60  XEQ 00   61  LBL 02   62  FS? 07   63  GTO 07   64  RCL 08   65  RCL 02   66  RCL 09   67  XEQ 00   68  LBL 01   69  RCL 07 70  RCL 01   71  RCL 08   72  GTO 00   73  LBL 07   74  RCL 08   75  RCL 01   76  RCL 02                   77  XEQ 00   78  RCL 07   79  RCL 08   80  RCL 09    81  LBL 00   82  FIX 0   83  CF 29   84  XY   86  STO T   87  X<>Y   88  " "   89  ARCL Y   90  +   91  X=Y?   92  "~+" 93  X<> T   94  LASTX   95  -   96  X=Y?   97  "~-"   98  X<> T   99  LASTX  100  ST/ T 101  * 102  X=Y? 103  "~*" 104  X<> T 105  X=Y? 106  "~/" 107  ARCL L 108  "~=" 109  ARCL Y                110  FIX 4 111  SF 29 112  PROMPT 113  END

( 187 bytes / SIZE 011 )

 STACK INPUTS OUTPUTS X / /

Example1:     3 - 7 - 7 - 50 - 1 - 8  //  947

3  STO 01   7  STO 02  STO 03  50  STO 04  1  STO 05  8  STO 06     947  STO 07

XEQ "LCEB"  >>>>   "50+8=58"                           ---Execution time = 15s---
R/S                       "58*7=406"
R/S                     "406*7=2842"
R/S                   "2842-1=2841"
R/S                    "2841/3=947"

Example2:     4 - 7 - 50 - 1 - 4 - 100  //  903                4  STO 01  .........................  903  STO 07

XEQ "LCEB"   >>>>   "100/4=25"                          ---Execution time = 70s---
R/S       "25-7=18"
R/S    "50*18=900"
R/S     "900-1=899"
R/S     899+4=903"

Example3:     2 - 3 - 4 - 5 - 6 - 7  //  5041                    1  STO 01  ........................  5041  STO 07

-Here, there is no solution at all since we cannot exceed 5040.

Notes:

-Since the M-Code routine uses synthetic register a, "LCEB" cannot be used as more than a first-level subroutine.

-If the solution involves 1 operation, flag F01 is set. Press XEQ 01 if you want to display it again.
-If the solution involves 2 operations, flag F02 is set. Press XEQ 02 to display it again.
..............................................................................................................................

-If the solution involves 5 operations, flag F05 is set. Press XEQ 05 to display it again.
-Flag F07 is set if the solution has been found in the second part of the search.

-It may be wise to add the following lines at the beginning of the program:

7                LBL 14             ABS          LN             STO IND Z
E4              CLX                 INT           X>Y?         DSE Z
ENTER^     RCL IND Z      X=0?         ACOS        GTO 14

to check that all the data in registers R01 thru R07 are valid.