RosettaCodeData/Task/N-queens-problem/Haskell/n-queens-problem-2.hs
2023-07-01 13:44:08 -04:00

11 lines
295 B
Haskell

import Control.Monad (foldM)
import Data.List ((\\))
main :: IO ()
main = mapM_ print $ queens 8
queens :: Int -> [[Int]]
queens n = foldM f [] [1..n]
where
f qs _ = [q:qs | q <- [1..n] \\ qs, q `notDiag` qs]
q `notDiag` qs = and [abs (q - qi) /= i | (qi,i) <- qs `zip` [1..]]