在写一个爆破密码的字典生成工具,其中有这样一个需求: 输入一个单词:列出这个单词的所有大小写组合,比如 ruby Ruby rUby ruBy rubY RuBy RuBY ....等等,这样 2^n 个
我想了想,思路为用二维数组保存每个字母的大写和小写:t=[["A", "a"], ["B", "b"], ["C", "c"]], 然后对它们进行位置固定的组合,使用了数组的 product 方法:
s="abcde"
t= Array.new(s.length) { Array.new(2) }
#生成二维数组
for i in 0...(s.length)
#处理数字
if s[i].to_i.to_s == s[i]
t[i][0]=s[i]
else
t[i][0]=s[i].upcase
t[i][1]=s[i].downcase
end
end
q=t[0].product
for i in 1...s.length
q=q.product(t[i])
end
q.each do |g|
puts g.join
end
不过我觉得写得有点丑,肯定有更优美的实现, 还望指点