0

您好,我正在尝试在 ruby​​ 中创建一个凯撒密码,但我被卡住了。
我能够将字符串拆分为单个字符并放入数组中。然后创建一个新的哈希并存储 char => 字节数。

在哈希中,h 的值为 104。我想更改值 + 5。如果值为 109,我如何也将 h 更改为 m?(104*start, 105, 106, 107, 108, 109*end) (h*start, i, j, k, l, *end)

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]}
4

1 回答 1

0

你想要做的是有点矫枉过正。通常,您会首先生成密码,然后在翻译时进行查找。
Ruby 在数组上也有一个 rotate 方法,它完全可以满足您的需要。
有关编码“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('')
于 2015-09-21T15:50:05.963 回答