我必须制作一个接收短语并将其加密的函数。密码是针对字母中的每个字母,加密的字母前面是3个字母。
Alphabet: A B C D E F G ... X Y Z
Ciphered: D E F G H I J ... A B C
如果这是我的Ruby字母:
a = ['a','b','c','d','e']
我需要将其映射到:
a = ['c','d','e','a','b']
我尝试对数组进行两次迭代并删除一些索引,但我知道我缺少某些内容。
UPDATE ----------------------------------------------- ---------------------
我设法解决了六个测试,在这个测试中我收到一个短语,并且必须根据测试要求进行加密。
[收到的词组:prefiro perder a guerra e ganhar a paz预期的短语:suhilur#shughu#d#jxhuud#h#jdqkdu#d#sd}
[我意识到要对短语进行密码处理,我应该将ascii table中的字母位置更改为3个位置。
示例:字母'a'应该被加密为'd',字母'z'应该被加密为'}'。
以下是我用来解决此问题的代码:
def cipher(text)
key = 3
cipher_text = text.chars.map {|x| x.ord}
.map {|x| x+key}
cipher_text.map { |x| x.chr }.join
end
def decipher(text)
key = 3
decipher_text = text.chars.map {|x| x.ord}
.map {|x| x-key}
decipher_text.map { |x| x.chr }.join
end
对于注释中提到的加密,请使用String.tr
方法
我必须制作一个接收短语并将其加密的函数。的 密码是字母中的每个字母,加密后的字母是3个字母 向前。
phrase = "abcd st xyz"
encrypted = phrase.tr("A-Za-z ", "D-ZA-Cd-za-c#")
# => "defg#vw#abc"
更新
[请注意,字母'z'(在该短语的末尾)表示 '}'
您可以将z
字符显式映射到}
phrase = "prefiro perder a guerra e ganhar a paz"
encrypted = phrase.tr("A-Ya-y z", "D-YA-Cd-ya-c#}")
# => "suhilur#shughu#d#jxhuud#h#jdqkdu#d#sd}"
不确定我是否理解您的问题,但是数据看起来像是旋转数组中的元素。在Ruby中,您可以使用一种特殊的方法。
a = %w[a b c d] #=> ["a", "b", "c", "d"]
a.rotate #=> ["b", "c", "d", "a"]
a #=> ["a", "b", "c", "d"]
a.rotate(2) #=> ["c", "d", "a", "b"]
a.rotate(-3) #=> ["b", "c", "d", "a"]
嗨,谢谢您的帮助。我必须创建一个接收短语并将其加密的函数。密码是针对字母中的每个字母,加密后的字母位于3个字母之前。范例:我们的字母:A B C D E F G ... X Y Z加密: D E F G H I J ... A B C
并且#表示接收到的短语中的空格。
给出一个字母:
alphabet = ('A'..'Z').to_a
#=> ["A", "B", "C", "D", "E", ..., "V", "W", "X", "Y", "Z"]
您可以通过调用rotate
创建加密的密码:
rotate
并创建一个到另一个的映射:
ciphered = alphabet.rotate(3)
#=> ["D", "E", "F", "G", "H", ..., "Y", "Z", "A", "B", "C"]
现在,要加密给定的字符串,我们必须通过该哈希运行每个字符:
to_cipher = alphabet.zip(ciphered).to_h
#=> {"A"=>"D", "B"=>"E", "C"=>"F", ..., "X"=>"A", "Y"=>"B", "Z"=>"C"}
嗯,差不多。这也删除了空格和感叹号。我们可以通过为哈希中未出现的字符提供后备选项来解决此问题:
'HELLO WORLD!'.each_char.map { |char| to_cipher[char] }.join
#=> "KHOORZRUOG"
或者,使用'HELLO WORLD!'.each_char.map { |char| to_cipher.fetch(char, char) }.join
#=> "KHOOR ZRUOG!"
的正则表达式:
gsub