LoginSignup
0
0

More than 3 years have passed since last update.

[Ruby]シーザー暗号を出力するコード

Posted at

対象読者

プログラミング初学者

シーザー暗号とは

シーザー暗号(Caesar cipher)は単一換字式暗号の一種で、平文の各文字を、辞書順に3文字分シフトして暗号文を作る暗号である。

古代ローマの軍事的指導者ガイウス・ユリウス・カエサル(英語読みでシーザー)が使用したことから、この名称がついた。

例題

「khoorzruog」という文字列があり、これを3文字ずらす(戻す)と復号できることがわかっている。
それを実現させるコードを記述する。

事前知識

splitメソッド

文字列を分割して配列にするためのメソッド。
型は以下の通り。

文字列.split("")

例えば

str = "abc"

array = str.split("")

p array # 出力結果 ["a", "b", "c"]

joinメソッド

配列の中の要素を文字列にしてそのまま連結させるメソッド。
型は以下の通り。

配列.join

引数を取ることも出来ますが今回は割愛。

ordメソッド

文字列の最初の文字の文字コードを整数で返すメソッド。

例えば

p "a".ord   # 出力結果 97

文字コードとは、電子媒体において、文章を画像などの図形データとして扱わずに、テキストの形式で扱う場合に、その各文字に対して持っているコードのこと。

chrメソッド

ordメソッドの逆で文字コードから文字を返すメソッド。

例えば

p 97.chr   # 出力結果 "a"

解答

# シーザー暗号を変数に代入する。
caesar_cipher = "khoorzruog"

# splitメソッドで上記変数の文字列を分割する。
code = caesar_cipher.split("") # => ["k", "h", "o", "o", "r", "z", "r", "u", "o", "g"]

# 新たに配列を作成する。
array = []

# 分割された文字がordメソッドで文字コードに変換され、3文字ずらす(-3)ことで元のコードの文字コードに戻す。chrメソッドでその文字コードを文字に戻す。
code.each do |i|
  array << ( i.ord - 3 ).chr
end # 出力結果 ["h", "e", "l", "l", "o", "w", "o", "r", "l", "d"]

p array.join # 出力結果 "helloworld"

参考にしたサイト

オブジェクト指向スクリプト言語 Ruby リファレンスマニュアル

0
0
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0