第6回日本情報オリンピック 予選

2006年12月22日
情報オリンピック日本委員会

問題
   シーザー暗号

解説

大文字のアルファベットを次のように 0 から 25 の整数に対応づける.

A   B   C   D   E   F   G   H   I   J   K   L   M   N   O   P   Q   R   S   T   U   V   W   X   Y   Z
0   1   2   3   4   5   6   7   8   9  10  11  12  13  14  15  16  17  18  19  20  21  22  23  24  25

すると,この問いの変換は, 0 から 22 までは 3 を加えるという操作に, 23, 24, 25 は 3 を加えてから 26 を引くという操作に対応する. (この2つの場合をまとめて, 3 を加えて 26 で割った余りを求める操作に対応すると考えることもできる.)

   変換前    0  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
   変換後    3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25  0  1  2

よって逆の変換は, 0, 1, 2 は 26 を加えてから 3 を引くという操作に対応し, 3 から 25 は 3 を引くという操作に対応する. (この2つの場合をまとめて, 23 を加えて 26 で割った余りを求める操作に対応すると考えることもできる.)

  逆変換前    0  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
  逆変換後   23 24 25  0  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18 19 20 21 22 

よって, 上記の対応に従いアルファベットを整数に変換し, 逆の変換を行い, 再び上記の対応に従い整数をアルファベットに戻せばよい. 例えば,変換後の文字列 EBH は, 次のように文字列 BYE に戻る.

   E  →   4  →   1 →  B
   B  →   1  →  24 →  Y
   H  →   7  →   4 →  E

他に, 文字の対応表を配列などで実現し参照するという方法などが考えられる.