41 lines
1.1 KiB
Plaintext
41 lines
1.1 KiB
Plaintext
100 REM RECURSIVE SOLUTION
|
|
110 MS=100:REM MAX STACK DEPTH
|
|
120 DIM BL$(MS):REM BLOCKS LEFT
|
|
130 DIM W$(MS):REM REMAINING LETTERS
|
|
140 DIM I(MS):REM LOOP CONTROL VARIABLE
|
|
150 DIM RV(MS):REM RETURN VALUE
|
|
160 SP=-1:REM STACK POINTER
|
|
170 READ BL$
|
|
180 PRINT "USING BLOCKS: "
|
|
190 FOR I=1 TO LEN(BL$) STEP 2
|
|
200 : PRINT"("MID$(BL$,I,2)")";
|
|
210 NEXT I
|
|
220 PRINT CHR$(13)
|
|
230 READ W$
|
|
240 IF W$="" THEN 320
|
|
250 PRINT W$;"->";
|
|
260 SP=SP+1:BL$(SP)=BL$:W$(SP)=W$
|
|
270 GOSUB 350
|
|
280 IF RV(SP) THEN PRINT "YES": GOTO 300
|
|
290 PRINT "NO"
|
|
300 SP=SP-1
|
|
310 GOTO 230
|
|
320 READ BL$
|
|
330 IF BL$ THEN PRINT:GOTO 180
|
|
340 END
|
|
350 IF LEN(W$(SP))=0 THEN RV(SP)=-1:RETURN
|
|
360 I(SP)=1
|
|
370 IF I(SP)>=LEN(BL$(SP)) THEN RV(SP)=0:RETURN
|
|
380 IF MID$(BL$(SP),I(SP),1) = LEFT$(W$(SP),1) THEN 410
|
|
390 IF MID$(BL$(SP),I(SP)+1,1) = LEFT$(W$(SP),1) THEN 410
|
|
400 GOTO 450
|
|
410 W$(SP+1)=MID$(W$(SP),2)
|
|
420 BL$(SP+1)=LEFT$(BL$(SP),I(SP)-1)+MID$(BL$(SP),I(SP)+2)
|
|
430 SP=SP+1:GOSUB 350:SP=SP-1
|
|
440 IF RV(SP+1) THEN RV(SP)=-1:RETURN
|
|
450 I(SP)=I(SP)+2:GOTO 370
|
|
460 DATA BOXKDQCPNAGTRETGQDFSJWHUVIANOBERFSLYPCZM
|
|
470 DATA A, BORK, BOOK, TREAT, COMMON, SQUAD, CONFUSE, ""
|
|
480 DATA ABABACAC,ABBA,""
|
|
490 DATA ""
|