gpt4 book ai didi

algorithm - Haskell:如何更改算法以处理任何大小的列表?

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:18:17 25 4
gpt4 key购买 nike

我有这个代码:

project= [ 
[(a,b),(c,d),(e,f)]
|
a<-[1..5],
b<-[1..3],
c<-[1..5],
d<-[1..3],
e<-[1..5],
f<-[1..3]

, a*b + c*d + e*f <6
, a + c + e == 5
, b == 3 || d==3 || f==3
]

x=take 1 project
main = print $ x

它返回 3 对 [(x,y),(x,y),(x,y)] 的列表。有3个条件:

  • 如果对所有 x 求和,则必须得到 5。
  • 如果您对所有 x*y 求和,您将得到少于 6。
  • 至少有一个y等于3。

现在,我希望完全相同的算法适用于任何更长的列表,例如 10 对。我应该怎么做?

最佳答案

这里:

project n =
[ x
| x <- replicateM n $ liftA2 (,) [1..5] [1..3]
, sum (map (uncurry (*)) x) < 6
, sum (map fst x) == 5
, any ((==3) . snd) x
]
main = print $ take 1 $ project 3

或者像这样:

project n
= filter (any ((==3) . snd))
$ filter ((==5) . sum . map fst)
$ filter ((<6) . sum . map (uncurry (*)))
$ replicateM n
$ liftA2 (,) [1..5] [1..3]

关于algorithm - Haskell:如何更改算法以处理任何大小的列表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40444687/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com