如何使用 ruby​​ 生成数字组合?

发布于 2024-11-17 20:12:49 字数 148 浏览 3 评论 0原文

我需要使用 ruby​​ 生成数字组合。 例如:

arr = [1,2,3,4,5]

限制是,组合数量应包含数字 5,且长度至少为 3 或以上。 (即 125、521、1245 等)。上述数组元素(值1至5)可以在组合数中出现一次或两次或更多次。

I need to generate the combinations of numbers using ruby.
For Example :

arr = [1,2,3,4,5]

The constraint is, the combination number should include the number 5 and the length is minimum 3 or above. (i.e 125, 521, 1245 etc.. ). The above array elements (values 1 to 5) may occur one or two or more times in the combination number.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

临走之时 2024-11-24 20:12:49

试试这个:

arr = [1, 2, 3, 4, 5]
arr = arr * 5
out = []
3.upto(5) do |i|
  arr.combination(i) do |c|
    out << c if c.include? 5
  end
end
out = out.uniq.sort
puts out.inspect

# yields 2531 elements:
# [[1, 1, 1, 1, 5], [1, 1, 1, 2, 5], ... [2, 3, 5], ... [5, 5, 5, 5, 5]]

Try this:

arr = [1, 2, 3, 4, 5]
arr = arr * 5
out = []
3.upto(5) do |i|
  arr.combination(i) do |c|
    out << c if c.include? 5
  end
end
out = out.uniq.sort
puts out.inspect

# yields 2531 elements:
# [[1, 1, 1, 1, 5], [1, 1, 1, 2, 5], ... [2, 3, 5], ... [5, 5, 5, 5, 5]]
半城柳色半声笛 2024-11-24 20:12:49

[编辑] 函数式方法(需要 Ruby 1.9):

xs = 3.upto(5).flat_map do |length|
  [1, 2, 3, 4, 5].repeated_permutation(length).select do |permutation|
    permutation.include?(5)
  end  
end
xs.size # 2531

[edit] Functional approach (requires Ruby 1.9):

xs = 3.upto(5).flat_map do |length|
  [1, 2, 3, 4, 5].repeated_permutation(length).select do |permutation|
    permutation.include?(5)
  end  
end
xs.size # 2531
盗梦空间 2024-11-24 20:12:49
arr = [1,2,3,4,5]
combos = []              
for i in 3..arr.length
  combos.push(arr.repeated_combination(i).to_a)
end
combos.flatten(1).select{|c|c.include?(5)}

在这里,我创建了一个临时容器变量 combos,它将存储数组中 3 个或更多数字的每个组合。然后我过滤数组以仅包含包含 5 的组合。

arr = [1,2,3,4,5]
combos = []              
for i in 3..arr.length
  combos.push(arr.repeated_combination(i).to_a)
end
combos.flatten(1).select{|c|c.include?(5)}

Here I'm creating a temporary container variable combos that will store every combination of 3 or more numbers in the array. I'm then filtering the array to only include combinations containing 5.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文