学习红宝石的简单隐窝?

时间:2011-07-16 15:56:50

标签: ruby cryptography

我想编写一个程序来获取用户输入,将每个字符向右移动一个(a = b,b = c,c = d等...)。如果输入的间距不是这样的话,我将如何做到这一点= h e l l o w o r l d。

4 个答案:

答案 0 :(得分:3)

确保你也得到z-> a。像这样:

"hallo world zzz".tr("a-z", "b-za")

答案 1 :(得分:1)

如果要将单词中的所有字符向右移动一个位置,可以使用Array类中的rotate方法并将其转换回字符串:

irb(main):008:0> word = "helloworld"
=> "helloworld"
irb(main):009:0> array = []
=> []
irb(main):010:0> word.each_char { |c| array << c }
=> "helloworld"
irb(main):011:0> array
=> ["h", "e", "l", "l", "o", "w", "o", "r", "l", "d"]
irb(main):012:0> array = array.rotate(-1)
=> ["d", "h", "e", "l", "l", "o", "w", "o", "r", "l"]
irb(main):014:0> array.join('')
=> "dhelloworl"

希望两年后有所帮助!

答案 2 :(得分:0)

对于二进制字符串:

input = ...

encrypted =     input.bytes.map {|b| (b == 255 ? 0 : b+1).chr }.join
decrypted = encrypted.bytes.map {|b| (b == 0 ? 255 : b-1).chr }.join

decrypted == input   # => true

答案 3 :(得分:0)

我不是在给你写解决方案,这很容易。

您需要了解Ruby字符串操作。

http://blog.grayproductions.net/articles/ruby_19s_string

http://ruby-doc.org/core/classes/String.html(寻找tr

最后一篇是关于1.8.7和1.9.1之间差异的好文章

http://abhilekh.wordpress.com/2009/10/22/ruby-1-8-7-vs-ruby-1-9-1/