ROT13とROT47をRubyで書いてみた
今日のRubyは単換字式暗号の一種であるROT13とROT47に挑戦しました。
・ROT13 - Wikipedia
クラシカルな推理小説でよく使われる暗号の一種です。ちょっとした頭の体操気分で挑戦したのですが、意外と時間かかりました...やっぱもっとプログラムに書き慣れるように努力しよう。
これを短くする手段も検討してみようと思います。
・ROT13 - Wikipedia
クラシカルな推理小説でよく使われる暗号の一種です。ちょっとした頭の体操気分で挑戦したのですが、意外と時間かかりました...やっぱもっとプログラムに書き慣れるように努力しよう。
これを短くする手段も検討してみようと思います。
def rot13(str)
if /^[\sA-Za-z]+$/ =~ str then
rstr = "[ROT13] "
str.split(//).each do |s|
if /\s/ =~ s then rstr.concat(s); next end
if /[A-Z]/ == s
s[0]+13>90? c=s[0]+13-90+65-1 : c=s[0]+13
else
s[0]+13>122? c=s[0]+13-122+97-1 : c=s[0]+13
end
rstr.concat(c.chr)
end
return rstr
else
return "[ROT13] String hasn't changed."
end
end
# ROT47
def rot47(str)
if /^[\s!-~]+$/ =~ str then
rstr = "[ROT47] "
str.split(//).each do |s|
if /\s/ =~ s then rstr.concat(s); next end
s[0]+47>126? c=s[0]+47-126+33-1 : c=s[0]+47
rstr.concat(c.chr)
end
return rstr
else
return "[ROT47] String hasn't changed."
end
end
# EXEC
while line = STDIN.gets
if /exit/ =~ line then
break;
end
line.chop!
puts rot13(line)
puts rot47(line)
end
島田 浩二,設樂 洋爾,村田 賢太,前田 智樹,谷口 文威
翔泳社
売り上げランキング: 98926
翔泳社
売り上げランキング: 98926