Re: Chess960 (#106)

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(’ ')