On Dec 19, 2006, at 11:43 PM, David Tran wrote:

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

Very nice, compact solution. But what programing language is that in  
the block comment? I don't recognize it.

Regards, Morton