2017年(平成29年度)センター試験「情報関係基礎」を、全53マーク・1問残らず解説します。この試験は受験者が年に数百人しかいない小さな科目でしたが、共通テスト『情報Ⅰ』の第3問(プログラム)・第4問(データ活用)の直接の先祖です。しかも作りが上手い。本記事のねらいは正解を並べることではなく、「なぜその答えになるのか」と「本番でどうやってそこに到達するのか」を分けて書き切ること、そして満点(100点)を取り切るための具体的な手順を渡すことです。
こんにちは、数強塾グループ代表の藤原進之介です。私はふだん数学と情報Ⅰを教えています。情報Ⅰの過去問はまだ2年分(2025・2026)しかありません。だから私は生徒に、「情報関係基礎」を解きなさいと言い続けています。2017年はその中でも、いま解いて最も得るものが大きい年のひとつです。
この記事の扱い方について。本記事では、大学入試センターの著作物である問題文・選択肢・図・表・シートの内容を転載していません。扱うのは①設問の設定を私の言葉で要約したもの、②正解、③解答に至る推論、④背景知識、⑤私が作った自作の類題と自作の図、の5つです。問題冊子を手元に置いて読むことを強くおすすめします。
正解の根拠について(最初に明示します)。大学入試センターは試験問題と正解表を直近3年分しか公開していないため、平成29年度の公式正解表との突き合わせはできません。そこで本記事の正解は、①私が全問を自力で解き、②問題冊子に印刷済みの数値(表計算シートの完成後の値、折丁の作業時間の表など)と完全に整合することを確認し、③さらにPythonで総当たり計算・プログラムの実行再現による独立検算を行い、66項目すべて一致したものです。検算の内容は各設問の中に具体的に書きました。
目次代わりに ― この試験の全体像
「情報関係基礎」とはどんな科目だったか
センター試験の「情報関係基礎」は、数学②の枠で実施されていた科目です。数学②の枠には「数学Ⅱ」「数学Ⅱ・数学B」「簿記・会計」「情報関係基礎」が並んでいて、そのうち1科目を選んで解答します。試験時間60分・100点満点。数学Ⅱ・Bと同じ時間帯・同じ配点です。
「情報関係基礎」は、専門教育を主とする農業・工業・商業・水産・家庭・看護・情報・福祉の各学科や総合学科で開設される「情報」に関する基礎的な科目に対応した試験科目でした。受験するには出願のときに数学②の別冊子試験問題の配布希望を申請しておく必要があります。受験者数はごく小規模で、平成29年度は524人でした。数学Ⅱ・Bが30万人規模であることを思えば、1/600の世界です。
そして2025年1月の共通テストにおける旧課程履修者向けの経過措置科目「旧情報(情報関係基礎)」を最後に、この科目は終了しました。後継が『情報Ⅰ』です。つまり2017年の問題は、いまや誰の入試にも直接は出ない。それでも解く価値があるのは次の理由からです。
理由1:出題者が地続きである。共通テスト『情報Ⅰ』の第3問(プログラム)と第4問(データの活用)は、情報関係基礎の第3問(プログラミング)・第4問(表計算)の設計思想をほぼそのまま受け継いでいます。「長い日常の文章の中に、アルゴリズムの本質だけを1本通す」という作り方が同じです。
理由2:情報Ⅰの過去問がまだ2年分しかない。2025年度・2026年度の2セットでは演習量が絶対的に足りません。情報関係基礎は1997年(平成9年)から2025年(旧課程用の経過措置科目としての最終実施)まで、本試・追試を合わせて50冊子以上あります。ここが最大の演習資源です。
理由3:擬似言語(DNCL)の祖先が動いている。共通テスト用プログラム表記は、情報関係基礎で使われていたDNCLを整理したものです。代入が「←」で書かれている点など細部は違いますが、読む筋肉はそのまま移植できます。
2017年の構成と配点
| 大問 | 題材 | 選択 | 配点 | マーク数 | 情報Ⅰでいえば |
|---|---|---|---|---|---|
| 第1問 | チェーンメールの拡散/メールの宛先・CC・BCC + 誤り検出(パリティ) | 必答 | 30 | 17 | 第1問(情報社会・情報通信) |
| 第2問 | 印刷の面付けと折丁(ページ番号の一般式・作業時間の最小化) | 必答 | 35 | 20 | 第2問(数理的なモデル化) |
| 第3問 | 図形の中の三角形を数えるアルゴリズム(配列・二重ループ) | 選択 | 35 | 17 | 第3問(プログラム) |
| 第4問 | 家庭学習の記録を表計算で集計・分析・振り返り | 選択 | 35 | 19 | 第4問(データの活用) |
※第3問・第4問はいずれか1問を選択。マーク数は私が数えたもので、複数マークにまたがる欄(オカ、クケコサなど)は1欄として数えています。設問ごとの配点は公表されていないため、本記事では扱いません。
先に結論:この年で満点を取る条件
1. 第1問は「等比数列」と「パリティ」の2本しかない。チェーンメールの人数は 4, 16, 64, … という公比4の等比数列、狼煙の問題は奇数パリティそのものです。この2語を最初に頭に置ければ、17マークを10分以内で通過できます。
2. 第2問は「見開きの和が一定」を最初に見つけた人が勝つ。中綴じの冊子では、1枚の紙の同じ面に並ぶ2ページの番号の和は、どの紙でも同じになります(総ページ数+1)。この1本の性質だけで、問1から問3の一般式まで全部作れます。逆にこれを見つけないと、毎回ページを数える羽目になり、確実に時間が足りません。
3. 第3問と第4問は、試験場で見比べてはいけない。どちらを解くかは家で決めておく。2017年に限れば、私の推奨は第3問です。理由は後述しますが、第4問は「複写の向き」と「$の位置」を19回連続で間違えずに判断し続ける試験で、ミス1つの重さが違います。
4. 満点を防ぐ最大の壁は計算ミスではなく「日本語」。この年は「担当者を除いて」「順位が低い」「M枚未満のときは少ない枚数のままで」の3か所が意図的に置かれています。ここを読み飛ばした瞬間、正解の桁数だけ合った誤答が作れてしまいます。
第1問(必答・30点)
問1a/チェーンメールの拡散 ― ア・イ・ウ・エ・オカ・キ・クケコサ
設定の要約。「拡散希望」という件名のメールが届いた娘と、父の会話です。そのメールは、宛先欄に転送先4人のアドレスを並べ、CC欄に番組担当者のアドレスを入れて転送する、という指示になっています。父はそれを止めます。
正解 ア=⑤(チェーン)/イ・ウ=⓪・③(順不同)/エ=①(Webサイト)/オカ=64/キ=7/クケコサ=5460
ア・エ ― 用語を「言い換え」で取りに行く
アはチェーンメールです。解答群には「アクセスログ」「公開鍵」「ショート」「タグ」「データベース」「ワーム」なども並んでいますが、本文に「転送を繰り返して」と書いてある時点で決まりです。chain=鎖。鎖のようにつながって増えていくメール。
エはWebサイト。「情報が正しいかどうか確認するために、その番組の公式◯◯を見る」の◯◯です。ここは正解を選ぶだけなら簡単ですが、背景として押さえるべきは「一次情報にあたる」という行動原理のほうです。転送されてきたメールは伝聞であり、番組が自ら出している公式サイトは一次情報です。情報Ⅰでも「発信元の確認」「複数の情報源での確認(クロスチェック)」として繰り返し問われます。
イ・ウ ― 誤答の2つが「法律」と「暗号」で作られている
チェーンメールの問題点として正しいのは次の2つです。
- ⓪ 拡散させてしまった情報の削除や訂正は難しい … いったん多数に転送されたメールは回収できません。デジタルタトゥーと同じ構図です。
- ③ 宛先欄のメールアドレスを収集して迷惑メールの送信に使おうとしている … 「宛先欄に4人のアドレスを書き並べる」という指示は、転送のたびにアドレスの束が本文とヘッダに蓄積されることを意味します。CCに入れられた「担当者」の手元には、生きているアドレスのリストが自動的に集まります。これがこの設問の一番おもしろいところで、「拡散実験」という建前が、アドレス収集の仕掛けとして読めるようになっています。
誤答の作られ方を覚えておく。残る2つは、情報Ⅰでも同じ形で出ます。
「転送である旨を件名に書かないと不正アクセス禁止法に違反する」→ 不正アクセス禁止法が禁じているのは、他人の識別符号(ID・パスワード)を無断で使ってネットワーク経由でコンピュータを利用する行為などです。メールの件名の書き方とは無関係。法律名が出てきたら、その法律が何を禁じているかを言えるかどうかで切る。
「CCで送信するとメール内容が暗号化されてしまう」→ CCは Carbon Copy、複写のことで、暗号化とはまったく関係がありません。用語の語源を知っていれば0.5秒で切れる選択肢です。
オカ・キ・クケコサ ― ここは完全に数学(等比数列)
この3つは、「担当者を除く」という条件を守れるかどうかだけの問題です。
最初の1人が4人の宛先に送る。これが1回目で、4人に届きます。2回目は、その4人がそれぞれ4人に転送するので 4×4=16人。3回目は16人がそれぞれ転送するので 16×4=64人。
オカ=64。一般に、n回目に新しく届く人数は 4n 人です。
キは「担当者を除いても最大1万人以上に送られる」のが何回目か。4n≧10000 を満たす最小の n を探します。
| 回 | 1 | 2 | 3 | 4 | 5 | 6 | 7 |
|---|---|---|---|---|---|---|---|
| 届く人数 4n | 4 | 16 | 64 | 256 | 1024 | 4096 | 16384 |
キ=7。46=4096 で1万に届かず、47=16384 で超えます。
クケコサが本命です。「2回目からキ(=7)回目までに、CCにある担当者に送られるメールの合計通数」を訊いています。
ここで絶対にやってはいけないのが、「届いた人数」をそのまま足すことです。担当者に届く通数は「その回に転送を行った人の数」と等しい。n回目に転送を行うのは、(n−1)回目に受け取った人たちですから 4n−1 通です。
| 回 | 2 | 3 | 4 | 5 | 6 | 7 | 合計 |
|---|---|---|---|---|---|---|---|
| 担当者に届く通数 | 4 | 16 | 64 | 256 | 1024 | 4096 | 5460 |
初項4・公比4・項数6の等比数列の和ですから、公式でも出せます。
4 × (46 − 1) ÷ (4 − 1) = 4 × 4095 ÷ 3 = 5460
クケコサ=5460
ここで生まれる誤答は決まっています。
- 1回目から足してしまう → 1+4+16+…+4096=5461。1違いで、桁数も4桁なので気づけません。「2回目から」を必ず指で押さえること。
- 「届いた人数」を足してしまう → 16+64+…+16384=21840。5桁なのでマーク欄(4桁)に入らず、ここは救われます。
- 7回目を含め忘れる → 1364。4桁なのでこれも危ない。
マーク欄の桁数は出題者からのヒントです。4桁と分かった瞬間に「5461か5460のどちらかだ」まで絞れる。この感覚を持っている受験生とそうでない受験生では、見直しの速度が5倍違います。
【背景知識】指数の爆発と、それが情報分野で持つ意味
1人が4人に伝える、を繰り返すと7回で1万人を超えます。これは感染症の基本再生産数 R0 の議論とまったく同じ構造で、1人あたりの伝播数が1を超えるだけで、規模は指数関数的に増えるという話です。R0=4 は麻疹に近い値です。
情報分野でこの計算が重要なのは、「デマは訂正より速い」ことの定量的な説明になるからです。訂正情報は、すでに拡散した5460通・16384人を追いかけることになりますが、追いかける側は元の宛先リストを持っていません。だから⓪「削除や訂正は難しい」が正しい。選択肢⓪とこの計算は、同じことを言葉と数で表しているわけです。設問がここまで設計されていることに気づくと、この大問はぐっと面白くなります。
災害時のチェーンメールは実害を伴います。2011年の東日本大震災では「特定の物資が不足している」「有害物質の雨が降る」といった真偽不明の情報が転送で広がり、総務省やIPAが繰り返し注意喚起を出しました。善意の転送がいちばん止まらない、というのがこの分野の定説です。
問1b/To・CC・BCC ― シ
設定の要約。友人Xが担任にメールを送ります。宛先(To)に担任、CCに娘・友人B・友人C、BCCに友人Aを指定しました。娘が受け取ったメールに含まれないアドレスはどれか。
正解 シ=②(友人A)
BCC は Blind Carbon Copy。BCCに指定されたアドレスは、他の受信者のメールには表示されません。だから娘の手元のメールには、To(担任)・CC(娘・B・C)は見えるが、BCCの友人Aだけが見えない。
【背景知識】なぜBCCだけ消えるのか ― エンベロープとヘッダ
ここは暗記ではなく、仕組みを1回だけ理解すれば二度と忘れないところです。メールの配送には、実は2種類の「宛先」があります。
- エンベロープ(封筒):SMTPというプロトコルで、送信サーバが受信サーバに「この人に届けてください」と伝える宛先。
RCPT TOというコマンドで1人ずつ指定します。配送に使われるのはこちらだけです。 - ヘッダ(便箋に印刷された宛名):メール本文の先頭にある
To:Cc:Subject:などの行。受信者が目にするのはこちらです。
To と CC は、エンベロープにもヘッダにも書かれます。だから届くし、全員に見える。
BCC は、エンベロープには書かれるがヘッダには書かれません。だから届くけれど、誰にも見えない。
この「配送の宛先」と「表示の宛先」が別物であるという構造は、郵便で言えば封筒の宛名と、中の手紙に書いてある「◯◯様、△△様にも同じ手紙を出しました」という一文の違いです。封筒の宛名を見なければ、手紙の文面からはBCCの人の存在は分かりません。
実務での重要性。一斉送信のときにBCCを使わずTo/CCに全員を入れてしまい、無関係な人同士にメールアドレスが漏れる、という個人情報漏えい事故が毎年起きています。自治体・学校・企業を問わず、この形の事故は「メール誤送信」の類型として定番です。「不特定多数への一斉送信はBCC」は、情報Ⅰでも実生活でも必ず持ち帰ってください。
ちなみに問1a のチェーンメールは、あえて宛先欄(To)に4人を並べさせているところが悪質です。BCCなら他人にアドレスは見えませんが、Toなら全員に見える。設問aとbは、同じTo/CC/BCCという道具を、悪用の側と正しい理解の側から2回見せているのです。
問2/狼煙による速報 ― ス〜ナ(これは誤り検出・誤り訂正の問題です)
設定の要約。ある村では村長選挙の当選者を、三つの山の頂から上げる狼煙の色(白か黒)の並びで速報します。候補者は必ず4人。三つの狼煙を N1, N2, N3 とし、白い煙の数が奇数になるように N3 を決めるという規則が置かれています。後半では、別の三つの山から同じ並びをもう一度上げる(合計六つ、または N3′ を省いて五つ)ことで、誤りがあっても正しく速報できるようにします。
正解 ス=②(白)/セ=③(黒)/ソ=③(黒)/タ=①(偶数)/チ=③/ツ=④(N2′)/テ=⑨(D)/ト=①/ナ=⑦(B)
ス・セ・ソ ― 奇数パリティを作る
規則は「白い煙の数(3つの中の白の個数)が奇数」。候補者ごとに、先頭2つが決まっていて、3つ目を規則が決めます。
| 候補者 | N1 | N2 | 白の数(2つまで) | N3 | 白の合計 |
|---|---|---|---|---|---|
| A | 白 | 白 | 2(偶数) | 白(ス) | 3(奇数) |
| B | 白 | 黒 | 1(奇数) | 黒(セ) | 1(奇数) |
| C | 黒 | 白 | 1(奇数) | 黒(ソ) | 1(奇数) |
| D | 黒 | 黒 | 0(偶数) | 白 | 1(奇数) |
白=1、黒=0 と読み替えると、この表は完全にビット列です。
| 候補者 | 情報ビット(2ビット) | パリティビット | 符号語(3ビット) |
|---|---|---|---|
| A | 1 1 | 1 | 111 |
| B | 1 0 | 0 | 100 |
| C | 0 1 | 0 | 010 |
| D | 0 0 | 1 | 001 |
これは「2ビットの情報に、1ビットの奇数パリティを付けた3ビット符号」そのものです。この見方に切り替えられると、以降の設問が全部読めるようになります。
タ ― パリティの本質:1個間違えると偶奇が必ず反転する
誰か一人だけが色を間違えると、白の個数はちょうど±1変わります。白→黒なら1減り、黒→白なら1増える。奇数に±1すれば必ず偶数です。
タ=①(偶数)。だから「白の数を数えて偶数だったら、どこかが間違っている」と分かる。これが誤り検出です。
ただし、どこが間違っているかは分かりません。3つのうちどれを反転させても偶数になるからです。誤り検出はできるが誤り訂正はできない ―― パリティ1ビットの限界がここに出ています。
チ・ツ・テ ― 「同じものを2回送る」と訂正できる理由
そこで、別の三つの山から同じ並びをもう一度上げる。合計6つの狼煙 (N1, N2, N3, N1′, N2′, N3′) で、N1とN1′、N2とN2′、N3とN3′ が一致するはずです。
問題文が挙げる例は (黒, 黒, 白, 黒, 白, 白)。手順は2段階です。
第1段:前半と後半を突き合わせる。前半(黒, 黒, 白) と後半(黒, 白, 白) を比べると、2番目だけが違う。よって誤りは N2 か N2′ のどちらか一方。(誤りは高々1つという前提なので、他の位置は正しいと確定します。)
第2段:どちらが壊れているかをパリティで決める。前半(黒, 黒, 白) の白の個数は1個=奇数なので規則を満たしている。後半(黒, 白, 白) の白の個数は2個=偶数なので規則違反。したがって後半に誤りがある。
チ=③(並び (N1′, N2′, N3′))/ツ=④(N2′)
N2′ を反対の色(白→黒)に直すと後半は (黒, 黒, 白)。前半と一致し、これは表の候補者Dの並びです。テ=⑨(D)
ト・ナ ― 5つに減らしても訂正できる、が本題
ここが第1問で最も上質な設問です。N3′ を省略して5つ (N1, N2, N3, N1′, N2′) にしても、まだ1個の誤りを訂正できるか? できます。
例は (白, 白, 黒, 白, 黒)。
ステップ1:(N1, N2)=(白, 白) と (N1′, N2′)=(白, 黒) を比べる。2番目が違う。よって誤りは N2 か N2′ のどちらか。ここまでは6つのときと同じです。
ステップ2:ただし今回は N3′ が無いので、後半だけではパリティを検査できません。そこで前半 (N1, N2, N3) が規則を満たすかを調べる。(白, 白, 黒) の白は2個=偶数で規則違反。よって前半(の N2)が壊れている。
ステップ3:したがって(N1′, N2′) のほうが正しい。(白, 黒) は表の候補者Bです。
ト=①((N1′, N2′))/ナ=⑦(B)
ここでの典型ミス。「前半が偶数=規則違反」まで出したあと、「だから前半が正しい」と読み違える人が毎年います。規則を満たしていないほうが壊れている側です。焦っているときほど逆に読むので、「白の数が奇数=健康、偶数=病気」と一言メモしてから解き始めてください。
【背景知識】この問題は符号理論そのものです
1. パリティビット。データの中の1の個数が偶数になるように付けるのが偶数パリティ、奇数になるように付けるのが奇数パリティ。この問題は奇数パリティです。パリティは1ビットの誤りを検出できるが訂正できないし、2ビット同時に誤ると検出すらできない(偶奇が元に戻るため)。だから問題文は「間違っている煙の色が一つ以下のとき」とわざわざ断っています。この一文は飾りではなく、符号の適用条件です。
2. なぜ2回送ると訂正できるのか ― ハミング距離。2つの符号語が何ビット違うかをハミング距離といいます。ある符号の任意の2語の距離の最小値を d とすると、
- d − 1 ビットまでの誤りを検出できる
- ⌊(d − 1)/2⌋ ビットまでの誤りを訂正できる
3ビット符号 {111, 100, 010, 001} の最小距離は 2(例:100 と 010 は2ビット違い)。d=2 なので1ビット検出・0ビット訂正。これが「間違いがあることは分かるが、当選者は分からない」の正体です。
同じ語を2回並べた6ビット符号 {111111, 100100, 010010, 001001} の最小距離は 4。d=4 なので ⌊3/2⌋=1ビット訂正できる。だから六つの狼煙なら訂正できる。
N3′ を落とした5ビット符号 {11111, 10010, 01001, 00100} の最小距離は 3。d=3 でも ⌊2/2⌋=1ビット訂正が可能です。1ビット訂正に必要な最小の距離がちょうど3なので、この5つが「限界まで削った形」になっている。問題文の「さらに検討した結果、N3′ を省略して五つの狼煙にしても正しく速報できることがわかった」という一文は、符号の冗長度を1ビット削ったという宣言なのです。ここに気づけると、この設問は「面白い」に変わります。
3. 実際の応用。パリティはメモリのECCやシリアル通信で今も使われます。訂正までやりたいときはハミング符号(4ビットの情報に3ビット付けて7ビットにすると1ビット訂正できる)やリード・ソロモン符号(QRコードやCDに使われ、汚れや傷でまとめて読めなくなっても復元できる)に進みます。QRコードが多少汚れても読めるのは、この問題の延長線上にある技術です。
【自作の類題】白=1、黒=0 とし、3ビットの奇数パリティ符号を使う。受信した5ビットが (黒, 白, 白, 黒, 白) だったとき、誤りは高々1つとして、正しい並び (N1, N2) と当選者を答えよ。
解答:(N1, N2)=(黒, 白)、(N1′, N2′)=(黒, 白) で一致。よって前半後半の突き合わせでは誤りが見つからない。次に前半 (黒, 白, 白) の白の個数は2個=偶数で規則違反 → 誤りは N3 にある(N3′ は送られていないので照合できない位置)。(N1, N2)=(黒, 白) は候補者C。
この類題の狙い:「前半と後半が一致していても安心できない」ケースを体験させること。省略された N3′ の位置だけは照合が効かず、パリティだけが頼りになります。
第2問(必答・35点)― 面付けと折丁
第2問はこの年の最重要大問です。プログラムも表計算も出てきませんが、「現実の作業を数式にする」という情報Ⅰ第2問そのものの訓練になります。そして満点を取るための鍵が、たった1本の性質に集約されます。
まず全体を貫く1本の性質を作る
設定の要約。A4判の文書を、A3判の用紙(A4の2枚分)に印刷して半分に折り、冊子にします。総ページ数は必ず偶数。左綴じ(左開き)です。
紙を重ねて中央で折る綴じ方を中綴じといいます。中綴じの冊子には、次の性質があります。
【中綴じの基本性質】総ページ数を T とする。1枚の紙の同じ面に左右に並ぶ2ページの番号の和は、どの紙のどちらの面でも必ず T+1 になる。
理由は簡単です。冊子を開いたとき、いちばん外側の紙は表紙(p.1)と裏表紙(p.T)を担当します。1枚内側に入るごとに、若い側のページは2ずつ増え、大きい側は2ずつ減る。足し算では相殺されるので和は変わらないのです。
ここから、外側から k 枚目の紙に載る4ページの一般式が作れます。総ページ数を T とすると、
| 位置 | ページ番号 | 根拠 |
|---|---|---|
| 表面の右 | 2k − 1 | 外側から順に p.1, p.3, p.5, … と並ぶ(奇数ページが右) |
| 表面の左 | T − 2k + 2 | 和が T+1 なので (T+1) − (2k−1) |
| 裏面の左 | 2k | 表面の右のページをめくった裏 |
| 裏面の右 | T − 2k + 1 | 和が T+1 なので (T+1) − 2k |
※左綴じ(左開き)なので、奇数ページが右、偶数ページが左。この対応を最初に固定してしまうこと。
この4本を試験開始5分以内に紙の余白に書けたら、第2問は勝ちです。以降の設問は全部この代入で終わります。
問1 ― ア・イ
総ページ T=4、A3判1枚(k=1)。
ア(表面の左)= T − 2k + 2 = 4 − 2 + 2 = 4/イ(裏面の左)= 2k = 2
問題文は「山折りにして」「p.1から左綴じ(左開き)になるように」と条件を丁寧に置いていますが、結論だけ言えば図1のとおりです。表面の右が p.1、その裏(裏面の左)が p.2、裏面の右が p.3、めくって表面の左が p.4。実際に紙を1枚折って番号を書き込んでみるのが最短の理解で、私は授業でも必ず折らせます。
問2 ― ウ・エ・オカ・キク・ケコ
ウ・エ
A3判1枚は4ページ分ですから、28ページなら 28 ÷ 4 = 7枚。
ウ=7
エは「上側から折る前の状態のA3判用紙を数えて k 枚目の表面の左側」。T=28 を一般式に入れるだけです。
T − 2k + 2 = 28 − 2k + 2 = 30 − 2k
エ=⑤(30 − 2k)
検算。k=1 なら 28(表紙の裏側にあたる最終ページ)、k=7 なら 16。7枚目の表面は 16 と 13、裏面は 14 と 15 で、いちばん内側の見開きが 14–15。28ページの冊子の真ん中が14–15なのは正しい。この一瞬の検算で選択肢は確定します。
紛らわしい選択肢に 28 − 2k があります。k=1 で 26 になってしまい、表紙の裏に p.26 が来ることになる。おかしいとすぐ分かる。必ず k=1 を代入して「最終ページになるか」を見るのが安全策です。
オカ・キク ― A4判を1枚だけ足すとき
総30ページ。A3判は4ページ分なので、30 = 4×7 + 2。つまりA3判7枚+A4判1枚。問題の図では、A4判はいちばん内側(中央)に置かれます。
A4判1枚は2ページ分で、しかも中央にあるということは、冊子のちょうど真ん中の2ページを担当します。
30 ÷ 2 = 15 → p.15 と p.16
オカ=15、キク=16(オカ<キク の指定どおり)
一般式でも確認しておきます。A3判7枚に上の式を当てると、k=7 の紙は 表面 18|13、裏面 14|17。ここまでで 1〜14 と 17〜30 が埋まり、残るのは 15 と 16 だけ。だからA4判が15と16。全ページがちょうど1回ずつ現れることまで確かめられます(私はPythonで1〜30の全ページが重複なく現れることを機械的に確認しました)。
ケコ ― 逆算させる設問
「p.26 が、A3判用紙10枚目の表面の左側に印刷される場合、A3判用紙を全部で何枚使うか」。
一般式 (表面の左)= T − 2k + 2 に k=10、値26 を入れます。
T − 20 + 2 = 26 → T = 44
総ページが44。ここでA4判を使う可能性を潰すのが大事です。
- A3判だけなら T = 4n。44 = 4×11 → n = 11枚。しかも 11 ≧ 10 なので「10枚目」が存在し、条件と矛盾しない。
- A3判 n 枚+A4判1枚なら T = 4n + 2。44 = 4n + 2 とすると n = 10.5 で整数にならないので不可能。
ケコ=11
私はここを、n を1から39まで、A4判の有無2通りで全探索し、「10枚目の表面の左が p.26」を満たす組み合わせが (A3判11枚, A4判なし, 総44ページ) の1通りしかないことをプログラムで確認しました。手計算の筋道と機械の結果が一致しています。
問3 ― 折丁(サ〜ツ)
設定の要約。50枚のA3判で200ページの冊子を作ります。50枚を一度に折るのは無理なので、M枚ごとに束ねて折り、金具で留めた「折丁」を複数作り、それを順に重ねて糊付けします。最後の折丁がM枚に満たなければ、少ない枚数のままで折るという方針です。
【背景知識】折丁(signature)とは
本物の書籍は、実は1枚ずつの紙を重ねて綴じてはいません。大きな紙に何ページ分もまとめて印刷し、折って16ページや32ページの束(=折丁、英語では signature)を作り、その束を並べて背を糊で固めます。これが無線綴じで、みなさんが持っている参考書や文庫本のほとんどがこの製法です。
本を上から見ると、背のところに数ミリごとの区切りが見えるはずです。あれが折丁の境目です。文庫本を軽く開いて背側を覗くと、束の単位がはっきり分かります。本記事を読んだあと、手元の参考書で確かめてみてください。この問題が現実の製本とぴたり対応していることが体感できます。
「なぜ本のページ数は16の倍数や32の倍数が多いのか」も、これで説明がつきます。折丁1つが16ページなら、半端が出ないようにページ数を16の倍数に合わせるからです。この問題は、印刷業の実務をそのまま情報の問題に翻訳したものです。
折丁の問題を解く「2段階の座標変換」
折丁の問題は、次の2段階に必ず分解できます。この分解を身体に入れることが、この設問の学習価値です。
第1段:どの折丁か。1つの折丁が r 枚なら 4r ページ。先頭から順に足していき、目的のページが何番目の折丁に入るかを決める。
第2段:折丁の中での位置。その折丁の先頭ページを1として番号を振り直す(ローカル座標にする)。あとは中綴じの一般式(総ページを 4r に置き換えたもの)を使う。
サ・シ・ス(M=3 のとき、p.61 はどこか)
50 = 3×16 + 2 なので、3枚の折丁が16個、最後に2枚の折丁が1個、計17個。1つの折丁は 3×4 = 12ページです。
| 折丁 | 1 | 2 | 3 | 4 | 5 | 6 |
|---|---|---|---|---|---|---|
| 担当ページ | 1–12 | 13–24 | 25–36 | 37–48 | 49–60 | 61–72 |
p.61 は6番目の折丁の、ちょうど先頭です。折丁の中でのローカル番号は 61 − 60 = 1。折丁内の総ページは12なので、ローカル p.1 は「1枚目の表面の右」(表面の右=2k−1=1 より k=1)。
サ=6、シ=1、ス=①(表面の右)
セ・ソ・タ(M=4 のとき)
50 = 4×12 + 2 なので4枚の折丁が12個+2枚が1個。1つの折丁は16ページ。
| 折丁 | 1 | 2 | 3 | 4 |
|---|---|---|---|---|
| 担当ページ | 1–16 | 17–32 | 33–48 | 49–64 |
p.61 は4番目の折丁。ローカル番号は 61 − 48 = 13。折丁内の総ページは16なので、和は 16+1 = 17。13 の相方は 4。ここで4本の式に当てはめます。
- 表面の右 = 2k − 1 → 2k − 1 = 13 なら k = 7。しかしこの折丁は4枚しかないので不可。
- 裏面の左 = 2k → 13は奇数なので不可。
- 表面の左 = 16 − 2k + 2 = 18 − 2k → 偶数なので不可。
- 裏面の右 = 16 − 2k + 1 = 17 − 2k → 17 − 2k = 13 より k = 2。成立。
セ=4、ソ=2、タ=③(裏面の右)
短縮法。ローカル番号が奇数なら「右」、偶数なら「左」。さらに折丁の前半(小さい番号)は「表面の右/裏面の左」、後半(大きい番号)は「裏面の右/表面の左」。13は奇数で後半だから裏面の右と即断できます。この2つの判定だけで、4本の式を全部当てはめる手間が消えます。
チ・ツ(M=5 の一般式)
M=5 なら1つの折丁は 5×4 = 20ページ。折丁 j の前には 20(j−1) ページあるので、ローカル番号に 20(j−1) を足せばグローバルなページ番号になります。
| 位置 | 折丁内(ローカル) | グローバル |
|---|---|---|
| k枚目の表面の左 | 20 − 2k + 2 = 22 − 2k | 20(j−1) + 22 − 2k = 20j − 2k + 2 |
| k枚目の裏面の左 | 2k | 20(j−1) + 2k = 20j + 2k − 20 |
チ=①(20j − 2k + 2)、ツ=⑤(20j + 2k − 20)
検算はj=1, k=1 で行うのが最速です。折丁1の1枚目の表面の左は、20ページの折丁のいちばん外側の左=p.20。式に入れると 20 − 2 + 2 = 20 で一致。裏面の左は p.2 で、20 + 2 − 20 = 2 で一致。紛らわしい選択肢 20j − 2k + 4 は 22 になってしまうので、この一発で切れます。
私はこの2式を、j を1から10、k を1から5まで動かした50通り全部について、折丁の分割から機械的にページ位置を求めるプログラムと突き合わせ、反例ゼロを確認しました。
問4 ― 作業時間の最小化(テトナ・ニ・ヌ)
設定の要約。折丁を作る機械を導入しました。r 枚のA3判を使う折丁を全校生徒数の個数だけ作るのに r(r+1) 分。s 個の折丁を重ねて印刷物にする糊付には 80×(s−1) 分。33枚のA3判で作るとき、どう分ければ最短か。
テトナ ― まず素直に計算する
問題文が例として与えている「9, 9, 9, 6」(問3の方針どおりの分け方)は
3 × 9×10 + 6×7 + 80×3 = 270 + 42 + 240 = 552分
これに対し「9, 8, 8, 8」に分けると
9×10 + 3 × 8×9 + 80×3 = 90 + 216 + 240 = 546分
テトナ=546(表の★は折丁作成の 90+216=306分、糊付240分、合計546分)
ニ・ヌ ― 「なぜ均等に分けると速いのか」を理解する
ここが第2問の思考の山です。折丁の個数を固定したとき、枚数はできるだけ均等に分けるほうが、折丁作成の合計時間が短くなる。これはなぜか。
r 枚の折丁の作成時間は r(r+1) = r² + r です。r² という2乗の項があるのがポイントで、枚数を1枚増やしたときの増分は
(r+1)(r+2) − r(r+1) = (r+1) × 2 = 2r + 2
つまり大きい束ほど、1枚追加するコストが高い。逆に言えば、大きい束から1枚取って小さい束に移すと、必ず時間が減るのです。実際、a 枚と b 枚(a ≧ b+2)の束から1枚移すと
{a(a+1) + b(b+1)} − {(a−1)a + (b+1)(b+2)} = 2(a − b − 1) > 0
となり、必ず2(a − b − 1) 分だけ短くなる。だから最適な分け方は「どの2つの束の枚数の差も1以内」、すなわち均等分割です。
この原理で、33枚を5個・6個に分ける最適解を出します。
| 折丁の個数 | 均等分割 | 折丁作成 | 糊付 | 合計 |
|---|---|---|---|---|
| 2 | 17, 16 | 578 | 80 | 658 |
| 3 | 11, 11, 11 | 396 | 160 | 556 |
| 4 | 9, 8, 8, 8 | 306 | 240 | 546 |
| 5 | 7, 7, 7, 6, 6(ニ=②) | 252 | 320 | 572 |
| 6 | 6, 6, 6, 5, 5, 5(ヌ=⑤) | 216 | 400 | 616 |
ニ=②(7, 7, 7, 6, 6)、ヌ=⑤(6, 6, 6, 5, 5, 5)
試験場での速い解き方。選択肢を全部計算する必要はありません。33 ÷ 5 = 6.6 だから「7と6が混ざる」、33 ÷ 6 = 5.5 だから「6と5が混ざる」。この時点で、5個なら 7×3 + 6×2 = 33(7が3個・6が2個)、6個なら 6×3 + 5×3 = 33(6が3個・5が3個)と一意に決まります。選択肢を見る前に答えが作れるのが理想です。
念のため、私は33枚を s 個に分ける全パターン(s=2から6まで、順序を無視した分割をすべて)を列挙して最小値を求め、上の表と完全に一致することを確認しました。さらに s を1から11まで動かした最小コストは s=4 のときの546分で、これが33枚での真の最適です。折丁を細かくすれば作成は速くなるが糊付が 80(s−1) で線形に増えるため、両者の釣り合う点が4個なのです。
【背景知識】これは「凸関数の最小化」です
r(r+1) のように増分がだんだん大きくなる関数を「下に凸(convex)」といいます。下に凸な関数 f について、合計 Σri が一定なら Σf(ri) は ri をできるだけ均等にしたときに最小になる ―― これは数学Ⅱ・Bの「相加相乗平均」や「イェンセンの不等式」と同じ発想で、情報分野では負荷分散(load balancing)の基本原理として現れます。
たとえばサーバを何台か並べてリクエストを振り分けるとき、応答時間が負荷の2乗で増えるなら、1台に集中させず均等に配ったほうが全体の待ち時間が短くなる。この問題の折丁は紙の束ですが、考え方はロードバランサーとまったく同じです。
逆に、糊付の 80(s−1) は「束を増やすほど損をするコスト」です。分割を細かくすると作成コストは下がるが、まとめるコストは上がる。この2つのトレードオフの底を探すのが問4の正体で、これはコンピュータの世界では「並列化の粒度をどう決めるか」(細かく分けすぎると通信・同期のオーバーヘッドが勝つ)という、まさに現役の問題です。アムダールの法則を学ぶときにまた出会います。
【自作の類題】同じ機械で、40枚のA3判を使う。折丁の個数を s としたとき、合計時間が最小になる s と、そのときの分け方・合計時間を求めよ。
解答:s 個に均等分割したときの折丁作成時間はおおよそ 40/s 枚の束が s 個なので (40/s)(40/s+1)×s ≒ 1600/s + 40。合計は 1600/s + 40 + 80(s−1)。s で微分して 0 とすると s = √20 ≒ 4.47。整数で s=4 と s=5 を実際に計算すると、s=4:10枚×4 → 110×4=440、糊付240、合計680分。s=5:8枚×5 → 72×5=360、糊付320、合計680分。同点になります。s=3(14,13,13)は 210+182+182=574、糊付160、合計734分。s=6(7,7,7,7,6,6)は 56×4+42×2=308、糊付400、合計708分。よって最小は680分で、s=4(10,10,10,10)とs=5(8,8,8,8,8)の2通り。
この類題の狙い:最適解が1つとは限らないこと、そして「連続量として微分して当たりをつけ、整数で確かめる」という手順を体験させることです。
第3問(選択・35点)― 三角形を数えるアルゴリズム
設定の要約。「複数の線分でできた図形の中に三角形は全部で何個あるか」というクイズの正解を求める手続きを作ります。線分の端点や交点を頂点と呼んで 1, 2, 3, … と番号を振り、2頂点の組 (p, q)(p < q)が同じ線分上にあるとき辺と呼びます。3つの辺 (p,q), (p,r), (q,r) がそれぞれ相異なる線分上にあれば、(p,q,r) は三角形です。
まず「例題の図形」の構造を読み取る
この大問は、最初の3分で図の構造を表にできるかどうかで勝負が決まります。問題の図(線分A〜Fと頂点1〜8)を読み取ると、各線分に乗っている頂点は次のとおりです。この表さえ作れば、以降の設問は図を見ずに解けます。
| 線分 | 乗っている頂点 | 頂点の数 | その線分上の辺の数 |
|---|---|---|---|
| A | 1, 2, 5, 7 | 4 | 4C2 = 6 |
| B | 1, 3, 8 | 3 | 3C2 = 3 |
| C | 2, 4, 8 | 3 | 3 |
| D | 5, 6, 8 | 3 | 3 |
| E | 3, 4, 6, 7 | 4 | 6 |
| F | 7, 8 | 2 | 1 |
| 合計 | 22 | ||
※藤原が問題の図から読み取って作成した対応表です(図そのものは転載していません)。合計が問題文の「辺の総数は22本」と一致することで、読み取りが正しいと確認できます。
この表を作れたら、その場で必ず検算してください。各線分上の辺の数は「乗っている頂点の数から2つ選ぶ組合せ」です。6+3+3+3+6+1 = 22。問題文が「表に記載される辺の総数は22本」と教えてくれているので、ここが合えば図の読み取りは100%正しい。逆にここが合わなければ、先へ進んではいけません。問題文が与えてくれる数値は、たいてい検算用に置かれています。
問1 ― ア・イ・ウ・エ・オ・カ
表に記載する辺の順番は「始点の番号が小さい順、始点が同じなら終点の番号が小さい順」。つまり (1,2), (1,3), (1,5), (1,7), (1,8), (2,4), … という辞書式の並びです。
| 始点 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 計 |
|---|---|---|---|---|---|---|---|---|
| 終点の一覧 | 2,3,5,7,8 | 4,5,7,8 | 4,6,7,8 | 6,7,8 | 6,7,8 | 7,8 | 8 | — |
| 本数 | 5 | 4 | 4 | 3 | 3 | 2 | 1 | 22 |
ア=6(始点4の辺のうち最初に記載されるのは辺(4, 6))/イ=3(始点4の辺は3本)
ウ=7、エ=8(最後に記載されるのは辺(7, 8))/オ=②(線分C)(辺(4,8) は C={2,4,8} 上)/カ=6(線分E上の辺は 4C2=6本)
ウ・エの考え方。「最後に記載される辺」は、始点が最大の辺。始点になれるのは、その頂点より大きい番号の頂点と同じ線分に乗っている頂点だけです。頂点8は最大なので始点になれない。頂点7は、線分F = {7, 8} で8と結ばれているので (7,8) が作れる。だから最後は (7, 8)。この筋道で考えると、図をもう一度見に行かずに答えが出せます。
問2 ― 図の情報を配列に詰め替える(キ〜サ)
設定の要約。2次元配列 Hen には、i < j のとき「(i,j) が辺ならその線分の記号、辺でなければ “-“」が入っています。i ≧ j のときは常に “-“。この Hen から、辺番号を添字とする1次元配列 Siten, Syuten, Senbun を作り、辺の総数を hensosu に入れます。
(01) hensosu ← 0
(02) i を 1 から tyotensu − 1 まで 1ずつ増やしながら,
(03) │ j を i + 1 から tyotensu まで 1ずつ増やしながら,
(04) │ │ もし [キ] ならば
(05) │ │ │ hensosu ← hensosu + 1
(06) │ │ │ Siten [ク] ← [ケ]
(07) │ │ │ Syuten[ク] ← [コ]
(08) │ │ │ Senbun[ク] ← [サ]
(09) │ │ を実行する
(10) │ を繰り返す
(11) を繰り返す
※上の枠は、空欄の位置関係を示すために藤原が書き起こした骨組みです。原文の表記そのままではありません。
キ=③(Hen[i,j] ≠ "-")/ク=⑤(hensosu)/ケ=⓪(i)/コ=③(j)/サ=⑦(Hen[i,j])
なぜこの答えになるか、1つずつ
キ。「辺であるかどうか」の判定です。Hen[i,j] が “-” でなければ辺。Hen[j,i] は i < j のとき必ず “-” なので使えません(行 i < 列 j の上三角にだけ情報が入っている)。Senbun[i] はまだ中身が入っていないので論外です。
ク。ここが理解の分かれ目です。Siten の添字は辺番号であって、頂点番号でも i でもありません。(05) 行で hensosu を1増やした直後なので、hensosu が「いま見つけた辺の辺番号」そのものになっています。だから添字は hensosu。
順番に意味がある。(05) の「1増やす」が (06)〜(08) より前にあるのは、この hensosu を添字として使うためです。もし (05) が後ろにあったら、添字は hensosu + 1 でなければならない。擬似言語の問題では「カウンタを増やす行が、使う行の前か後か」を必ず確認する。共通テスト『情報Ⅰ』でも同じ罠が出ます。
ケ・コ・サ。i < j という順で回しているので、始点は i、終点は j。線分の記号は Hen[i,j] にそのまま入っています。
この二重ループが「並び順」を保証している
ここが問2の隠れた主題です。外側が i、内側が j という二重ループで、i を小さい順、j を i+1 から小さい順に回している。ということは、辺が配列に格納される順番は自動的に「始点の小さい順、同じ始点なら終点の小さい順」になります。
つまり、問1で説明された表の並び順を、プログラムが再現している。そしてこの並び順が、問3で決定的な役割を果たします。「なぜわざわざこの順で作るのか」を問2の段階で自問できた人が、問3を速く解けます。
私はこの手続きを実際にPythonで書き、例題の図形のデータを与えて実行しました。hensosu は 22 になり、先頭6件は (1,2,A), (1,3,B), (1,5,A), (1,7,A), (1,8,B), (2,4,C) となって、問題文が示している表の先頭6列と完全に一致しました。
問3 ― 三角形を数える(シ〜チ)
設定の要約。すべての三角形を見つけるには、共通の始点をもつ2つの辺だけを調べればよい。組 (p,q,r) が三角形なら、必ず辺(p,q) と辺(p,r) が存在するからです。そして辺(p,q), 辺(p,r), 辺(q,r) はこの順に配列に並びます。共通の始点をもつ辺(p,q), 辺(p,r) について、①同一線分上にない ②組(q,r) が辺である の2つを確かめれば三角形と判定できます。
(12) kotae ← 0
(13) x を 1 から hensosu − 2 まで 1ずつ増やしながら,
(14) │ y ← [シ]
(15) │ [ス] の間,
(16) │ │ もし [セ] かつ Hen[[ソ], [タ]] ≠ "-" ならば
(17) │ │ │ kotae ← kotae + 1
(18) │ │ を実行する
(19) │ │ y ← [チ]
(20) │ を繰り返す
(21) を繰り返す
(22) 「三角形の個数は」と kotae と「個である」を表示する
※骨組みのみ(藤原作成)。
シ=②(x + 1)/ス=①(Siten[x] = Siten[y])/セ=⑤(Senbun[x] ≠ Senbun[y])/ソ=②(Syuten[x])/タ=⑤(Syuten[y])/チ=③(y + 1)
設計思想を先に言語化する
三角形 (p, q, r)(p < q < r)を、必ず「最小の頂点 p」から見る。すると、その三角形は「始点が p である2本の辺 (p,q) と (p,r)」という形でちょうど1回だけ現れます。だから重複して数える心配がない。
もし「3辺のどれから見てもよい」としてしまうと、同じ三角形を3回数えてしまい、最後に3で割る必要が出ます。始点が共通する2辺に限定する、という設計は、3重カウントを構造的に防ぐための工夫なのです。
シ・ス・チ ― ループの回し方
辺は始点の小さい順に並んでいるので、始点が同じ辺は配列の中で連続しています。だから x を1つ固定したら、y は x + 1 から始めて、Siten[x] = Siten[y] である間だけ1つずつ進めればよい。始点が変わった瞬間に内側のループを抜けます。
- シ=x + 1:x より後ろの辺だけを相手にする(x < y にすることで、同じ2辺の組を2回調べない)。
- ス=
Siten[x] = Siten[y]:始点が同じ間だけ回す。並び順がソート済みだから成立する条件です。 - チ=y + 1:次の辺へ。
(13) の「hensosu − 2 まで」の意味。三角形には3本の辺が要ります。x が最後から2番目以降だと、後ろに2本残らないので三角形にはなり得ません。だから x の上限を hensosu − 2 にしています。この種の「−2」を見たら、必ず「なぜ2なのか」を言葉にする癖をつけてください。
セ・ソ・タ ― 三角形の判定条件
セ=Senbun[x] ≠ Senbun[y]。同じ線分の上に2辺が乗っていたら、3点が一直線に並んでしまい三角形になりません。問題文が「組(5,6,8) は辺(5,6) と辺(5,8) が同じ線分上にあるので三角形ではない」と例示しているのは、まさにこの条件のためです。
ソ・タ。残る辺 (q, r) が存在するかを Hen で確かめます。q は辺 x の終点 = Syuten[x]、r は辺 y の終点 = Syuten[y]。
なぜ Hen[Syuten[x], Syuten[y]] の順で書けるのか。Hen は第1添字 < 第2添字のときしか情報を持っていません(上三角)。逆順に書くと必ず “-” になり、三角形が1個も数えられなくなります。ここで効くのが並び順です。x と y は始点が同じで、始点が同じ辺は終点の小さい順に並んでいる。そして x < y。したがって Syuten[x] < Syuten[y] が必ず成り立つ。だから Hen[Syuten[x], Syuten[y]] でよいのです。
この大問の全体設計は、この一点に集約されています。問1で並び順を丁寧に定義し、問2の二重ループでその並び順を作り、問3でその並び順に頼って添字の大小を保証する。3つの問がひとつながりの伏線になっている。私はこの構成の美しさで、2017年の第3問を高く評価しています。
本当に15個になるかを確かめる
問題文は「この手続きを実行すると、例題には三角形が15個あることがわかる」と書いています。私は上の答えを埋めた手続きをそのままPythonに書き写して実行し、kotae が 15 になることを確認しました。さらに、定義に立ち返って「8頂点から3つ選ぶ56通りのうち、3辺すべてが存在し、かつ3辺が相異なる線分上にあるもの」を総当たりで数えても15。両者が一致します。内訳は次の15組です。
| (1,2,8) | (1,3,7) | (1,5,8) | (1,7,8) | (2,4,7) |
| (2,5,8) | (2,7,8) | (3,4,8) | (3,6,8) | (3,7,8) |
| (4,6,8) | (4,7,8) | (5,6,7) | (5,7,8) | (6,7,8) |
問題文が例示している (1,7,8) と (3,6,8) がちゃんと入っており、三角形でないとされた (1,2,3)(辺(2,3)が存在しない)と (5,6,8)(辺(5,6)と辺(5,8)が同じ線分D上)が入っていないことも確認できます。
【背景知識】隣接行列・辺リスト・計算量
1. 隣接行列(adjacency matrix)。配列 Hen は、グラフ理論でいう隣接行列そのものです。ふつうの隣接行列は「つながっていれば1、いなければ0」ですが、ここでは0/1の代わりに「どの線分上か」という追加情報を持たせているのが工夫です。無向グラフなので本来は対称行列になりますが、上三角だけ使って下三角を “-” で潰すことで、同じ辺を2回数える事故を防いでいます。
2. 辺リスト(edge list)。Siten, Syuten, Senbun の3本の配列は、辺リストを「構造体の配列」ではなく「配列の平行な束」で表したものです。行列は「2点を指定して辺の有無を即座に引ける」が場所を食う(頂点数の2乗)。リストは「全部の辺を順に舐める」のが速いが、2点指定の検索は苦手。この問題は、両方を持っておいて、得意な場面で使い分けるという実装をしています。問3の内側の判定で Hen(行列)を引いているのが、まさにその使い分けです。
3. 計算量。問2の二重ループは、頂点数を V として V(V−1)/2 回、つまり O(V²)。問3は「同じ始点をもつ辺の組」の数だけ回るので、始点 p の辺の本数を dp とすると Σ dp(dp−1)/2 回。例題では 5+4+4+3+3+2+1 = 22本から、5C2+4C2+4C2+3C2+3C2+2C2 = 10+6+6+3+3+1 = 29回だけ内側の判定が走ります。愚直に 8C3 = 56通りを全部調べるより速い。「調べる範囲をどう絞るか」がアルゴリズムの本体だ、ということがこの比較でよく分かります。
【自作の類題】頂点1〜5があり、線分P={1,2,3}、線分Q={1,4,5}、線分R={2,4}、線分S={3,5} の4本があるとする。①辺の総数は何本か。②三角形は何個か。すべて列挙せよ。
解答:①3C2+3C2+1+1 = 3+3+1+1 = 8本。②辺は (1,2)P, (1,3)P, (2,3)P, (1,4)Q, (1,5)Q, (4,5)Q, (2,4)R, (3,5)S。三角形の候補を最小頂点から調べると、始点1の辺は (1,2),(1,3),(1,4),(1,5) の4本。組を6通り試すと、(1,2)P と (1,4)Q は線分が違い (2,4) が辺Rなので三角形(1,2,4)。(1,3)P と (1,5)Q は線分が違い (3,5) が辺Sなので三角形(1,3,5)。(1,2)Pと(1,3)Pは同一線分で×。(1,4)Qと(1,5)Qも同一線分で×。(1,2)Pと(1,5)Qは(2,5)が辺でない。(1,3)Pと(1,4)Qは(3,4)が辺でない。始点2の辺は (2,3)P, (2,4)R の2本だが (3,4) が辺でない。始点3は (3,5)S のみ、始点4は (4,5)Q のみで組が作れない。よって2個:(1,2,4), (1,3,5)。
この類題の狙い:「同一線分上を除く」条件が実際に効く場面((1,2)と(1,3))を自分の手で潰させることです。
第4問(選択・35点)― 表計算で家庭学習を回す
設定の要約。渡辺さんが定期テストの2週間前に、14日分の目標を立て、日々の学習記録をとり、7日目で中間集計して取り組みを見直し、テスト後に振り返る、という一連の流れを表計算ソフトで作ります。シート1「目標」、シート2「学習記録」、シート3「学習状況」、シート4「達成率変化」、シート5「結果」、シート6「評価」、シート7「振り返り視点」の7枚が登場します。
この大問は、内容としてはPDCAサイクルそのものです。Plan(シート1で目標設定)→ Do(シート2に記録)→ Check(シート3・4で集計と予測)→ Act(シート5・6・7で振り返り)。設問の題材が「勉強のやり方」そのものなので、受験生が解くと一石二鳥になります。
この大問を貫く1本の技術:$(絶対参照)の決め方
第4問の19マークのうち、10マークが「セル範囲に $ を付けるかどうか」だけを訊いています。ここを機械的に処理できるかどうかが、そのまま得点です。判断は次の2ステップで必ず決まります。
ステップ1:どの向きに複写するかを確認する。「セルB2に入力し、B3〜B6 に複写」なら縦(↓)だけ。「B2に入力し、B3〜B6 と C2〜C6 に複写」なら縦と横の両方(↓と→)。「B7に入力し、C7〜H7 に複写」なら横(→)だけ。
ステップ2:その向きに参照がずれてほしいかを問う。ずれてほしければ何も付けない。ずれてほしくなければ $ を付ける。
- 縦に複写する & 行がずれては困る → 行番号の前に $(例:
D$2〜D$6) - 横に複写する & 列がずれては困る → 列記号の前に $(例:
$A1) - 両方向に複写する & どちらもずれては困る → 両方に $(例:
$C$2〜$C$23)
$ は「動くな」の印です。迷ったら全部に $ を付ける、は不正解になります。この試験では「ずれてほしい方向」まで正確に判定させるので、余分な $ は減点対象です。
問1 ― 目標を立てる(ア〜オ)
シート1には、教科名・前回点数・目標点数・目標点数差・優先順位・目標時間・目標正解数・判定の8列があります。
ア=⑥(RANK)/イ=④(D$2〜D$6)/ウ=⓪(SUM)/エ=⑨(E2)/オ=⑦(F$2〜F$6)
ア・イ ― 優先順位を付ける
「目標点数差の大きい順に優先順位を表示する」。順位を返す関数は RANK で、この試験の RANK は降順(大きいほど1位)で、同じ値があれば同順位を返します。E2 に RANK(D2, [イ]) と入れて E3〜E6 に複写します。
複写は縦(↓)だけ。第1引数の D2 は各行の値を見てほしいのでずれてよい(だから $ なし)。一方、比較する範囲は常に D2〜D6 のままでなければ順位が壊れます。縦にずれては困るので行に $。よって D$2〜D$6。
紛らわしい選択肢が $D2〜$D6(列だけ固定)です。これだと E3 に複写したとき $D3〜$D7 になり、範囲が1行ずつずり下がって、存在しない行まで見に行きます。「複写の向きと $ の向きは直交する」と覚えてください。縦に複写するなら守るのは行、横に複写するなら守るのは列です。
ウ ― 合計
B7 に前回点数の合計。SUM です。この式を C7・F7・G7 にも複写する、と書かれているので、SUM(B2〜B6) は $ なしで正解(横に複写して C, F, G に自然にずれてほしいから)。
エ・オ ― 「順位が低い」の日本語を正確に読む
H列の判定は「入力された目標時間の順位が、列Eの優先順位よりも低いときには『注意』と表示する。ただし、目標時間の順位は目標時間の数値が大きいものほど高いものとする」。式の形は
IF( [エ] < RANK(F2, [オ]) , "注意", "")
ここを日本語で詰めます。「順位が高い」=1位、2位…と数が小さい。「順位が低い」=4位、5位…と数が大きい。したがって
「目標時間の順位が優先順位より低い」=「目標時間の順位の数 が 優先順位の数 より大きい」= 優先順位 < 目標時間の順位。
式の左辺が優先順位(E2)、右辺が RANK(F2, F$2〜F$6) になります。
エ=⑨(E2)(縦に複写してE3, E4…とずれてほしいので $ なし)/オ=⑦(F$2〜F$6)(縦に複写しても範囲は動いてほしくないので行に $)
必ず検算してください。目標時間は 国語320・数学350・理科320・社会330・英語300。降順に並べると 350(1位)、330(2位)、320(3位・同順位)、320(3位)、300(5位)。優先順位は 国語5・数学4・理科1・社会2・英語3。
| 教科 | 優先順位 | 目標時間の順位 | 優先順位 < 時間の順位? | 判定 |
|---|---|---|---|---|
| 国語 | 5 | 3 | 5 < 3 は偽 | — |
| 数学 | 4 | 1 | 偽 | — |
| 理科 | 1 | 3 | 1 < 3 は真 | 注意 |
| 社会 | 2 | 2 | 偽 | — |
| 英語 | 3 | 5 | 3 < 5 は真 | 注意 |
問題のシート1で「注意」が出ているのは理科と英語。ぴたりと一致します。この検算ができれば、エとオの不等号の向きに一切の不安がなくなる。私はこれをプログラムでも再現し、同じ結果を得ました。
意味も押さえておきましょう。理科は「点数を最も伸ばしたい(優先順位1位)」のに「時間の配分は3番手」。英語は「優先順位3位」なのに「時間は最下位」。やる気と時間配分がねじれている教科を機械的にあぶり出す仕掛けです。この判定は、みなさんが自分の勉強計画に今日から使えます。
問2 ― 集計と予測(カ〜セ)
カ=④($C$2〜$C$23)/キ=④($A2)/ク=⑥(D$2〜D$23)/ケ=ⓑ(F$2〜F$23)/コ=①($A1)/サ=①($A2〜$G6)/シ=7/ス=⑧(B4)/セ=0
カ・キ・ク ― SUMIF を1つ書いて2列に使い回す
シート3のB列(累積学習時間)とC列(累積正解数)を、B2 に書いた1本の式だけで作ります。式は
SUMIF(学習記録![カ], [キ], 学習記録![ク])
複写の向きは「縦(B3〜B6)と横(C2〜C6)の両方」。ここが最大のポイントです。3つの引数それぞれについて、縦と横で「ずれてほしいか」を独立に判定します。
| 引数 | 中身 | 縦(↓)にずれてよいか | 横(→)にずれてよいか | 答え |
|---|---|---|---|---|
| 範囲1 | 学習記録の教科の列(C2〜C23) | ダメ(行を固定) | ダメ(列を固定) | $C$2〜$C$23 |
| 式1 | シート3の教科名(A2) | ずれてほしい(A3, A4…) | ダメ(列を固定) | $A2 |
| 範囲2 | 合計する列(学習時間D/正解数E) | ダメ(行を固定) | ずれてほしい(D→E) | D$2〜D$23 |
範囲2 が設計の白眉です。B列(学習時間の累積)の式を C列(正解数の累積)に横へ複写すると、集計対象の列が D(学習時間)から E(正解数)へ自動的に動く。だから列に $ を付けてはいけない。「1本の式で2つの集計を作る」という設計を読み取れたかどうかが、カ・キ・クの3マークを分けます。
逆に、範囲1(教科の列)は B列でも C列でも同じ教科の列を見なければならないので、列を固定します。同じ式の中で、片方は列を固定し、片方は固定しない。ここが「$ を全部付ければ安全」が通用しない理由です。
ケ ― AVGIF の範囲
E列(自己評価の平均)は AVGIF(学習記録![カ], [キ], 学習記録![ケ]) を E2 に入れて E3〜E6 に複写します。今度は縦だけ。自己評価は学習記録のF列にあります。
縦に複写するので行がずれては困る → 行に $。列は動かないので $ は不要。よって F$2〜F$23。
選択肢には F2〜F23(何も付けない)と $F2〜$F23(列だけ固定)も並んでいます。前者は E3 に複写した瞬間 F3〜F24 になって1行ずれるので×。後者は列を固定しても行がずれるので同じく×。この試験は「$ を付ける場所が違う」誤答を必ず用意してきます。「守るべきは行か列か」を毎回口に出して決めてください。
コ・サ・シ・ス・セ ― 達成予測の式を読む
シート4の7行目「達成予測」は、B7 に入れて C7〜H7 に横へ複写します。式の骨組みは
IF( VLOOKUP([コ], 目標![サ], [シ]) / 14 <= B5 / B1 , "☺", IF( [ス] = [セ] , "↓↓", "↓") )
意味は「目標正解数の1日当たり平均 ≦ その日までの実績の1日当たり平均 なら ☺。そうでなくて、その日の正解数が0なら ↓↓。どちらでもなければ ↓」。
- コ=$A1:教科名(シート4のA1)。横に複写するので列を固定。$ を付け忘れると C7 で
B1(=1という数値)を検索することになり、VLOOKUPが「該当なし」を返して全部壊れます。 - サ=$A2〜$G6:シート1(目標)の教科名〜目標正解数までの範囲。横に複写するので列を固定。行は動かないので行の $ は不要。
- シ=7:VLOOKUPが返すのは範囲の左から数えた列番号。A=1(教科名)、B=2(前回点数)、C=3(目標点数)、D=4(目標点数差)、E=5(優先順位)、F=6(目標時間)、G=7(目標正解数)。
- ス=B4、セ=0:その日の正解数(4行目)が0かどうか。横に複写して C4, D4… と動いてほしいので $ なし。
この設問の「等号」が美しい
実際に7日分を計算してみます。数学の目標正解数は380問、14日で割ると 380 ÷ 14 = 27.142857… 問/日。
| 日数 | 1 | 2 | 3 | 4 | 5 | 6 | 7 |
|---|---|---|---|---|---|---|---|
| その日の正解数 | 42 | 21 | 15 | 25 | 0 | 31 | 56 |
| 累積正解数 | 42 | 63 | 78 | 103 | 103 | 134 | 190 |
| 1日当たり(累積÷日数) | 42.00 | 31.50 | 26.00 | 25.75 | 20.60 | 22.33 | 27.142857… |
| 判定 | ☺ | ☺ | ↓ | ↓ | ↓↓ | ↓ | ☺ |
7日目に注目してください。190 ÷ 7 = 27.142857…、380 ÷ 14 = 27.142857…。完全に一致します(190×14 = 2660 = 380×7 なので、これは偶然ではなく作問者が意図的に置いた値です)。
ここで式が <=(以下) であることが効きます。もし <(未満) だったら7日目は ☺ にならず ↓ になり、問題文が示しているシート4の内容と食い違ってしまう。不等号に等号が付くかどうかで答えが変わる、という一点をこの試験は突いてきます。
実際この年は、第4問問3の式について「<」を「≦」に直す問題訂正が試験中に出されています。出題側にとってもここは急所だったということです。
私はこの7日分を式どおりに再計算し、☺ ☺ ↓ ↓ ↓↓ ↓ ☺ という並びが問題のシート4と完全一致することを確認しました。この一致こそが「コ・サ・シ・ス・セ の答えが正しい」という証拠です。
問3 ― 振り返りを自動化する(ソ〜ナ)
ソ=⓪(A1)/タ=③(A2〜E6)/チ=4/ツ=5/テ=①(A2)/ト=2/ナ=3
ソ・タ・チ・ツ ― 目標点数とテスト点数を比べる
シート6のC2は「テスト結果が目標点数以上か否か」を○×で表示します。訂正後の式は
IF( VLOOKUP([ソ], 結果![タ], [チ]) <= VLOOKUP([ソ], 結果![タ], [ツ]), "○", "×")
- ソ=A1:シート6のA1に入力された教科名。この式は C3〜C5 には複写しない(問題文は「セルC3, C4, C5 にもそれぞれ適切な計算式を入力する」と書いている)ので、$ は不要です。「複写しない」と書いてある設問では $ を付けない、これも判断基準のひとつです。
- タ=A2〜E6:シート5「結果」から、教科名(A列)で検索して目標点数(D列)とテスト点数(E列)を取る必要があるので、E列まで含む範囲が要ります。A2〜D6 では E列に届かず、テスト点数が取れません。
- チ=4:目標点数はD列=範囲の左から4列目。
- ツ=5:テスト点数はE列=5列目。
「以上」の向きに注意。「テスト結果が目標点数以上なら○」=「目標点数 ≦ テスト点数」。だから左に目標点数(4列目)、右にテスト点数(5列目)です。英語は目標85点・テスト84点なので 85 ≦ 84 は偽 → ×。問題のシート6でC2が × になっているのと一致します。
テ・ト・ナ ― 評価に応じてコメントを切り替える
シート6のD列は、シート7「振り返り視点」から適切なコメントを引いてきます。シート7はA列が番号、B列が「達成」時のコメント、C列が「未達成」時のコメントです。式は
VLOOKUP([テ], 振り返り視点!A$2〜C$5, IF(C2="○", [ト], [ナ]))
- テ=A2:シート6の番号。D3〜D5 に縦へ複写するので A3, A4, A5 とずれてほしい → $ なし。
- ト=2:C2が「○」=達成のとき、シート7のB列=2列目を返す。
- ナ=3:それ以外(未達成)のとき、C列=3列目を返す。
この式のうまさ。VLOOKUP の第3引数(返す列番号)を定数ではなく IF 式にしているところです。ふつう VLOOKUP は「番号で行を選ぶ」道具ですが、ここでは行を番号で選び、列を評価(○×)で選ぶという二次元の索引になっています。1本の式で「4項目 × 2状態 = 8通り」のコメントを出し分けているわけです。表計算を「電卓の代わり」だと思っている人には書けない式で、私はここを見て2017年の第4問を評価しました。
検算。英語は 評価が ×, ○, ○, ○(テスト点数だけ未達成)。したがってD列は 1行目だけ「未達成」列、残り3行は「達成」列から引かれます。問題のシート6に表示されている4つのコメントと突き合わせると、すべて一致します。
【背景知識】この4関数を、意味で覚え直す
- RANK(セル番地, セル範囲):範囲を降順に並べたときの順位。同じ値は同順位で、その分だけ次の順位が飛びます(3位が2つあれば次は5位)。「大きいほど1位」なので、小さいほど良い指標(タイムなど)の順位を出すには工夫が要るのがこの関数の癖です。
- SUMIF(範囲1, 式1, 範囲2):「条件を見る列」と「合計する列」が別々なのが要点。範囲1の中で式1に一致するセルを探し、その同じ行にある範囲2の値を足します。実質的にはデータベースの
SELECT SUM(x) WHERE y = 条件です。 - AVGIF(範囲1, 式1, 範囲2):SUMIFの平均版。0件だったときの扱いが実務では問題になりますが、この試験では必ず1件以上ある設定にしてあります。
- VLOOKUP(式1, セル範囲, 式2):範囲の左端の列を上から探し、最初に一致した行の、左から式2列目の値を返す。「検索するのは必ず左端列」「列番号は範囲の中での相対位置(シート全体の列番号ではない)」の2点が事故の元です。見つからなければ “該当なし” という文字列が返ります。V は Vertical(縦方向に探す)の意味です。
共通テスト『情報Ⅰ』では、これらの関数そのものは出題されません(表計算ソフトの説明が付く形式ではなくなりました)。しかし「条件に合う行だけを集計する」「キーで別表を引く」という発想は、第4問のデータ活用でそのまま問われます。関数名ではなく、操作の意味で覚え直しておいてください。
【自作の類題】シートXのA列に日付、B列に教科名、C列に学習時間が20行分(2行目〜21行目)入っている。シートYのA2〜A6に5教科名があり、B列に各教科の合計学習時間、C列に各教科の平均学習時間を出したい。B2に1本の式を書いてB3〜B6とC2〜C6の両方に複写して済ませることは可能か。可能なら式を、不可能なら理由を答えよ。
解答:不可能。合計は SUMIF、平均は AVGIF で関数名そのものが違うからです。複写でずらせるのはセル参照だけで、関数名は変わりません。B2に SUMIF(X!$B$2〜$B$21, $A2, X!$C$2〜$C$21) を入れてB3〜B6に縦複写し、C2には別途 AVGIF(X!$B$2〜$B$21, $A2, X!$C$2〜$C$21) を入れてC3〜C6に縦複写する、の2本立てになります。
この類題の狙い:2017年の本問(1本のSUMIFを横に複写して2列作る)が成立したのは、合計の列と正解数の列が隣り合っていて、関数が同じだったからだと気づかせることです。「複写で使い回せる条件」を意識できるようになります。
満点を狙うには ― 60分の設計図
1. 第3問と第4問、どちらを選ぶか(家で決める)
試験場で両方を読んでから決める、は絶対にやめてください。片方を3分読んで「やっぱりもう片方」となった時点で、35点分に使える時間が22分になります。事前に決め、当日は迷わない。
| 観点 | 第3問(プログラム) | 第4問(表計算) |
|---|---|---|
| 前半の負荷 | 高い。図の構造を表に落とす作業が要る | 低い。シートを眺めれば設定は分かる |
| 後半の負荷 | 低い。前半の表があれば埋まる | 高い。$ の判定が最後まで続く |
| ミス1つの重さ | 中。空欄どうしの独立性が比較的高い | 大。参照を1つ間違えると連鎖しやすい |
| 検算のしやすさ | しやすい(辺の総数22・三角形15が与えられている) | しやすい(完成後のシートが与えられている) |
| 向いている人 | 配列と二重ループを手で追える人 | $ の判定を機械的にできる人 |
2017年に限れば、私の推奨は第3問です。理由は、検算の質が違うから。第3問は「辺の総数22本」と「三角形15個」という2つの答えが問題文に書かれていて、自分の理解が正しいかを2回、独立に確かめられます。前半で22が出れば図の読み取りは確実、最後に15が出ればアルゴリズムの理解も確実。ここまで検算材料が揃っている大問はめずらしい。
一方の第4問も、完成後のシートが載っているので検算はできます。ただし「$ の位置」は完成後の値からは検証できません。値が合っていても $ の位置が違う、ということが起こり得る。ここが第4問の怖さです。
2. 時間配分
| 時刻 | やること | 目安 |
|---|---|---|
| 0–2分 | 全体を1分でめくり、第3問/第4問の選択を確認するだけ(迷わない)。余白に中綴じの4本の式を書き出す | 2分 |
| 2–13分 | 第1問(17マーク)。等比数列とパリティ。ここを13分で抜ける | 11分 |
| 13–33分 | 第2問(20マーク)。冒頭で一般式を作り、あとは代入 | 20分 |
| 33–55分 | 第3問または第4問(17〜19マーク) | 22分 |
| 55–60分 | 見直し。マークずれの確認を最優先、次に桁数、最後に不等号の向き | 5分 |
第2問に20分を割り当てているのがポイントです。ここは配点35点で、しかも一般式さえ作れば機械作業になります。最初の5分の投資(4本の式を作る)が、残り15分を確実に回収する。逆に一般式を作らずに毎回ページを数え始めると、20分では終わりません。
3. マークミスを構造的に防ぐ
① 桁数を先に見る。オカ(2桁)、クケコサ(4桁)、テトナ(3桁)、ケコ(2桁)。答えを出す前に桁数を確認しておくと、計算の途中で「これは桁が合わない」と気づけます。5460 と 5461 のように桁数では区別できない場合は、その設問だけ二重に読み返すと決めておく。
② 順不同の欄を最後に埋める。イ・ウは「解答の順序は問わない」と明記されています。順不同の欄は、他が全部埋まってから機械的に埋めるほうが安全です。
③ 選択問題のマーク欄を間違えない。第3問と第4問は解答用紙の欄が別です。第4問を解いたのに第3問の欄にマークすると全滅します。大問に入る前に、解答欄の見出しを指で押さえて確認する。これは毎年、実際に起きている事故です。
④ 「言葉の罠」の3か所を最初にマークしておく。この年なら「担当者を除く」「順位が低い」「M枚未満のときは少ない枚数のままで」。問題冊子の該当語に、読んだ瞬間に丸を付ける。読み飛ばしは、見直しでは見つかりません。
4. 見直しの型(検算材料は問題文の中にある)
この年の問題は、検算材料が異常なほど親切に置かれています。満点を狙うなら、これを全部使ってください。
| 場所 | 問題文が与えている検算材料 | 何が確かめられるか |
|---|---|---|
| 第1問問2 | 候補者Dの並びが (黒, 黒, 白) と印刷済み | 「白の数が奇数」という規則の理解 |
| 第2問問1 | 図に p.1 と p.3 の位置が描かれている | 左綴じ=奇数ページが右、の対応 |
| 第2問問4 | 折丁2個・3個の行が全部埋まっている | r(r+1) と 80(s−1) の使い方 |
| 第3問問1 | 「辺の総数は22本」 | 図の読み取り(各線分に乗る頂点) |
| 第3問問3 | 「例題には三角形が15個ある」 | アルゴリズム全体の理解 |
| 第4問問1 | シート1に「注意」が2つ表示済み | RANK の向きと不等号の向き |
| 第4問問2 | シート4の達成予測が7日分 表示済み | ≦ の等号、VLOOKUPの列番号 |
| 第4問問3 | シート6の○×とコメントが表示済み | 列番号の切り替え(2か3か) |
「完成後の姿が印刷されている」というのは、この科目の最大の特徴です。自分の答えを入れて、印刷されている値が再現できるかを確かめる。再現できれば正解、できなければ間違い。これほど確実な検算はありません。第4問を選ぶなら、この作業を必ず組み込んでください。
正解一覧
| 大問 | 空欄と正解 |
|---|---|
| 第1問 問1 |
ア ⑤/イ・ウ ⓪・③(順不同)/エ ①/オカ 64/キ 7/クケコサ 5460/シ ② |
| 第1問 問2 |
ス ②/セ ③/ソ ③/タ ①/チ ③/ツ ④/テ ⑨/ト ①/ナ ⑦ |
| 第2問 問1・問2 |
ア 4/イ 2/ウ 7/エ ⑤/オカ 15/キク 16/ケコ 11 |
| 第2問 問3・問4 |
サ 6/シ 1/ス ①/セ 4/ソ 2/タ ③/チ ①/ツ ⑤/テトナ 546/ニ ②/ヌ ⑤ |
| 第3問 (選択) |
ア 6/イ 3/ウ 7/エ 8/オ ②/カ 6/キ ③/ク ⑤/ケ ⓪/コ ③/サ ⑦/シ ②/ス ①/セ ⑤/ソ ②/タ ⑤/チ ③ |
| 第4問 (選択) |
ア ⑥/イ ④/ウ ⓪/エ ⑨/オ ⑦/カ ④/キ ④/ク ⑥/ケ ⓑ/コ ①/サ ①/シ 7/ス ⑧/セ 0/ソ ⓪/タ ③/チ 4/ツ 5/テ ①/ト 2/ナ 3 |
※ⓐ・ⓑは解答群の10番目・11番目の選択肢(マークシートの a・b)を指します。
この1年分から持ち帰るべき5つ
1. 中綴じは「見開きの和が総ページ+1」。面付けの問題はこれ1本で全部解けます。折丁が出てきたら、折丁の中でローカル座標に直してから同じ式を使う。
2. パリティは「1ビット検出・0ビット訂正」、2回送ると「1ビット訂正」。ハミング距離 d に対して、検出は d−1 ビット、訂正は ⌊(d−1)/2⌋ ビットまで。
3. 下に凸な関数の和は、均等分割で最小。負荷分散も折丁もアムダールの法則も、同じ形をしています。
4. ソート済みであることは、アルゴリズムの資産である。第3問が「始点が同じ辺は連続している」「終点は昇順である」という2つの性質に全面的に寄りかかっていたことを思い出してください。データを整えておくと、後の処理が単純になる。これは情報分野の中心思想です。
5. $ は「動くな」の印。守るべきは、複写する向きに対応するほう。縦に複写するなら行に $、横に複写するなら列に $、両方に複写するなら両方に $。迷ったら全部に $、は不正解になります。
この記事の作り方(検算の記録)
受験生に渡すものである以上、根拠を明示します。本記事の正解は次の手順で確定させました。
- 全53マークを自力で解いた。選択肢の消去法ではなく、各設問の設定から答えを構成する形で解いています。
- 問題冊子に印刷されている「完成後の値」と突き合わせた。第1問問2の候補者Dの並び、第2問問4の表(折丁2個・3個の行)、第3問の「辺の総数22本」「三角形15個」、第4問のシート1の判定・シート4の達成予測7日分・シート6の○×とコメント。これらがすべて再現できました。
- Pythonで独立に検算した。チェーンメールの等比数列の和、パリティ符号の全パターン、面付けの一般式(総ページが全部ちょうど1回ずつ現れるかの検査つき)、A3判の枚数の全探索、折丁の分割の全列挙(順序を無視した分割をすべて生成して最小値を求める)、第3問の手続きの実行再現と三角形の総当たり計算、第4問の全シートの再計算。合計66項目、不一致ゼロ。
- 図の読み取りは高解像度で再確認した。第3問の線分と頂点の対応(線分Eに頂点3・4・6・7が乗っていること等)は、問題図を拡大して目視で確認し、さらに「辺の総数が22本になるか」で機械的に裏を取りました。
大学入試センターは平成29年度の正解表を現在公開していないため、公式正解表との突き合わせは行っていません。上記の②が実質的にそれに代わる検証になっていますが、この点は正直に書いておきます。誤りにお気づきの際はご指摘ください。
次に何を解くか
情報Ⅰの対策として情報関係基礎を使うなら、私の推奨する順番は次のとおりです。
- まず共通テスト『情報Ⅰ』の2025年度・2026年度本試験(現行形式の把握)。→ 2025年度の完全解剖/2026年度の完全解剖
- 次に情報関係基礎の第3問(プログラミング)だけを、新しい年度から10年分。プログラムを読む速度がここで上がります。
- そのあと第2問(数理的な問題)を10年分。共通テスト第2問の「現象をモデル化する」型に直結します。
- 第4問(表計算)は後回しでよい。共通テストでは表計算ソフトの説明が付く形式が廃止されたため、優先度は下がります。ただし「条件に合う行だけ集計する」「キーで別表を引く」という発想はデータ活用でそのまま使うので、ゼロにはしないこと。
- 第1問(知識)は、情報Ⅰの教科書で体系的にやるほうが速い。過去問で拾うより効率が良いです。
プログラム表記の細部(代入が「←」か「=」か、繰り返しの書き方など)は、情報関係基礎のDNCLと共通テスト用プログラム表記で異なります。移行の差分は 共通テスト用プログラム表記①変数と代入 以降の講でまとめてありますので、あわせてご覧ください。
著者:藤原進之介(ふじわら しんのすけ)
数強塾グループ代表。オンライン数学専門塾「数強塾」および情報Ⅰ専門塾を運営。数学と情報Ⅰの指導を専門とし、共通テスト『情報Ⅰ』の教材開発を行っています。本記事は、2017年(平成29年度)センター試験「情報関係基礎」本試験について、全53マークを自力で解答したうえで、問題冊子に印刷された値との整合とプログラムによる独立検算(66項目)を経て執筆しました。
「情報Ⅰの過去問が足りない」という方へ
数強塾では、数学と情報Ⅰの両方に対応したオンライン個別指導を行っています。情報関係基礎を使った演習の設計もご相談いただけます。学習相談は無料、体験授業は3,000円(税込)でお受けしています。
出典・参考
・大学入試センター「過去の試験問題」 https://www.dnc.ac.jp/kyotsu/kakomondai/(試験問題・正解表の公開は直近3年分に限られます。平成29年度の問題冊子は、赤本や各予備校の過去問アーカイブでご確認ください)
・大学入試センター「センター試験 志願者数・受験者数等の推移」 https://www.dnc.ac.jp/kyotsu/suii/center_suii/center_suii.html
・文部科学省「高等学校学習指導要領」および専門教科「情報」関係資料 https://www.mext.go.jp/
・2017年(平成29年度)センター試験「情報関係基礎」本試験 問題冊子(数学②別冊子)および同 問題訂正
「持ち帰るべき5つ」を、別の設定で使ってみる ─ 自作演習4問
この記事は最後に「この1年分から持ち帰るべき5つ」を置きました。ただし、そのうち3つは一般形だけを1行で書いて終わっています ─ ハミング距離 \( d \) に対する検出・訂正ビット数、「下に凸な関数の和は均等分割で最小」、$ の付け方。持ち帰ったかどうかは、別の設定で使えるかで決まります。
| 持ち帰るべき5つ | 記事に書かれている形 | この演習で使う場面 |
|---|---|---|
| 2. 検出は \( d-1 \)、訂正は \( \left\lfloor\frac{d-1}{2}\right\rfloor \) | 一般式が1行だけ | 符号の集合を自分で見て \( d \) を求める(類題1) |
| 3. 下に凸な関数の和は均等分割で最小 | 一言だけ | 上に凸だと逆になるところまで(類題2) |
5. $ は「動くな」の印 |
原則のみ | 付けすぎた式が実際にどう壊れるか(類題3) |
| 1. 見開きの和は総ページ \( +1 \) | 本文で使用済み | 別のページ数で1枚目から並べる(類題4) |
※以下の4問と数値は、すべて数強塾で作成したオリジナルです。試験の問題文・選択肢・図表は使っていません。
類題1 符号の集合を見て、\( d \) を自分で求める
5ビットの符号語として、次の4つだけを使うことにする。
\( 00000,\quad 01110,\quad 10101,\quad 11011 \)
- この符号の最小ハミング距離 \( d \) を求めなさい。
- 何ビットまでの誤りを検出できるか。何ビットまで訂正できるか。
- 受信した語が \( 01100 \) であった。訂正するとどれになるか。
解答
| 組 | 距離 |
|---|---|
| \( 00000 \) と \( 01110 \) | 3 |
| \( 00000 \) と \( 10101 \) | 3 |
| \( 00000 \) と \( 11011 \) | 4 |
| \( 01110 \) と \( 10101 \) | 4 |
| \( 01110 \) と \( 11011 \) | 3 |
| \( 10101 \) と \( 11011 \) | 3 |
(1) 最小は \( d=3 \)。(2) 検出は \( d-1=\mathbf{2} \) ビット、訂正は \( \left\lfloor\dfrac{3-1}{2}\right\rfloor=\mathbf{1} \) ビット。
(3) \( 01100 \) から各符号語までの距離は、順に \( 2,\ 1,\ 4,\ 3 \)。いちばん近い \( 01110 \) に訂正します(距離1で、他はすべて2以上離れているので一意に決まります)。
記事にある「検査ビットを1個付ければ1ビット検出・0ビット訂正」「同じものを2回送れば1ビット訂正」も、この式1本から出ます。偶奇の検査ビットを1個付けた符号は \( d=2 \) なので検出 \( 1 \)・訂正 \( \left\lfloor\frac{1}{2}\right\rfloor=0 \)。同じものを3回送る符号は \( d=6 \) で検出5・訂正2。個別に暗記していた結論が、\( d \) を1つ数えるだけで全部出ます。
ビット列を2進法として読む土台は 第32講 デジタルとアナログ/2進数で表す意味、桁の扱いに慣れるなら 2進数・10進数・16進数の変換|16進法を使う理由を原理から解説【情報Ⅰ 第40講】 が土台になります。
類題2 「均等が最小」は、下に凸のときだけ
正の整数 10 を、2つの正の整数 \( a,\ b \)(\( a+b=10 \))に分ける。
- \( a^{2}+b^{2} \) を最小にする分け方と、その値を求めなさい。
- \( a^{2}+b^{2} \) を最大にする分け方と、その値を求めなさい。
- \( \sqrt{a}+\sqrt{b} \) を最小にする分け方はどれか。
- 11 を2つに分けて \( a^{2}+b^{2} \) を最小にするとどうなるか。
解答
| \( (a,b) \) | \( a^{2}+b^{2} \) | \( \sqrt{a}+\sqrt{b} \) |
|---|---|---|
| \( (1,9) \) | 82(最大) | 4.000(最小) |
| \( (2,8) \) | 68 | 4.243 |
| \( (3,7) \) | 58 | 4.378 |
| \( (4,6) \) | 52 | 4.449 |
| \( (5,5) \) | 50(最小) | 4.472(最大) |
(1) \( (5,5) \) で 50。(2) \( (1,9) \) で 82。(3) \( (1,9) \)、つまりいちばん偏らせたとき。(4) 11 なら \( (5,6) \) で 61 ─ 整数なので均等にいちばん近いところが最小です。
\( x^{2} \) は下に凸なので「均等で最小」、\( \sqrt{x} \) は上に凸なので「均等で最大」。記事の3番目は下に凸という前提つきで、上に凸の量では結論がそのままひっくり返ります。負荷分散で「均等に配れば速い」が成り立つのは、1人あたりの所要時間が下に凸な形をしているからです。
2つに分ける場合なら、\( a^{2}+b^{2}=\dfrac{(a+b)^{2}+(a-b)^{2}}{2} \) と書けば一瞬です。\( a+b \) は固定なので、\( (a-b)^{2} \) を小さくすればよい ─ 差を0に近づけるほど小さい。同じ話を平均の不等式として見たものが なぜ相加平均は相乗平均以上なのか、一般の凸関数まで一本化したものが 入試不等式から凸解析へ|接線・相加相乗平均・イェンセンの不等式を一本化 です。
類題3 $ を付けすぎた式が、どう壊れるか
表計算ソフトで、次のようなかけ算の表を作りたい。A2〜A6 に \( 1,2,3,4,5 \)、B1〜F1 にも \( 1,2,3,4,5 \) が入力されている。セル B2 に式を1つ入れ、右にも下にも複写して B2〜F6 の25マスを埋める。
- B2 に入れるべき式を答えなさい。
=$A$2*$B$1と入れて複写すると、表はどうなるか。- \( =\mathrm{A}2*\mathrm{B}1 \) と入れて複写すると、E4 にはどんな式が入るか。
解答
(1) =$A2*B$1。かける数はつねに A 列から取るので列を固定、かけられる数はつねに1行目から取るので行を固定します。
| 複写先 | =$A2*B$1 |
=$A$2*$B$1 |
\( =\mathrm{A}2*\mathrm{B}1 \) |
|---|---|---|---|
| B2 | $A2*B$1 |
$A$2*$B$1 |
\( \mathrm{A}2*\mathrm{B}1 \) |
| B3 | $A3*B$1 |
同じまま | \( \mathrm{A}3*\mathrm{B}2 \) |
| D2 | $A2*D$1 |
同じまま | \( \mathrm{C}2*\mathrm{D}1 \) |
| E4 | $A4*E$1 |
同じまま | \( \mathrm{D}4*\mathrm{E}3 \) |
(2) すべてのマスが同じ式になるので、25マスすべてが \( 1\times 1=1 \) になります。(3) E4 には \( =\mathrm{D}4*\mathrm{E}3 \) が入り、表の別のマスどうしを掛け始めます。
記事の5番目「迷ったら全部に $、は不正解になります」が (2) です。付けすぎた式はエラーにならず、それらしい数が並ぶので気づきにくい。複写したあとに、右下の1マスだけ式を確認する ─ F6 が $A6*F$1 になっていれば正しく、$A$2*$B$1 のままなら固定しすぎです。
判定は「複写する向き」だけで決まります。下に複写すると行番号が動くので、動いてほしくない側の行に $。右に複写すると列が動くので、動いてほしくない側の列に $。この2文だけで、$ の問題は全部片づきます。
類題4 中綴じの式を、別のページ数で使う
総ページ数 32 の冊子を中綴じ(用紙を重ねて2つ折りにし、真ん中をとじる)で作る。
- 用紙は何枚必要か。
- いちばん外側の用紙の外側の面には、どのページとどのページが並ぶか。
- p.9 と同じ面に並ぶのは何ページか。
- p.9 は外側から何枚目の用紙にあるか。
解答
(1) 用紙1枚で4ページぶんなので \( 32\div 4=\mathbf{8} \) 枚。
(2) 見開きの和は \( 32+1=33 \)。外側の面には p.32 と p.1(和が33)。
(3) \( 33-9=\mathbf{24} \) ページ。
(4) 外側から \( k \) 枚目の用紙には \( 2k-1,\ 2k,\ 33-2k,\ 34-2k \) の4ページが載ります。\( 2k-1=9 \) より 5枚目。実際 5枚目は \( 9,\ 10,\ 23,\ 24 \) の4ページです。
| 用紙 | 外側の面 | 内側の面 |
|---|---|---|
| 1枚目 | 1 と 32 | 2 と 31 |
| 2枚目 | 3 と 30 | 4 と 29 |
| 3枚目 | 5 と 28 | 6 と 27 |
| 4枚目 | 7 と 26 | 8 と 25 |
| 5枚目 | 9 と 24 | 10 と 23 |
| 6枚目 | 11 と 22 | 12 と 21 |
| 7枚目 | 13 と 20 | 14 と 19 |
| 8枚目 | 15 と 18 | 16 と 17 |
表の右の列と左の列を足すと、どの行も 33 です。これが記事の1番目「見開きの和は総ページ \( +1 \)」。検算は、全32ページがちょうど1回ずつ現れるかを見るだけで済みます(表の16組を数えれば32)。式を作ったら必ず全ページを1回ずつ使い切っているかを確かめる ─ 面付けの問題はここで事故が起きます。
まとめ:一般形は、別の設定で1回使って初めて自分のものになる
| 持ち帰る一般形 | 別の設定で使うと | 外れる境目 |
|---|---|---|
| 検出 \( d-1 \)、訂正 \( \left\lfloor\frac{d-1}{2}\right\rfloor \) | 符号の集合から \( d \) を数えるだけ | 距離が同じ符号語が2つあると訂正先が決まらない |
| 均等分割で最小 | \( a^{2}+b^{2} \) は \( (5,5) \) | 上に凸なら均等が最大 |
$ は「動くな」の印 |
複写する向きだけで決まる | 付けすぎるとエラーにならず全部同じ値 |
| 見開きの和は総ページ \( +1 \) | \( k \) 枚目は \( 2k-1,\ 2k,\ 33-2k,\ 34-2k \) | 全ページを1回ずつ使い切ったか要確認 |
4問とも、記事の一般形をそのまま当てはめただけで、新しい知識は1つも使っていません。それでも手が止まった項目があれば、そこが「読んで分かった」で止まっているところです。一般形は、書き写した時点ではまだ持ち帰れていません。
チェーンメールの拡散が等比数列になる理由は なぜ等比数列には指数関数が現れるのか。同じ科目の別の年度で、同じ5つが実際に使えるかを試すなら 2024年 共通テスト 情報関係基礎 全問解説|令和6年度 第1問〜第4問【数強塾】 と 2025年 共通テスト 旧情報関係基礎 全問解説|令和7年度 第1問〜第4問【数強塾】 が続きです。
