```        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
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
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
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
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
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

```