Declaratieve Talen/Oplossing haskell nqueens: verschil tussen versies

Uit Wina Examenwiki
Naar navigatie springen Naar zoeken springen
Geen bewerkingssamenvatting
Geen bewerkingssamenvatting
Regel 5: Regel 5:
-------------------
-------------------
nqueens n = let
nqueens n = let
list = [1..n]
list = [1..n]
permlist = perms list
permlist = perms list
in
    in
getoklist permlist
getoklist permlist




Regel 15: Regel 15:
getoklist [] = error "geen oplossing"
getoklist [] = error "geen oplossing"
getoklist (x:xs) | listok x = x
getoklist (x:xs) | listok x = x
| otherwise = getoklist xs
| otherwise = getoklist xs




Regel 22: Regel 22:
listok [] = True
listok [] = True
listok (a:as) = if (listok2 a as 1) == False then False
listok (a:as) = if (listok2 a as 1) == False then False
else listok as
else listok as
listok2::Int->[Int]->Int->Bool
listok2::Int->[Int]->Int->Bool
Regel 28: Regel 28:
listok2 _ [] _ = True
listok2 _ [] _ = True
listok2 a (b:bs) kol | a == (b+kol) = False
listok2 a (b:bs) kol | a == (b+kol) = False
| a == (b-kol) = False
    | a == (b-kol) = False
| otherwise =  listok2 a bs (kol+1)
    | otherwise =  listok2 a bs (kol+1)
 
 
 
 

Versie van 25 jun 2006 17:20

Mogelijke oplossing

nqueens::Int->[Int]
-------------------
nqueens n = let
		list = [1..n]
		permlist = perms list
	     in
		getoklist permlist


getoklist::[[Int]]->[Int]
------------------------
getoklist [] = error "geen oplossing"
getoklist (x:xs) | listok x = x
		 | otherwise = getoklist xs


listok::[Int]->Bool
-------------------
listok [] = True
listok (a:as) = if (listok2 a as 1) == False then False
		else listok as
				
listok2::Int->[Int]->Int->Bool
------------------------------
listok2 _ [] _ = True
listok2 a (b:bs) kol | a == (b+kol) = False
		     | a == (b-kol) = False
		     | otherwise =  listok2 a bs (kol+1)
				 
					 
					 
--Permuteer de lijst
perms :: [k] -> [[k]]
---------------------
perms [] = [[]]
perms (x:xs) = concat (map (tussen x) (perms xs)) where 
            tussen e [] = [[e]]
            tussen e (y:ys) = (e:y:ys) : map (y:) (tussen e ys)