如何优化ruby代码在一个范围内迭代几个整数?

如何优化ruby代码在一个范围内迭代几个整数?,ruby,Ruby,Ruby新手,正在尝试查找3位数字“abc”: 这太长了,有没有办法优化它,或者用另一种“ruby”方式编写它?解决方案来源:) 这是另一个有趣的解决方案。不是真的更快,只是更紧凑,也许更像红宝石,如果这是你想要的: (0..9).to_a.repeated_permutation(3).select { |a,b,c| a*a+b*b+c*c == (100*a+10*b+c)/11.0 } => [[0, 0, 0], [5, 5, 0], [8, 0, 3]] 解决方案来源

Ruby新手,正在尝试查找3位数字“abc”:

这太长了,有没有办法优化它,或者用另一种“ruby”方式编写它?

解决方案来源:)

这是另一个有趣的解决方案。不是真的更快,只是更紧凑,也许更像红宝石,如果这是你想要的:

(0..9).to_a.repeated_permutation(3).select { |a,b,c| 
  a*a+b*b+c*c == (100*a+10*b+c)/11.0 
}
=> [[0, 0, 0], [5, 5, 0], [8, 0, 3]]
解决方案来源:)

这是另一个有趣的解决方案。不是真的更快,只是更紧凑,也许更像红宝石,如果这是你想要的:

(0..9).to_a.repeated_permutation(3).select { |a,b,c| 
  a*a+b*b+c*c == (100*a+10*b+c)/11.0 
}
=> [[0, 0, 0], [5, 5, 0], [8, 0, 3]]

这相当于找到a,b,c

100*a + 10*b + c = 11 * (a*a + b*b +c*c)
i、 e.
100*a+10*b+c
必须能被11整除。简单数论告诉你,当a,b,c是数字时,这意味着

`a + c - b`
必须是11的倍数,所以

`a + c = b or a + c = 11 +b`

因此,对于给定的a和b值,只需要检查c的两个值:b-a和11+b-a,而不是10。您可以再次将搜索空间分成两部分:如果a>b,您只需要检查这两个值中的后一个,如果a,这相当于找到a、b、c

100*a + 10*b + c = 11 * (a*a + b*b +c*c)
i、 e.
100*a+10*b+c
必须能被11整除。简单数论告诉你,当a,b,c是数字时,这意味着

`a + c - b`
必须是11的倍数,所以

`a + c = b or a + c = 11 +b`

因此,对于给定的a和b值,只需要检查c的两个值:b-a和11+b-a,而不是10。您可以再次将搜索空间分成两部分:如果a>b,您只需要检查这两个值中的后一个,如果a,您可以压缩代码,但是考虑到您想要实现的目标,您仍然需要保留三个循环。任何优化都不会产生巨大的效果,因为它已经运行得相当快(在我的机器上为90毫秒)。你给我们看的是实际的代码还是一个简单的例子?在上面的例子中,我将简单地硬编码数字
000550803
,因为输出总是相同的。您可以压缩代码,但考虑到您想要实现的目标,仍然需要保留三个循环。任何优化都不会产生巨大的效果,因为它已经运行得相当快(在我的机器上为90毫秒)。你给我们看的是实际的代码还是一个简单的例子?在上述情况下,我只需对数字进行硬编码,因为输出总是相同的。