5748171 [rkeene@sledge /home/rkeene/devel/archive/quickbasic]$ cat -n combos.bas
   1: DECLARE FUNCTION PutComma$ (sn#)
   2: DECLARE FUNCTION Usd$ (n#, t$)
   3: DECLARE FUNCTION FileExist! (f$)
   4: DECLARE FUNCTION Factorial# (n!)
   5: 'DIM Usd$(5000)
   6: DIM Cnt AS DOUBLE
   7: CLS
   8: INPUT "Number of variable components"; n1: n1 = ABS(n1)
   9: INPUT "Number of Fixed components"; n2: n2 = ABS(n2)
  10: PRINT "Possible combinations: "; PutComma$(Factorial#(n1))
  11: ff# = Factorial#(n1)
  12: DO
  13: FOR k = 1 TO CINT(n2 / 2)
  14: m$ = m$ + CHR$(k + (64))
  15: NEXT k
  16: FOR g = 1 TO n1
  17: RANDOMIZE TIMER
  18: v$ = CHR$(INT(RND * n1) + (65) + (CINT(n2 / 2)))
  19: IF INSTR(m$, v$) = 0 THEN m$ = m$ + v$: v$ = "" ELSE g = g - 1
  20: NEXT g
  21: FOR k = 1 TO INT(n2 / 2)
  22: m$ = m$ + CHR$(k + (65) + n1)
  23: NEXT k
  24: 
  25: 'FOR f = 0 TO Cnt
  26: IF FileExist("VMEM.TXT") = NOT (-1) THEN Fail = 0: GOTO 10
  27: 'IF Usd$(f, "") = m$ THEN fail = 1
  28: OPEN "VMEM.TXT" FOR INPUT AS #1
  29: DO UNTIL EOF(1)
  30: LINE INPUT #1, ag$
  31: IF ag$ = m$ THEN Fail = 1: EXIT DO
  32: LOOP
  33: CLOSE 1
  34: 10 'NEXT f
  35: 
  36: IF Fail = 0 THEN
  37: x$ = Usd$(Cnt, m$)
  38: Cnt = Cnt + 1
  39: IF Cnt = ff# THEN msg$ = "- That's all of them according to my calcs."
  40: 'LPRINT m$; " Combo number: "; cnt;msg$
  41: PRINT m$; " Combo number: "; Cnt; msg$
  42: 'IF cnt MOD 25 = 0 THEN LOCATE 25, 1: PRINT "-=ð Press any key to continue ð=-"; : SLEEP 1: CLS
  43: ss = TIMER
  44: END IF
  45: m$ = ""
  46: Fail = 0
  47: IF TIMER >= ss + 30 THEN PRINT "30 Seconds and still no more combonations": ss = TIMER
  48: IF TIMER >= ss + 240 THEN PRINT "4 minutes and no combination... quiting": END
  49: IF INKEY$ = CHR$(13) THEN KILL "VMEM.TXT": END
  50: LOOP
  51: 
  52: FUNCTION Factorial# (n)
  53: mm# = n
  54: FOR q = n - 1 TO 1 STEP -1
  55: mm# = mm# * q
  56: NEXT q
  57: Factorial# = mm#
  58: END FUNCTION
  59: 
  60: FUNCTION FileExist (f$)
  61: OPEN f$ FOR RANDOM AS #1
  62: IF LOF(1) = 0 THEN FileExist = 1 ELSE FileExist = -1
  63: CLOSE 1
  64: END FUNCTION
  65: 
  66: FUNCTION PutComma$ (sn#)
  67: un$ = LTRIM$(RTRIM$(STR$(sn#)))
  68: FOR q = LEN(un$) TO 1 STEP -1
  69: cq = cq + 1
  70: m$ = MID$(un$, q, 1) + m$
  71: IF cq MOD 3 = 0 AND q > 1 THEN m$ = "," + m$
  72: NEXT q
  73: 
  74: PutComma$ = m$
  75: END FUNCTION
  76: 
  77: FUNCTION Usd$ (n#, t$)
  78: 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
  79: FOR mn# = 1 TO n#
  80: LINE INPUT #1, nth$
  81: NEXT mn#
  82: LINE INPUT #1, Usd$
  83: CLOSE 1
  84: END FUNCTION
  85: 
5748172 [rkeene@sledge /home/rkeene/devel/archive/quickbasic]$

Click here to go back to the directory listing.
Click here to download this file.
last modified: 2000-05-09 21:01:03