Knight's tour: Difference between revisions
Content added Content deleted
(Updated D entry) |
(Added BBC BASIC) |
||
Line 254: | Line 254: | ||
383 34 97 92 391 32 405 90 393 30 547 88 471 28 505 86 469 26 465 84 369 24 429 82 |
383 34 97 92 391 32 405 90 393 30 547 88 471 28 505 86 469 26 465 84 369 24 429 82 |
||
96 381 384 33 386 91 392 31 406 89 472 29 506 87 470 27 504 85 468 25 430 83 368 23</pre> |
96 381 384 33 386 91 392 31 406 89 472 29 506 87 470 27 504 85 468 25 430 83 368 23</pre> |
||
=={{header|BBC BASIC}}== |
|||
{{works with|BBC BASIC for Windows}} |
|||
[[Image:knights_tour_bbc.gif|right]] |
|||
<lang bbcbasic> VDU 23,22,256;256;16,16,16,128 |
|||
VDU 23,23,4;0;0;0; |
|||
OFF |
|||
GCOL 4,15 |
|||
FOR x% = 0 TO 512-128 STEP 128 |
|||
RECTANGLE FILL x%,0,64,512 |
|||
NEXT |
|||
FOR y% = 0 TO 512-128 STEP 128 |
|||
RECTANGLE FILL 0,y%,512,64 |
|||
NEXT |
|||
GCOL 9 |
|||
DIM Board%(7,7) |
|||
X% = 0 |
|||
Y% = 0 |
|||
Total% = 0 |
|||
REPEAT |
|||
Board%(X%,Y%) = TRUE |
|||
IF Total% DRAW X%*64+32,Y%*64+32 ELSE MOVE X%*64+32,Y%*64+32 |
|||
Total% += 1 |
|||
UNTIL NOT FNchoosemove(X%, Y%) |
|||
IF Total%<>64 STOP |
|||
REPEAT WAIT 1 : UNTIL FALSE |
|||
END |
|||
DEF FNchoosemove(RETURN X%, RETURN Y%) |
|||
LOCAL M%, newx%, newy% |
|||
M% = 9 |
|||
PROCtrymove(X%+1, Y%+2, M%, newx%, newy%) |
|||
PROCtrymove(X%+1, Y%-2, M%, newx%, newy%) |
|||
PROCtrymove(X%-1, Y%+2, M%, newx%, newy%) |
|||
PROCtrymove(X%-1, Y%-2, M%, newx%, newy%) |
|||
PROCtrymove(X%+2, Y%+1, M%, newx%, newy%) |
|||
PROCtrymove(X%+2, Y%-1, M%, newx%, newy%) |
|||
PROCtrymove(X%-2, Y%+1, M%, newx%, newy%) |
|||
PROCtrymove(X%-2, Y%-1, M%, newx%, newy%) |
|||
IF M%=9 THEN = FALSE |
|||
X% = newx% : Y% = newy% |
|||
= TRUE |
|||
DEF PROCtrymove(X%, Y%, RETURN M%, RETURN newx%, RETURN newy%) |
|||
LOCAL N% |
|||
IF NOT FNvalidmove(X%,Y%) THEN ENDPROC |
|||
IF FNvalidmove(X%+1,Y%+2) N% += 1 |
|||
IF FNvalidmove(X%+1,Y%-2) N% += 1 |
|||
IF FNvalidmove(X%-1,Y%+2) N% += 1 |
|||
IF FNvalidmove(X%-1,Y%-2) N% += 1 |
|||
IF FNvalidmove(X%+2,Y%+1) N% += 1 |
|||
IF FNvalidmove(X%+2,Y%-1) N% += 1 |
|||
IF FNvalidmove(X%-2,Y%+1) N% += 1 |
|||
IF FNvalidmove(X%-2,Y%-1) N% += 1 |
|||
IF N%>M% THEN ENDPROC |
|||
IF N%=M% IF RND(2)=1 THEN ENDPROC |
|||
M% = N% |
|||
newx% = X% : newy% = Y% |
|||
ENDPROC |
|||
DEF FNvalidmove(X%,Y%) |
|||
IF X%<0 OR X%>7 OR Y%<0 OR Y%>7 THEN = FALSE |
|||
= NOT(Board%(X%,Y%))</lang> |
|||
=={{header|Bracmat}}== |
=={{header|Bracmat}}== |