benchmark/knightsmove.rb in h8-0.4.8 vs benchmark/knightsmove.rb in h8-0.4.10

- old
+ new

@@ -1,53 +1,18 @@ require './tools' +require './km' -class Solver - def initialize rank - @n, @nn = rank, rank*rank - @n2 = @n+@n - @desk = [] - @n.times { @desk << [0] * @n } - @depth = 0 - solve 0, 0 - end +def js_context + cxt = H8::Context.new + cxt[:print] = -> (*args) { puts args.join(' ') } + cxt[:console] = Console + cxt +end - def solve r, c - @desk[r][c] = (@depth+=1) - return true if @depth >= @nn - 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], [+1, -2], [-1, -2], [-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 - +def coffee script_file_name + @base ||= File.dirname(File.expand_path(__FILE__)) + H8::Coffee.compile open("#{@base}/#{script_file_name}.coffee").read end cs = js_context.eval coffee(:knightsmove) N = 7