Open2
Caesar Cipher
マジックナンバーを排除したかったが、変数が増えて命名が長くなりがち。
今回は割り切って使うか?
string = "Hello World"
shift = 3
def encipher(string, shift)
string.each_codepoint.map do |point|
if point.chr.match?(/[A-Z]/)
((point + shift - 65) % 26 + 65).chr
elsif point.chr.match?(/[a-z]/)
((point + shift - 97) % 26 + 97).chr
else
point.chr
end
end.join
end
p encipher(string, shift)
変更
- 明示的に半角スペースに対応するようにした
- 一部コードを変更
string = "Hello world"
shift = 3
def encipher(string, shift)
if string.match?(/[^A-Za-z\x20]/)
return "Please enter only alphabets."
end
string.each_codepoint.map do |point|
if point.chr.match?(/[A-Z]/)
((point + shift - 65) % 26 + 65).chr
elsif point.chr.match?(/[a-z]/)
((point + shift - 97) % 26 + 97).chr
elsif point.chr.match?(/[\x20]/)
point.chr
end
end.join
end
p encipher(string, shift)