rubyで文字列をシーザー暗号に変換するスクリプトを書いてみました

僕はプログラミング歴は10年以上と長いのですが、クラスはほとんど書いたことがありません。(Java研修のときだけかも)
クラスを作ってみようという意気込みはあるのですが、新しく作りたいクラスも思い浮かばないので、rubyのStringクラスに、文字列をシーザー暗号に変換するメソッドを追加してみました。
wikipedia:シーザー暗号

(caesar_cipher.rb)

#!/usr/bin/env ruby

class String
 
  def encode_caesar_cipher
    str = ""
    self.each_byte{|char|
      if char.chr =~ /[A-Za-z]/ then
        if char.chr == "X" || char.chr == "Y" || char.chr == "Z" ||
           char.chr == "x" || char.chr == "y" || char.chr == "z" then
          str = str << (char - 23).chr
        else
          str = str << (char + 3).chr
        end
      else
        str = str << char
      end
    }
    return str
  end

end

puts ARGV[0].to_s
puts ARGV[0].to_s.encode_caesar_cipher



使ってみる

[tigerii@fedora ~]$ ./caesar_cipher.rb "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"
ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz
DEFGHIJKLMNOPQRSTUVWXYZABCdefghijklmnopqrstuvwxyzabc
[tigerii@fedora ~]$ ./caesar_cipher.rb 'Hello World!'
Hello World!
Khoor Zruog!
[tigerii@fedora ~]$ ./caesar_cipher.rb 'アルファベット以外はそのまま出力'
アルファベット以外はそのまま出力
アルファベット以外はそのまま出力
[tigerii@fedora ~]$ ./caesar_cipher.rb 'Boys, be ambitious!'
Boys, be ambitious!
Erbv, eh dpelwlrxv!
[tigerii@fedora ~]$ ./caesar_cipher.rb 'humansystem  TM Network'
humansystem  TM Network
kxpdqvbvwhp  WP Qhwzrun
[tigerii@fedora ~]$ ./caesar_cipher.rb 'BEYOND THE TIME  TM Network'
BEYOND THE TIME  TM Network
EHBRQG WKH WLPH  WP Qhwzrun
[tigerii@fedora ~]$ ./caesar_cipher.rb 'RESISTANCE  TM Network'
RESISTANCE  TM Network
UHVLVWDQFH  WP Qhwzrun
[tigerii@fedora ~]$ ./caesar_cipher.rb 'RHYTHM RED BEAT BLACK  TMN'
RHYTHM RED BEAT BLACK  TMN
UKBWKP UHG EHDW EODFN  WPQ






書き直しました

#!/usr/bin/env ruby

class String

  def encode_caesar_cipher
    str = ""
    self.each_byte{|char|
      if char.chr =~ /[A-Wa-w]/ then
        str = str << (char + 3).chr
      elsif char.chr =~ /[X-Zx-z]/ then
        str = str << (char - 23).chr
      else
        str = str << char
      end
    }
    return str
  end

end

puts ARGV[0].to_s
puts ARGV[0].to_s.encode_caesar_cipher

参照したURL:
http://d.hatena.ne.jp/rubyta/20060510/1147282404