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