トラック
/
Julia
Julia
/
演習
/
回転暗号
回転暗号

回転暗号

初級

説明

シーザー暗号とも呼ばれる回転暗号を実装してみましょう。

シーザー暗号は、0から26までの整数の鍵を使って、アルファベットのすべての文字をずらす、単純なシフト暗号です。 鍵に0または26を使うと、剰余演算により、常に同じ結果になります。 文字は、鍵の値と同じ数だけずれます。

回転暗号の一般的な表記はROT + <key>です。 最もよく使われる回転暗号はROT13です。

ROT13をラテンアルファベットに適用すると、次のようになります。

Plain:  abcdefghijklmnopqrstuvwxyz
Cipher: nopqrstuvwxyzabcdefghijklm

回転暗号は、鍵の候補が27通りあり、そのうち使えるのが25通りなので、アトバシュ暗号よりも強力です。

暗号文は、スペースや句読点も含めて、入力と同じ書式で書き出されます。

例

  • ROT5はomgをtrlにします
  • ROT0はcをcにします
  • ROT26はCoolをCoolにします
  • ROT13はThe quick brown fox jumps over the lazy dog.をGur dhvpx oebja sbk whzcf bire gur ynml qbt.にします
  • ROT13はGur dhvpx oebja sbk whzcf bire gur ynml qbt.をThe quick brown fox jumps over the lazy dog.にします

非標準の文字列リテラルとメタプログラミングを試すのにうってつけの演習です。

非標準の文字列リテラルの簡単な紹介は、こちらのブログ記事にあります。メタプログラミングの詳しいガイドは、マニュアルにあります。

以下で説明する機能を追加して、自分の解答を拡張できます。

ボーナスAに必要なのは、ブログ記事で説明されている基本だけです。ボーナスBには、Juliaでのメタプログラミングに関する、より高度な知識が必要です。

ボーナスA

文字列に対してROT13として働く文字列リテラルを実装しましょう。

R13"abcdefghijklmnopqrstuvwxyz" == "nopqrstuvwxyzabcdefghijklm"

ボーナスB

文字列をiの値だけずらす文字列リテラルR<i>(i = 0, ..., 26)を実装しましょう。

R0"Hello, World!" == "Hello, World!"
R4"Testing 1 2 3 testing" == "Xiwxmrk 1 2 3 xiwxmrk"
R13"abcdefghijklmnopqrstuvwxyz" == "nopqrstuvwxyzabcdefghijklm"

出典

Wikipediaリンクは新しいウィンドウまたはタブで開きます
GitHubで編集する リンクは新しいウィンドウまたはタブで開きます
Julia Exercism

回転暗号を始める準備はできましたか?

Exercismに登録すれば、35個のコンセプト128個の演習、そして本物の人間によるメンタリングとともに、Juliaを学んでマスターできます。すべて無料です。