Find Chess960 starting position identifier: Difference between revisions
Find Chess960 starting position identifier (view source)
Revision as of 19:44, 23 July 2022
, 1 year ago→{{header|Commodore BASIC}}: read demo data instead of prompting user
(→{{header|Julia}}: Correct algorithm.) |
(→{{header|Commodore BASIC}}: read demo data instead of prompting user) |
||
Line 30:
<lang basic>100 REM DERIVE SP-ID FROM CHESS960 POS
120
130 GOSUB 170
140 PRINT SP
▲140 IF LEN(AR$)=0 THEN END
150 GOTO 110
160 DATA QNRBBNKR, RNBQKBNR, RQNBBKRN, RNQBBKRN,
160 PRINT "ARRAY MUST BE 8 PIECES.": GOTO 120▼
170
180 : P$=MID$(AR$,I,1)▼
190 K=0:
200 : IF P$="K" THEN K(K)=I: K=K+1: GOTO 250▼
210 :
230
▲250 NEXT I
260 : IF P$="K
270 : IF
280 : IF
290 : IF
300
320 IF K<>1 THEN PRINT "
330 IF Q<>1 THEN PRINT "THERE MUST BE EXACTLY ONE QUEEN.": SP=-1: RETURN
340 IF B<>2 THEN PRINT "
350 IF N<>2 THEN PRINT "THERE MUST BE EXACTLY TWO KNIGHTS.": SP=-1: RETURN
▲350 FOR I=0 TO 1
360 IF R<>2 THEN PRINT "THERE MUST BE EXACTLY TWO ROOKS.": SP=-1: RETURN
360 : N=N(I)▼
370
380 PRINT "KING MUST BE BETWEEN THE ROOKS.": SP=-1: RETURN
380 : FOR J=0 TO 1▼
390
400 PRINT "BISHOPS MUST BE ON OPPOSITE COLORS.": SP=-1: RETURN
410
420
430
440 : FOR
450 : IF
460 :
480 NEXT
490
500 FOR
510 : IF
520
530
540
550
560
570 : IF Q(0)>B(I) THEN Q=Q-1
▲570 NEXT I
580 PRINT "SPID ="; 96*N+16*Q+4*D+L</lang>▼
600 : B=B(I)-1
610 : IF B AND 1 THEN L=INT(B/2)
620 : IF (B AND 1)=0 THEN D=B/2
630 NEXT I
650 RETURN</lang>
{{Out}}
<pre>READY.
RUN
QNRBBNKR: 105
RNBQKBNR: 518
RQNBBKRN: 601
RNQBBKRN: 617
READY.</pre>
|