【问题标题】:How to create / generate permutation of characters and numbers with length control in ruby如何在 ruby​​ 中通过长度控制创建/生成字符和数字的排列
【发布时间】:2013-01-26 18:53:37
【问题描述】:

我需要创建/生成包含字符和数字排列的长字符串,同时我需要控制字符串长度这种方法最著名的例子是

Metasploit 项目

pettern_create.rb [字符串长度为 arg]

例如。 pattern_create.rb 100

浪人项目:

String.generate([:alpha, 1], :numeric).take(100).each do |pattern| 
   print pattern
end

两者都会生成

A0A1A2A3A4A5A6A7A8A9B0B1B2B3B4B5B6B7B8B9C0C1C2C3C4C5C6C7C8C9D0D1D2D3D4D5D6D7D8D9E0E1E2E3E4E5E6E7E8E9F0F1F2F3F4F5F6F7F8F9G0G1G2G3G4G5G6G7G8G9H0H1H2H3H4H5H6H7H8H9I0I1I2I3I4I5I6I7I8I9J0J1J2J3J4J5J6J7J8J9 P>

我试过了

all  = ["a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z",
         "A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z",
         "0","1", "2", "3", "4", "5", "6", "7", "8", "9"]

puts  all.permutation(4).to_a

这将花费大量时间,因为它会在没有控制的情况下生成所有排列,控制是防止不需要的字符串的方法

指定像“4C5C6”这样的字符串的特定位置没有问题 我可以使用

str = "A0A1A2A3A4A5A6A7A8A9B0B1B2B3B4B5B6B7B8B9C0C1C2C3C4C5C6C7C8C9D0D1D2D3D4D5D6D7D8D9E0E1E2E3E4E5E6E7E8E9F0F1F2F3F4F5F6F7F8F9G0G1G2G3G4G5G6G7G8G9H0H1H2H3H4H5H6H7H8H9I0I1I2I3I4I5I6I7I8I9J0J1J2J3J4J5J6J7J8J9"
puts str.index("4C5C6")   #=> 46

注意事项:

  • 应该始终以相同的序列生成排列。
  • 我不想强迫用户为了小功能而去 gem 大项目
  • 我需要了解算法或编程技巧才能做到这一点

谢谢

【问题讨论】:

    标签: ruby random permutation metasploit


    【解决方案1】:

    permutation 方法会生成一个枚举器,这正是您想要的。不要用to_a把它变成数组,取你需要的就行了。

    all  = ["a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z",
             "A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z",
             "0","1", "2", "3", "4", "5", "6", "7", "8", "9"]
    
    p  all.permutation(4).first(100) #take(100) is fine too
    

    Ruby 字符串在 Range 中工作,所以你可以这样做:

    ('aaaa'..'zzzz').first(100) #or
    ('A0'..'Z9').first(100).join
    #=> "A0A1A2A3A4A5A6A7A8A9B0B1B2B3B4B5B6B7B8B9C0C1C2C3C4C5C6C7C8C9D0D1D2D3D4D5D6D7D8D9E0E1E2E3E4E5E6E7E8E9F0F1F2F3F4F5F6F7F8F9G0G1G2G3G4G5G6G7G8G9H0H1H2H3H4H5H6H7H8H9I0I1I2I3I4I5I6I7I8I9J0J1J2J3J4J5J6J7J8J9"
    

    【讨论】:

      猜你喜欢
      • 2020-10-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-05-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多