Fair enough. Here is my attempt at streamlining ALGO1 - I've minimized the use of local variables by not using them wherever unnecessary while still maintaining the structure of the original code. This matches the speed of your version (.95 secs) although the size is still larger (1533.5 bytes). I will try and repeat this approach with Algo2-4.
Code:
« → d p1 p2 p3
« p1 SIZE DUPDUP
2 / IP @ list midpoint
SWAP ZEROLST @ carry list
p2 SIZE
p3 SIZE
p1 1 GET @ temp vars to avoid repeated GETs
p2 1 GET
p3 1 GET
0 0 0
→ l1 m c l2 l3 x y z d1 d2 ci
« x y + z + 10 / IP DUP 'ci' STO
'c' 1 ROT PUT @ carry from column 1
2 m * DUP
d SWAP 1 - GET 'd1' STO
d SWAP GET 'd2' STO
IF z d1 < THEN d2 y - ELSE d2 y - 1 - END 10 MOD DUPDUP 'x' STO
p1 2 ROT PUT l1 1 - ROT PUT 'p1' STO
d1 z - 1 - 10 MOD DUPDUP 'y' STO
p2 2 ROT PUT l2 1 - ROT PUT 'p2' STO
d 2 GET x - y - ci - 10 MOD DUPDUP 'z' STO
p3 2 ROT PUT l3 1 - ROT PUT 'p3' STO
x y + z + ci + 10 / IP DUP 'ci' STO
'c' 2 ROT PUT
IF m 3 ≥ THEN
3 m FOR i
d 2 m * i - 1 + GET 'd1' STO
IF z d1 < THEN 1 ELSE 0 END DUPDUP 'x' STO
p1 i ROT PUT l1 i - 1 + ROT PUT 'p1' STO
d1 z - 1 - 10 MOD DUPDUP 'y' STO
p2 i ROT PUT l2 i - 1 + ROT PUT 'p2' STO
d i GET x - y - ci - 10 MOD DUPDUP 'z' STO
p3 i ROT PUT l3 i - 1 + ROT PUT 'p3' STO
x y + z + ci + 10 / IP DUP 'ci' STO
'c' i ROT PUT
NEXT
END
'p1' m 1 + 0 PUT
@ adjust if carry in posn m is 0/2
IF c m GET 0 == THEN @ I.2
'p1' m 1 + 1 PUT
ELSE IF c m GET 2 == THEN
IF p3 m GET 9 == THEN @ I.3.1
'p1' m 1 + 1 PUT
p2 m GET 1 - DUPDUP
p2 m 1 + ROT PUT m ROT PUT 'p2' STO
'p3' m 0 PUT
ELSE @ I.3.ii
p2 m GET 1 - DUPDUP
p2 m 1 + ROT PUT m ROT PUT 'p2' STO
'p3' m p3 m GET 1 + PUT
END
END END
p1 NL→I p2 NL→I p3 NL→I
»
»
»