2

为了好玩,我在 ruby​​ 中创建了一个简单的 leet (1337) 生成器

所以我正在做这样的事情,它有效但看起来效率不高,我相信它可以只用一行来完成......

    def leet
       words = words.gsub(/a/, '4')
       words = words.gsub(/e/, '3')
       words = words.gsub(/i/, '1')
       words = words.gsub(/o/, '0')
       words = words.gsub(/s/, '5')
       words = words.gsub(/t/, '7')
       puts words
    end

你能帮我一下吗?:) 谢谢!

4

3 回答 3

7
def leet(word)
  puts word.gsub(/[aeiost]/,'a'=>'4','e'=>'3','i'=>'1','o'=>'0','s'=>'5','t'=>'7')
end
于 2012-06-18T00:03:58.543 回答
5
def leet s
  s.tr 'aeiost', '431057'
end
于 2012-06-18T00:56:07.200 回答
4

一个更通用的 megas 版本:

class Leet
    @@map = {
        'a' => '4',
        'e' => '3',
        'i' => '1',
        'o' => '0',
        's' => '5',
        't' => '7'
    }
    @@re = Regexp.union(@@map.keys)

    def self.speak(str)
        str.gsub(@@re, @@map)
    end
end

puts Leet.speak('leet')
# l337

根据需要进行调整@@map,然后离开。

于 2012-06-18T00:11:29.497 回答