2020年度 創造情報学専攻 冬入試 プログラミング再現と感想

2020年3月4日

2020年度 東京大学情報理工学系研究科 創造情報学専攻 冬入試 一般教育科目(プログラミング)の再現です。冬入試では問題が公開されてないため、記憶している範囲で再現を行いました。ただし、試験開始前に配布されるUSBメモリに入っている内容はそのまま再現することができています。

筆記試験(午前)

試験問題

一定幅の平面に正方形のタイルを配置していくことを考える。タイルは、できるだけ上に、できるだけ左に配置していくものとする。10マス幅の空間にタイルを配置した例を図1に示す。正方形タイル上の数は、タイルを配置する順番を表している。「深さ」とは、二次元空間の上のへりから最も下にあるタイルの下辺までにあるマスの数である。

図1 タイルの配置の例

テキストファイルには、配置するタイルの大きさを表す数字が配置順に並んでいる。図1の配置を表すテキストは113142421231である。

(1) 2マス幅のタイル配置問題を考える。配置結果の深さを出力するプログラムを作成せよ。tile1.txtを読み込み、配置結果の深さを解答用紙に書け。

(2) 10マス幅のタイル配置問題を考える。配置結果の深さを出力するプログラムを作成せよ。tile2a.txt, tile2b.txt, tile2c.txt, tile2d.txtを読み込み、配置結果の深さを解答用紙に書け。

// tile2a.txt
4314443431323242241
// tile2b.txt
33343344443222332434243434333344443444434444343333334444334243334334311433343434343442333343442334222444321333414244334143333343334333343331231343344444434134233334344433433434333441324334242444134433342343434333434424
// tile2c.txt
333334444434334443334443333343433444344433333334334443334334334343433443344334343434343434
// tile2d.txt
4422

(3) 10マス幅のタイル配置問題を考える。tile3a.txt, tile3b.txt, tile3c.txtを読み込み、配置結果を出力する次の条件を満たすプログラムを作成せよ。

  • マスの状態を1マス1文字で表す。
  • タイルで埋まっているマスは、そのタイルが配置された順番を1文字で出力する。1番目に配置されたタイルから順に、1,2,3,4,5,6,7,8,9,0,A,B,C,D,E,F,G,H,…を出力する。
  • タイルで埋まっていないマスは、空白文字を出力する。

例えば、図1の配置結果を出力すると以下のようになる。

1233345555
6633395555
66333B5555
7777885555
77778800  
7777  00  
7777AAA   
    AAA   
    AAA   
// tile3a.txt
113142421231
// tile3b.txt
44223331111111111111
// tile3c.txt
3332441

(4) 10マス幅のタイル配置問題を考える。深さを最小にするよう配置順を変更し、配置結果の深さを出力するプログラムを書け。変更するのは配置順のみで、「できるだけ上に、できるだけ左に配置していく」アルゴリズムは変更してはならない。tile4a.txt, tile4b.txt, tile4c.txtを読み込み、配置結果の深さを解答用紙に書け。

// tile4a.txt
34433244334334133
// tile4b.txt
344334143223433334113
// tile4c.txt
43443414333433344133

(5) tile5a.txt, tile5b.txt, tile5c.txt, tile5d.txt, tile5e.txtを読み込み、深さを最小にするよう配置順を変更し、配置結果を(3)と同様に出力するプログラムを書け。変更するのは配置順のみで、「できるだけ上に、できるだけ左に配置していく」アルゴリズムは変更してはならない。

// tile5a.txt
3244134
// tile5b.txt
232413124111
// tile5c.txt
444334333
// tile5d.txt
22242414111411124111
// tile5e.txt
4333434333433443

試験の流れ

試験開始前に、試験で用いるUSBメモリが各人に配られます。あらかじめ受験番号を名前とするディレクトリをノートパソコン本体に作成しておきます。USBメモリのファイルを一旦そこにコピーしてからプログラムを作成し、試験終了までにUSBメモリにディレクトリごとコピーする必要があります。

試験終了後、「口頭試問時刻表」なるものが配られ、何時頃に口頭試問が行われるかが発表されます。

ノートパソコンと問題冊子を机に置いたまま、教室から退出します。受験生は13:00まで各々休憩をとります。教室は口頭試問まで施錠され、ノートパソコンを試験後に操作することはできなくなっています。

感想

(1)は単純な問題でしたが、どのように実装すればよいかのアプローチがわからず時間を浪費しました。

(2)ではnumpyを使用しましたが、スライスの方法を勘違いしており、時間を浪費しました。[x1:x2][y1:y2]ではなく、[x1:x2, y1:y2]と書くのでした。

(3)は(2)をもとに出力結果を実装するだけなのでかんたんですね。

(4)(5)はどのように配置すればよいのかわからなかったため、タイルを大きい順にソートするコードを書きました。絶対間違っている……。

口頭試問(午後)

控室で待機します。試験官(呼び出し担当)が自分を呼び出すまで、ひたすら待ちます。控室には電子機器類の使用を禁止する張り紙が貼ってあったのですが、誰も守っておらず、試験官も特に咎めることはないようでした。

口頭試問の流れはこんな感じです。

試験官

受験番号と名前を言ってください。

ぼく

xxxxxのぼくです。

試験官

それではノートパソコンを開いて、口頭試問の準備をしてください。

ぼく

わかりました。(Visual Studio Codeを開く)

試験官

それでは、title3a.txtを読み込んで(3)のプログラムを動かしてください。

ぼく

title3aからtitle3cまで一度に全部表示されますけど大丈夫ですか?

試験官

大丈夫です。ではtitle3aからtitle3cまで動かしてください。

ぼく

わかりました。(Visual Studio Codeのターミナル画面で実行する)

試験官

これが3aね。深さが……1,2,3,4,5, …., 幅が1,2,3,4,…で、こう来て、こうか。(出力結果の形を確認している)
3bは深さが……、幅が……、(出力結果の形を確認している)
3cは深さが……、幅が……、(出力結果の形を確認している)

それでは、title5a.txtを読み込んで(5)を動かしてください。

ぼく

title5aから5eも同時に表示されますね。

試験官

では、title5aから5eを動かしてください。

ぼく

わかりました。(実行する)あんまりうまくいかなかったですね……。

試験官

5aは深さが……、幅が……、(出力結果の形を確認している)
5bは深さが……、幅が……、(出力結果の形を確認している)
5cは深さが……、幅が……、(出力結果の形を確認している)
5dは深さが……、幅が……、(出力結果の形を確認している)
5eは深さが……、幅が……、(出力結果の形を確認している)

試験官

ありがとうございました。それでは、問題冊子を回収します。(机に置いてある問題冊子を回収する)
荷物を持って帰って退出していただいて結構です。

試験官が出力結果の形を確認するたび、手元の用紙に何かをメモしているようでしたが、実際に何をしているのかはわかりません。

口頭試問の感想

創造情報学専攻体験談で「口頭試問では結果しか見ない」という噂を聞いていたので、口頭試問があっけなく終わったことは特に驚きもしませんでした。これは近年の受験者数の増加によるものだと思われます。

2017年度の創造情報学専攻の入試案内書では、(夏入試の)プログラミング試験の口頭試問の時間が10分と明記されており、受験生のプログラムを丁寧に見ていたようです。2018年度以降は、口頭試問の時間が削除されています。

午前は,各自がノートPCを持参し,与えられた課題についてのプログラムを作成する.プログラミング言語は各自の得意なものを使用してよい. プログラミングは,午後の口頭試問を併用して,問題の分析,設計,ドキュメント作成,プレゼンテーションなどの能力も問う.
午後は,各自のプログラムについて個別に10分程度の簡単な口頭試問を行う.

平成29(2017)年度 東京大学大学院情報理工学系研究科 創造情報学専攻 入試案内書

午前は,各自がノートPCを持参し,与えられた課題についてのプログラムを作成する.プログラミング言語は各自の得意なものを使用してよい.午後は,各自のプログラムについて個別に簡単な口頭試問を行う.プログラミングは,午後の口頭試問を併用して,問題の分析,設計,ドキュメ ント作成,プレゼンテーションなどの能力も問う.

平成30(2018)年度 東京大学大学院情報理工学系研究科 創造情報学専攻 入試案内書

2017年度以前では、ノートパソコンにプロジェクタを接続して口頭試問を行うと明記されています。この頃は、口頭試問を複数人で行っていたものと思われます。2018年度以降はこうした記述がなくなっています。2020年度冬入試における口頭試問は、作問者と思われる試験官1人が行っていました。

(a) プログラミング試験に用いるノートPCにはプログラムの作成に必要な実行環境をインストールしておくこと.使用するプログラミング言語の印刷マニュアルを1冊に限り持ち込んで試験中に参照することを許す.また,PC内に保存されたライブラリ等の使用やソースプログラム等の流用を認める.試験中のネットワーク接続は認めない.USBメモリが使えることを確認しておくこと. なお,プログラミング試験に必要なノート PC を所持していない者には貸 与するので,1 週間以上前に表紙に示されている専攻事務室に申し出ること.

(b) ファイルを読む問題が出ることがある.その場合,ファイルの内容はすべて ASCIIコード であり,改行はcarriage return (CR)とline feed (LF)の対で表現されている.

(c) プログラミング試験の午後は個別の口頭試問である.試験で用いたノートPCをXGA(1024×768ピクセル)のプロジェクタに接続し,プログラムや実行画面を表示しながら質問に答えてもらう.ノートPCにモニタ接続用端子(ミニ Dsub-15pin型)がない場合には,ノートPC用のモニタ接続ケーブル等を忘れないこと.口頭試問のおおよそのスケジュールは事前に通知するが,実際の受験状況に応じたスケジュールは午前の試験終了時に伝える.

平成29(2017)年度 東京大学大学院情報理工学系研究科 創造情報学専攻 入試案内書

プログラミング試験に用いるノートPCにはプログラムの作成に必要な実行環境をインストールしておくこと.使用するプログラミングに関する書籍を1冊に限り持ち込んで試験中に参 照することを許す.また,PC内に保存されたライブラリ等の使用やソースプログラム等の流用を認める.試験中のネットワーク接続は認めない.USBメモリ (Type A)が使えることを確認しておくこと.

平成30(2018)年度 東京大学大学院情報理工学系研究科 創造情報学専攻 入試案内書

2017年度まで注意事項にはファイルの文字コードや改行についての情報があったのですが、この記述も削除されています。なぜなのでしょうか……。

その他、筆記試験免除制度など創造情報学特有の制度が廃止されてきています。創造情報学専攻は、開設当初は秋葉原にキャンパスを構えるなどユニークな専攻でしたが、2013年に弥生キャンパスに移転し、口頭試問の出題形式が変更されるなど、よくも悪くも他の専攻との差がなくなってきているように思います。