# Re: Chess960 (#106)

**URL:** <https://www.ruby-forum.com/t/re-chess960-106/79939>\
**Category:** Ruby\
**Created:** [December 20, 2006, 6:41pm UTC](https://www.ruby-forum.com/t/re-chess960-106/79939 "2006-12-20T18:41:58Z")\
**Posts on this page:** 1\
**Page:** 1

<div class="post-metadata">

**Author:** ![davidtl](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/d/35a633/32.png) [@davidtl](https://www.ruby-forum.com/u/davidtl)\
**Post date:** [December 20, 2006, 6:41pm UTC](https://www.ruby-forum.com/t/re-chess960-106/79939/1 "2006-12-20T18:41:58Z")

</div>

My solution:

=begin

> sum (elemIndices ‘B’ position) `mod` 2 /= 0  
> where  
> r1:r2:\_ = elemIndices ‘R’ position  
> k = fromJust $ elemIndex ‘K’ position
> 
> results = filter restriction (permutation pieces)

=end

def permutation(pieces)  
return [pieces] if pieces.length \<= 1  
result = []  
pieces.uniq.each do |p|  
\_pieces = pieces.dup  
\_pieces.delete\_at(pieces.index§)  
permutation(\_pieces).each do |perm|  
result \<\< (perm \<\< p)  
end  
end  
result  
end

results = permutation(“RNBKQBNR”.split(//)).select do |position|  
r1 = position.index(‘R’)  
r2 = position.rindex(‘R’)  
b1 = position.index(‘B’)  
b2 = position.rindex(‘B’)  
k = position.index(‘K’)  
r1 \< k && k \< r2 && ((b1+b2) % 2 != 0)  
end

puts “Total positions = #{results.length}”  
puts results[rand(results.length)].join(’ ')
