RosettaCodeData/Task/Generate-Chess960-starting-position/Ruby/generate-chess960-starting-position-3.rb
2015-02-20 09:02:09 -05:00

22 lines
538 B
Ruby

KRN = %w(NNRKR NRNKR NRKNR NRKRN RNNKR RNKNR RNKRN RKNNR RKNRN RKRNN)
def chess960(id=rand(960))
pos = Array.new(8)
q, r = id.divmod(4)
pos[r * 2 + 1] = "B"
q, r = q.divmod(4)
pos[r * 2] = "B"
q, r = q.divmod(6)
pos[pos.each_index.reject{|i| pos[i]}[r]] = "Q"
krn = KRN[q].each_char
pos.each_index {|i| pos[i] ||= krn.next}
pos.join
end
puts "Generate Start Position from id number"
[0,518,959].each do |id|
puts "%3d : %s" % [id, chess960(id)]
end
puts "\nGenerate random Start Position"
5.times {puts chess960}