```My solution:

=begin

> import Data.List
> import Data.Maybe
>
> pieces = "RNBKQBNR"
>
> permutation [] = [[]]
> permutation xs = [x:y | x <- nub xs, y <- permutation \$ delete x xs]
>
> restriction position =
>   r1 < k && k < r2 &&
>   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(p))
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(' ')

```