python笛卡尔积算法_JavaScript 笛卡尔积 小算法!

var cartesianProduct = function(input) {

return input.reduce((a, b) => {

let m = a.map((av) => b.map((bv) => [bv].concat(av)))

return m.reduce((c, d) => c.concat(d), [])

}).map(v => v.reverse())

}

var a = cartesianProduct([[1,2], [3,4], [5,6]])

console.log(a)

var cartesianProduct2 = function() {

return Array.prototype.reduce.call(arguments, function(a, b) {

var ret = [];

a.forEach(function(a) {

b.forEach(function(b) {

ret.push(a.concat([b]));

});

});

return ret;

}, [[]]);

}

var b = cartesianProduct2([1,2], [3,4], [5,6])

console.log(b)

var cartesianProduct3 = function(array) {

return array.reduce(

function(a, b) {

return a

.map(function(x) {

return b.map(function(y) {

return x.concat(y)

})

})

.reduce(function(a, b) {

return a.concat(b)

}, [])

},

[[]]

)

}

var c = cartesianProduct3([[1,2], [3,4], [5,6]])

console.log(c)

var cartesianProduct4 = function(input) {

return input.reduce((prev, curr, currIndex, arr) => {

const ret = []

prev.map((a) => {

curr.map((b) => {

ret.push((Array.isArray(a) ? a : [a]).concat(b))

})

})

return ret

})

}

var d = cartesianProduct4([[1,2], [3,4], [5,6]])

console.log(d)

var f = (a, b) => [].concat(...a.map((d) => b.map((e) => [].concat(d, e))))

var cartesianProduct5 = (a, b, ...c) => (b ? cartesianProduct5(f(a, b), ...c) : a)

var e = cartesianProduct5([1,2], [3,4], [5,6])

console.log(e)

// 多数组求笛卡儿积

var cartesianProduct6 = function(array) {

return array.reduce(

function(a, b) {

return a

.map(function(x) {

return b.map(function(y) {

return x.concat(y)

})

})

.reduce(function(a, b) {

return a.concat(b)

}, [])

},

[[]]

)

}

var f = cartesianProduct6([[1,2], [3,4], [5,6]])

console.log(f)

// Generate cartesian product of given iterables:

var cartesianProduct7 = function* (head, ...tail) {

const remainder = tail.length > 0 ? cartesianProduct7(...tail) : [[]];

for (let r of remainder) for (let h of head) yield [h, ...r];

}

var g = cartesianProduct7([1,2], [3,4], [5,6])

console.log([...g]);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值