VDU 23,22,453;453;8,20,16,128 *FONT Arial,28 DIM Board%(8,8) Board%() = %111111111 FOR L% = 0 TO 9:P% = L%*100 LINE 2,P%+2,902,P%+2 IF (L% MOD 3)=0 LINE 2,P%,902,P% : LINE 2,P%+4,902,P%+4 LINE P%+2,2,P%+2,902 IF (L% MOD 3)=0 LINE P%,2,P%,902 : LINE P%+4,2,P%+4,902 NEXT DATA " 4 5 6 " DATA " 6 1 8 9" DATA "3 7 " DATA " 8 5 " DATA " 4 3 " DATA " 6 7 " DATA " 2 6" DATA "1 5 4 3 " DATA " 2 7 1 " FOR R% = 8 TO 0 STEP -1 READ A$ FOR C% = 0 TO 8 A% = ASCMID$(A$,C%+1) AND 15 IF A% Board%(R%,C%) = 1 << (A%-1) NEXT NEXT R% GCOL 4 PROCshow WAIT 200 dummy% = FNsolve(Board%(), TRUE) GCOL 2 PROCshow REPEAT WAIT 1 : UNTIL FALSE END DEF PROCshow LOCAL C%,P%,R% FOR C% = 0 TO 8 FOR R% = 0 TO 8 P% = Board%(R%,C%) IF (P% AND (P%-1)) = 0 THEN IF P% P% = LOGP%/LOG2+1.5 MOVE C%*100+30,R%*100+90 VDU 5,P%+48,4 ENDIF NEXT NEXT ENDPROC DEF FNsolve(P%(),F%) LOCAL C%,D%,M%,N%,R%,X%,Y%,Q%() DIM Q%(8,8) REPEAT Q%() = P%() FOR R% = 0 TO 8 FOR C% = 0 TO 8 D% = P%(R%,C%) IF (D% AND (D%-1))=0 THEN M% = NOT D% FOR X% = 0 TO 8 IF X%<>C% P%(R%,X%) AND= M% IF X%<>R% P%(X%,C%) AND= M% NEXT FOR X% = C%DIV3*3 TO C%DIV3*3+2 FOR Y% = R%DIV3*3 TO R%DIV3*3+2 IF X%<>C% IF Y%<>R% P%(Y%,X%) AND= M% NEXT NEXT ENDIF NEXT NEXT Q%() -= P%() UNTIL SUMQ%()=0 M% = 10 FOR R% = 0 TO 8 FOR C% = 0 TO 8 D% = P%(R%,C%) IF D%=0 M% = 0 IF D% AND (D%-1) THEN N% = 0 REPEAT N% += D% AND 1 D% DIV= 2 UNTIL D% = 0 IF N%