Find Chess960 starting position identifier: Difference between revisions

→‎{{header|QBasic}}: Take advantage of mixed case, and add explicit output, since the code no longer matches the Commodore solution.
(→‎{{header|Raku}}: streamline, style)
(→‎{{header|QBasic}}: Take advantage of mixed case, and add explicit output, since the code no longer matches the Commodore solution.)
Line 178:
{{works with|QBasic|1.1}}
{{trans|Commodore BASIC}}
<lang qbasic>CLSCls
PRINTPrint "ENTEREnter STARTstart ARRAYarray ASas SEENseen BYby WHITEwhite."
120 PRINTPrint
PRINTPrint "STARTINGStarting ARRAY:array";
INPUTInput ARAr$
Print
PRINT
IFIf LENLen(ARAr$) = 0 THENThen ENDEnd
IFIf LENLen(ARAr$) = 8 THENThen 170
PRINTPrint "ARRAYArray MUSTmust BEbe 8 PIECESpieces.": GOTOGoTo 120
 
170 FORFor I = 1 TOTo 8
P$ = MIDMid$(ARAr$, I, 1)
IF If P$ = "Q" THENOr P$ = "q" Then Q(Q) = I: Q = Q + 1: GOTOGoTo 250
IF If P$ = "K" THENOr P$ = "k" Then K(K) = I: K = K + 1: GOTOGoTo 250
IF If P$ = "B" THENOr P$ = "b" Then B(B) = I: B = B + 1: GOTOGoTo 250
IF If P$ = "N" THENOr P$ = "n" Then N(N) = I: N = N + 1: GOTOGoTo 250
IF If P$ = "R" THENOr P$ = "r" Then R(R) = I: R = R + 1: GOTOGoTo 250
PRINT Print "ILLEGALIllegal PIECEpiece '"; P$; "'.": GOTOGoTo 120
250 NEXTNext I
 
IFIf K <> 1 THENThen PRINTPrint "THEREThere MUSTmust BEbe EXACTLYexactly ONEone KINGKing.": GOTOGoTo 120
IFIf Q <> 1 THENThen PRINTPrint "THEREThere MUSTmust BEbe EXACTLYexactly ONEone QUEENQueen.": GOTOGoTo 120
IFIf B <> 2 THENThen PRINTPrint "THEREThere MUSTmust BEbe EXACTLYexactly TWOtwo BISHOPSBishops.": GOTOGoTo 120
IFIf N <> 2 THENThen PRINTPrint "THEREThere MUSTmust BEbe EXACTLYexactly TWOtwo KNIGHTSKnights.": GOTOGoTo 120
IFIf R <> 2 THENThen PRINTPrint "THEREThere MUSTmust BEbe EXACTLYexactly TWOtwo ROOKSRooks.": GOTOGoTo 120
IFIf (K(0) > R(0)) ANDAnd (K(0) < R(1)) THENThen 330
PRINTPrint "KINGKing MUSTmust BEbe BETWEENbetween THEthe ROOKSRooks.": GOTOGoTo 120
 
330 IFIf (B(0) ANDAnd 1) <> (B(1) ANDAnd 1) THENThen 350
PRINTPrint "BISHOPSBishops MUSTmust BEbe ONon OPPOSITEopposite COLORScolors.": GOTOGoTo 120
 
350 FORFor I = 0 TOTo 1
N = N(I)
IF If N(I) > Q(I) THENThen N = N - 1
FOR For J = 0 TOTo 1
IF If N(I) > B(J) THENThen N = N - 1
Next J
NEXT J
N(I) = N
NEXTNext I
N0 = 1: N1 = 2
 
FORFor N = 0 TOTo 9
IFIf N0 = N(0) ANDAnd N1 = N(1) THENThen 490
N1 = N1 + 1
IFIf N1 > 5 THENThen N0 = N0 + 1: N1 = N0 + 1
NEXTNext N
490 Q = Q(0) - 1
 
FORFor I = 0 TOTo 1
IFIf Q(0) > B(I) THENThen Q = Q - 1
NEXTNext I
 
FORFor I = 0 TOTo 1
B = B(I) - 1
IFIf B ANDAnd 1 THENThen L = INTInt(B / 2)
IFIf (B ANDAnd 1) = 0 THENThen D = B / 2
NEXTNext I
PRINTPrint "SPIDSP-ID ="; 96 * N + 16 * Q + 4 * D + L
End
END</lang>
 
END</lang>
{{out}}
<pre>Enter start array as seen by White.
<pre>
 
Igual que la entrada de Commodore BASIC.
Starting array? qnrbbnkr
 
SP-ID = 105
 
Starting array? RNBQKBNR
 
SP-ID = 518
 
Starting array? RQNBBKRN
 
SP-ID = 601
 
Starting array? RNQBBKRN
 
SP-ID = 617
</pre>
 
1,480

edits