REM Program to help solve "CryptoQuip" newspaper puzzle 10 DIM a, b, c, d, e, f 20 DIM key$, quip$, out1$, out2$, out3$, out4$, oldlet$, med1$, med2$ 30 CLS : LOCATE 5, 1: LINE INPUT "Enter the CryptoQuip: "; quip$ 40 quip$ = UCASE$(quip$): a = LEN(quip$): b = INT(a / 2): c = 0: d = 1 43 IF b + c <= a THEN e = ASC(MID$(quip$, (b + c), 1)) IF ((e < 65) OR (e > 96)) THEN GOTO 46 IF d = 1 THEN c = ABS(c) + 1: d = 0 ELSE c = -c: d = 1 GOTO 43 END IF 46 b = b + c: c = a - b: d = 0 50 e = 1: out1$ = LEFT$(quip$, b): out2$ = MID$(quip$, (b + 1)) 60 CLS : LOCATE 5, 1: PRINT "Move cursor with arrows; type a replacement letter; ESC when done." 70 LOCATE 7, 1: PRINT out1$: LOCATE 10, 1: PRINT out2$ 80 out3$ = out1$ FOR a = 1 TO b: f = ASC(MID$(out3$, a, 1)) IF ((f > 64) AND (f < 97)) THEN MID$(out3$, a, 1) = " " NEXT 85 out4$ = out2$ FOR a = 1 TO c: f = ASC(MID$(out4$, a, 1)) IF ((f > 64) AND (f < 97)) THEN MID$(out4$, a, 1) = " " NEXT 90 f = 1: LOCATE 8, 1: PRINT out3$: LOCATE 11, 1: PRINT out4$: GOTO 100 91 LOCATE 13, 1: PRINT "Legal Keys are Cursor, Alphabet, Space": GOTO 100 92 LOCATE 13, 1: PRINT "Key Is Same As Crypto Letter ": GOTO 100 93 LOCATE 13, 1: PRINT "Only Crypto Letters Can Be Changed ": GOTO 100 94 LOCATE 13, 1: PRINT "Key Already Assigned To Crypto Letter " 100 LOCATE 7 + d, ((1 - (d / 3)) * e + ((d / 3) * f)), 1, 25, 31 key$ = INKEY$: a = LEN(key$) IF a = 0 THEN GOTO 100 110 LOCATE 13, 1: PRINT " " IF key$ = CHR$(27) THEN LOCATE 20, 1 INPUT "Are you SURE you want to quit (Y/N)?"; key$ IF ((key$ = "y") OR (key$ = "Y")) THEN SYSTEM LOCATE 20, 1: PRINT STRING$(60, " "): GOTO 100 END IF 120 IF a = 2 THEN a = INSTR("HKMP", RIGHT$(key$, 1)) IF a = 0 THEN GOTO 91 IF a = 1 THEN d = 0: GOTO 100 IF a = 4 THEN d = 3: GOTO 100 IF a = 2 THEN IF d = 0 THEN IF e = 1 THEN GOTO 100 ELSE e = e - 1: GOTO 100 ELSE IF f = 1 THEN GOTO 100 ELSE f = f - 1: GOTO 100 END IF END IF IF a = 3 THEN IF d = 0 THEN IF e = b THEN GOTO 100 ELSE e = e + 1: GOTO 100 ELSE IF f = c THEN GOTO 100 ELSE f = f + 1: GOTO 100 END IF END IF END IF 130 key$ = UCASE$(key$): a = ASC(key$) IF ((a < 65) OR (a > 96)) THEN IF a <> 32 THEN GOTO 91 140 IF d = 0 THEN oldlet$ = MID$(out1$, e, 1) ELSE oldlet$ = MID$(out2$, f, 1) 150 IF oldlet$ = key$ THEN IF key$ = " " THEN GOTO 100 ELSE GOTO 92 160 a = ASC(oldlet$): IF ((a < 65) OR (a > 96)) THEN GOTO 93 170 a = INSTR(out3$, key$): IF ((a > 0) AND (key$ <> " ")) THEN GOTO 94 a = INSTR(out4$, key$): IF ((a > 0) AND (key$ <> " ")) THEN GOTO 94 200 med1$ = out1$: med2$ = out2$ 210 a = INSTR(med1$, oldlet$) IF a > 0 THEN MID$(med1$, a, 1) = " " MID$(out3$, a, 1) = key$ GOTO 210 END IF 220 a = INSTR(med2$, oldlet$) IF a > 0 THEN MID$(med2$, a, 1) = " " MID$(out4$, a, 1) = key$ GOTO 220 END IF 230 LOCATE 8, 1: PRINT out3$: LOCATE 11, 1: PRINT out4$: GOTO 100