Declaratieve Talen/Oplossing haskell nqueens: verschil tussen versies
Naar navigatie springen
Naar zoeken springen
Geen bewerkingssamenvatting |
Geen bewerkingssamenvatting |
||
Regel 1: | Regel 1: | ||
====Mogelijke oplossing==== | ====Mogelijke oplossing==== | ||
nqueens::Int->[Int] | |||
------------------- | ------------------- | ||
nqueens n = let | nqueens n = let | ||
Regel 39: | Regel 39: | ||
tussen e [] = [[e]] | tussen e [] = [[e]] | ||
tussen e (y:ys) = (e:y:ys) : map (y:) (tussen e ys) | tussen e (y:ys) = (e:y:ys) : map (y:) (tussen e ys) | ||
Versie van 25 jun 2006 17:17
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)