naoppyの日記

自分が欲しいなと思った記事を書きます。

京都大学情報学研究科 データ科学コース 院試 合格体験記

データ科学コースは非常に新しいコースで、私が受験した年(2024)で3期目だと思います。知見が無いと思うので書きました。出願を悩んでる人に届け~。

まとめると「対策が得点に確実に結びつく」「とりあえず出願しとけ」です。何故そう思ったのか書いていきます。

出願の経緯

出願時は東大工学部の4年生でした。東大の院試がかなり難しいので、他の大学も滑り止めで受けたほうがいいのかなと考えていました。 東工大, 京大, 阪大あたりを調べ、興味のある研究室がある京都大学情報学研究科データ科学コースを見つけました。

私自身は東大の院試一本でやる気でしたが、心配した親が一応出願するように言ってきたので、受けるかは置いておいてとりあえず出願しておきました。

TOEFL

出願時にTOEICTOEFLのスコアを提出する必要があります。東大がTOEFLオンリーなのでTOEFLスコア(74/120点)を提出しました。 TOEFLの対策などは3年後期学期が終わった後からしていて、3月~4月に受験する人が多かった印象です。それより遅いと提出が間に合わないと思います。 ただTOEFLは円安の影響をモロに食らってとんでもなく受験料が高騰しており、基本的に1, 2回しか受けることができないので注意が必要です。 TOEICはその分試行回数を稼げるので、どっちがいいんですかね…?

試験対策

全くしていません。

前述の通り受けるか決めずにとりあえず出願していました。試験の5日前ぐらいにホテルのキャンセル期限が来たので、そのタイミングで受けることを決めました。

データ科学コースは新しいコースで過去問が存在しませんでしたが、試験内容は知能情報学コースと(ほぼ)同じです。 知能情報学コースの過去問は3年分が公開されています。それ以前の問題は私は見つけられませんでしたが、インターネット上にあるかもしれません。

試験2日前に去年の過去問を、前日に一昨年の過去問を解いてある程度の傾向を把握しました。

知能情報学/データ科学 コースの問題傾向

直近3年分しか知りませんが以下所感です。

全体の傾向として、授業でやる小テストのような凝っていない単独問題が大量に出ます。 知っていれば楽に解けるし、知らないと解けません。よって対策としては過去問をとりあえず多く見て出題範囲を特定することが大事です。 知識ゲーなのに凝ってないって、いったいどうやって差をつけるんだ…?

共通数学

線形代数、多重積分微分方程式など。ミスをせず、解き方を悩むことなく手を動かして解くことが大事だと思います。特段の対策はいらないと思いました。

共通アルゴリズム

ヒープソート、二分探索木、グラフアルゴリズム(だいたい最短経路問題)、DP(動的計画法)などがでます。出るアルゴリズムの範囲は一般的なアルゴリズムの教科書で学ぶ内容だと思います。ダイクストラ法を手動で再現せよ、二分探索木の動作を手動で再現せよ、などしょうもなすぎて萎えるような問題もでます。院試にそんなん出すな!

専門科目

データ科学コースは統計学情報理論、信号処理、機械学習の4科目から2つを選択です。機械学習だけは地雷なので選択しないほうがいいと思います。一般論というには怪しい、特定の教員の作った授業資料暗記ゲーに私は見えました(私だけ?)。私は録に対策していなかったので、統計学情報理論を受けることに初めから決めていました。

選択科目は最初から科目を決めて勉強するほうがいいのか、全科目解けるようになっておいたほうがいいのか悩むかもしれません。 私の意見としては、データ科学コースに限っては科目を決めて勉強でもいいと思います。

どの科目を選ぶのが良いかは完全に好みです。以下、科目ごとの所感です。

統計学

検定が出る。z検定、t検定など。知らないと絶対解けないデメリットあり。知っていると爆速で解けるので、他の問題に時間を回せるメリットがある。

情報理論:

符号理論、パリティ検査行列、通信路容量、エントロピーなど。計算が非常に重いので解くのに時間がかかるし、ミスが怖い。一方で出題範囲が安定しており、対策をすれば確かな得点源になりそう。

信号処理

あまり見てませんがフーリエ変換とかz変換とかですかね?よく知らないです。割と簡単そうな気がしてます。

試験当日

前泊したホテルにタクシーを配車してもらい、当日はタクシーで向かいました。京都のバスは夏休みの観光客で乗れなかったり、乗り間違えるリスクが高いので行きはタクシーがおすすめです。 そこそこ早く行ったらなんと受験会場の建物が開いておらず、多くの人が外で京都盆地の暑さに焼かれていました。あまり早く行きすぎるのはやめましょう。

知能情報学コースと受験問題が共通?なので知能情報とデータ科学は同じ部屋で受験しました。

試験問題は傾向通りで、共通数学の線形代数が難化していたので逆にありがたかったです。

なんと京大は途中退室が可能でした。知らないと解けない問題は捨てて退室し、鴨川まで歩き夏を感じてから帰りました。帰りにバスを乗り間違えて新幹線を逃しかけました。あぶない。

なお、データ科学コースは面接試験がありませんでした。

合格発表

合格発表が割と早いのがありがたいです。募集人数が16人なのに秋入学含めても12人しか受かってなくてびっくりしました。 他のコースは定員以上に取っているので、データ科学コースは特異です。 なお、出願人数は57人なので合格率は20%強といったところでしょうか。

追記

合格発表から2日後に郵送でどの研究室に配属されたか等の書類が届きました。第一志望に受かってました。

まとめ

単独問題が大量という形式なので、ある程度対策をすれば安定して点が取れます。

実は、京大の大学院は中国人留学生が大量に受けていて日本人が少ないです。受験会場も外国人(ほぼ中国人)が多かったです。 いい大学院だと思うので、是非日本人が (別の大学院と併願でもいいので) もっとたくさん受けてほしいなと思いました。おすすめです。

修正履歴 * 自分は1期目と書いてたけど全然3期目でした笑笑 過去問とかないし記事も見当たらないからどうせ1期か2期だと思ってました…

あたまの体操 楕円の軸並行矩形

傾いている楕円の外接軸並行矩形を計算するのは大変な気がする。 そこで、外接という条件を緩くして楕円を内包する軸並行矩形を計算することを考える。

まず、x2/a2+y2/b2=1がθ傾いている楕円の外接矩形は非常に簡単に、2a x 2bの矩形がθ (0<=θ<=pi/2) 傾いているもので与えられる。

傾いている楕円の外接矩形

そして、この矩形に外接する軸並行矩形を計算する。簡単な行列計算で、外接する軸並行矩形の一番上のy座標は y=asinθ+bcosθ、一番右のx座標は x=acosθ+bsinθ になる。

点対称なので、これで終わりだ。 次にこうして得られた軸並行矩形の評価に移る。面積をどれだけの比率で近似できているかを考える。

まず、楕円を矩形で近似した部分は楕円の面積が pi a b であるのに対し、矩形の面積が 4ab なので、比率は pi/4 である。 次に傾いた矩形を軸並行矩形に近似した部分は 矩形の面積 4ab に対し、軸並行矩形の面積が 4(acosθ+bsinθ)(asinθ+bcosθ) なので比率は ab / {sinθcosθ(a2+b2) + ab} となる。 これはθ=0, pi/2 で最大値 1 をとり、θ=pi/4 で最小値 2ab/(a+b)2 をとる。これがよろしくない。a=bのときは1/2で済むが、|a-b|が大きくなればなるほど、悪化してしまう。 まとめて、楕円からすると、比率にして (pi/4) * ab / {sinθcosθ(a2+b2) + ab} となる。

aとbの差がそこまで大きくない、傾きの小さい楕円ならいいが、45度に近い楕円だとa=bでも円より1/2の面積率になり、a<<bの極限では0になってしまう。

では次の方法、直接外接する軸並行矩形を楕円から計算することを考えるが、これはまだ考えてないので誰か考えてみてください。

円と軸並行矩形の当たり判定 (Circle to AABB)

先に結論を書きます。 円を中心が (x, y) 半径 r で軸並行矩形の中心が (cx, cy) 横幅が w 縦幅が h とすると、

bool HitTestCircle2AABB(float x, float y, float r, float cx, float cy, float h, float w)
{
    float dx = std::max(0.f, std::abs(x - cx) - w);
    float dy = std::max(0.f, std::abs(y - cy) - h);
    return dx * dx + dy * dy <= r * r;
}

導出

イデア1

idea1

赤の長方形+青の長方形+緑の円4つで判定する

尤も単純な方法。円の個数が多いので効率が悪い。 図形の左右及び上下の対称性に注目して効率化を図る。 絶対値をとることで右上のみに限定させると以下が得られる。

イデア1 (改良ver)

idea1(improved)

これで赤い長方形+青い長方形+緑の円1つになった。

イデア1はこれ以上改良できない(たぶん...)

では、アイデア2を紹介する。

イデア2

円の中心から 最も近い軸並行矩形の外周との距離を求めて、半径以内ならOK。とする。

idea2

この最近傍点からの距離って求めるのが難しそうな気がしたんですけど(僕だけ?凸射影みたいなのって大変そうなイメージがった)流石に図形が単純なので、最近傍点やそこへの距離は簡単に求まります。

例えば x軸での最近傍点までの距離 dx は

max(max(0, x - (cx + w)), max(0, -x + (cx - w)));

で求まります。 dyも同様に計算して、 dx2+dy2<=r2の判定だけで終わります。

イデア2 (改良)

maxは可換で結合則も満たす(可換半群)ので順番を入れ替えて

float dx = max(0, max(x - (cx + w), -x + (cx - w)));

max(x - (cx + w), -x + (cx - w)) という部分は加減算が4回あるわけですが、第一引数と第二引数の符号の不変部分と反転部分に分けると (x - cx) は反転して、-w は不変であることがわかります。 よって、

float hoge = x - cx;
float dx = max(0, max(hoge - w, -hoge - w));

とすれば加減算を1回減らせますね。 さらに、max(z1 + w, z2 + w) == max(z1, z2) + w より

float hoge = x - cx;
float dx = max(0, max(hoge, -hoge) - w);

までできます。 max(z1, -z1) == abs(z1) より、

float dx = max(0, abs(x-cx)-w)

までできました!もちろんこれはアイデア1の改良と同じく対称性を利用しただけなので最初からこれ思いついとけよって話ですね。何を長々と解説してるんだという話ですが、言い訳をさせてください。 最初私は min(max(0, ...), max(0, ...)) だと思い込んでいて、その場合の式変形はこのプロセスを通らないとかなり難しいです。そして意気揚々とこの記事を書いたところ、max(max(0, ...), max(0, ...))であることに気付いて全部修正した結果、こんな駄文を書き連ねることになってしまいました。かなしいね。 最後まで読んでいただきありがとうございます。

おまけというか、軸並行矩形(AABB)の実現の2種類についてちょっと触れておきます。 AABBを中心と幅で持つ方法と、対角線上の2点の座標(右上と左下)をもつ方法があると思います。 前者はオブジェクトが頻繁に動く際、中心位置のみの更新なので楽です。 後者の場合、直感的にオブジェクトを配置することができますが、移動がある場合2点とも更新なので面倒です。 当たり判定処理に関してはほぼ変わりません。 個人的には中心と幅を持つ方がいいかなと思います。

クーポンコレクター問題を解き明かす!

この記事は 物工/計数 Advent Calendar 2023 - Adventar の一部として書かれたものです。 数式部分に興味のある方は前半を飛ばしてください。

導入

ずんどうねこって知ってますか?

ずんどうねこ

この可愛すぎるキャラクターはずんどうねこと言い、とっとさんのTwitterで毎日更新されています! 僕はずんどうねこを3年以上前からかなり推しているのですが、今年とても嬉しいことが起こりました。

なんと、かわいすぎるラバーストラップ(全6種)が一回300円のガチャガチャに登場したんです!!!!!!!! これは集めるしかない!!!と僕と彼女は池袋へ繰り出しました。

ご飯屋さんの待ち時間に、全6種をコンプリートするのにかかるお金の期待値について考えていました。 これはクーポンコレクター問題です。 クーポンコレクター問題とは、N種類あるクーポンを全てコンプリートするために、何回購入しないといけないか?という問題です。 詳しい定式化は後程します。 かかるお金はコンプリートするのにかかる回数の期待値x300円で出せますね。 ご飯屋さんの待ち時間の間に頭の中で解けて、期待回数は14.7回、かかるお金の期待値は、4410円となります。 たった6個のガチャでも15回程度かかるんだ…ガチャコワイってなりつつ、次のアイデアが湧いてきました。

「彼女と来てるんだから、お互いの出なかった分を分け合えば二人の期待回数の和は減るのでは?」というものです。 これはクーポンコレクター問題の拡張版で、N種類のクーポンをmセット集めるときの回数についての問題となります。 これはマルコフ連鎖で解けそうだなというところまで考察しましたが、その時は具体的な解を得られませんでした。

ここまで気持ちを準備して、いざガチャガチャ屋にいくと…

売り切れてました~~~~~~~~~~~~~~~~~うわあああああああああああああああああああああ

後でクーポンコレクター問題について調べていくと、確率論の基礎的な内容が詰まったおもしろい話だったのでここにまとめる次第です。

大まかな定式化

ここから数学パートです。

クーポンコレクター問題とは、 N 種類のクーポンがそれぞれ、確率  p_i で出現するときに、クーポンをコンプリートするまでに買う必要のある回数の確率や期待値について考える問題です。 クーポンは以下、 {1, 2, \dots, N} としてよく、 \sum_{i=1}^N p_i = 1 です。 クーポン列が与えられるときにいくつまで見れば全て出現するかと言い換えることもできますね。

このクーポンコレクター問題はいくつかの種類にわけられます。

  • すべての確率が等確率の場合
  • 確率がそれぞれ異なる場合 (レアなクーポンがある場合)

また、問題の拡張として

  • クーポンがいくつかのまとまりで来る場合
  • クーポンを1セットではなくmセット揃える場合

などが考えられます。 以下ではそれぞれの場合について、期待値の証明などを与えます。

1セット、等確率の場合

 X を確率変数で、1セット揃うまでの購入回数とします。  X_i を確率変数で、  i-1 種類揃っている状態で、 i 種類揃うまでの購入回数とします。

明らかに  X = X_1 + X_2 + \cdots + X_N ですね。

 X_i は独立なのは明らかです。  X_i について、 i 種類目を得る確率は  \frac{N-i+1}{N} ですので、 X_i はパラメータ  \frac{N-i+1}{N} の幾何分布に従います。

よって、

 
    E[X] = E[X_1] + E[X_2] + \cdots + E[X_n] \\
              = 1 + \frac{N}{N-1} + \frac{N}{N-2} + \cdots + \frac{N}{1} \\
              = N \left(\sum_{i=1}^N \frac{1}{i}\right)

となります。

他、マルコフ連鎖を用いても証明できますが、その場合方程式を解くのが面倒なのでこちらが楽です。

その他の話題として、 \sum_{i=1}^N =  \frac{1}{i} N \rightarrow \infty の時、

 
    \sum_{i=1}^N \frac{1}{i} = \log (N) + \gamma + \frac{1}{2N} + O\left(\frac{1}{N^2}\right)

となるので、

 
    E[X] = N\log (N) + N\gamma + \frac{1}{2} + O\left(\frac{1}{N}\right) \qquad (n \rightarrow \infty)

1セット、等確率ではない場合

 X_i を確率変数で、種類 i 番目のクーポンを最初に得るまでに必要な購入回数とします。  X を確率変数で、すべてのクーポンをそろえるのに必要な購入回数とします。 明らかに、 X = \max (X_1, X_2, \dots, X_N)ですね。 また、 X_i はパラメータ p_i の幾何分布に従います。 今問題なのは、各  X_i は独立ではないということです。何故なら、例えば  X_i = 1 なら最初にクーポン  i が出たということなので、他の  X_j は1になりえないからです。 よってmaxを簡単にとれません。 ここで重要な考察として、 i \neq j のとき \min(X_i, X_j) は パラメータ  p_i + p_j の幾何分布に従う確率変数になります。3つ以上のminも同様になります。

ここで、Maximum-minimums identityという恒等式を紹介します。確率変数  X_i について、以下の恒等式が成り立ちます。

 
    \max (X_1, X_2, \dots, X_n) = \sum_{i=1}^N X_i - \sum_{i < j} \min(X_i, X_j) + \sum_{i < j < k} \min(X_i, X_j, X_k) + \dots + (-1)^{n+1} \min(X_1, X_2, \dots, X_n)

これ知りませんでした…。これを使って、maxをminに書き換えます。それぞれのminは幾何分布に従うことは説明しました。これでmaxの期待値をminを使って計算できますね!

 
    E[\max (X_1, X_2, \dots, X_n)] = \sum_{i=1}^N E[X_i] - \sum_{i < j} E[\min(X_i, X_j)]+ \sum_{i < j < k} E[\min(X_i, X_j, X_k)] - \dots + (-1)^{n+1}E[ \min(X_1, X_2, \dots, X_n)]\\
= \sum_i \frac{1}{p_i} - \sum_{i < j} \frac{1}{p_i + p_j} + \sum_{i < j < k} \frac{1}{p_i + p_j + p_k} - \dots + (-1)^{n+1}  \frac{1}{p_1 + p_2 + \cdots + p_N}

まだ汚いですね。ここからさらに変形していきます。

 
    \int_0^\infty e^{-px} dx = \frac{1}{p}

 
    1 - \prod_{i=1}^N (1 - e^{-p_i x}) = \sum_i e^{-p_i x} - \sum_{i < j} e^{-(p_i + p_j)x} + \cdots + (-1)^{N+1} e^{-(p_1 + p_2 + \cdots + p_N)x}

を使って

 
    E[X] =  \int_0^\infty \left( 1 - \prod_{i=1}^N (1 - e^{-p_i x}) \right) dx

となります。

これも、天下り的に指数分布とポアソン分布を使う天才的な証明もあるようなのですが、そちらは参考文献をご覧ください。

mセット、等確率の場合

m=2, N=6の場合が導入で述べた状況に相当しますね。

 p_i i 個購入したがmセット揃わない確率とします。  X を確率変数で、mセット揃うのに必要な購入数とします。

すると、

 
    1 - \prod_{i=1}^N (1 - e^{-p_i x}) = \sum_i e^{-p_i x} - \sum_{i < j} e^{-(p_i + p_j)x} + \cdots + (-1)^{N+1} e^{-(p_1 + p_2 + \cdots + p_N)x}

を使って

 
E[X] = \sum_{i=1}^\infty i (p_{i-1} - p_i) = \sum_{i=0}^\infty p_i

という関係が成り立ちます。

では、 i 個購入したがmセット揃わない確率である  p_i はどう表せるでしょうか?  p_i = i 個買ったが、どれかがmセットに満たない場合の数 / Ni ですね。

 i 個買ったが、どれかがmセットに満たない場合の数は、

 (x_1 + x_2 + \cdots + x_n)^i

の展開した後、どれかの指数の肩にm以上の数が乗っている項を消したあと、すべての  x_i に1をいれたもの。といえます。

後程の議論を楽にするために、以下に定義する記号を使います。

 \{P(x_1, x_2, \dots, x_n)\}

これは多項式Pから全ての i について、 x_i の指数部分がm乗を超えるものを除いた多項式のことを表すことにします。

さて、 S_m(t) を以下で定義します。

 S_m(t) = \sum_{k=0}^{m-1} \frac{t^k}{k!}

そして、以下の式を考えます。

 F = e^{x_1+x_2+\cdots+x_n} - (e^{x_1} - S_m(x_1) \times \cdots \times (e^{x_N} - S_m(x_N))

Fを x_i多項式だと思うと、Fは x_i 全ての指数の肩がm以上の項を含まないことがわかります。しかし、Fはいくつかの i について  x_i のm乗を超える項を含んでいます。 つまり、

 F = \{e^{x_1+x_2+\cdots+x_n}\} = \sum_{i=0}^\infty \frac{\{(x_1+x_2+\cdots+x_n)^i\}}{i!}

ですね。

最後のパーツとして、以下の式が成り立ちます。

 N \int_0^\infty \frac{t^i}{i!}e^{-Nt} dt = \frac{1}{N^i}

これは部分積分して漸化式を解くと正しいことを示せます。

これらを用いて、


E[X] =  \sum_{i=0}^\infty p_i =  \sum_{i=0}^\infty \frac{\{(x_1+x_2+\cdots+x_N)^i\}}{N^i} \\
= \sum_{i=0}^\infty \left( \{(x_1+x_2+\cdots+x_N)^i\} N \int_0^\infty \frac{t^i}{i!} e^{-Nt} dt \right) \\
= N \int_0^\infty \sum_{i=0}^\infty \left( \{(x_1+x_2+\cdots+x_N)^i\} \frac{t^i}{i!} \right) e^{-Nt} dt \\
= N \int_0^\infty \left[ e^{tx_1+tx_2+\cdots+tx_n} - (e^{tx_1} - S_m(tx_1) \times \cdots \times (e^{tx_N} - S_m(tx_N)) \right] e^{-Nt} dt

さて、すべての  x_i に1をいれることを思い出して、1をいれて評価します。


E[X] = N \int_0^\infty \left[ 1 - (1 - S_m(t)e^{-t})^N \right] dt

が得られました!

これが答えなのですが、これだとどれくらい大きいかわかりずらいので、 N \rightarrow \infty で評価をすると、 E[X = N \left( \log(N) + (m-1)\log \log (N) + C_m + o(1) \right)] となるらしいです。 逆に、  m \rightarrow \infty で評価をすると  mN になります。これは直感的ですね!

では最後に具体的に計算してみます。導入で述べたN=6, m=2の場合だと、24.1回。一人当たりだと12回なので、N=6, m=1の場合の14.7回よりかなり改善しています。一人800円ほど安く済む計算になりました。

その他、マルコフ連鎖でも解けますが、m, Nが小さいときじゃないと難しそう…。

ここまで読んでくれた人、ありがとう!

参考文献

https://mat.uab.cat/matmat_antiga/PDFv2014/v2014n02.pdf

TSGCTF Write-Up

TSGCTF2023に参加してました。僕と学科のCTF初心者の方と出て32位でした! 1位や3位の方はソロらしく、流石ですね。

問題の難易度が思ったより高く、Cryptoをメインに解いてました。CTF楽しいね。

Upside-Down Cake (Web, Beginner, easy)

1000文字以上の回文を送信すればいいのだが、送信できるデータ量に制限がある。回文チェックはnodejsで行われており、javascriptのガバガバ仕様を使って回文判定をすり抜ける。

const palindrome = {
    length: "1000",
    0: "a",
    999: "a"
}
const res = await fetch('/', {
    method: 'POST',
    headers: {'Content-Type': 'application/json'},
    body: JSON.stringify({palindrome}),
});
await res.text();  // TSGCTF{pilchards_are_gazing_stars_which_are_very_far_away}

Unique Flag (Crypto, easy)

flagが33文字でuniqueであることがわかっている。TSGCTF{}で8文字わかっているので、25文字がわからない。 処理を読むと25文字の中で隣接している文字の組の候補がわかる。 uniqueかつ隣接している文字の組の候補を使って25文字で作れる文字列を全部列挙して、人力でflagっぽいのを見つけた。

TSGCTF{OK,IsTHi5A_un1qUe-flag?XD}

Graffiti in the Fog (Misc, easy)

u_i, v_iが知りたいのだが、処理を読むと、u_i * vecs[0] + v_i * vecs[1] * 5 + (-250~250) * vecs[2] + (-250~250) * vecs[3]と4次元直交ベクトルvecsを使った和になっている。 よって主成分分析(PCA)で分離してやればu_i, v_iがでてくる。

ところで画像のUがx, Vがyに対応するのが普通なのにこの問題は逆になってた。そんな流派あるんか…? 授業でPCA習ったばっかだったので進研ゼミでやったとこだあああになった。

flag
読みにくいけど、TSGCTF{CARRY_A_FLASHLIGHT_WHEN_YOU_WALK_AT_NIGHT}

この問題はkeymoonの次に解いたので、2番目に解けた。全体で5人しか解いてなかったのでウレシイ。

感想とか

Converter, Converter2(Pwn)は解法は全部わかったんだけど具体的にどれだけメモリアドレスを動かしてNULL文字を破壊すればいいのかがわからず解けなかった、くやしい… Rev, Pwnあたりはツールの使い方がわからず全然解けなかった。 Q??odeというQRCodeの問題のfirst-bloodを狙ったけど無理だった、結局keymoonだけが解いててちいかわになっちゃった。 他のcrypto問はメンバーの方が解いてくれました。

また参加してぇ~!次回はメンバーをもうちょっと集めてわいわいしたい。

【令和四年度】阪大基礎工 編入試験 まとめ

令和四年度、大阪大学基礎工学部 情報科学科 ソフトウェア科学コースの編入試験を受験しました。 前日~試験当日について書いていきます。

今年は計算機コースを6名、ソフトウェアコースを10名が受験していました。 明石高専からは内6人が受験しました。

受験の経緯

明石高専からは毎年多くの人が大阪大学を受験し合格しています。 また、東大は流石に難しすぎで、京大は化学を受験しなければいけないため、阪大に決めました。

基礎工学部と工学部はやってる内容的に基礎工学部にしました。

前日

阪大へは阪急蛍池駅からモノレールで1駅なので蛍池東横インに泊まりました。 しかし蛍池から10分以上歩かなければならなかったため最悪でした。

ホテルを取るなら大阪梅田駅周辺のホテルを取って、当日にがっつり阪急で阪大付近の駅まで行くのが良さそうです。

筆記試験

一日目は筆記試験です。日程は以下の通りです。

f:id:naoppy_ac:20210712160605p:plain
阪大基礎工テスト日程

基礎工は受験するコースや学科によって、専門科目の有無や物理の問題数が変わるという特徴があります。

ソフトウェアと計算機コースは今年から専門科目が無くなりました。

英語

大問1 和訳 簡単でした。

大問2 長文読解 難単語の意味を4択で答える問題が多く、失敗しました…。単語力が足りませんでした。

大問3 英作 破滅しました。

数学

数学は2時間も与えられているのですが、3問しかありません。また、それらも小問数が2つや3つなので一つ一つに時間を使えます。

大問1 微分方程式

初期値が与えられたベルヌーイ型方程式を解く。そのあとx->infの極限での値を求めるのと、ある与えられた条件の時に単調関数であることを示す問題でした。

ベルヌーイ型方程式ではなくただの変数分離形だと考えて部分分数分解で解いている人も多かったです。大問1はとても簡単でした。全員10割

大問2 行列

(1) 行列Aがxy平面のθ回転行列、行列Bがzx平面でのφ回転行列であるとき、行列C=ABの行列式の値を求めよ。

明らかに1です。

(2) Cの全ての固有値とその絶対値を求めよ。

まさかの、全て愚直に丁寧丁寧丁寧に計算するだけという問題がでました。流石に綺麗な解き方があるやろと考えてしまい、解けませんでした。

ただ、固有値の絶対値が1以外にありえないことは示せたので部分点でなんとか…という感じです。 阪大基礎工らしからぬ、変な問題でした。また、小問が2つしかなかったのも悲しかったです。

大問3 確率

確率pで表が出るコインAと確率(1-p)で表がでるコインBに関しての問題がでました。

(1) AとBを同時に投げるとき、両方表の確率

(2) AかBあるいはその両方を使って、選手の権利を与える抽選を行う公平な方法を考案せよ。

これが難しかったです。とりあえず書きましたが、部分点がどれだけもらえるのかわかりません。

(3) 復元抽出でAとBのどちらかをランダムに選んでn回投げて、全部表だったときに、投げたコインが全てAであった確率。

ただのベイズの定理です。

総評として、数学は簡単な問題と難しい問題がはっきりと分かれており、しょうもない大問2-2で差がついてしまうというゴミ回でした。

物理

大問1 剛体振子と、上に滑車がついた場合の剛体振子

上に滑車がついた場合の剛体振子の運動が難しすぎてがっつり破滅しました。どうやら名門の森シリーズのやつにあったらしい?です。

大問2 交流発電機?

コイルを回転させてできる電界を求めるやつ…なのかな?解いていないのでわかりません。

大問3 熱力学 気体運動論とスターリングエンジン

大問の中で更に大きく2つに分かれており、前者は気体運動論に従って分子1個あたりのエネルギーを計算し、単原子理想気体の定積モル比熱などを計算しました。 また、二原子理想気体の自由度についても軽く聞かれました。

後者はスターリングエンジンの効率などに関する計算でした。効率の定義を忘れていたのですが、効率の定義はこうであってほしいなというように考えて書いたら合ってたみたいです。

さらに、スターリングエンジンの定積変化の部分に使う熱を再利用する場合に効率がどうなるかという問題がでました。(カルノーサイクルの効率と一致し、理論的最高になる。)

熱力学は10割いけました。

面接

面接はコースごとに行われます。計算機コースとソフトウェアコースは同じような場所で面接を受けましたが、一応面接室などは別でした。

各コース名前順に面接が始まります、聞かれたことは

  • 志望理由
  • どんな研究に興味があるか

だけでした…。その後すぐに口頭試問が始まり、8分以内に大問1と、大問2の3つの問題から1つを選択して解答せよとのことでした。

大問1

二分探索と線形探索の計算量やアルゴリズムについて説明せよ。

にぶたんは流石にできました。

大問2-1

ネットワークプロトコルの階層構造の利点と欠点について説明せよ。

大問2-2

プロセッサの発展と今後の展望について思うところを述べよ。(これは問題文覚えてないので怪しいです)

大問2-3

公開鍵暗号についての概要説明と簡単な実例の提示をせよ。

私は大問2-1を選択しました。とりあえずOSI参照モデルを全部書いて説明したあと、利点と欠点について適当に考えて言いました。 まあ悪くはなかったと思います。

結果

不合格でした…。明石高専から計算機コースとソフトウェアコースを受験した6人中、2人が受かっていました。 彼らは東大合格者です。

クラスからは基礎工に9人が出願しましたが、結局その2人以外に合格者はおらず、本命の人は誰一人受かっていませんでした。

編入は魔境。

まとめ

今年の阪大基礎工は数学の問題がとにかく微妙で大変でした。また、力学も難しかったです。

面接と調査書は満点のはずなので、そこの比重はかなり軽いと思われます。

悔しい~~~~~~~~~~~~~~~~~~~~!!!!!!!!!!!!!!!!!

【令和四年度】東京大学編入試験 まとめ

令和4年度東京大学工学部 計数工学科を志望して受験してきました。 勉強法などではなく主に前日〜受験までの流れを書いて行こうと思います。

簡単な自己紹介

明石高専電気情報工学科、TOEIC875点、プログラミングとか好き

受験の経緯

4年次の夏休みから、大阪大学基礎工学部 情報科学科を志望して勉強していました。

5年生の4月末ぐらいに、「俺って東大行けるんじゃね?WowWow」という気持ちが湧き上がり、急いで過去問請求をしました。

過去問は難しかったので受験までに3年分と少ししか解けませんでしたが、傾向を知るには充分でした。

前日

フォーレスト本郷に泊まりました。東大編入受験者のほとんどがこの宿と言ってもいいぐらい高専生だらけでした。

東大の正門に近く、アメニティや冷房、机や照明もしっかりしていたのでおススメです。ただ、周りの駅からは遠いので行き帰りは少し大変です。

一次試験

受験科目などは以下の通りで、英語、数学、物理or化学の順でした。

解答用紙が回収されるのに15分ぐらい待たされます。受験の10分前には参考書をしまう必要があるので休み時間は短かったです。

英語

大問は3つあり、内容も例年通りでした。

大問1 和訳 Zoom疲れやその原因について

大問2 英訳 量子コンピュータについて、それがもたらす社会への影響

大問3 長文読解 微生物や細菌の種類について、その種類の測定法

英語は簡単とまでは言いませんが、難しくはなかったです。

数学

大問は4つで2時間、今年はすごく難しかったです。

大問1 特殊な微分方程式

誘導に従って解きます。 最後の極限値を求める問題は飛ばしました。

大問2 確率

ベイズの定理が出ました。 薬の副作用がでる確率、副作用の検査キットが間違った結果を出す確率から偽陽性率的なのを計算したりするやつでした。

途中から総和を求める部分でシグマを使うべきなのに必死に積分して爆死しました。アホすぎる…w

大問3 複素関数

A6=iとなる複素数6つを三角関数を用いず書けというとんでもないクソ問がでました。その後は普通に留数定理でしたが確率で精神を壊していたため、場合分けを忘れて爆死しました。

大問4 行列

対角成分がa、それ以外が1の行列の行列式やら固有値やら固有ベクトルを出させる問題でした。後は上三角行列の逆行列がでました。

どれも誘導0で自分で解く必要があり、普通にわからなかったです。

物理

大問1 剛体の力学

剛体球が斜面を滑り落ちる問題でした。 剛体の問題の集大成といえるような内容でした。普通に難しかったです。

定石である摩擦をFとおいて運動方程式と回転の運動方程式からFを消して~というのができれば解ける問題です。

滑り落ちない条件や、球は転がるけど円筒は転がらない(逆かも)場合の条件などが応用としてでました。

大問2 電磁気

銅線の上で導体棒を動かすときの誘導起電力などを計算する、典型的な問題が出ました。

磁束の時間微分が起電力であることから求めます。 棒に働く力(ローレンツ力)などあるあるがでました。

最後のほうに抵抗の代わりにコンデンサをつなぐとどうなるかが出ました。微分方程式を立てて解ければできます。

また、導体棒が2個になり、片方は放置し、他方を一定速度で近づける場合に放置されてる棒の速度が時間とともにどうなるかという問題がでました。 これも微分方程式を立てて解くとVo(1 - e-at)のような解がでたので、おまけにグラフも書きました。

10割いけたと思います。

大問3 マイケルソンモーリー干渉計とマッハツェンダー干渉計

な~~~~~~~~~~んもわからない!!!!!!!!

小問1がまずわからなかったので白紙です。その代わり得意な大問2にたくさん時間を使いました。

結果

一次試験に合格していました。一次試験を合格した人は20名いました。

ちなみに自分のクラスからは私を含めて4人受かっていました。バケモンでワロタ。

この段階では自分が第1志望に合格したのか第2志望に合格したのかはわかりません。

二次試験

ある程度の時間帯は指定されて行きます。面接官はL字型に並んでおり、15人ぐらいいました。

時間は一人当たり10分ほどです。

質問内容はほとんどが事前に提出した志望理由書から聞かれます。聞かれた内容は

  • 志望する学科名と志望動機
    • 緊張で計数工学科って言えなかった説があって怖い。
  • 最小記述長原理について説明して(紙の志望動機に書いてた)
    • 少し詰まったけど耐え。
  • 上に対して、それはどういう時に使うのか
    • うろ覚えだったので適当に言った。
  • データ構造やアルゴリズムを学んだと(志望理由に)書いてるけど、例えばどういうのを学んだ?
    • SA-ISがO(N)なことに感動して調べて理解した話を喋ったらウケが良かった。
  • 数理情報コースとシステム情報コースがあるけど数理の方に興味があるってこと?
    • はい。(話が早くて助かる!)
  • 何を学びたいか(うろ覚え)
    • プログラムの数理や機械学習の数理、統計など。統計は必要性を認識していて、受験後にでもすぐに自分でがっつりやる予定と、自主性と意識の高さをアピール。
  • 得意な教科と苦手な教科
    • 得意なのは電磁気、苦手なのは物理の光学や機械系。
  • 英語が苦手って志望理由書に書いてるけど、TOEICは高いのは何で?
    • スピーキング能力に限界を感じた。
  • 試験の出来や感じたことを教えて
    • 物理の三問目が何もわからなかったが、後で調べたらマイケルソンモーリー干渉計だということが分かったと、試験後に振り返ったアピールをしつつ言い訳した。
  • タイに行って学んだことに何がある?(志望理由書に書いてた)
    • 上手く答えられなかった。友達とかはできなかったの?と言われたのでSNSで中国やアメリカの方と仲良くなり、チャットしてますと言い訳。

などです。志望理由書にかなり具体的に書いた僕個人の話が聞かれてるので、他の人はあまり参考にならないと思います。

面接官は多いのですが、実際に質問するのは3人ぐらいです。 志望動機、試験の出来、得意な教科と苦手な教科などを聞く全体の進行役の人と、専門的なことを(少し試す感じで)聞く志望学科の教授と、気まずい時に喋るあと1人という感じです。

基本的にはハキハキ答えながら、志望理由書に書いた専門的な話は付け焼き刃ではないか、今の社会課題などを認識しており自分の考えを持っているか、やりたい研究や東大に入ってからのビジョンは明確か、などが問われそうです。

志望理由書からがっつり聞かれるので自分の書いた志望理由書は絶対にデータをとっておき、それをもとに対策しましょう。

結果

計数工学科に合格していました。

支えてくれた友人、Twitterにて励ましであったり、教材をギフトで贈ってくださった方々本当にありがとうございました。

これからも精進して参ります。