DECLARE SUB addOn ()
DEFDBL A-Z
CLEAR , , 25000
CLS
DIM SHARED form$, stack(10), avail$, stackSize
avail$ = "1567"
addOn
SUB addOn
IF avail$ = "" AND stackSize = 1 THEN
IF stack(1) = 21 THEN
PRINT form$
END IF
EXIT SUB
END IF
FOR i = 1 TO LEN(avail$)
avSave$ = avail$
c$ = MID$(avail$, i, 1)
avail$ = LEFT$(avail$, i - 1) + MID$(avail$, i + 1)
IF stackSize = 0 THEN
stackSize = 1
stack(1) = VAL(c$)
form$ = c$
addOn
stackSize = 0
form$ = ""
ELSE
IF INSTR("1567", RIGHT$(form$, 1)) THEN
stack(1) = 10 * stack(1) + VAL(c$)
form$ = form$ + c$
addOn
stack(1) = stack(1) \\ 10
form$ = LEFT$(form$, LEN(form$) - 1)
stackSize = stackSize + 1
FOR j = stackSize TO 2 STEP -1
stack(j) = stack(j - 1)
NEXT j
stack(1) = VAL(c$)
form$ = form$ + "," + c$
addOn
stackSize = stackSize - 1
FOR j = 1 TO stackSize
stack(j) = stack(j + 1)
NEXT j
form$ = LEFT$(form$, LEN(form$) - 2)
ELSE
stackSize = stackSize + 1
FOR j = stackSize TO 2 STEP -1
stack(j) = stack(j - 1)
NEXT j
stack(1) = VAL(c$)
form$ = form$ + c$
addOn
stackSize = stackSize - 1
FOR j = 1 TO stackSize
stack(j) = stack(j + 1)
NEXT j
form$ = LEFT$(form$, LEN(form$) - 1)
END IF
END IF
avail$ = avSave$
NEXT i
IF stackSize >= 2 THEN
c$ = "+"
save1 = stack(1): save2 = stack(2)
stack(1) = stack(1) + stack(2)
form$ = form$ + c$
stackSize = stackSize - 1
FOR j = 2 TO stackSize
stack(j) = stack(j + 1)
NEXT
addOn
stackSize = stackSize + 1
FOR j = stackSize TO 3 STEP -1
stack(j) = stack(j - 1)
NEXT
stack(1) = save1: stack(2) = save2
form$ = LEFT$(form$, LEN(form$) - 1)
c$ = "-"
save1 = stack(1): save2 = stack(2)
stack(1) = stack(2) - stack(1)
form$ = form$ + c$
stackSize = stackSize - 1
FOR j = 2 TO stackSize
stack(j) = stack(j + 1)
NEXT
addOn
stackSize = stackSize + 1
FOR j = stackSize TO 3 STEP -1
stack(j) = stack(j - 1)
NEXT
stack(1) = save1: stack(2) = save2
form$ = LEFT$(form$, LEN(form$) - 1)
c$ = "*"
save1 = stack(1): save2 = stack(2)
stack(1) = stack(1) * stack(2)
form$ = form$ + c$
stackSize = stackSize - 1
FOR j = 2 TO stackSize
stack(j) = stack(j + 1)
NEXT
addOn
stackSize = stackSize + 1
FOR j = stackSize TO 3 STEP -1
stack(j) = stack(j - 1)
NEXT
stack(1) = save1: stack(2) = save2
form$ = LEFT$(form$, LEN(form$) - 1)
c$ = "/"
save1 = stack(1): save2 = stack(2)
IF stack(1) = 0 THEN
stack(1) = 1D+100
ELSE
stack(1) = stack(2) / stack(1)
END IF
form$ = form$ + c$
stackSize = stackSize - 1
FOR j = 2 TO stackSize
stack(j) = stack(j + 1)
NEXT
addOn
stackSize = stackSize + 1
FOR j = stackSize TO 3 STEP -1
stack(j) = stack(j - 1)
NEXT
stack(1) = save1: stack(2) = save2
form$ = LEFT$(form$, LEN(form$) - 1)
END IF
END SUB
Finds the RPN 6,1,5,7/-/, which is equivalent to 6 / (1 - 5/7). |