У меня есть скрипт Caesar Cipher на Ruby, который работает, но он возвращает строку как все буквы верхнего регистра вместо сохранения регистров исходной строки.
Я мог бы использовать capitalize
, чтобы он выглядел достаточно хорошо, но мне нужен более конкретный способ сохранения дел.
Вот сценарий:
BASE_ORD = 'A'.ord
def caesar_cipher(phrase, key)
cipher = phrase.gsub(/[a-z]/i) do |c|
orig_pos = c.upcase.ord - BASE_ORD
new_pos = (orig_pos + key) % 26
(new_pos + BASE_ORD).chr
end
puts cipher
end
caesar_cipher("What a string!", 5)
Любая помощь или понимание будут оценены.
phrase.gsub(/\w/)
- person Brennan   schedule 15.12.2015\w
также включает в себя некоторые вещи, которые не являются буквами, поэтому[a-zA-Z]
было бы лучше. Проблема на самом делеupcase
. И в любом случае сtr
это сделать проще, чем сgsub
. - person Amadan   schedule 15.12.2015