ROT13 Cipher in ruby

just finished doing ruby in codeacademy, now i want to try code some ruby. so i found out about ROT13 and decided to do a simple script on encrypting words to ROT13
puts "-- ROT 13 encrypter--"

def encrypter(x)
    z = case x
    when "a" then "n"
    when "b" then "o"
    when "c" then "p"
    when "d" then "q"
    when "e" then "r"
    when "f" then "s"
    when "g" then "t"
    when "h" then "u"
    when "i" then "v"
    when "j" then "w"
    when "k" then "x"
    when "l" then "y"
    when "m" then "z"
    when "n" then "a"
    when "o" then "b"
    when "p" then "c"
    when "q" then "d"
    when "r" then "e"
    when "s" then "f"
    when "t" then "g"
    when "u" then "h"
    when "v" then "i"
    when "w" then "j"
    when "x" then "k"
    when "y" then "l"
    when "z" then "m"
    else  "ERROR"
    end
    
    return z
end
    
    

puts "Enter word: "

word = gets.chomp
wordarr = []
donearr = []
wordarr = word.split("")
wordarr.each {|y| donearr << encrypter(y) }
puts "Result: "
puts donearr.join
this is my first try just changing the input string into array and substituting each character with case statement. you can try this script at labs.codeacademy.com

but i think i can do better, why not i try taking the value of character and adding/subtracting 13 instead. but then it was troublesome.

after some googling (or cheating) there is a simple way to do this... using the tr method 
puts "Enter word: "
word = gets.chomp
word.tr!("abcdefghijklmnopqrstuvwxyz","nopqrstuvwxyzabcdefghijklm")
puts word

to make things a bit smarter, use method

def rot13(word)
   word.tr!("abcdefghijklmnopqrstuvwxyz","nopqrstuvwxyzabcdefghijklm")
end

puts "Enter word: "
enterword = gets.chomp
puts rot13(enterword)
 
    

No comments: