Declaratieve Talen/oplossingAlternatieveOrdes
Een oplossing voor het eerste deel van de opgave. Het is een beetje Prolog-generate-and-test geïnspireerd.
import List berekenorde::[String]->[String] berekenorde woorden = filter (correcteOrde paren) (permuteer letters) where paren = woordenNaarParen woorden letters = findLettersWoorden woorden woordenNaarParen::[String]->[(Char, Char)] woordenNaarParen list = nub $ woordenNaarParen' list woordenNaarParen' [] = [] woordenNaarParen' (w:t) = verwerkWoorden t w ++ woordenNaarParen t verwerkWoord::String->String->Maybe (Char, Char) verwerkWoord "" _ = Nothing verwerkWoord _ "" = Nothing verwerkWoord (c1:t1) (c2:t2) | c1 /= c2 = Just (c1,c2) | otherwise = verwerkWoord t1 t2 -- geef woord en zoek naar paren met behulp van andere woordenlijst verwerkWoorden::[String]->String->[(Char, Char)] verwerkWoorden woorden woord = [ x | Just x <- map (verwerkWoord woord) woorden] -- alle letters van alle woorden findLettersWoorden::[String]->[Char] findLettersWoorden lijst = nub $ concatenate lijst correcteOrde::[(Char,Char)]->[Char]->Bool correcteOrde [] letters = True correcteOrde ((c1,c2):t) letters = (elemIndex c1 letters) < (elemIndex c2 letters) && correcteOrde t letters permuteer::[a]->a permuteer [] = [[]] permuteer (h:t) = concatMap (permIns h) (permuteer t) permIns::a->[a]->a permIns x [] = x permIns x (h:t) = (x:h:t) : map (\l -> h:l) (permIns x t)
--Roald 13 jan 2010 19:55 (UTC)