Post Reply 
Tripartite Palindromic Partition of Integer (HP 50g) Challenge
04-02-2023, 08:47 AM
Post: #95
RE: Tripartite Palindromic Partition of Integer (HP 50g) Challenge
A week passes & not much development.

Should you, 3298, lack inspiration you might consider 2old2randr's solution for 6 digit inputs starting with a "1", my adaptation of which is here:

Code:
« DUP
  IF HEAD 1 ‹
  THEN NIP NTYPE 5
ROLL 6 ROLL DROP2
ALGO2
  ELSE OBJ→ ROLL
DROP DUP 6 PICK -
DUP 1 + 10 MOD SWAP
2 + 10 MOD 0 7.
NDUPN DROP → num d4
d3 d2 d1 d0 m1 m2
p1 p2 p3 x y z c
    «
      IF m1 m2 *
      THEN 9 d4 +
DUP 2 / IP DUP 'y'
STO - 10001 * 9090
+ 'p1' STO y 10001
* d3 1010 * + 'p2'
STO m1 101 * 9 d4 +
m1 + 10 / IP 'c'
STO d1 9 - d3 - c -
10 MOD DUP 'z' STO
10 * + 'p3' STO c 9
+ d3 + z + 10 / IP
'c' STO 10 d2 + c -
m1 - DUP
        IF 9 >
        THEN 9 -
100 * 'p2' STO+ 900
        ELSE 100 *
        END 'p1'
STO+
      ELSE
        IF m2 NOT
d2 AND
        THEN 9 d4 +
DUPDUP 2 / IP 'y'
STO y - 10001 *
9090 + 'p1' STO y
10001 * d3 1010 * +
'p2' STO 909 SWAP 9
+ 10 / IP 'c' STO
d1 9 - d3 - c - 10
MOD 'z' STO z 10 *
+ 'p3' STO c 9 + d3
+ z + 10 / IP 'c'
STO 10 d2 + c - 9 -
DUP
          IF 9 >
          THEN 9 -
100 * 'p2' STO+ 900
          ELSE 100
*
          END 'p1'
STO+
        ELSE
          IF m2 d2
+ NOT
          THEN
            CASE d4
1 ‰
              THEN
IF d4
THEN 90009
ELSE 80008
END 'p1' STO 10001
d3 1010 * + 'p2'
STO 9009 d1 d3 - 1
- 10 MOD DUP 'z'
STO 110 * + 'p3'
STO 1 d3 + z + 10 /
IP 'c' STO 10 c - z
- DUP
IF 9 >
THEN 9 - 100 * 'p2'
STO+ 900
ELSE 100 *
END 'p1' STO+
              END
d4 2 ==
              THEN
90009 'p1' STO
20002 d3 1010 * +
'p2' STO 9009 d1 d3
- 2 - 10 MOD DUP
'z' STO 110 * +
'p3' STO 2 d3 + z +
10 / IP 'c' STO
IF c 2 ‹
THEN 10 c - z - DUP
  IF 9 >
  THEN 9 - 100 *
'p2' STO+ 900
  ELSE 100 *
  END 'p1' STO+
ELSE 128821 'p1'
STO 171 'p2' STO 8
'p3' STO
END
              END
100001 1 d3 1 - 10
MOD 1 + d3 - 10 /
IP DUP 'c' STO -
10010 * + 'p1' STO
d3 1 - 10 MOD 'y'
STO d1 d3 - 1 - c +
10 MOD DUP 'z' STO
10 * 808 + 'p3' STO
2 c - y + z + d1 -
10 / IP 'c' STO 2 c
- 100 * d4 1 -
10001 * + y 1010 *
+ 'p2' STO
            END
          ELSE
            IF m1
NOT d3 *
            THEN
              IF d4
9 ‹
              THEN
10 d4 + 2 / IP 'y'
STO 90009 d3 1 -
1010 * + 'p1' STO
d4 1 + 10001 * 'p2'
STO 19 d4 + 10 / IP
'c' STO d1 d3 - 1 +
c - 10 MOD DUP 'z'
STO 10 * 909 + 'p3'
STO c d3 + 1 - z +
10 / IP 'c' STO d2
1 + c - DUP
IF 9 >
THEN 9 - 100 * 'p2'
STO+ 900
ELSE 100 *
END 'p1' STO+
              ELSE
0 0 0 0 → c1 c2 c3
mu
« 0 'y' STO d1 3 -
  DO
  UNTIL DUP 'y'
INCR - 10 MOD 8 <
  END d3 y - 10 MOD
'x' STO 3 y + SWAP
y - 10 MOD + d1 -
10 / IP 'c1' STO d2
x - 1 - c1 - 10 MOD
x + c1 + 1 + d2 -
10 / IP 'c2' STO
  IF c2 1 >
  THEN 1 'mu' STO 1
'c2' STO 9 'x' STO
  END x y + d3 - 10
/ IP 'c3' STO
100001 3 c3 - 10010
* + x mu - 1100 * +
'p1' STO 60006 y c2
- mu + 1010 * + d2
x - 1 - c1 - mu +
10 MOD 100 * + 'p2'
STO d1 3 - y - 10
MOD c2 + mu - c3 +
10 * 101 + 'p3' STO
»
              END
            ELSE
              IF m1
d3 + NOT
              THEN
CASE d4 NOT
  THEN
    CASE d2 DUP NOT
d1 AND d1 9 ‹ AND
OR
      THEN 100001
num OVER - PALIN
DROP
      END d2 d1 +
NOT
      THEN 100001 8
0
      END 90109
9889 101
    END
  END d4 1 ==
  THEN
    CASE d2 1 > d2
1 == d1 AND OR
      THEN 110011
num OVER - PALIN
DROP
      END d2 1 ==
d1 NOT AND
      THEN 109901
191 8
      END d2 1 ==
d1 1 == AND
      THEN 110011
99 0
      END d2 NOT d1
1 > AND
      THEN 110011
d1 DUP 2 - 11 * 11
ROT - OVER NOT ::
SWAP IFT
      END 100001 d2
NOT d1 1 == AND
      THEN 10001 8
      END 9999 0
    END
  END d4 2 ==
  THEN
    CASE d2 1 > d2
1 == d1 1 > AND OR
      THEN 120021
num OVER - PALIN
DROP
      END d2 1 ==
d1 NOT AND
      THEN 119911
181 9
      END d2 d1 * 1
==
      THEN 119911
191 9
      END d2 NOT d1
2 > AND
      THEN 120021
        CASE d1 3 ‹
          THEN d1 3
- 10 * d1 3 - + 13
d1 -
          END 9 1
        END
      END d2 NOT d1
2 == AND
      THEN 119911
101 9
      END d2 NOT d1
1 == AND
      THEN 100001
20002 8
      END 119911 88
2
    END
  END 0 'y' STO d1
1 -
  DO
  UNTIL DUP 'y'
INCR - 10 MOD DUP 9
‹ AND
  END d4 3 ==
  THEN 0 0 → c1 c2
    « 2 y + SWAP y
- 10 MOD + d1 - 10
/ IP 'c1' STO 9 y -
d2 y + 2 + 10 MOD +
9 + d2 - 10 / IP
'c2' STO 100001 9 y
- c1 - 1100 * +
20002 y c2 - 1 + c1
+ 1010 * + d2 y + 2
+ 10 MOD 100 * + d1
1 - y - 10 MOD c2 +
1 - c1 - 10 * 909 +
    »
  END 1 y + SWAP y
- 10 MOD + d1 - 10
/ IP 11 y - d2 y +
1 - 10 MOD + d2 -
10 / IP → c1 c2
  « 120021 10 y -
c1 - 1100 * + d4 3
- 10001 * y c2 - c1
+ 1010 * + d2 y + 1
- 10 MOD 100 * + d1
2 - y - 10 MOD c2 +
c1 - 10 * 101 +
  »
END 'p3' STO 'p2'
STO 'p1' STO
              END
            END
          END
        END
      END p1 R→I p2
R→I p3 R→I
    »
  END
»

Alternatively you could adopt peruna's solution restricted to numbers with a maximum of six digits - this would not give a "canonical" partition as in the proof, but as far as I'm concerned any valid tripartite partition is good, the ones specified in the proof are just as good as any other, eg the partition in posting #1.
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 - Gerald H - 04-02-2023 08:47 AM



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