Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- class NQueens
- def initialize size
- @size = size
- end
- def solutions
- @solutions = 0
- n_queens([])
- puts @solutions
- end
- def n_queens(queens)
- if queens.count == @size
- print_queens(queens)
- @solutions += 1
- return
- end
- @size.times do |col|
- princess = new_queen(queens.count, col)
- n_queens(queens + [princess]) if valid_position?(queens, princess)
- end
- end
- # column, diagonal 1, diagonal 2
- def new_queen(x, y)
- [y, x + y, x - y]
- end
- def valid_position?(queens, new_queen)
- !queens.any? { |queen| queen[0] == new_queen[0] ||
- queen[1] == new_queen[1] ||
- queen[2] == new_queen[2] }
- end
- def print_queens(queens)
- queens.each do |queen|
- puts "." * queen[0] + 'Q' + "." * (@size - 1 - queen[0])
- end
- puts
- end
- end
- if ARGV.length == 1
- NQueens.new(ARGV[0].to_i).solutions
- else
- NQueens.new(8).solutions
- end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement