【发布时间】:2017-09-23 03:29:00
【问题描述】:
我的任务是为我正在进行的项目创建凯撒密码。凯撒密码获取文本字符串中的每个字母,并将其替换为距离它固定数量的字母(由密码密钥决定)。例如,如果我的文本是“cat”并且我的密钥是 3,那么我的新单词将是“fdw”(我假设正数将字母向右移动)。我已经能够让我的代码正确解决大多数文本字符串,但我发现如果我的字符串包含 > ?或@它不起作用。如果有帮助,他们的 ASCII 代码是 62,63 和 64。任何意见表示赞赏!
def caesar_cipher(str, num)
strArray = str.split('')
cipherArray = strArray.collect do |letter|
letter = letter.ord
if (65...90).include?(letter + num) || (97...122).include?(letter + num)
letter = letter + num
elsif (91...96).include?(letter + num) || (123...148).include?(letter + num)
letter = (letter - 26) + num
else
letter
end
end
cipherArray = cipherArray.collect {|x| x.chr}
cipher = cipherArray.join('')
end
caesar_cipher("Am I ill-prepared for this challenge?", 3)
#ord 62-64 DON'T work >, ?, @
【问题讨论】:
-
您认为
>、?或@中三个字母对的字符有哪些? -
@spickermann 嗨!我为每个符号使用了 ASCii 代码。使用它,> 等于 62,?等于 63,@ 等于 64。每个加 3 将得到 65(“A”)、66(“B”)和 67(“C”)。
标签: ruby-on-rails ruby