Code:
%%HP: T(3)A(D)F(.);
\<< RCLF RAD { 190. 305. 454. 569. 949. } { 91. 371. 553. 833. 1015. } { 63. 259. 385. 581. 707. } 5. ROLL DUP DATE DUP UNROT DDAYS 3. NDUPN \->LIST { 644. 924. 759. } MOD { } 1. 3.
FOR i SWAP DUP i GET 5. NDUPN \->LIST 6. ROLL SWAP - DUP 0. > *
WHILE DUP HEAD NOT
REPEAT TAIL
END 1. GET ROT +
NEXT SWAP DROP SORT OBJ\-> DROP DROP2 DATE+ DUP UNROT DDAYS DUP + \pi * DUPDUP \->V3 AXL { 23. 28. 33. } / SIN ROT STOF
\>>
439 bytes, CK = #552Dh, 0.8 seconds. It works for all examples I've tried. Nicer output still missing :-)
(04-Oct-2018, 16:41) P.S.: The output has been improved by a little bit at the cost of a few bytes. No tagging, but the order is { P E I } :
Code:
%%HP: T(3)A(R)F(.);
\<< RCLF RAD { 190. 305. 454. 569. 949. } { 91. 371. 553. 833. 1015. } { 63. 259. 385. 581. 707. } 5. ROLL DUP DATE DUP UNROT DDAYS 3. NDUPN \->LIST { 644. 924. 759. } MOD { } 1. 3.
FOR i SWAP DUP i GET 5. NDUPN \->LIST 6. ROLL SWAP - DUP 0. > *
WHILE DUP HEAD NOT
REPEAT TAIL
END 1. GET ROT +
NEXT SWAP DROP SORT OBJ\-> DROP DROP2 DATE+ DUP UNROT DDAYS DUPDUP 3. \->LIST { .273181969877 .224399475256 .190399554763 } * SIN 100. * 0. RND ROT STOF
\>>
444 bytes, CK = # 99F8h
22.021950 -> 30.012019
{-100. 100. 0.}
P.P.S.: 1 GET is less elegant than HEAD, but takes a nibble less. Also, on the HP-50g NIP is shorter than SWAP DROP:
Code:
%%HP: T(3)A(D)F(.);
\<< RCLF RAD { 190. 305. 454. 569. 949. } { 91. 371. 553. 833. 1015. } { 63. 259. 385. 581. 707. } 5. ROLL DUP DATE DUP UNROT DDAYS 3. NDUPN \->LIST { 644. 924. 759. } MOD { } 1. 3.
FOR i SWAP DUP i GET 5. NDUPN \->LIST 6. ROLL SWAP - DUP 0. > *
WHILE DUP 1. GET NOT
REPEAT TAIL
END 1. GET ROT +
NEXT NIP SORT OBJ\-> DROP DROP2 DATE+ DUP UNROT DDAYS DUPDUP 3. \->LIST { .273181969877 .224399475256 .190399554763 } * SIN 100. * 0. RND ROT STOF
\>>
441 bytes, CK = # DD4Dh