Generate Chess960 starting position: Difference between revisions
Content added Content deleted
m (→{{header|Commodore BASIC}}: Add alternate impl that works in v2.0) |
(Added solution for Action!) |
||
Line 35: | Line 35: | ||
<pre> |
<pre> |
||
[Q, B, N, R, K, B, N, R] |
[Q, B, N, R, K, B, N, R] |
||
</pre> |
|||
=={{header|Action!}}== |
|||
<lang Action!>DEFINE MAX_NUMBERS="200" |
|||
DEFINE MAX_LEN="20" |
|||
DEFINE MAX_FACTORS="5" |
|||
DEFINE PTR="CARD" |
|||
PROC PrintResult(BYTE max,n BYTE ARRAY factors PTR ARRAY texts) |
|||
BYTE i,j,t |
|||
BYTE ARRAY values(MAX_FACTORS) |
|||
FOR j=0 TO n-1 |
|||
DO |
|||
values(j)=1 |
|||
OD |
|||
FOR i=1 TO max |
|||
DO |
|||
t=0 |
|||
FOR j=0 TO n-1 |
|||
DO |
|||
IF values(j)=0 THEN |
|||
t=1 Print(texts(j)) |
|||
FI |
|||
values(j)==+1 |
|||
IF values(j)=factors(j) THEN |
|||
values(j)=0 |
|||
FI |
|||
OD |
|||
IF t=0 THEN PrintB(i) FI |
|||
Put(32) |
|||
OD |
|||
RETURN |
|||
BYTE FUNC Find(CHAR ARRAY s CHAR c BYTE POINTER err) |
|||
BYTE i |
|||
FOR i=1 TO s(0) |
|||
DO |
|||
IF s(i)=c THEN |
|||
err^=0 RETURN (i) |
|||
FI |
|||
OD |
|||
err^=1 |
|||
RETURN (0) |
|||
PROC Main() |
|||
BYTE max,i,n,pos,err |
|||
BYTE ARRAY factors(MAX_FACTORS) |
|||
PTR ARRAY texts(MAX_FACTORS) |
|||
CHAR ARRAY |
|||
s(100),tmp(100), |
|||
t0(MAX_LEN),t1(MAX_LEN),t2(MAX_LEN), |
|||
t3(MAX_LEN),t4(MAX_LEN) |
|||
texts(0)=t0 texts(1)=t1 texts(2)=t2 |
|||
texts(3)=t3 texts(4)=t4 |
|||
DO |
|||
PrintF("Max number (1-%B): ",MAX_NUMBERS) |
|||
max=InputB() |
|||
UNTIL max>=1 AND max<=MAX_NUMBERS |
|||
OD |
|||
n=0 |
|||
DO |
|||
PrintF("Number of rules (1-%B): ",MAX_FACTORS) |
|||
n=InputB() |
|||
UNTIL n>=1 AND n<=MAX_FACTORS |
|||
OD |
|||
FOR i=0 TO n-1 |
|||
DO |
|||
DO |
|||
PrintF("Rule #%B (number space text):",i+1) |
|||
InputS(s) |
|||
pos=Find(s,' ,@err) |
|||
IF pos=1 OR pos=s(0) THEN |
|||
err=1 |
|||
FI |
|||
IF err=0 THEN |
|||
SCopyS(tmp,s,1,pos-1) |
|||
factors(i)=ValB(tmp) |
|||
IF factors(i)<2 THEN |
|||
err=1 |
|||
FI |
|||
SCopyS(texts(i),s,pos+1,s(0)) |
|||
FI |
|||
UNTIL err=0 |
|||
OD |
|||
OD |
|||
PutE() |
|||
PrintResult(max,n,factors,texts) |
|||
RETURN</lang> |
|||
{{out}} |
|||
[https://gitlab.com/amarok8bit/action-rosetta-code/-/raw/master/images/Generate_Chess960_starting_position_.png Screenshot from Atari 8-bit computer] |
|||
<pre> |
|||
NBBQRNKR |
|||
NRKBRQBN |
|||
BNRBKRNQ |
|||
QBRKRNBN |
|||
RBKNRQBN |
|||
BNNBRKQR |
|||
NQNBRKBR |
|||
BRNKRBQN |
|||
NRKRQNBB |
|||
RNQBKRBN |
|||
</pre> |
</pre> |
||