FLORIDA HIGH SCHOOLS COMPUTING COMPETITION '85
BASIC PROGRAM SOLUTIONS
'1.1
' This program will simulate a Last-In-First-Out stack.
'
INPUT "Enter command:"; A$
WHILE A$ <> "QUIT"
IF A$ = "ADD" THEN S = S + 1: INPUT "Enter number:"; A(S)
IF A$ = "TAKE" THEN PRINT A(S): S = S - 1
INPUT "Enter command:"; A$
WEND
'1.2
' This program will determine which number was erased.
'
INPUT "Enter N, AV: "; N, AV
FOR I = 1 TO N: S = S + I: NEXT I
FOR I = 1 TO N
T = S - I
IF ABS((T / (N - 1)) - AV) < .0001 THEN
PRINT "NUMBER ERASED WAS"; I: END
END IF
NEXT I
'1.3
' This program will print the square root of N.
'
INPUT "Enter N, D: "; N, D: Q = SQR(N)
S = INT(Q / 10 ^ D + .5) * 10 ^ D
A$ = MID$(STR$(S), 2)
FOR I = 1 TO LEN(A$)
T = T + VAL(MID$(A$, I, 1))
NEXT I
PRINT USING "S=####.####"; S
PRINT "SUM="; LTRIM$(STR$(T))
'1.4
' This program will simulate a time dial.
'
CLS : Y = 1985
J = 3000 'About one second on a 386-computer
WHILE Y <= 2345
LOCATE 12, 38: PRINT Y
IF J > 30 THEN J = J - 30
FOR K = 1 TO J: NEXT K
Y = Y + 1
WEND
'1.5
' This program will determine # of tennis games and byes.
'
INPUT "Enter N: "; N
WHILE N > 1
G = INT(N / 2)
IF G * 2 = N THEN B = 0 ELSE B = 1
R = R + 1
PRINT USING "ROUND # ## GAMES"; R; G;
IF B = 1 THEN PRINT " 1 BYE" ELSE PRINT
TG = TG + G: BY = BY + B: N = G + B
WEND
PRINT USING "TOTAL ## GAMES ## BYES"; TG; BY
'1.6
' This program will find smallest, largest, and sum of #s.
'
INPUT "Enter N, M: "; N, M
IF M > 999 THEN M = 999
IF N < 100 THEN N = 100
FOR I = N TO M
NUM = I
H = INT(NUM / 100): NUM = NUM - H * 100
T = INT(NUM / 10): U = NUM - T * 10
IF NOT (H = 0 OR T = 0 OR U = 0 OR H = T OR T = U OR H = U) THEN
S = S + I: L = I: IF S = I THEN PRINT "SMALLEST ="; S
END IF
NEXT I
PRINT "LARGEST ="; L
PRINT "SUM ="; S
'1.7
' This program will print a bill for Bob's Cycle shop.
'
INPUT "Enter Customer name: "; N$
INPUT "Enter part#: "; P$
INPUT "Enter labor time: "; LT
WHILE P$ <> A$: READ A$, B$, C: WEND
' Print Invoice
PRINT
PRINT "CUSTOMER NAME: "; N$
PRINT "PART #: "; P$
PRINT "DESCRIPTION: "; B$
PRINT USING "PART COST: ###.##"; C
LC = LT * 10
PRINT USING "LABOR COST: ###.##"; LC
TAX = C * .05: TAX = INT(TAX * 100 + .5) / 100
PRINT USING "5% TAX: ###.##"; TAX
TOT = LC + C + TAX
PRINT USING "TOTAL: ###.##"; INT(TOT * 100 + .5) / 100
DATA S193,10 INCH SPROCKET,13.95
DATA S867,30 INCH CHAIN,27.50
DATA F234,BLITZ MAG FRAME,119.00
DATA S445,COMPUTCYCLE COMPUTER,33.95
DATA C492,JET BRAKE SET,29.98
DATA J273,27 INCH WHEEL,32.00
DATA T100,27x1 INCH TIRE TUBE,12.50
'1.8
' This program will display labels alphabetically.
'
INPUT "Enter # of lines on label:"; H
S = 1: READ A$(S), B$(S)
WHILE A$(S) <> "*END*"
L = LEN(A$(S)): I = 1
WHILE MID$(A$(S), I, 1) <> " ": I = I + 1: WEND
R$ = RIGHT$(A$(S), L - I): L$ = LEFT$(A$(S), I)
C$(S) = R$ + ", " + L$
S = S + 1
READ A$(S), B$(S)
WEND
S = S - 1
FOR I = 1 TO S - 1
FOR J = I + 1 TO S
IF C$(I) > C$(J) THEN
X$ = C$(I): C$(I) = C$(J): C$(J) = X$
X$ = B$(I): B$(I) = B$(J): B$(J) = X$
END IF
NEXT J
NEXT I
FOR I = 1 TO S
PRINT : PRINT C$(I): PRINT B$(I)
FOR J = 1 TO H - 3: PRINT : NEXT J
NEXT I
DATA LISA SPINXS,987-6543
DATA BOB SIMON,123-4455
DATA BILL SIMON,123-4567
DATA HARRY TROUTMAN,876-2174
DATA HARRY PARKER,222-3333
DATA *END*,0
'1.9
' This program will guess secret letter in 5x5 matrix.
'
CLS : DIM A(25): S = 11
RANDOMIZE TIMER
FOR I = 1 TO 5
FOR J = 1 TO 5
DO: X = INT(RND(3) * 25): LOOP UNTIL A(X) = 0
B$(I, J) = CHR$(X + 65): LOCATE I, 13 + J * 2: PRINT B$(I, J)
A(X) = 1
NEXT J
NEXT I
LOCATE 2, 30: PRINT "SCORE="; S
I = 0
WHILE A$ <> "Y"
I = I + 1
LOCATE 10, 10: PRINT "IS THE LETTER IN ROW"; I; : INPUT A$
LOCATE 2, 30: S = S - 1: PRINT "SCORE="; S: LOCATE 10, 10
WEND: A$ = "": J = 0
WHILE A$ <> "Y"
J = J + 1
LOCATE 12, 10: PRINT "IS THE LETTER IN COL"; J; : INPUT A$
LOCATE 2, 30: S = S - 1: PRINT "SCORE="; S
WEND
IF S > 0 THEN LOCATE 14, 1: PRINT "YOUR LETTER IS "; B$(I, J)
'1.10
' This program will display squares relative to cursor and #.
' Key movements: I-up, J-left, K-right, M-down
'
CLS : R = 5: C = 5
WHILE VAL(A$) = 0
LOCATE R, C: PRINT "#": A$ = ""
WHILE A$ = "": A$ = INKEY$: WEND
IF VAL(A$) = 0 THEN
LOCATE R, C: PRINT " "
IF A$ = "I" THEN R = R - 1
IF A$ = "M" THEN R = R + 1
IF A$ = "J" THEN C = C - 1
IF A$ = "K" THEN C = C + 1
END IF
WEND
X = VAL(A$)
IF X = 1 THEN A = 1: B = 0
IF X = 2 THEN A = 1: B = -1
IF X = 3 THEN A = -1: B = -1
IF X = 4 THEN A = -1: B = 0
IF R + 5 * A > 24 OR R + 5 * A < 1 THEN
LOCATE 21, 1: PRINT "OFF THE SCREEN": END
END IF
IF C + 9 * B > 80 OR C + 9 * B < 1 THEN
LOCATE 21, 1: PRINT "OFF THE SCREEN": END
END IF
LOCATE R + 1 * A, C + 8 * B: PRINT "*********"
LOCATE R + 2 * A, C + 8 * B: PRINT "* *"
LOCATE R + 3 * A, C + 8 * B: PRINT USING "* # *"; X
LOCATE R + 4 * A, C + 8 * B: PRINT "* *"
LOCATE R + 5 * A, C + 8 * B: PRINT "*********"
'2.1
' This program will outline screen with random letters.
'
RANDOMIZE TIMER
DO
CLS
FOR I = 1 TO 11
X = INT(RND * 26): A$ = CHR$(65 + X)
LOCATE I, I
FOR J = I TO 80 - I: PRINT A$; : NEXT J
FOR J = I + 1 TO 23 - I
LOCATE J, I: PRINT A$: LOCATE J, 80 - I: PRINT A$
NEXT J
LOCATE 23 - I, I
FOR J = I TO 80 - I: PRINT A$; : NEXT J
B$ = "": WHILE B$ = "": B$ = INKEY$: WEND
NEXT I
LOOP UNTIL B$ = CHR$(27)
'2.2
' This program will print the longest sequence of letters.
'
INPUT "Enter N: "; N: DIM A$(N)
FOR I = 1 TO N: INPUT "Enter letter: "; A$(I): NEXT I
I = N: FOUND = 0
WHILE (I >= 2) AND NOT FOUND
FOR J = 1 TO N - I + 1
ONE = -1
FOR K = 0 TO I - 2
IF A$(J + K) >= A$(J + K + 1) THEN ONE = 0
NEXT K
IF ONE THEN
FOR K = 0 TO I - 1: PRINT A$(J + K); " "; : NEXT K
PRINT : FOUND = -1
END IF
NEXT J
I = I - 1
WEND
'2.3
' This program will change the margins of a given text.
'
INPUT "Enter text: "; A$: A$ = A$ + " ": L = LEN(A$)
LW = 5: PRINT SPACE$(10);
FOR I = 1 TO L
C$ = MID$(A$, I, 1)
IF C$ <> " " THEN
W$ = W$ + C$
ELSE
LL = LEN(W$)
IF LW + LL > 30 THEN PRINT : PRINT SPACE$(5); : LW = 0
IF LL > 0 THEN PRINT W$; " "; : LW = LW + LL + 1: W$ = ""
IF LL = 0 AND LW > 0 THEN PRINT " "; : LW = LW + 1
END IF
NEXT I
'2.4
' This program will print word with consonants alphabeitized.
'
INPUT "Enter word: "; A$: L = LEN(A$): V$ = "AEIOU"
DIM V$(L), C$(L), A(L)
FOR I = 1 TO L
B$ = MID$(A$, I, 1): J = 1
WHILE (J < 5) AND (MID$(V$, J, 1) <> B$): J = J + 1: WEND
IF MID$(V$, J, 1) <> B$ THEN
C = C + 1: C$(C) = B$
ELSE
V = V + 1: A(I) = 1: V$(V) = B$
END IF
NEXT I
FOR I = 1 TO V - 1
FOR J = I + 1 TO V
IF V$(I) > V$(J) THEN X$ = V$(I): V$(I) = V$(J): V$(J) = X$
NEXT J
NEXT I
FOR I = 1 TO C - 1
FOR J = I + 1 TO C
IF C$(I) > C$(J) THEN X$ = C$(I): C$(I) = C$(J): C$(J) = X$
NEXT J
NEXT I
FOR I = 1 TO L
IF A(I) = 1 THEN VV = VV + 1: PRINT V$(VV);
IF A(I) = 0 THEN CC = CC + 1: PRINT C$(CC);
NEXT I
'2.5
' This program will print common letters and line up words.
'
INPUT "Enter N: "; N
FOR I = 1 TO N: INPUT "Enter word: "; A$(I): NEXT I
FOR I = 1 TO 26
X$ = CHR$(64 + I): CO = -1: J = 1
WHILE (J <= N) AND CO
CO = INSTR(A$(J), X$)
J = J + 1
WEND
IF CO THEN PRINT X$; " "; : FOUND = -1
NEXT I
IF NOT FOUND THEN PRINT "NO COMMON LETTERS": END
PRINT : INPUT "Choose letter: "; A$
FOR I = 1 TO N
J = 1: WHILE MID$(A$(I), J, 1) <> A$: J = J + 1: WEND
PRINT SPACE$(10 - J); A$(I)
NEXT I
'2.6
' This program will keep score for a double dual race.
'
CLS : DIM IN$(21)
FOR I = 1 TO 21
PRINT "Place "; I; ":"; : INPUT IN$(I)
IF I > 1 THEN
J = 1
WHILE J <= TN AND INIT$(J) <> IN$(I): J = J + 1: WEND
END IF
IF (INIT$(J) <> IN$(I)) OR (I = 1) THEN
TN = TN + 1: INIT$(TN) = IN$(I)
END IF
NEXT I
' Assert TEAM$(1, 2, 3) = 3 unique team INITIALS
FOR I = 1 TO 2
FOR J = I + 1 TO 3
PL = 0: T1 = 0: T2 = 0: T1PL = 0: T2PL = 0
FOR K = 1 TO 21
IF IN$(K) = INIT$(I) THEN
PL = PL + 1: T1 = T1 + PL: T1PL = T1PL + 1
TEAM1(T1PL) = PL
END IF
IF IN$(K) = INIT$(J) THEN
PL = PL + 1: T2 = T2 + PL: T2PL = T2PL + 1
TEAM2(T2PL) = PL
END IF
NEXT K
T1 = T1 - TEAM1(6) - TEAM1(7)
T2 = T2 - TEAM2(6) - TEAM2(7)
PRINT "TEAM "; INIT$(I); ":"; T1; " POINTS"
PRINT "TEAM "; INIT$(J); ":"; T2; " POINTS"
IF (T1 < T2) OR (T1 = T2 AND TEAM1(6) < TEAM2(6)) THEN
PRINT "TEAM "; INIT$(I);
ELSE
PRINT "TEAM "; INIT$(J);
END IF
PRINT " WINS!": PRINT
NEXT J
NEXT I
'2.7
' This program will allow manipulation of 3x3 array of data.
'
DATA 10.11, 20.22, 30.33
DATA 11.1, 22.2, 33.3
DATA 10, 20, 30
FOR I = 1 TO 3: FOR J = 1 TO 3: READ A(I, J): NEXT J, I
WHILE C$ <> "C"
CLS
PRINT "A. EDIT OR CHANGE A VALUE"
PRINT "B. DISPLAY THE RESULTS"
PRINT "C. QUIT."
INPUT "Enter option: "; C$
IF C$ = "A" THEN
INPUT "Enter row, col: "; ROW, COL
INPUT "Enter number: "; A(ROW, COL)
ELSEIF C$ = "B" THEN
FOR I = 1 TO 3: A(I, 4) = 0: NEXT I
FOR J = 1 TO 3: A(4, J) = 0: NEXT J: TOT = 0
FOR I = 1 TO 3
FOR J = 1 TO 3
PRINT USING "###.## "; A(I, J); : TOT = TOT + A(I, J)
A(4, J) = A(4, J) + A(I, J): A(I, 4) = A(I, 4) + A(I, J)
NEXT J
PRINT USING "###.##"; A(I, 4)
NEXT I
FOR J = 1 TO 3: PRINT USING "###.## "; A(4, J); : NEXT J
PRINT USING "###.##"; TOT
END IF
IF C$ <> "C" THEN
PRINT : PRINT "Press any key: ";
A$ = "": WHILE A$ = "": A$ = INKEY$: WEND
END IF
WEND
'2.8
' This program will print all combinations of 4 digits.
'
FOR A = 1 TO 8
FOR B = A + 1 TO 9
P = A * B
IF P >= 10 THEN
P$ = MID$(STR$(P), 2)
C = VAL(MID$(P$, 1, 1)): D = VAL(MID$(P$, 2, 1))
IF NOT (A = C OR A = D OR B = C OR B = D) THEN
PRINT A; B; C; D, A; "X"; B; "= "; P$: S = S + 1
END IF
END IF
NEXT B
NEXT A
PRINT " TOTAL ="; S
'2.9
' This program will select words, given a string w/wildcard.
'
INPUT "Enter N: "; N: DIM A$(N)
FOR I = 1 TO N: INPUT "Enter word: "; A$(I): NEXT I
DO
INPUT "Enter string: "; A$: L = LEN(A$): W = 0
I = INSTR(A$, "*"): IF I = 0 THEN END
' Asterisk is position I
L$ = LEFT$(A$, I - 1): R$ = RIGHT$(A$, L - I)
FOR J = 1 TO N
IF LEFT$(A$(J), I - 1) = L$ THEN
IF RIGHT$(A$(J), L - I) = R$ THEN
PRINT A$(J): W = 1
END IF
END IF
NEXT J
IF W = 0 THEN PRINT "NO WORDS FOUND"
PRINT
LOOP UNTIL I = 0
'2.10
' This program will maintain air conditioning in 3 rooms.
'
INPUT "Enter last 5-minutes:"; LM
CLS : OF = 72: CO = 65: DR = 79
PRINT " OF CO DS OFFICE COMP. DRY. MIN:SEC"
DO
IF ((M MOD 5 = 0) AND S = 0) OR CH = 1 THEN
PRINT O; C; D; " ";
PRINT USING "##.#"; OF; : PRINT " ";
PRINT USING "##.#"; CO; : PRINT " ";
PRINT USING "##.#"; DR; : PRINT " ";
PRINT USING "###:"; M;
IF S > 0 THEN PRINT USING "##"; S ELSE PRINT "00"
CH = 0
END IF
S = S + 15: IF S = 60 THEN M = M + 1: S = 0
OF = OF + .1 - OFAIR
CO = CO + .2 - COAIR
DR = DR + .025 - DRAIR
IF OF > 78 AND O = 0 THEN O = 1: CH = 1
IF CO > 70 AND C = 0 THEN C = 1: CH = 1
IF DR > 85 AND D = 0 THEN D = 1: CH = 1
IF OF < 72 AND O = 1 THEN O = 0: CH = 1
IF CO < 65 AND C = 1 THEN C = 0: CH = 1
IF DR < 75 AND D = 1 THEN D = 0: CH = 1
AIR = (O + C + D) * 2
IF AIR = 0 THEN
OFAIR = 0: COAIR = 0: DRAIR = 0
ELSE
OFAIR = O / AIR: COAIR = C / AIR: DRAIR = D / AIR
END IF
LOOP UNTIL (M = LM) AND (S > 0)
'3.1
' This program will display the sides of a die.
'
' 6 ways to represent die (each with different top)
' DATA Top, Front, Right, Back, Left, (Bottom derived from top)
DATA 1, 5, 4, 2, 3
DATA 6, 5, 3, 2, 4
DATA 5, 1, 3, 6, 4
DATA 2, 1, 4, 6, 3
DATA 3, 5, 1, 2, 6
DATA 4, 5, 6, 2, 1
INPUT "Enter top, front: "; T, F
' Determine which data set to use (based on top #)
WHILE A <> T
READ A
FOR J = 1 TO 4: READ B(J): NEXT J
WEND
' Rotate sides till a side matches the front #
J = 1
WHILE B(J) <> F:
J = J + 1
WEND
IF J = 4 THEN J = 0
R = J + 1
'Generate rest of sides, sum of opposites sides = 7
PRINT USING "TOP=# FRONT=# RIGHT=#"; T; F; B(R)
PRINT USING "BACK=# LEFT=# BOTTOM=#"; 7 - F; 7 - B(R); 7 - T
'3.2
' This program will factor a quadratic equation.
'
INPUT "Enter A, B, C: ", A, B, C
IF A < 0 THEN A = -A: B = -B: C = -C
IF A > 1 THEN
FOR I = A TO 2 STEP -1
IF (A MOD I = 0) AND (B MOD I = 0) AND (C MOD I = 0) THEN
A = A / I: B = B / I: C = C / I
PRINT LTRIM$(STR$(I));
END IF
NEXT I
END IF
S = B * B - 4 * A * C
IF S < 0 THEN PRINT "CANNOT BE FACTORED": END
H = INT(SQR(S) + .1): E = 2 * A
R(1) = -B + H: R(2) = -B - H
FOR K = 1 TO 2
D = E: N = R(K)
I = D
WHILE (I > 0) AND ((N MOD I <> 0) OR (D MOD I <> 0))
I = I - 1
WEND
N = N / I: D = D / I
PRINT "("; : IF D > 1 THEN PRINT LTRIM$(STR$(D));
PRINT "X";
IF N < 0 THEN PRINT "+"; LTRIM$(STR$((-N))); ")";
IF N > 0 THEN PRINT "-"; LTRIM$(STR$(N)); ")";
NEXT K
'3.3
' This program will simulate a calculator.
'
INPUT "Enter expression: "; A$: L = LEN(A$)
FOR I = 1 TO L
B$ = MID$(A$, I, 1)
IF ASC(B$) >= ASC("0") THEN
C$ = C$ + B$
ELSE
J = J + 1: A(J) = VAL(C$): C$ = ""
B(J) = INSTR("+-*/", B$)
END IF
NEXT I
J = J + 1: A(J) = VAL(C$): K = 1
FOR I = 1 TO J - 1
IF B(I) < 3 THEN
B(K) = B(I): K = K + 1: A(K) = A(I + 1)
ELSE
IF B(I) = 3 THEN
A(K) = A(K) * A(I + 1)
ELSE
A(K) = A(K) / A(I + 1)
END IF
END IF
NEXT I
S = A(1)
IF K > 1 THEN
FOR I = 1 TO K - 1
IF B(I) = 2 THEN S = S - A(I + 1) ELSE S = S + A(I + 1)
NEXT I
END IF
PRINT USING "###.###"; S
'3.4
' This program will compute all digits of N factorial.
'
INPUT "Enter N: "; N: DIM A(3 * N)
D = 1: A(1) = 1
FOR I = 1 TO N
FOR J = 1 TO D
A(J) = A(J) * I + C: C = INT(A(J) / 10)
A(J) = A(J) - 10 * C
NEXT J
WHILE C > 0
CC = INT(C / 10): D = D + 1: A(D) = C - 10 * CC: C = CC
WEND
NEXT I
FOR I = D TO 1 STEP -1: PRINT MID$(STR$(A(I)), 2); : NEXT I
'3.5
' This program will sum and subtract 2 big decimals.
'
DIM A(30), B(30), C(30), D(30): CLS
INPUT "Enter #1: "; A$: INPUT "Enter #2: "; B$
A = LEN(A$): B = LEN(B$)
FOR I = A TO 1 STEP -1
IF MID$(A$, I, 1) = "." THEN
X = I
ELSE
S = S + 1: A(S) = VAL(MID$(A$, I, 1))
END IF
NEXT I: S = 0
FOR I = B TO 1 STEP -1
IF MID$(B$, I, 1) = "." THEN
Y = I
ELSE
S = S + 1: B(S) = VAL(MID$(B$, I, 1))
END IF
NEXT I
' Allign decimal point
G = A - X: H = B - Y
IF G > H THEN L = G ELSE L = H
Z = G - H
IF Z > 0 THEN
' Second # is smaller, so place leading 0s and align decimal
FOR I = B - 1 TO 1 STEP -1
B(I + Z) = B(I): B(I) = 0
NEXT I
B = B + Z
ELSEIF Z < 0 THEN
' First # is smaller, so place leading 0s and align decimal
FOR I = A - 1 TO 1 STEP -1
A(I - Z) = A(I): A(I) = 0
NEXT I
A = A - Z
END IF
IF A > B THEN Y = A - 1 ELSE Y = B - 1
' Add and subtract
FOR I = 1 TO Y
C(I) = A(I) + B(I) + C: C = INT(C(I) / 10)
C(I) = C(I) - C * 10
D(I) = A(I) - B(I) - D
IF D(I) < 0 THEN D = 1 ELSE D = 0
D(I) = D(I) + D * 10
NEXT I
PRINT "SUM = "; : IF C > 0 THEN PRINT LTRIM$(STR$(C));
FOR I = Y TO 1 STEP -1
IF I = L THEN PRINT ".";
PRINT LTRIM$(STR$(C(I)));
NEXT I
PRINT : PRINT "DIFFERENCE = ";
FOR I = Y TO 1 STEP -1
IF I = L THEN PRINT ".";
PRINT LTRIM$(STR$(D(I)));
NEXT I
'3.6
' This program will control the movements of a snake.
'
CLS : DIM A(25, 81)
V = 12: H = 8: LOCATE V, H
FOR I = 8 TO 32
PRINT "*"; : A(V, I) = 1
A$ = A$ + "12": B$ = B$ + RIGHT$(STR$(I), 2)
NEXT I
WHILE D$ = "": D$ = INKEY$: WEND: C$ = D$
DO UNTIL C$ = CHR$(27)
FOR I = 1 TO 100
D$ = INKEY$: IF D$ <> "" THEN C$ = D$
NEXT I
IF C$ = "I" THEN V = V - 1
IF C$ = "M" THEN V = V + 1
IF C$ = "J" THEN H = H - 1
IF C$ = "K" THEN H = H + 1
IF A(V, H) OR V = 0 OR V = 25 OR H = 0 OR H = 81 THEN END
A(V, H) = 1: LOCATE V, H: PRINT "*"
X = VAL(RIGHT$(A$, 2)): Y = VAL(RIGHT$(B$, 2))
LOCATE X, Y: PRINT " "
A(X, Y) = 0
A$ = LEFT$(A$, 24 * 2): B$ = LEFT$(B$, 24 * 2)
A$ = RIGHT$(STR$(V), 2) + A$
B$ = RIGHT$(STR$(H), 2) + B$
LOOP
'3.7
' This program will print 3 permutations of a word.
'
INPUT "Enter word: "; A$: INPUT "Enter K: "; KK: L = LEN(A$)
FOR I = 1 TO L: A$(I) = MID$(A$, I, 1): NEXT I
' Alphabetize letters
FOR I = 1 TO L - 1
FOR J = I + 1 TO L
IF A$(I) > A$(J) THEN X$ = A$(I): A$(I) = A$(J): A$(J) = X$
NEXT J
NEXT I
' Produce factorials F(I) = (I-1)!
FOR I = 1 TO L
F = 1
FOR J = 1 TO I - 1: F = F * J: NEXT J
F(I) = F
NEXT I
FOR T = 1 TO 3
K = KK * T - 1
' Generate Kth permutation
FOR I = L TO 1 STEP -1
X = INT(K / F(I))
FOR J = 1 TO L
IF A(J) = 0 THEN
S = S + 1: IF S > X THEN A(J) = 1: PRINT A$(J); : J = L
END IF
NEXT J
S = 0: K = K - F(I) * X
NEXT I
FOR I = 1 TO L: A(I) = 0: NEXT I
PRINT " ";
NEXT T
'3.8
' This program will display N pennies on board.
'
INPUT "Enter N: "; N: DIM A(N): CLS
PRINT "TOTAL ="; N
IF N = 8 THEN SP = 1 ' 8 and 14 are special cases
J = N MOD 2: J = 2 - J: S = J
IF N = 14 THEN S = J + 2
PRINT " ";
FOR I = 1 TO N: PRINT USING "##"; I MOD 10; : NEXT I
PRINT
FOR I = 1 TO N: PRINT USING "#"; I MOD 10: NEXT I
FOR I = 1 TO N
A(I) = S
IF N = 14 AND I = 14 THEN S = 2: A(I) = S
LOCATE 2 + I, 2 * S + 1: PRINT "*"
S = S + 2 + SP
IF S > N THEN
IF SP THEN S = S - N ELSE S = (N MOD 2) + 1
END IF
NEXT I
FOR I = 1 TO N
LOCATE I + 2, 2 * N + 4: PRINT "(";
PRINT LTRIM$(STR$(I)); ","; LTRIM$(STR$(A(I))); ") ";
PRINT "SUM ="; I + A(I)
NEXT I
'3.9
' This program will determine # of moves made to a stack.
'
' 1 block - 1 move (obvious)
' 2 blocks- 3 moves (Move 1 stack, move #2, move 1 stack)
' 3 blocks- 7 moves (Move 2 stack, move #3, move 2 stack on #3)
' (3 moves + 1 move + 3 moves)
' 4 blocks- 15 moves (Move 3 stack, move #4, move 3 stack on #4)
' (7 moves + 1 move + 7 moves)
' N blocks- 2^N - 1 moves
DIM A(16)
INPUT "Enter N: "; N: A(1) = 1
FOR I = 2 TO N: A(I) = A(I - 1) * 2 + 1: NEXT I
PRINT A(N)
'3.10
' This program will find set of #s P, Q, R (P = Q x R).
'
INPUT "Enter S:"; S
Q = S
DO
DO
Q = Q + 1: X1 = INT(Q / 10): Y1 = Q - X1 * 10
LOOP UNTIL X1 <> Y1
NU = INT(10000 / Q)
FOR R = NU TO 999
X2 = INT(R / 100): C = R - X2 * 100
Y2 = INT(C / 10): Z2 = C - Y2 * 10
IF X2 <> Y2 AND Y2 <> Z2 AND X2 <> Z2 THEN
IF X1 <> X2 AND X1 <> Y2 AND X1 <> Z2 THEN
IF Y1 <> X2 AND Y1 <> Y2 AND Y1 <> Z2 THEN
A(X1) = 1: A(Y1) = 1: A(X2) = 1: A(Y2) = 1: A(Z2) = 1
P$ = STR$(Q * R)
FOR I = 2 TO 6
X = VAL(MID$(P$, I, 1)): IF A(X) THEN DUPL = -1
NEXT I
FOR I = 2 TO 5
FOR J = I + 1 TO 6
IF MID$(P$, I, 1) = MID$(P$, J, 1) THEN DUPL = -1
NEXT J
NEXT I
IF NOT DUPL THEN
PRINT "P ="; P$;
PRINT USING " Q = ## R = ###"; Q; R: END
END IF
FOR I = 0 TO 9: A(I) = 0: NEXT I: DUPL = 0
END IF
END IF
END IF
NEXT R
LOOP UNTIL Q > 99