Cambio de Cifrado de César en una cadena usando el número de cambio

Tengo esta pregunta. Usando el lenguaje Ruby, haga que la función CaesarCipher (str, num) tome el parámetro str y realice un cambio de Cifrado César usando el parámetro num como el número de cambio. Un Cifrado César funciona desplazando cada letra de la cadena N en el alfabeto (en este caso, N será num). La puntuación, los espacios y las mayúsculas deben permanecer intactos. Por ejemplo, si la cadena es “Cifrado César” y num es 2, la salida debería ser “Ecguct Ekrjgt”.

Cualquier mi código se ve así. Creo que el único problema que tengo es actualizar cada letra y luego cada palabra dentro de los bucles. por favor ayuda. gracias

def Caesar_cipher(str, num) if num > 25 num -= 26 end alphabet = ["a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z"] str = str.split(" ") str.each do |word| word.each_char do |c| if alphabet.include?(c) n = alphabet.index(c) + num if n > 25 n -= 26 end c = alphabet[n] end end end return str end puts Caesar_cipher("zabcd", 1) // "zabcd" 

  str = str.split("") alphabet = ["a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z"] alphabet2 = ["A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z"] while num > 25 num -= 26 end str = str.map do |char| if alphabet.include?(char) n = alphabet.index(char) + num while n > 25 n -= 26 end char = alphabet[n] elsif alphabet2.include?(char) m = alphabet2.index(char) + num while m > 25 m -= 26 end char = alphabet2[m] else char end char end return str.join end 
 def cipher_shift(s, n) letters = [*'a'..'z'] s.chars.map {|x| letters.include?(x.downcase) ? (x.ord + n).chr : x}.join end