gpt4 book ai didi

arrays - 二进制 ruby 计数

转载 作者:太空宇宙 更新时间:2023-11-03 17:05:01 24 4
gpt4 key购买 nike

我有两个数组

[a0 b0 c0]

[a1 b1 c1]

我想计算两者之间所有可能的和。可能的总和仅由每个列槽的 1 个元素组成。例如一个可能的总和是

a0 + b1 + c1

a1 + b1 + c1

但不是a1 + a0 + b0 + c0

换句话说,示例中的和将有 3 个槽,每个槽只有两个数组的 1 个元素。从我的角度来看,这看起来像是二进制计数,其中每个槽只能取两个数字(0 或 1)中的 1。所以在这个例子中

000表示和中的所有元素都来自第一个数组

sum(000) = a0 + b0 + c0.
sum(111) = a1 + b1 + c1
sum(010) = a0 + b1 + c0

你得到了备忘录。

我想知道如何在 ruby​​ 中执行此操作。我正在考虑一个复杂的解决方案,我在二进制字符串中计数,对于每个计数,我从数组中“选择”正确的元素。由于我想要所有可能的组合 (2^n),我可以在一行或接近一行中编写代码吗?

最佳答案

▶ a1 = [11,12,13]
#⇒ [11, 12, 13]
▶ b1 = [21,22,23]
#⇒ [21, 22, 23]
▶ a1.zip(b1).reduce(&:product).map(&:flatten)
#⇒ [[11, 12, 13], [11, 12, 23], [11, 22, 13], [11, 22, 23],
#⇒ [21, 12, 13], [21, 12, 23], [21, 22, 13], [21, 22, 23]]
▶ a1.zip(b1).reduce(&:product).map(&:flatten).map { |e| e.reduce &:+ }
#⇒ [36, 46, 46, 56, 46, 56, 56, 66]

UPD 出于好奇,这是@pangpang 用 ruby​​ 编写的解决方案:

[0,1].repeated_permutation([a1.length, a2.length].min).map do |bits|
bits.each_with_index.reduce(0) do |memo, (e, i)|
memo + (e.zero? ? a1[i] : a2[i])
end
end

关于arrays - 二进制 ruby 计数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30400092/

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