def queens_collide?(i, j, col, diag_plus, diag_minus)
col.include?(j) diag_plus.include?(i + j) diag_minus.include?(i -
j) end def place_queens(n, i, j, col, diag_plus, diag_minus) if
i.zero? col elsif j.zero? false elsif queens_collide?(i, j, col,
diag_plus, diag_minus) place_queens(n, i, j - 1, col, diag_plus,
diag_minus) else queen_placed_ok = place_queens( n, i - 1, n, col +
[j], diag_plus + [i + j], diag_minus + [i - j] ) if queen_placed_ok
queen_placed_ok else place_queens(n, i, j - 1, col, diag_plus,
diag_minus) end end end def queens(n) place_queens(n, n, n, [], [],
[]) end puts queens(4).inspect # >> [3, 1, 4, 2]