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