DECLARE FUNCTION PutComma$ (sn#)
DECLARE FUNCTION Usd$ (n#, t$)
DECLARE FUNCTION FileExist! (f$)
DECLARE FUNCTION Factorial# (n!)
'DIM Usd$(5000)
DIM Cnt AS DOUBLE
CLS
INPUT "Number of variable components"; n1: n1 = ABS(n1)
INPUT "Number of Fixed components"; n2: n2 = ABS(n2)
PRINT "Possible combinations: "; PutComma$(Factorial#(n1))
ff# = Factorial#(n1)
DO
FOR k = 1 TO CINT(n2 / 2)
m$ = m$ + CHR$(k + (64))
NEXT k
FOR g = 1 TO n1
RANDOMIZE TIMER
v$ = CHR$(INT(RND * n1) + (65) + (CINT(n2 / 2)))
IF INSTR(m$, v$) = 0 THEN m$ = m$ + v$: v$ = "" ELSE g = g - 1
NEXT g
FOR k = 1 TO INT(n2 / 2)
m$ = m$ + CHR$(k + (65) + n1)
NEXT k

'FOR f = 0 TO Cnt
IF FileExist("VMEM.TXT") = NOT (-1) THEN Fail = 0: GOTO 10
'IF Usd$(f, "") = m$ THEN fail = 1
OPEN "VMEM.TXT" FOR INPUT AS #1
DO UNTIL EOF(1)
LINE INPUT #1, ag$
IF ag$ = m$ THEN Fail = 1: EXIT DO
LOOP
CLOSE 1
10 'NEXT f

IF Fail = 0 THEN
x$ = Usd$(Cnt, m$)
Cnt = Cnt + 1
IF Cnt = ff# THEN msg$ = "- That's all of them according to my calcs."
'LPRINT m$; " Combo number: "; cnt;msg$
PRINT m$; " Combo number: "; Cnt; msg$
'IF cnt MOD 25 = 0 THEN LOCATE 25, 1: PRINT "-=ð Press any key to continue ð=-"; : SLEEP 1: CLS
ss = TIMER
END IF
m$ = ""
Fail = 0
IF TIMER >= ss + 30 THEN PRINT "30 Seconds and still no more combonations": ss = TIMER
IF TIMER >= ss + 240 THEN PRINT "4 minutes and no combination... quiting": END
IF INKEY$ = CHR$(13) THEN KILL "VMEM.TXT": END
LOOP

FUNCTION Factorial# (n)
mm# = n
FOR q = n - 1 TO 1 STEP -1
mm# = mm# * q
NEXT q
Factorial# = mm#
END FUNCTION

FUNCTION FileExist (f$)
OPEN f$ FOR RANDOM AS #1
IF LOF(1) = 0 THEN FileExist = 1 ELSE FileExist = -1
CLOSE 1
END FUNCTION

FUNCTION PutComma$ (sn#)
un$ = LTRIM$(RTRIM$(STR$(sn#)))
FOR q = LEN(un$) TO 1 STEP -1
cq = cq + 1
m$ = MID$(un$, q, 1) + m$
IF cq MOD 3 = 0 AND q > 1 THEN m$ = "," + m$
NEXT q

PutComma$ = m$
END FUNCTION

FUNCTION Usd$ (n#, t$)
IF t$ <> "" THEN OPEN "VMEM.TXT" FOR APPEND AS #1: PRINT #1, t$: CLOSE 1: EXIT FUNCTION ELSE OPEN "VMEM.TXT" FOR INPUT AS #1
FOR mn# = 1 TO n#
LINE INPUT #1, nth$
NEXT mn#
LINE INPUT #1, Usd$
CLOSE 1
END FUNCTION

