2009-11-22 4 views
1

que je fais problem 68 au projet euler et est venu avec le code suivant dans Haskell pour retourner la liste des numéros qui correspondent à la solution (donnée):Comment réorganiser cette fonction pour retourner la liste étendue dans Haskell

lists = [n|n<- permutations [1..6] , ring n ] 
ring [a,b,c,d,e,f] = (length $ nub $ map sum [[d,c,b],[f,b,a],[e,a,c]]) == 1 

Ceci renvoie uniquement une liste de listes de 6 nombres chacun correspondant à la solution. Ce que je ne sais pas comment faire, est faire revenir la solution réelle, les listes qui correspondent à la forme:

[d,c,b],[f,b,a],[e,a,c] 

Comment puis-je faire lists retour une liste de ce format?

(PS: Je vais ajouter dans les fonctions appropriées pour retourner ce que le site veut en fait plus tard)

+1

BTW, je suis sûr que vous avez déjà vu cela, mais les problèmes d'Euler sont très bien documentés sur le Wiki Haskell (http://www.haskell.org/haskellwiki/Euler_problems) –

+0

Mais cela pourrait être considéré comme une triche ing. Et je préférerais apprendre en pensant comment je le fais. –

Répondre

2

Il est tout simplement

lists = [ [[d,c,b],[f,b,a],[e,a,c]] | [email protected][a,b,c,d,e,f] <- permutations [1..6], ring n ] 

Ou pour générer les chaînes:

[ foldl (++) "" $ map show [d,c,b,f,b,a,e,a,c] | [email protected][a,b,c,d,e,f] <- permutations [1..6], ring n ] 
+0

Merci pour l'aide, je n'ai jamais su '' @ '. –

+0

Sur une note supplémentaire, je reçois toujours une réponse incorrecte de: 432513621 (vraie réponse est: 432621513). J'ai utilisé: 'réponse = lecture $ concatMap show $ maximum $ carte concat $ map listes de tri :: Integer' Soin de jeter la lumière sur où je vais mal? –

Questions connexes