1 USING: ranges kernel random sequences arrays combinators ;
4 SYMBOLS: pawn rook knight bishop queen king ;
6 : all-positions ( -- range ) 8 [0..b) ;
8 : black-bishop-positions ( -- range ) 0 6 2 <range> ;
9 : white-bishop-positions ( -- range ) 1 7 2 <range> ;
11 : frisk ( position positions -- position positions' )
12 [ drop ] [ remove ] 2bi ;
14 : white-bishop ( positions -- position positions' )
15 [ white-bishop-positions random ] dip frisk ;
16 : black-bishop ( positions -- position positions' )
17 [ black-bishop-positions random ] dip frisk ;
19 : random-position ( positions -- position positions' )
20 [ random ] keep frisk ;
22 : make-position ( white-bishop black-bishop knight knight queen {r,k,r} -- position )
25 [ [ rook ] 2dip set-nth ]
26 [ [ king ] 2dip set-nth ]
27 [ [ rook ] 2dip set-nth ]
28 [ [ queen ] 2dip set-nth ]
29 [ [ knight ] 2dip set-nth ]
30 [ [ knight ] 2dip set-nth ]
31 [ [ bishop ] 2dip set-nth ]
32 [ [ bishop ] 2dip set-nth ]
36 : chess960-position ( -- position )