我想迭代2(或3)个无限列表,找到满足条件的"最小"对,如下所示:
until pred [(a,b,c) | a<-as, b<-bs, c<-cs]
where pred (a,b,c) = a*a + b*b == c*c
as = [1..]
bs = [1..]
cs = [1..]
Run Code Online (Sandbox Code Playgroud)
在a == b == 1
整个计划的运行过程中,上述情况不会太长 .有没有一种很好的方法可以解决问题,例如构建无限序列[(1,1,1),(1,2,1),(2,1,1),(2,1,2),(2,2,1),(2,2,2),(2,2,3),(2,3,2),..]
?
额外奖励:是否有可能推广到n元组?
我需要在 JavaScript 中的数组上滑动窗口。
例如,大小3
超过的滑动窗口[1,2,3,4,5,6,7,8,9]
应计算序列[[1,2,3],[2,3,4],[3,4,5],[4,5,6],[5,6,7],[6,7,8],[7,8,9]]
。
以下是我的尝试,因为我找不到现成的解决方案:
function window(a, sz) {
return a.map((_, i, ary) => ary.slice(i, i + sz)).slice(0, -sz + 1);
}
Run Code Online (Sandbox Code Playgroud)
它返回一个窗口数组,可以映射这些窗口以获取单个窗口。
什么是更好的解决方案?