僕はプログラミング歴は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