gpt4 book ai didi

ruby-on-rails - 在 Ruby 中创建密码

转载 作者:数据小太阳 更新时间:2023-10-29 08:57:39 26 4
gpt4 key购买 nike

我的任务是为我正在进行的项目创建凯撒密码。凯撒密码获取一串文本中的每个字母,并用一个字母替换它与它固定数量的位置(由密码 key 决定)。例如,如果我的文本是“cat”并且我的密码 key 是 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 >, ?, @

最佳答案

您应该创建一个字母表变量,想想如果您使用两端,那么您将遇到 2 个问题:负数和不存在的 ASCii 数字。您可以使用模块运算符 % 或单个减法来处理此问题。

alphabet = "abcde"

text_to_cipher= "aaee" => 0044 #number based in his position at aphabet var
key = 3

结果将是 3377 => dd¡?或任何其他符号,因为 7 超出了字符串长度“abcde”,同样的情况也发生在 ASCii 的末尾。使用模块运算符,您可以对其进行限制。

size_of_your_alphabet = 5 # For this case
7%size_of_your_alphabet = 2

关于ruby-on-rails - 在 Ruby 中创建密码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46331519/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com