Post Reply 
Tripartite Palindromic Partition of Integer (HP 50g) Challenge
04-09-2023, 06:45 AM (This post was last modified: 04-09-2023 06:55 AM by 2old2randr.)
Post: #109
RE: Tripartite Palindromic Partition of Integer (HP 50g) Challenge
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
        »
    »
»
Find all posts by this user
Quote this message in a reply
Post Reply 


Messages In This Thread
RE: Tripartite Palindromic Partition of Integer (HP 50g) Challenge - 2old2randr - 04-09-2023 06:45 AM



User(s) browsing this thread: 1 Guest(s)