您好我正在尝试在红宝石中创建一个凯撒密码,但我被卡住了。
我能够将字符串拆分为单个字符并放入数组中。然后做了一个新的哈希并存储了char =>字节数。
在散列中,h的值为104.我想更改值+ 5.如果值为109,我如何将h更改为m? (104 *开始,105,106,107,108,109 *结束)(h *开始,i,j,k,l,*结束)
str = "hello world"
str_array = str.chars.to_a
str_hash = Hash.new
str_array.each do |char|
str_hash[char]= char.bytes
end
print str_hash
{"h"=>[104], "e"=>[101], "l"=>[108], "o"=>[111], " "=>[32], "w"=>[119], "r"=>[114], "d"=>[100]}
答案 0 :(得分:0)
你要做的是有点矫枉过正。通常情况下,您会先生成密码,然后在翻译时进行查找 Ruby在数组上也有一个旋转方法,它可以完全满足您的需要 请参阅下文,了解编码" hello world"
的代码示例original = ('a'..'z').to_a
codes = original.rotate(5)
cipher = {}
original.each_with_index do |c,i|
cipher[c] = codes[i]
end
str = "hello world"
encoded_str = []
str.split('').each do |c|
if cipher.key(c)
encoded_str << cipher[c]
else
encoded_str << c
end
end
puts encoded_str.join('')