Sha256: 1362856ac0bac7add6b1be0806fcf09160169dc4109225753d982654c85b084c
Contents?: true
Size: 1.33 KB
Versions: 1
Compression:
Stored size: 1.33 KB
Contents
require './tools' class Solver def initialize rank, leave_free=0 @n, @nn = rank, rank*rank @n2 = @n+@n @leave_free = leave_free @desk = [] @n.times { @desk << [0] * @n } @depth = 0 solve 0, 0 end def solve r, c @desk[r][c] = (@depth+=1) return true if @depth == @nn-@leave_free moves(r, c) { |r1, c1| return true if solve(r1, c1) } @desk[r][c] = 0 @depth -= 1 false end @@shifts = [[-2, +1], [-1, +2], [+1, +2], [+2, +1], [+2, -1], [-2, -1]] def moves r, c @@shifts.each { |sr, sc| r1 = r + sr if r1 >= 0 && r1 < @n c1 = c + sc if c1 >= 0 && c1 < @n yield r1, c1 if @desk[r1][c1] == 0 end end } end def to_s res = [] @n.times do |row| res << @n.times.map { |col| d = @desk[row][col] d == 0 ? ' .' : ("%3d" % d) }.join('') end res.join "\n" end end cs = js_context.eval coffee(:knightsmove) N, L = 7, 3 res1 = res2 = 0 timing('total') { tt = [] tt << Thread.start { timing('ruby') { res1 = Solver.new(N, L).to_s } } tt << Thread.start { timing('coffee') { res2 = cs.call(N, L) } } tt.each &:join } if res1 != res2 puts "WRONG RESULTS test data can not be trusted" puts "Ruby:\n#{res1}" puts "Coffee:\n#{res2}" end puts res1
Version data entries
1 entries across 1 versions & 1 rubygems
Version | Path |
---|---|
h8-0.2.5 | benchmark/knigthsmove.rb |