%%HP: T(3)A(R)F(.); \<< DTAG SWAP DTAG SWAP \<< IF IF DUP TYPE 9. - THEN 0. ELSE DUP \->LST DUP 1. \<< TYPE \>> DOSUBS R\->I { 28 28 18 } SAME SWAP DUP SIZE GET { / } 1. GET SAME AND END THEN FXND ELSE IF DUP FXND MOD THEN 11. OVER XPON - ALOG SWAP OVER * R\->I SWAP R\->I SIMP2 ELSE 1 END END \>> \-> tof \<< IF OVER TYPE 2. SAME THEN SWAP DUP "." POS DUP2 1. - 1. SWAP SUB PICK3 PICK3 1 + OVER SIZE SUB + STR\-> ROT SIZE ROT - R\->I ALOG / SWAP END IF OVER FXND MOD 0 \=/ THEN IF DUP 1 \>= OVER TYPE 28. SAME AND THEN NEG ALOG END tof EVAL ROT tof EVAL DUP2 0 1 \-> a b n0 d0 n d cd pd \<< 1 d0 a * DO pd cd DUP 'pd' STO n d DUP 'n' STO IDIV2 'd' STO * + 'cd' STO SWAP NEG SWAP UNTIL b d * OVER cd * \<= END DUP cd * b d * - SWAP pd * b n * + IQUOT n OVER * d + ROT * OVER NEG pd * cd + DUP2 n0 * + d0 ROT * SWAP OVER / UNROT / IF ROT 0 \=/ THEN "X" ELSE "N" END \->TAG \>> ELSE DROP :N: 0 END \>> \>>