Advertisement
Guest User

Untitled

a guest
Nov 25th, 2013
129
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Ruby 0.98 KB | None | 0 0
  1. class NQueens
  2.   def initialize size
  3.     @size = size
  4.   end
  5.  
  6.   def solutions
  7.     @solutions = 0
  8.     n_queens([])
  9.     puts @solutions
  10.   end
  11.  
  12.   def n_queens(queens)
  13.     if queens.count == @size
  14.       print_queens(queens)
  15.       @solutions += 1
  16.       return
  17.     end
  18.     @size.times do |col|
  19.       princess = new_queen(queens.count, col)
  20.       n_queens(queens + [princess]) if valid_position?(queens, princess)
  21.     end
  22.   end
  23.  
  24.   # column, diagonal 1, diagonal 2
  25.   def new_queen(x, y)
  26.     [y, x + y, x - y]
  27.   end
  28.  
  29.   def valid_position?(queens, new_queen)
  30.     !queens.any? { |queen| queen[0] == new_queen[0] ||
  31.                            queen[1] == new_queen[1] ||
  32.                            queen[2] == new_queen[2] }
  33.   end
  34.  
  35.   def print_queens(queens)
  36.     queens.each do |queen|
  37.       puts "." * queen[0] + 'Q' + "." * (@size - 1 - queen[0])
  38.     end
  39.     puts
  40.   end
  41. end
  42.  
  43. if ARGV.length == 1
  44.   NQueens.new(ARGV[0].to_i).solutions
  45. else
  46.   NQueens.new(8).solutions
  47. end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement