aboutsummaryrefslogtreecommitdiff
path: root/comparison/Haskell/nqueen-12.hs
diff options
context:
space:
mode:
authorShinya Sato <shinnya.sato@gmail.com>2022-08-28 20:40:57 +0900
committerShinya Sato <shinnya.sato@gmail.com>2022-08-28 20:40:57 +0900
commit02a84743ddf5c8c27a36c4d5a20eaf3cd2a9aff4 (patch)
tree8bb368481caaa87f281358bb746edcc881b7e54c /comparison/Haskell/nqueen-12.hs
parent3547d92c3601f8c6c295636cd2394b1d85c31bc1 (diff)
downloadinpla-02a84743ddf5c8c27a36c4d5a20eaf3cd2a9aff4.tar.gz
inpla-02a84743ddf5c8c27a36c4d5a20eaf3cd2a9aff4.zip
Update for n-queens
Diffstat (limited to 'comparison/Haskell/nqueen-12.hs')
-rw-r--r--comparison/Haskell/nqueen-12.hs21
1 files changed, 21 insertions, 0 deletions
diff --git a/comparison/Haskell/nqueen-12.hs b/comparison/Haskell/nqueen-12.hs
new file mode 100644
index 0000000..1efb57b
--- /dev/null
+++ b/comparison/Haskell/nqueen-12.hs
@@ -0,0 +1,21 @@
+member x [] = False
+member x (y:ys)
+ | x==y = True
+ | otherwise = member x ys
+
+threat k m [] = False
+threat k m (x:xs)
+ | (k == x-m) || (k == m-x) = True
+ | otherwise = threat (k+1) m xs
+
+
+queen1 0 b n = []
+queen1 m b n
+ | (member m b) || (threat 1 m b) = (queen1 (m-1) b n)
+ | (length b) == (n-1) = [m:b] ++ (queen1 (m-1) b n)
+ | otherwise = (queen1 n (m:b) n) ++ (queen1 (m-1) b n)
+
+queen n = queen1 n [] n
+
+n=12
+main = print $ (length (queen n))