James Gray
12/21/2006 7:20:00 PM
On Dec 21, 2006, at 9:24 AM, Morton Goldberg wrote:
> On Dec 21, 2006, at 8:37 AM, Ruby Quiz wrote:
>
>> Here's the main algorithm from Morton's code (with a minor fix
>> from me):
>>
>> # ...
>>
>> def initialize(number)
>> q, @bishop_index = number.divmod 16
>> @knight_index, @queen_index = q.divmod 6
>> @white_pieces = BISHOP_TABLE[@bishop_index].split('')
>> @white_pieces[nth_dash(@queen_index)] = 'Q'
>> knights = N5N_TABLE[@knight_index]
>> m = knights.index('N')
>> n = knights.index('N', m + 1)
>> m, n = nth_dash(m), nth_dash(n)
>> @white_pieces[m] = 'N'
>> @white_pieces[n] = 'N'
>> @white_pieces[@white_pieces.index('-')] = 'R'
>> @white_pieces[@white_pieces.index('-')] = 'K'
>> @white_pieces[@white_pieces.index('-')] = 'R'
>> end
>>
>> def nth_dash(n)
>> dashes = []
>> @white_pieces.each_with_index { |ch, i| dashes << i if ch
>> == '-' }
>> dashes[n]
>> end
>>
>
> If you're going to make the change
>
> - q, @bishop_index = (number - 1).divmod 16
> + q, @bishop_index = number.divmod 16
>
> then, to maintain consistency, you've got to make the following
> changes as well:
>
>> if __FILE__ == $0
>> begin
>
> - if ARGV.empty? then n = 1 + rand(960)
> + if ARGV.empty? then n = rand(960)
>
>
>> else
>> n = ARGV.first.to_i
>
> - raise StandardError unless (1..960).include?(n)
> + raise StandardError unless (0..959).include?(n)
>
>> end
>> puts "Initial position #{n}"
>> print Chess960.new(n).to_s
>> rescue StandardError
>> puts "Usage: #{$PROGRAM_NAME} [<integer>]"
>
> - puts "where <integer> is in 1..960"
> + puts "where <integer> is in 0..959"
>
>> puts "Omitting <integer> produces a random initial position"
>> end
>> end
You're absolutely right. Thanks for pointing that out.
James Edward Gray II