Pada dasarnya saya mengikuti program Encryptor tantangan laboratorium Jumpstart, dan mengalami beberapa masalah.
Ini kode saya
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
Saya mengalami kesulitan dengan metode dekripsi saya. Berikut ini yang ditempelkan dari 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"
Seperti yang Anda lihat, saat mendekripsi string terenkripsi saya, seharusnya menghasilkan "Halo, Dunia!", yang saya gunakan untuk mengenkripsinya, dengan rotasi 10. Jangan lihat kesalahan apa yang saya lakukan di sini, bantuan apa pun akan sangat kami hargai .
decrypt(10)
sama denganencrypt(-10)
, yang pada gilirannya sama denganencrypt(17)
(dengan asumsi alfabet 27 huruf). Secara umum,decrypt(N) == encrypt(-N) == encrypt(alphabet.size - N)
. - person Jörg W Mittag   schedule 21.02.2017cipher_for_rotation.to_a.reverse.to_h
. Anda mengubah kamus menjadi sebuah array, membalikkan array (yaitu membalikkan urutan kamus), dan kemudian mengubahnya menjadi kamus lagi. Namun urutan tidak menjadi masalah untuk kamus, jadi Anda akan mendapatkan kamus yang sama dengan yang Anda gunakan untuk memulai. Lebih tepatnya: RubyHash
es do mempertahankan urutan penyisipan kunci, dan dijamin akan melakukan iterasi dalam urutan tersebut, jadi apa yang telah Anda lakukan adalah membalikkan urutan penyisipan (dan dengan demikian membalikkan urutan iterasi). Namun Anda tidak pernah mengulangi hash, Anda hanya mengakses nilainya. - person Jörg W Mittag   schedule 21.02.2017