โดยพื้นฐานแล้ว ฉันกำลังติดตามโปรแกรม Encryptor ที่ท้าทายของห้องทดลอง Jumpstart และพบปัญหาบางประการ
นี่คือรหัสของฉัน
class Encryptor
def cipher(rotation)
characters = (' '..'z').to_a
rotated_characters = characters.rotate(rotation)
Hash[characters.zip(rotated_characters)]
end
def encrypt_letter(letter, rotation)
cipher_for_rotation = cipher(rotation)
cipher_for_rotation[letter]
end
def encrypt(string, rotation)
letters = string.split("")
results = letters.collect do |letter|
encrypt_letter = encrypt_letter(letter, rotation)
end
results.join
end
def decrypt_letter(letter, rotation)
cipher_for_rotation = cipher(rotation)
reversed_cipher = cipher_for_rotation.to_a.reverse.to_h
reversed_cipher[letter]
end
def decrypt(string, rotation)
letters = string.split("")
results = letters.collect do |letter|
decrypt_letter = decrypt_letter(letter, rotation)
end
results.join
end
end
ฉันประสบปัญหาเกี่ยวกับวิธีการถอดรหัสของฉัน นี่คือข้อความต่อไปนี้วางจาก irb
2.3.0 :001 > load './encryptor.rb'
=> true
2.3.0 :002 > e = Encryptor.new
=> #<Encryptor:0x007fe93a0319b8>
2.3.0 :003 > encrypted = e.encrypt("Hello, World!", 10)
=> "Rovvy6*ay!vn+"
2.3.0 :004 > e.decrypt(encrypted, 10)
=> "\\y%%(@4k(+%x5"
อย่างที่คุณเห็น เมื่อถอดรหัสสตริงที่เข้ารหัสของฉัน มันควรจะแสดงข้อความว่า "Hello, World!" ซึ่งเป็นสิ่งที่ฉันเข้ารหัสด้วยการหมุน 10 อย่าเห็นว่าฉันทำอะไรผิดที่นี่ ความช่วยเหลือใด ๆ ที่จะได้รับการชื่นชม .
decrypt(10)
จะเหมือนกับencrypt(-10)
ซึ่งจะเหมือนกับencrypt(17)
(สมมติว่ามีตัวอักษร 27 ตัว) โดยทั่วไปแล้วdecrypt(N) == encrypt(-N) == encrypt(alphabet.size - N)
- person Jörg W Mittag   schedule 21.02.2017cipher_for_rotation.to_a.reverse.to_h
คุณเปลี่ยนพจนานุกรมให้เป็นอาร์เรย์ ย้อนกลับอาร์เรย์ (เช่น กลับลำดับของพจนานุกรม) แล้วเปลี่ยนให้เป็นพจนานุกรมอีกครั้ง แต่ลำดับไม่สำคัญสำหรับพจนานุกรม ดังนั้นคุณจึงได้พจนานุกรมเดียวกับที่คุณเริ่มใช้ เพื่อให้แม่นยำยิ่งขึ้น: RubyHash
es do คงลำดับการแทรกของคีย์ไว้ และรับประกันว่าจะวนซ้ำตามลำดับนั้น ดังนั้นสิ่งที่คุณทำคือกลับลำดับการแทรก (และจึงกลับลำดับการวนซ้ำ) แต่คุณไม่เคยวนซ้ำแฮช คุณจะเข้าถึงเฉพาะค่าของมันเท่านั้น - person Jörg W Mittag   schedule 21.02.2017