第51問 アルファベットをずらす暗号(シーザー暗号)
シーザー暗号は、アルファベットを決まった数だけ後ろにずらして文字をかくす暗号です。A から Z までを並べた配列 abc を使い、W X Y Z の4文字を zure(=3)だけずらして表示しよう。A が1番目、Z が26番目なので、番号 i を 23(=W)から 26(=Z)まで動かします。ずらした番号が26をこえたときだけ、A にもどるように26をひいて折り返します。26(=Z)はまだ折り返さないことに気をつけよう(2か所の穴をうめよう)
難易度:★★★☆☆(3/標準)。単元:条件分岐・繰り返し・配列。共通テスト「情報I」で使われるDNCL(共通テスト用プログラム表記)の穴埋め問題です。JavaScriptを有効にすると、このページでプログラムを組み立てて実行しながら解けます。
プログラム
abc = ["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"]
zure = 3
i を 23 から 26 まで 1 ずつ増やしながら繰り返す:
saki = i + zure
もし saki [A] 26 ならば:
saki = saki [B] 26
表示する(abc[i - 1] + "は" + abc[saki - 1] + "になります")
空欄 [A]・[B] に当てはまるものを、次の選択肢から選びます。
選択肢
ヒント
abc[1 - 1] が A、abc[26 - 1] が Z です。番号が1〜26の間にあれば、そのままアルファベットに直せます。W(23番目)は 23+3 = 26 で Z のままでよく、X(24番目)は 24+3 = 27 と26をこえるので 27-26 = 1、つまり A にもどります。「こえたとき」だけ折り返すので、条件は >= ではなく > です
解答
よくある間違い
- [A]
>= [B]- … W だけがこわれます。W は 23+3 = 26、つまり Z のことなので折り返さなくてよいのに、>= だと26も折り返して 26-26 = 0 になり、abc にない0番をさしてしまいます。折り返すのは26をこえた27からなので > を使います
- [A]
< [B]- … < だと向きが逆で、26より小さいときだけ26をひきます。ほんとうに折り返したい X Y Z は 27・28・29 のままアルファベットの外をさしてしまいます。ひくのは26をこえたときです
- [A]
> [B]+ … 条件は合っています。でも + だと27がさらに大きくなって53になり、ますますアルファベットの外に出てしまいます。26をこえたぶんを A から数えなおすので、26をひきます
- [A]
>= [B]+ … 2か所とも違います。折り返すのは26をこえたとき(>)で、そのときは26をたすのではなくひきます(-)。いまは4文字ともアルファベットの外をさしています
- [A]
< [B]+ … 2か所とも違います。26をこえたとき(>)に、26をひいて(-)A にもどします
この単元の解説動画
ほかの問題