Sha256: a94f5caef12805da1ca004826b1811932608947d2ec5000c043e934fb0edd87d

Contents?: true

Size: 1.2 KB

Versions: 11

Compression:

Stored size: 1.2 KB

Contents

pad = (n, len) ->
  len ?= 3
  res = n.toString()
  res = ' '+res while res.length < len
  res

shifts = [[-2, +1], [-1, +2], [+1, +2], [+2, +1], [+2, -1], [+1, -2], [-1, -2], [-2, -1]]

class Solver

  constructor: (@n) ->
    @nn = @n * @n
    @n2 = @n + @n
    @desk = []
    @depth = 0
    for r in [0...@n]
      @desk.push (0 for col in [0...@n])
    @solve 0, 0

  solve: (r, c) ->
    @desk[r][c] = ++@depth
    return true if @depth >= @nn
    for [r1, c1] in @moves(r, c)
      return true if @solve(r1, c1)
    @desk[r][c] = 0
    @depth--
    false

  # Coffeescript does not support generators
  moves: (r, c) ->
    res = []
    for [sr, sc] in shifts
      r1 = r + sr
      if 0 <= r1 < @n
        c1 = c + sc
        if 0 <= c1 < @n && @desk[r1][c1]==0
          res.push [r1, c1]
    res

  toString: ->
    res = []
    for r in [0...@n]
      res.push ( (if x==0 then '  .' else pad(x,3)) for x in @desk[r]).join('')
    res.join "\n"

timing = (name, cb) ->
  start = new Date().getTime()
  res = cb()
  console.log("#{name}: #{(new Date().getTime() - start)/1000}")
  res

#result = timing 'KN h8', ->
# new Solver(7, 3).toString()
#console.log result



return (n, left) ->
  new Solver(n, left).toString()

Version data entries

11 entries across 11 versions & 1 rubygems

Version Path
h8-0.5.5 benchmark/knightsmove.coffee
h8-0.5.4 benchmark/knightsmove.coffee
h8-0.5.2 benchmark/knightsmove.coffee
h8-0.5.1 benchmark/knightsmove.coffee
h8-0.5.0 benchmark/knightsmove.coffee
h8-0.4.11 benchmark/knightsmove.coffee
h8-0.4.10 benchmark/knightsmove.coffee
h8-0.4.8 benchmark/knightsmove.coffee
h8-0.4.5 benchmark/knightsmove.coffee
h8-0.4.0 benchmark/knightsmove.coffee
h8-0.3.0 benchmark/knightsmove.coffee