2009-11-22 20 views
1
返回扩展列表

我在项目欧拉做problem 68,并在Haskell下面的代码想出了要返回的适应(给)解决方案的号码列表:如何重新排列此功能在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 

这只返回符合解决方案的6个数字列表。我不知道该怎么办,是让它返回实际的解决方案,适合的形式列出:

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

我怎样才能让lists回报这种格式的名单?

(PS:我会在适当的功能添加到返回的内容的网站实际上后来想)

+1

顺便说一句,我相信你已经看到了这一点,但欧拉问题在Haskell Wiki上有很好的记录(http://www.haskell.org/haskellwiki/Euler_problems) – 2009-11-22 16:36:08

+0

但是这可能被认为是作弊ING。我宁愿通过弄清楚我是如何做到的。 – 2009-11-22 16:40:07

回答

2

它只是

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

或者为了生成字符串:

[ 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

感谢您的帮助,我从来不知道'@'。 – 2009-11-22 16:45:36

+0

进一步说明,我一直得到不正确的答案:432513621(真实答案是:432621513)。我用过:'answer = read $ concatMap show $ maximum $ map concat $ map sort lists :: Integer' 小心我的错在哪里? – 2009-11-22 17:10:02