Generate random chess position: Difference between revisions
Content added Content deleted
m (→{{header|J}}) |
(add PicoLisp) |
||
Line 294: | Line 294: | ||
{{out}} |
{{out}} |
||
<pre>q2n1n2/1Qpk3Q/1r3bP1/1b1b4/2pRBR2/4P1bN/2R3K1/N1r2rPB w - - 0 1</pre> |
<pre>q2n1n2/1Qpk3Q/1r3bP1/1b1b4/2pRBR2/4P1bN/2R3K1/N1r2rPB w - - 0 1</pre> |
||
=={{header|PicoLisp}}== |
|||
<lang PicoLisp>(load "@lib/simul.l") |
|||
(seed (in "/dev/urandom" (rd 8))) |
|||
(de pieceN (P) |
|||
(case P |
|||
("p" 8) |
|||
("q" 1) |
|||
(T 2) ) ) |
|||
(de pieceset () |
|||
(let C 0 |
|||
(make |
|||
(for P (conc (cons "p") (shuffle '("r" "n" "b" "q"))) |
|||
(let (X (pieceN P) N (rand 0 (+ X C))) |
|||
(do N |
|||
(link P) ) |
|||
(if (= P "p") |
|||
(and |
|||
(> X N) |
|||
(inc 'C (- X N)) ) |
|||
(and |
|||
(> N X) |
|||
(dec 'C (- N X)) ) ) ) ) ) ) ) |
|||
(de neib (A) |
|||
(let |
|||
(X (/ (dec A) 8) |
|||
Y (% (dec A) 8) ) |
|||
(filter |
|||
'((N) |
|||
(and |
|||
(<= 1 N 64) |
|||
(<= |
|||
(abs (- (/ (dec N) 8) X)) |
|||
1 ) |
|||
(<= |
|||
(abs (- (% (dec N) 8) Y)) |
|||
1 ) ) ) |
|||
(mapcar |
|||
'((B) (+ B A)) |
|||
(-9 -8 -7 -1 1 7 8 9) ) ) ) ) |
|||
(setq *B (need 64 ".")) |
|||
(setq *P (conc (pieceset) (mapcar uppc (pieceset)) (cons "K"))) |
|||
(for P *P |
|||
(loop |
|||
(T |
|||
(= |
|||
"." |
|||
(car |
|||
(setq @@ |
|||
(nth |
|||
*B |
|||
(rand |
|||
(if (= "p" P) 9 1) |
|||
(if (= "P" P) 56 64) ) ) ) ) ) |
|||
(set @@ P) ) ) ) |
|||
(loop |
|||
(T |
|||
(and |
|||
(= |
|||
"." |
|||
(car |
|||
(setq @@ (nth *B (setq @@@ (rand 1 64)))) ) ) |
|||
(fully |
|||
'((N) (<> "K" (get *B N))) |
|||
(neib @@@) ) ) |
|||
(set @@ "k") ) ) |
|||
(while *B |
|||
(prinl (cut 8 '*B)) )</lang> |
|||
{{out}} |
|||
<pre> |
|||
....PPb. |
|||
p...Pp.K |
|||
..N.P..Q |
|||
BPpk.p.. |
|||
.P..p... |
|||
.Pn...p. |
|||
.q..p... |
|||
...Q.p.. |
|||
</pre> |
|||
=={{header|REXX}}== |
=={{header|REXX}}== |