如何以一切可能的方式将字符串拆分为长度最多为3的连续子串?

Dri*_*t12 5 ruby variables

我试图在长度1和10之间取一个字符串,并输出所有可能的方法将字符串分解为大小为1,2或3的连续子字符串.例如:

Input: 123456

将整数切成单个字符,然后继续查找组合.代码将返回以下所有数组.

    [1, 2, 3, 4, 5, 6]  
    [12, 3, 4, 5, 6]  
    [1, 23, 4, 5, 6]  
    [1, 2, 34, 5, 6]  
    [1, 2, 3, 45, 6]  
    [1, 2, 3, 4, 56]  
    [12, 34, 5, 6]  
    [12, 3, 45, 6]  
    [12, 3, 4, 56]  
    [1, 23, 45, 6]  
    [1, 2, 34, 56]  
    [1, 23, 4, 56]  
    [12, 34, 56]  
    [123, 4, 5, 6]  
    [1, 234, 5, 6]  
    [1, 2, 345, 6]  
    [1, 2, 3, 456]  
    [123, 456]  
    [1, 23, 456]  
    [1, 234, 56]  
    [12, 345, 6]  
    [12, 3, 456]  
    [123, 4, 56]  
    [123, 45, 6]
Run Code Online (Sandbox Code Playgroud)

我想用红宝石做这件事.谢谢!

Roc*_*etR 4

这是一个工作函数。可能不是最佳选择,因为我没有花太多时间。

str = "1234567890"

def f(s, n)
    return [[]] if s.empty?

    (1..[n, s.length].min).map{|c| f(s[c..-1], n).map{|a| [s[0, c]] + a}}.inject(&:+)
end

puts f(str, 3).collect{|l| l * "\t"}
Run Code Online (Sandbox Code Playgroud)

编辑:使它更短一些,长度现在作为第二个参数传递给函数以实现灵活性。