How to resolve the algorithm N-queens problem step by step in the Bracmat programming language

Published on 12 May 2024 09:40 PM

How to resolve the algorithm N-queens problem step by step in the Bracmat programming language

Table of Contents

Problem Statement

Solve the eight queens puzzle.

You can extend the problem to solve the puzzle with a board of size   NxN. For the number of solutions for small values of   N,   see   OEIS: A000170.

Let's start with the solution:

Step by Step solution about How to resolve the algorithm N-queens problem step by step in the Bracmat programming language

Source code in the bracmat programming language

(   ( printBoard
    =   board M L x y S R row line
      .   :?board
        & !ups:? [?M
        &   whl
          ' ( !arg:(?x.?y) ?arg
            & !M:?L
            & :?row:?line
            &   whl
              ' ( !L+-1:~<0:?L
                & !x+1:~>!M:?x
                & "---+" !line:?line
                & "   |" !row:?row
                )
            & "---+" !line:?line
            & " Q |" !row:?row
            &   whl
              ' ( !L+-1:~<0:?L
                & "---+" !line:?line
                & "   |" !row:?row
                )
            & "\n|" !row "\n+" !line !board:?board
            )
        & str$("\n+" !line !board)
    )
    ( queens
    =   hor ver up down ups downs a z A Z x y Q
      .   !arg:(?hor.?ver.?ups.?downs.?Q)
        &   !ver
          : (   
              & 1+!solutions:?solutions
              { Comment the line below if you only want a count. }
              & out$(str$("\nsolution " !solutions) printBoard$!Q)
              & ~  { Fail! (and backtrack to find more solutions)}
            |   #%?y
                ( ?z
                &   !hor
                  :   ?A
                      #%?x
                      ( ?Z
                      & !x+!y:?up
                      & !x+-1*!y:?down
                      & ~(!ups:? !up ?)
                      & ~(!downs:? !down ?)
                      &   queens
                        $ ( !A !Z
                          . !z
                          . !up !ups
                          . !down !downs
                          . (!x.!y) !Q
                          )
                      )
                )
            )
    )
& 0:?solutions
& 1 2 3 4 5 6 7 8:?H:?V   {You can edit this line to find solutions for other sizes.}
& ( queens$(!H.!V...) 
  | out$(found !solutions solutions)
  )
);

  

You may also check:How to resolve the algorithm Day of the week step by step in the REBOL programming language
You may also check:How to resolve the algorithm Pseudo-random numbers/PCG32 step by step in the D programming language
You may also check:How to resolve the algorithm Halt and catch fire step by step in the Phix programming language
You may also check:How to resolve the algorithm Sorting algorithms/Gnome sort step by step in the Kotlin programming language
You may also check:How to resolve the algorithm Dinesman's multiple-dwelling problem step by step in the Bracmat programming language