home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Shareware Overload
/
ShartewareOverload.cdr
/
games
/
jumble9.zip
/
JUMB9.BAS
next >
Wrap
BASIC Source File
|
1980-01-01
|
10KB
|
398 lines
'=========================================================================
' JUMBLE PROGRAM TO UNSCRAMBLE WORDS
' 3-29-88
' REV 9.0 A
' WRITTEN BY: DARRIN KOHN
'=========================================================================
DIM W(20)
DIM T(20)
DIM T1(20)
DIM Q$(20)
DIM E(20)
DIM L$(27, 27)
DIM P$(10)
'***********************************************************************
'****** INSTRUCTIONS
'***********************************************************************
CLS
COLOR 3
LOCATE 1, 1
PRINT "The purpose of JUMBLE is to unscramble a jumbled word."
PRINT "That is to say, if you Type in 'OLWDR', the computer will"
PRINT "print out all the permutations of that word. One of which"
PRINT "spells the word 'WORLD'."
PRINT "If you have a program called 'TURBO LIGHTNING', then use"
PRINT "the 'SCREEN CHECK' function, and it will check all the permuatations"
PRINT "and leave the correct (unscrambled) word in DARK (RED)."
PRINT
PRINT "You can enter up to 12 letters, But you might get as many as "
PRINT "479,001,600 permutations. In this case, it is best to use the 'E'"
PRINT "option (when told to do so). This will eliminate MANY letter"
PRINT "combinations that dont exist in the standard dictionary."
PRINT "The speed of this program depends on your machine."
PRINT "You can also select only permutations that begin with a certain"
PRINT "letter, this will bring the total number of permutations down to"
PRINT "size."
PRINT "Make sure you use CAPITAL LETTERS ALWAYS!"
PRINT "TYPE IN 'Q' TO QUIT, WHEN DONE."
'***********************************************************************
'****** STORE LETTER COMB DATA IN ARRAY
'***********************************************************************
LOCATE 24, 20
COLOR 12
PRINT "LOADING DATA INTO ARRAY...PLEASE WAIT...";
RESTORE
FOR X = 1 TO 26
X1 = 0
SL1: READ P1$
IF P1$ <> "0" THEN
X1 = X1 + 1
L$(X, X1) = P1$
GOTO SL1
END IF
NEXT X
LOCATE 24, 20
COLOR 7
PRINT "HIT RETURN TO CONTINUE ";
LOOP3: IF INKEY$ = "" THEN GOTO LOOP3
'***********************************************************************
'****** GET WORD
'***********************************************************************
BEGIN: CLOSE #1
COLOR 6
CLS
LOCATE 10, 5
PRINT " SEND PERMUTATIONS TO PRINTER, HIT '1'"
LOCATE 11, 5
PRINT "SAVE PERMUTATIONS TO DISK (PERM.DTA), HIT '2'"
LOCATE 12, 5
PRINT " HIT RETURN FOR NEITHER"
LOCATE 13, 5
A = 0
START3: A$ = INKEY$
IF A$ = "" THEN GOTO START3
IF A$ = "Q" THEN END
A = VAL(A$)
IF A = 2 THEN OPEN "PERM.DTA" FOR OUTPUT AS #1
BEGIN1: CLS
LOCATE 11, 17
COLOR 7
PRINT "ENTER IN SCRAMBLED LETTERS AND HIT RETURN"
LOCATE 12, 17
PRINT " UP TO 12 CHARACTERS LONG"
LOCATE 14, 30
INPUT Z$
IF Z$ = "" THEN GOTO BEGIN1
IF Z$ = "Q" THEN END
BEGIN2: CLS
LOCATE 11,17
PRINT "IF YOU HAVE AN IDEA OF WHAT THE WORD IS"
LOCATE 12,12
PRINT "ENTER IN THE FIRST LETTER (OF WHAT YOU THINK IT IS)"
LOCATE 13,14
PRINT " OR"
LOCATE 14,19
PRINT "JUST HIT RETURN TO CHECK EVERYTHING"
LOCATE 16,30
INPUT A$
IF LEN(A$) > 1 THEN GOTO BEGIN2
CLS
'***********************************************************************
'****** STORE WORD IN ARRAY
'***********************************************************************
L = LEN(Z$)
IF L > 12 THEN GOTO BEGIN1
FOR X = 1 TO L
Q$(X) = MID$(Z$, X, 1)
T1(X) = 1
T(X) = 0
NEXT X
J1 = INT(79 / (L + 1))
'***********************************************************************
'****** BUBBLE-SORT WORD ASCENDING
'***********************************************************************
FOR Y = L TO 1 STEP -1
FOR X = 1 TO Y - 1
IF Q$(X) > Q$(X + 1) THEN
SWAP Q$(X), Q$(X + 1)
FLAG = 1
END IF
NEXT X
IF FLAG = 0 THEN GOTO JUMP7
FLAG = 0
NEXT Y
JUMP7: FOR X=1 TO L
IF A$=Q$(X) THEN
A1=X
GOTO FIND
END IF
NEXT X
A1=0
'***********************************************************************
'****** FIND REPEATED LETTERS AND MARK THEM WITH EXTRA BIT 2^7
'***********************************************************************
FIND: E = 0
TEMP = 0
FOR Y = 1 TO L
T = Y
TEMP = TEMP + 1
E(Y) = TEMP
FOR X = L TO (T + 1) STEP -1
IF Q$(Y) = Q$(X) THEN
E = E + 1
E(X) = 128 + TEMP
Y = Y + 1
FLAG = 1
END IF
NEXT X
IF FLAG = 0 THEN NL = NL + 1
FLAG = 0
NEXT Y
'***********************************************************************
'***** REDUCE COMBINATION REPEATS
'***********************************************************************
F = L
GOSUB FACTORIAL
TP = F1
F = L - 1
GOSUB FACTORIAL
PERCOLUMN = F1
PERMUTATION = TP - (PERCOLUMN * E)
IF E > 1 THEN
PERMUTATION = PERMUTATION - ((L - E) * PERCOLUMN / 2)
END IF
IF E = 1 THEN
PERMUTATION = PERMUTATION - ((L - 2) * PERCOLUMN / 2)
END IF
'***********************************************************************
'****** PRINT OUT RESULTS
'***********************************************************************
P$(1) = " TOTAL NUMBER OF PERMUTATIONS (INCLUDING REPEATS) " + STR$(TP)
P$(2) = " TOTAL NUMBER OF PERMUTATIONS (EXCLUDING REPEATS) " + STR$(PERMUTATION)
P$(3) = "TOTAL POSSIBLE TIMES EACH LETTER IS USED PER COLUMN " + STR$(PERCOLUMN)
P$(4) = " MAXIMUM NUMBER OF COMBINATIONS PER SET " + STR$(PERCOLUMN)
P$(5) = " NUMBER OF DUPLICATE LETTERS PAIRS " + STR$(E)
P$(6) = " NUMBER OF NON-DUPLICATE LETTERS " + STR$(NL)
P$(7) = " WORD LENGTH " + STR$(L)
P$(8) = ""
COLOR 6
LOCATE 1, 1
IF A = 1 THEN PRINT "PUT PRINTER ONLINE": LPRINT
IF A = 2 THEN PRINT "OPEN FILE (PERM.DTA)"
LOCATE 1, 1
FOR X = 1 TO 8
IF A = 1 THEN LPRINT P$(X)
IF A = 2 THEN PRINT #1, P$(X)
PRINT P$(X)
NEXT X
PRINT
COLOR 7
PRINT "HIT ANY KEY TO START RUNNING";
PRINT "HIT 'E' TO ELIMINATE LETTER COMBINATIONS THAT DONT EXIST"
LOOP1: A$ = INKEY$
IF A$ = "" THEN GOTO LOOP1
ELIM = 0
IF A$ = "E" THEN ELIM = 1
CLS
COLOR 2
PRINT "FORMING PERMUTATIONS, PLEASE WAIT.."
COLOR 12
PRINT
'***********************************************************************
'***** BEGIN TO FORM COMBINATIONS
'***********************************************************************
V1 = 0
CO = 0
PL = 0
FOR SET = 1 TO (L - E)
CNT = 0
JUMP3: V1 = V1 + 1
IF (E(V1) AND 128) THEN GOTO JUMP3
V = V1
IF A1 > 0 AND A1<>V THEN GOTO JUMP6
JUMP: FOR X = 1 TO L
F1 = 1
FOR FACT = 1 TO (L - X)
F1 = F1 * FACT
NEXT FACT
IF CNT THEN V = T1(X)
JUMP1: FOR Y = 1 TO (X - 1)
IF W(Y) = V THEN
V = V + 1
IF V > L THEN V = 1
GOTO JUMP1
END IF
IF (E(V) AND 128) AND Y > 1 THEN
IF (E(W(Y)) AND 127) = (E(V) AND 127) THEN
IF W(Y) < V THEN FLAG = 1
END IF
END IF
NEXT Y
W(X) = V
T(X) = T(X) + 1
IF T(X) = F1 THEN
T(X) = 0
V = V + 1
IF V > L THEN V = 1
END IF
T1(X) = V
JUMP4: NEXT X
IF FLAG THEN
FLAG = 0
GOTO JUMP5
END IF
GOSUB PCOMB
JUMP5: FOR X = 1 TO L
IF T(X) THEN
CNT = 1
GOTO JUMP
END IF
NEXT X
JUMP6: NEXT SET
IF A = 1 THEN LPRINT CHR$(12)
PRINT
PRINT
COLOR 9
PRINT "IF YOU HAVE 'TURBO LIGHTNING' USE 'SCREEN CHECK'"
PRINT "HIT ANY OTHER KEY TO TRY ANOTHER WHEN READY ";
DONE: IF INKEY$ = "" THEN GOTO DONE
GOTO BEGIN
'***********************************************************************
'****** PRINT OUT PERMUTATIONS
'***********************************************************************
PCOMB: IF ELIM = 0 THEN GOTO PCOMB4
LN = ASC(Q$(W(1))) - 64
X1 = 0
P$ = Q$(W(2))
PCOMB5: X1 = X1 + 1
IF L$(LN, X1) = "" THEN GOTO PCOMB4
IF L$(LN, X1) = P$ THEN RETURN
GOTO PCOMB5
PCOMB4: PC$ = ""
FOR Y = 1 TO L
PC$ = PC$ + Q$(W(Y))
NEXT Y
CO = CO + 1
IF CO > J1 THEN
CO = 1
PL = PL + 1
IF A = 2 THEN PRINT #1,
IF A = 1 THEN LPRINT
IF A = 0 THEN PRINT
END IF
IF A = 2 THEN
PRINT #1, PC$; " ";
RETURN
END IF
IF A = 1 THEN
LPRINT PC$; " ";
RETURN
END IF
PRINT PC$; " ";
IF PL = 18 THEN
PRINT
COLOR 9
PRINT "IF YOU HAVE 'TURBO LIGHTNING' USE 'SCREEN CHECK'"
PRINT "HIT SPACE FOR NEXT PAGE";
COLOR 4
PCOMB1: H$ = INKEY$
IF H$ = "" THEN GOTO PCOMB1
IF H$ = "Q" THEN
CLOSE #1
END
END IF
CLS
COLOR 2
PRINT "FORMING PERMUTATIONS, PLEASE WAIT.."
COLOR 12
PRINT
PL = 0
END IF
RETURN
'***********************************************************************
'***** SUBROUTINES
'***********************************************************************
FACTORIAL: F1 = 1
FOR FACT = 1 TO F
F1 = F1 * FACT
NEXT FACT
RETURN
'***********************************************************************
'***** LETTER COMBINATIONS THAT DONT EXIST A-Z
'***********************************************************************
DATA A,0
DATA B,J,G,H,J,K,M,P,Q,S,T,V,W,X,Z,0
DATA C,B,D,F,G,J,K,M,P,Q,S,T,V,W,X,Z,0
DATA D,B,F,G,H,J,K,L,M,P,Q,S,T,V,X,Z,0
DATA H,O,Z,0
DATA F,B,C,H,K,M,N,P,Q,S,T,V,W,X,Y,Z,0
DATA G,B,C,D,F,K,M,P,Q,S,T,V,W,X,Z,0
DATA H,B,C,D,F,G,J,K,L,M,N,P,Q,R,S,T,V,W,X,Z,0
DATA I,H,J,K,P,Q,U,W,X,Y,0
DATA J,B,C,D,F,G,H,K,L,M,N,P,Q,R,S,T,V,W,X,Y,Z,0
DATA K,B,C,D,F,G,J,M,P,Q,S,T,V,W,X,Y,Z,0
DATA B,C,D,F,G,H,J,K,M,N,P,Q,R,T,V,W,X,Z,0
DATA M,B,C,D,F,G,H,J,K,L,P,Q,R,S,V,W,X,Z,0
DATA N,B,C,D,F,G,H,J,K,L,M,P,Q,R,S,T,V,W,X,Z,0
DATA O,E,J,Q,0
DATA P,B,C,D,,F,G,J,K,M,P,Q,V,W,X,Z,0
DATA Q,A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,R,S,T,V,W,X,Y,Z,0
DATA R,B,C,D,F,G,J,K,L,M,N,P,Q,R,S,T,V,W,X,Z,0
DATA S,B,D,F,G,J,R,V,X,Z,0
DATA T,B,C,D,F,G,J,K,L,M,P,Q,S,V,X,Z,0
DATA U,A,C,E,F,H,I,J,O,Q,V,W,X,Y,Z,0
DATA V,B,C,D,F,G,H,J,K,L,M,N,P,Q,R,S,T,W,X,Z,0
DATA W,B,C,D,F,G,J,K,L,M,N,P,Q,S,T,U,V,X,Y,Z,0
DATA X,A,B,C,D,F,G,H,I,J,K,L,N,O,P,Q,S,T,U,V,W,Z,0
DATA Y,B,C,D,F,G,H,J,K,L,M,N,P,Q,R,S,T,V,W,X,Z,0
DATA Z,B,C,D,F,G,H,J,K,L,M,N,P,Q,R,S,T,V,X,0