но я в упор не вижу ошибку.
Задача - шифрование шифром цезаря, при работе с кириллицей при большом сдвиге дешифрованное сообщение не совпадает с изначальным. Если использовать небольшой сдвиг, то всё работает нормально. В чем может быть проблема?
const n1 = length('A':'Я')
function caesar_encrypt(ch::Char, shift::Integer)
if ch in 'А':'Я'
'А' + mod((ch - 'А') + shift, n1)
else
ch
end
end
function caesar_decrypt(ch::Char, shift::Integer)
if ch in 'А':'Я'
'А' + mod((ch - 'А') - shift, n1)
else
ch
end
end
message = "ТЕСТ"
shift = 15
cipher_text = map(ch -> caesar_encrypt(ch, shift), message)
#decrypt
map(cipher_text) do ch
caesar_decrypt(ch, shift)
end
в диапазоне 'А':'Я', кстати, отсутствует Ё
Действительно, не знал.
вообще, арифметика 'А' + mod((ch - 'А') - shift, n1) может быть не безобидной. Я не знаю, как операции над юникодом сделаны
Обсуждают сегодня