0

文字と数字の順列を含む長い文字列を作成/生成する必要があると同時に、文字列の長さを制御する必要がありますこのアプローチの最も有名な例は次のとおりです。

Metasploitプロジェクト

pettern_create.rb[argとしての文字列の長さ]

元。pattern_create.rb 100

Roninプロジェクト:

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

両方が生成されます

A0A1A2A3A4A5A6A7A8A9B0B1B2B3B4B5B6B7B8B9C0C1C2C3C4C5C6C7C8C9D0D1D2D3D4D5D6D7D8D9E0E1E2E3E4E5E6E7E8E9F0F1F2F3F4F5F6F7F8F9G0G1G2G3G4G5G6G7G8G9H0H1H2H3H4H5H6H7H8H9I0I1I2I3I4I5I6I7I8I9J0J1J2J3J4J5J6J7J8J9

で試してみました

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

ノート:

  • 順列は、常に同じシーケンスで生成する必要があります。
  • 小さな機能のために巨大なプロジェクトをユーザーに強制したくない
  • それを行うには、アルゴリズムまたはプログラムによるトリックを理解する必要があります

ありがとう

4

1 に答える 1

4

この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文字列はRangebtwで機能するため、次のことができます。

('aaaa'..'zzzz').first(100) #or
('A0'..'Z9').first(100).join
#=> "A0A1A2A3A4A5A6A7A8A9B0B1B2B3B4B5B6B7B8B9C0C1C2C3C4C5C6C7C8C9D0D1D2D3D4D5D6D7D8D9E0E1E2E3E4E5E6E7E8E9F0F1F2F3F4F5F6F7F8F9G0G1G2G3G4G5G6G7G8G9H0H1H2H3H4H5H6H7H8H9I0I1I2I3I4I5I6I7I8I9J0J1J2J3J4J5J6J7J8J9"
于 2013-01-26T19:10:53.827 に答える