大学入学共通テスト(数学) 過去問
令和4年度(2022年度)追・再試験
問174 (情報関係基礎(第3問) 問14)
問題文
Eさんは英小文字だけによる長さ8文字のパスワードを使っているが、悪意を持った第三者が長さ8のあらゆる文字列をもれなく試せば、いずれはパスワードを当てられてしまうことに気付いた。そこでEさんは、プログラムを作る練習としてこのことをコンピュータで確かめてみることにした。
Eさんは初めに、自分が使っているパスワードと、プログラムで生成する文字列の一つとが一致するか確かめる手続きを作成することにした。なお、ここでは8文字ちょうどのパスワードだけを考えることにする。
自分が使っているパスワードを正解文字列と呼び、配列Seikaiの要素Seikai[0]からSeikai[7]に順に1文字ずつ格納されているとする。また、プログラムで生成する文字列を候補文字列と呼び、配列Kouhoの要素Kouho[0]からKouho[7]に順に1文字ずつ格納されているとする。Eさんは、候補文字列と正解文字列で一致している文字を数え、文字列全体が一致しているときに候補文字列を表示する手続きを図1のように作成した。
Eさんは配列Suutiの内容をすべての候補文字列に対応するように変化させるために、図4の手順を考えた。図4では、配列Suutiの8要素がすべて0である1番目から、左端のSuuti[0]を1ずつ増やしていき、26番目の次はSuuti[0]を0に戻してSuuti[1]を1増やす、という手順を繰り返している。268番目の次は1番目に戻るとする。配列Suutiの要素を変化させる際の一時的な状態を、図4では点線により示している。この方法ですべての候補文字列を順に得るために、次の候補文字列に対応するよう配列Suutiを変化させる手続きを、図5のように作成した。図4の268番目から1番目に戻るときに、変数jが配列Suutiをはみ出さないよう注意して変数mを設定した。また、変数tは図4の点線の状態を扱うためのものであり、a%bはaをbで割った余りを求める演算である。
Eさんは図1と図5の手続きを利用して図6の手続きを作成した。これは候補文字列と正解文字列を比較し、一致した場合にその候補文字列を表示して、一致しない場合に次の候補文字列を生成する、という処理を繰り返す。なお、配列Suutiの各要素は手続きの開始前にすべて0になっている。Eさんはこの手続きが正解文字列「abcdefgh」に対して正しく動作することを確認した。
ところが、Eさんは図6の手続きを完成させる前に、誤って(03)行目のc←0を(01)行目の上に書いて図7のように記述してしまったため、正解文字列とは異なる候補文字列が表示された。Eさんは誤りを確かめるため、図7の手続きの実行過程で変数がどのように変化するかを考えてみた。表1はその一部を抜き出したものである。
この考察により、本来なら「abcdefgh」と表示すべきところを「f( ス )( セ )( ソ )aaaa」と表示してしまった原因を解明でき、手続きを図6のように修正することができた。
( セ )にあてはまるものを次のうちから1つ選べ。
このページは閲覧用ページです。
履歴を残すには、 「新しく出題する(ここをクリック)」 をご利用ください。
問題
大学入学共通テスト(数学)試験 令和4年度(2022年度)追・再試験 問174(情報関係基礎(第3問) 問14) (訂正依頼・報告はこちら)
Eさんは英小文字だけによる長さ8文字のパスワードを使っているが、悪意を持った第三者が長さ8のあらゆる文字列をもれなく試せば、いずれはパスワードを当てられてしまうことに気付いた。そこでEさんは、プログラムを作る練習としてこのことをコンピュータで確かめてみることにした。
Eさんは初めに、自分が使っているパスワードと、プログラムで生成する文字列の一つとが一致するか確かめる手続きを作成することにした。なお、ここでは8文字ちょうどのパスワードだけを考えることにする。
自分が使っているパスワードを正解文字列と呼び、配列Seikaiの要素Seikai[0]からSeikai[7]に順に1文字ずつ格納されているとする。また、プログラムで生成する文字列を候補文字列と呼び、配列Kouhoの要素Kouho[0]からKouho[7]に順に1文字ずつ格納されているとする。Eさんは、候補文字列と正解文字列で一致している文字を数え、文字列全体が一致しているときに候補文字列を表示する手続きを図1のように作成した。
Eさんは配列Suutiの内容をすべての候補文字列に対応するように変化させるために、図4の手順を考えた。図4では、配列Suutiの8要素がすべて0である1番目から、左端のSuuti[0]を1ずつ増やしていき、26番目の次はSuuti[0]を0に戻してSuuti[1]を1増やす、という手順を繰り返している。268番目の次は1番目に戻るとする。配列Suutiの要素を変化させる際の一時的な状態を、図4では点線により示している。この方法ですべての候補文字列を順に得るために、次の候補文字列に対応するよう配列Suutiを変化させる手続きを、図5のように作成した。図4の268番目から1番目に戻るときに、変数jが配列Suutiをはみ出さないよう注意して変数mを設定した。また、変数tは図4の点線の状態を扱うためのものであり、a%bはaをbで割った余りを求める演算である。
Eさんは図1と図5の手続きを利用して図6の手続きを作成した。これは候補文字列と正解文字列を比較し、一致した場合にその候補文字列を表示して、一致しない場合に次の候補文字列を生成する、という処理を繰り返す。なお、配列Suutiの各要素は手続きの開始前にすべて0になっている。Eさんはこの手続きが正解文字列「abcdefgh」に対して正しく動作することを確認した。
ところが、Eさんは図6の手続きを完成させる前に、誤って(03)行目のc←0を(01)行目の上に書いて図7のように記述してしまったため、正解文字列とは異なる候補文字列が表示された。Eさんは誤りを確かめるため、図7の手続きの実行過程で変数がどのように変化するかを考えてみた。表1はその一部を抜き出したものである。
この考察により、本来なら「abcdefgh」と表示すべきところを「f( ス )( セ )( ソ )aaaa」と表示してしまった原因を解明でき、手続きを図6のように修正することができた。
( セ )にあてはまるものを次のうちから1つ選べ。
- a
- b
- c
- d
- e
- f
- g
- h
正解!素晴らしいです
残念...
この過去問の解説
前の問題(問173)へ
令和4年度(2022年度)追・再試験 問題一覧
次の問題(問175)へ