Ruby on rails Ruby查找组合
我正在尝试将输入作为字符串 然后我需要找到所有可能的组合和不同的组合,但我不能这样做Ruby on rails Ruby查找组合,ruby-on-rails,ruby,Ruby On Rails,Ruby,我正在尝试将输入作为字符串 然后我需要找到所有可能的组合和不同的组合,但我不能这样做 input = "aabb" 输出我需要打印所有组合= 'a','a','b','b','aa','ab','bb','aab','abb','aabb' 现在不同的组合 'a','b','aa','ab','bb','aab','abb','aabb' 然后我要数一数这些字母,然后求和 'a','a','b','b','aa','ab','bb','aab','abb','aabb' 为此 resul
input = "aabb"
输出我需要打印所有组合=
'a','a','b','b','aa','ab','bb','aab','abb','aabb'
现在不同的组合
'a','b','aa','ab','bb','aab','abb','aabb'
然后我要数一数这些字母,然后求和
'a','a','b','b','aa','ab','bb','aab','abb','aabb'
为此
result = 1+1+1+1+2+2+2+3+3+4
同样,对于其他组合,我需要求和。您可以使用
要获取所有组合,请执行以下操作:
input = "aabb"
res = []
input.size.times { |n| res << input.chars.combination(n+1).map { |a| a.join } }
res.flatten
#=> ["a", "a", "b", "b", "aa", "ab", "ab", "ab", "ab", "bb", "aab", "aab", "abb", "abb", "aabb"]
res.flatten.uniq
#=> ["a", "b", "aa", "ab", "bb", "aab", "abb", "aabb"]
要数一数字母并求和,请执行以下操作:
res.flatten.uniq.map(&:size)
#=> [1, 1, 2, 2, 2, 3, 3, 4]
res.flatten.uniq.map(&:size).reduce(:+)
# => 18
你可以用
要获取所有组合,请执行以下操作:
input = "aabb"
res = []
input.size.times { |n| res << input.chars.combination(n+1).map { |a| a.join } }
res.flatten
#=> ["a", "a", "b", "b", "aa", "ab", "ab", "ab", "ab", "bb", "aab", "aab", "abb", "abb", "aabb"]
res.flatten.uniq
#=> ["a", "b", "aa", "ab", "bb", "aab", "abb", "aabb"]
要数一数字母并求和,请执行以下操作:
res.flatten.uniq.map(&:size)
#=> [1, 1, 2, 2, 2, 3, 3, 4]
res.flatten.uniq.map(&:size).reduce(:+)
# => 18
要获取
输入的所有子字符串
(或更一般地获取可枚举的所有子序列
),您可以使用以下方法:
def subsequences(e)
a = e.to_a
indices = (0..a.length - 1).to_a
indices.product(indices)
.reject { |i, j| i > j }
.map { |i, j| a[i..j] }
end
您可以在字符串上这样使用:子序列(input.chars).map(&:join)
。chars
和join
是必需的,因为字符串
s不可枚举
,但是子序列
函数实际上并不需要它。您可以只取出第一行,它仍然适用于字符串(任何具有“切片”下标运算符的操作,真的…)
还要注意的是,这不是实现这一点的唯一方法。这里的基本问题是迭代序列的所有有序索引对。您也可以使用基本循环来实现这一点。我只是碰巧发现笛卡尔积方法非常优雅
一旦变量中有了第一个列表,比如list
,第二个任务就和list.uniq
一样简单,第三个任务由
list.map(&:size).reduce(:+)
要获取
输入的所有子字符串
(或更一般地获取可枚举的所有子序列
),您可以使用以下方法:
def subsequences(e)
a = e.to_a
indices = (0..a.length - 1).to_a
indices.product(indices)
.reject { |i, j| i > j }
.map { |i, j| a[i..j] }
end
您可以在字符串上这样使用:子序列(input.chars).map(&:join)
。chars
和join
是必需的,因为字符串
s不可枚举
,但是子序列
函数实际上并不需要它。您可以只取出第一行,它仍然适用于字符串(任何具有“切片”下标运算符的操作,真的…)
还要注意的是,这不是实现这一点的唯一方法。这里的基本问题是迭代序列的所有有序索引对。您也可以使用基本循环来实现这一点。我只是碰巧发现笛卡尔积方法非常优雅
一旦变量中有了第一个列表,比如list
,第二个任务就和list.uniq
一样简单,第三个任务由
list.map(&:size).reduce(:+)
如果您想接收任何输入,请向我们展示您已经尝试过的内容。好的,我正在向您展示我的代码更新了我的问题请看这只是一个获取用户输入的代码,它甚至还没有接近设置解决方案。这看起来更像是您遇到的“编码挑战”,现在您正在寻找问题的完整解决方案。另外,请不要发布
我将发布-我已经发布了评论,这是垃圾评论。这不是我在书中读到的编码挑战问题,但我无法解决问题,这就是为什么我在这里发布,如果你能帮我解决问题,那么请做如果你想收到任何意见,请告诉我们您已经尝试了什么。好的,我向您展示了我的代码更新了我的问题,请看这只是一个获取用户输入的代码,它甚至还没有接近设置解决方案。这看起来更像是您遇到的“编码挑战”,现在您正在寻找问题的完整解决方案。另外,请不要发布我将发布-我已经发布了评论,这不是我在书中读到的一个编码挑战问题,但我无法解决这个问题。这就是为什么我在这里贴了帖子,如果你能帮助我解决这个问题,那么请注意你的独特组合是正确的,但第一个组合不是正确的。使用平面图
你可以避免需要展平
。第一个代码片段还生成了“非CNONTIGUAUS组合”,我想这在这里是不需要的<代码>“aabb”
在这里是个坏例子,我想。让我们看看“1234”
。例如,结果将包含字符串“124”
。使用flat\u map
可以避免展平
。第一个片段还生成了“非CNONTIGUAUS组合”,我认为这里不需要这些组合<代码>“aabb”
在这里是个坏例子,我想。让我们看看“1234”
。例如,结果将包含字符串“124”
。一般来说,它可以是混合了可枚举
的任何东西。最简单的例子是Array
s,还有Hash
es,尽管我不认为这对Hash
;)有用(实际上,它更为通用,Ruby是一种动态类型语言:e
可以是任何具有to\u
方法的东西,该方法返回具有可处理范围的下标运算符的东西。)正如我所写的:对于您的用例,它将是input.chars
。一般来说,它可以是混合了可枚举
的任何东西。最简单的例子是Array
s,还有Hash
es,尽管我不认为这对Hash
;)有用(实际上,它更为通用,Ruby是一种动态类型语言:e
可以是任何具有to\u
方法的东西,该方法返回的东西具有一个可以处理范围的下标运算符。)