44 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			Factor
		
	
	
		
		
			
		
	
	
			44 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			Factor
		
	
	
| 
								 | 
							
								USING: math.ranges kernel random sequences arrays combinators ;
							 | 
						||
| 
								 | 
							
								IN: chess960
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								SYMBOLS: pawn rook knight bishop queen king ;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								: all-positions ( -- range ) 0 8 [a,b) ;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								: black-bishop-positions ( -- range ) 0 6 2 <range> ;
							 | 
						||
| 
								 | 
							
								: white-bishop-positions ( -- range ) 1 7 2 <range> ;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								: frisk ( position positions -- position positions' )
							 | 
						||
| 
								 | 
							
								    [ drop ] [ remove ] 2bi ;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								: white-bishop ( positions -- position positions' )
							 | 
						||
| 
								 | 
							
								    [ white-bishop-positions random ] dip frisk ;
							 | 
						||
| 
								 | 
							
								: black-bishop ( positions -- position positions' )
							 | 
						||
| 
								 | 
							
								    [ black-bishop-positions random ] dip frisk ;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								: random-position ( positions -- position positions' )
							 | 
						||
| 
								 | 
							
								    [ random ] keep frisk ;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								: make-position ( white-bishop black-bishop knight knight queen {r,k,r} -- position )
							 | 
						||
| 
								 | 
							
								    first3
							 | 
						||
| 
								 | 
							
								    8 f <array> {
							 | 
						||
| 
								 | 
							
								        [ [ rook ] 2dip set-nth ]
							 | 
						||
| 
								 | 
							
								        [ [ king ] 2dip set-nth ]
							 | 
						||
| 
								 | 
							
								        [ [ rook ] 2dip set-nth ]
							 | 
						||
| 
								 | 
							
								        [ [ queen ] 2dip set-nth ]
							 | 
						||
| 
								 | 
							
								        [ [ knight ] 2dip set-nth ]
							 | 
						||
| 
								 | 
							
								        [ [ knight ] 2dip set-nth ]
							 | 
						||
| 
								 | 
							
								        [ [ bishop ] 2dip set-nth ]
							 | 
						||
| 
								 | 
							
								        [ [ bishop ] 2dip set-nth ]
							 | 
						||
| 
								 | 
							
								        [ ]
							 | 
						||
| 
								 | 
							
								    } cleave ;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								: chess960-position ( -- position )
							 | 
						||
| 
								 | 
							
								    all-positions
							 | 
						||
| 
								 | 
							
								    white-bishop
							 | 
						||
| 
								 | 
							
								    black-bishop
							 | 
						||
| 
								 | 
							
								    random-position
							 | 
						||
| 
								 | 
							
								    random-position
							 | 
						||
| 
								 | 
							
								    random-position
							 | 
						||
| 
								 | 
							
								    make-position ;
							 |