Вы должны split
свое слово в отдельные символы. Затем вам нужно преобразовать символы в int с ord
, чтобы вы могли делать арифметику. Арифметическая операция заключается в добавлении смещения относительно 'a', по модулю 26, так что результат отображает другое смещение от 'a', которое приведет к новому символу. Измените результат на символ с помощью chr
и соедините символы вместе, чтобы сформировать строку.
Вот одна из возможных реализаций, которые могут разместиться как верхний и нижний регистр букв:
def shift_char(c, base, offset)
(((c.ord - base) + offset) % 26 + base).chr
end
def cipher(s, offset)
s.chars.map do |c|
case c
when 'a'..'z'
shift_char(c, 'a'.ord, offset)
when 'A'..'Z'
shift_char(c, 'A'.ord, offset)
else
c
end
end.join
end
cipher_text = cipher('Now is the time for all good men...', 13)
p cipher_text # "Abj vf gur gvzr sbe nyy tbbq zra..."
original_text = cipher(cipher_text, 13)
p original_text # "Now is the time for all good men..."
Ваш вопрос является слишком широким. Пожалуйста, включите результаты своей работы и что не так (что вам действительно нужно конкретно?). Например, вы можете указать, что вы отправляете «ABC» в свою функцию, и он выводит «! $%», Что не так, как вы ожидали, но вы не знаете, почему. – Rots
Добро пожаловать в переполнение стека. При запросе на помощь отладки вам необходимо предоставить образец ввода, ваш ожидаемый результат и минимальный код, необходимый для демонстрации проблемы, возникшей у вас в самом вопросе. Ваш примерный метод не является полным, и нет данных, которые мы можем использовать. Пожалуйста, помогите нам помочь вам и предоставить данные и сделайте метод хотя бы синтаксически правильным. –