立命館合宿1日目

集合 遅刻

集合時間に少し遅れて登場.メンバー決めが既に始まっている.Div1とDiv2で分かれてユニットを作って合成して...みたいなフェーズらしい.

でも膠着状態っぽかったので「組んでくれる人!!ノ」って言ったらショラーさんが声かけてくれて,あと一人Div2のほうで声をかけたらぷよぽっぷさんが参加してくれた.

ということでメンバー@puyopop6,@shora_kujira16でチームAccountSheetで参加していました.

コンテスト

勢いよくコーディング始めてもよかったけど,せっかくなのでまったり解けそうな問題を各々が解くみたいな感じで.

AとかなんかWAするので,紙デバッグしたりして,いろいろやっていた.むずみがあった.

BとかもなんかWAするので(ry

Cは題意知らないけど,はやい段階で圧倒的ACして頂いてサイコー.

全体的にしょらーさんが助言に徹し,ぷよぽっぷさんが最初のほうの問題をやっつけてくれる形になっていたのかな?

コンテストのぼく

僕はD解けねえなあって詰まっていたら,しょらーさんがやっぱ「こういう感じのDPだと思うよ」っつってくれて,考えなおしたらACした最高.

唯一担当したD時間かかりすぎたので罪滅ぼしにちょっと重い幅優先のEを13分くらいでやっつける.実装ゲーだけど僕はこういうの好き.

最後のほう

残った時間(55分くらい)でデータ構造のFを解こうと思うが,オイラーツアーをいろいろうにゃうにゃしてBITたくさん発生して面倒くさい面倒くさい!!って悲鳴上げてたらひと通り書き上げたところでコンテストが終わっていた.

コンテスト終了後,そのソースを少しだけ書き換えたらバグが取れて通りそうだった....もののスタックオーバーフローするように仕組まれていたらしく,スタックへの書き直しを急いでやっても6分くらいかかったので,はい間に合いませんでしたね...

感想

意外とFの解法思いついてるチームが少なかったので,Fをきちんと通せればもしかしたらオンサイト一位だったのかなーとかぼんやり思いつつ皮算用で終了.想定解法でした.

Gはちょっとよくわからなかった.問題を把握する前にコンテストが終了.

全体20位,オンサイトはよくわからない.個人の人にめっちゃ負けた.全体的にこの日はほとんどのチームがまったりしてた.指摘したり,他人の一声で解けたり,やはりチーム戦という感じで楽しかったしテンション上がった.

Competitive Programming Advent Calendar 2014 23日目 かんたん!永続化!

この記事は Competitive Programming Advent Calendar 2014 のために執筆されました。

想定読者:データ構造を知っている人,ポインタを把握している人


今回は,巷ではアレルギー反応を起こし,よくわからないという印象のまま過ごしている人が多く見受けられる,永続データ構造の基本的なところについて取り扱いたいと思います.

データ構造の永続化については,アイデアとして全然難しいとは思わないのですが,どうやらピンときてない人が多いみたいです.

この記事はC++で書かれていますが,あまり言語は重用でない気もするので適当に読み進めて下さい.

永続化を使うとどういうメリットがある?

・リアルタイムクエリーに簡単に対応できるようになる

・データ構造の大部分がどこかの部分からのコピーである場合に,コピー部分をうまく取り扱って省メモリ化・高速化できる

さて,永続化に適したデータ構造なのですが,変更が加わるノードが少ないデータ構造(例えば各操作の参照するノード数がO(log n)である平衡二分木やヒープ)は適しています.逆に単純なリスト等は適していません.

ただ,ならし解析で良い速度を実現するアルゴリズム(スプレー木,O(α^-1(n))のUnionFind等)とか,乱数の一様性を利用したデータ構造(Treap等)は,計算量が永続化によって変わってしまいます.

多分O(log n)のUnionFindは永続化できます.

では,実際にデータ構造を永続化していくアイデアを説明していきます.

基本的なポリシーは,「あらゆる操作(参照・削除・挿入)時,過去に生成された全てのノードはconstであるという条件下での操作を行う」です.

例)リストの永続化

 先ほど適していない,とは言いましたが,参照するノード数が少ない場合は早く動きます.

例えばスタックやキューを双方向リストを利用して実装した場 合,一回の操作で参照するノードはO(1)個なので,永続化できます.

 ちなみに,平方分割リストとかも参照するノード数が減るので永続化できると言っても良いのですが,省略します.

今回は,説明のためなので,単方向リストを永続化してみます.

それではさっそく実装していきます.まずは永続化なしの場合から.

実装の都合上,というか永続化すると,データ構造で最初に参照する場所(根ノードとか先頭ノードとか)はどこになんねんという問題がありますし,永続化する際大変便利なので,あるノードを計算した後,自身を返す再帰関数を実装しておきます.

#define NULL (0)
// 0-indexed

struct NODE{
	char val;
	NODE *next;
};
NODE *insert(NODE *node,int position,char value){
	if( position == 0 ){
		NODE *newNode = new NODE();
		newNode->val = value;
		newNode->next = node;
		return newNode;
	}else{
		node->next = insert(node->next,position-1,value);
		return node;
	}
}
int main(){
	NODE *head = NULL;
	head = insert(head,0,'a');
	head = insert(head,1,'b');
	head = insert(head,2,'c');
	head = insert(head,3,'d');
	head = insert(head,4,'e');
}

以上のような実装をすると,以下のようなリストが出来上がることは分かると思います.

f:id:kyuridenamida:20141223235918p:image

それでは,こうしてできたリストに対して,永続化に対応したinsert,ここでは一例として

head = insert(head,2,'f');

みたいな感じの挿入を行うことを考え,そのための関数immutable_insert()[※insertと永続化対応以外同等]を実装していきます.

ポリシーである,過去に生成されたノードはconstであるという条件を忘れずにやっていきます.まず,とりあえず関数の引数をconstにしちゃいます.

NODE *immutable_insert(const NODE *node,int position,char value){
	if( position == 0 ){
		NODE *newNode = new NODE();
		newNode->val = value;
		newNode->next = node; //こことか
		return newNode;
	}else{
		node->next = immutable_insert(node->next,position-1,value); //こことか
		return node;
	}
}

コメントの部分でコンパイルエラーが出ます.そこで,

NODE *immutable_insert(const NODE *node,int position,char value){
	//参照したノードは複製する
	NODE *copyNode = new NODE();
	copyNode->val = node->val;
	copyNode->next = node->next;

	if( position == 0 ){
		NODE *newNode = new NODE();
		newNode->val = value;
		newNode->next = copyNode;
		return newNode;
	}else{
		copyNode->next = immutable_insert(node->next,position-1,value);
		return copyNode;
	}
}

やったことは,const回避のためにnodeと全く同じなcopyNodeを複製しただけです.コピーは適当に関数とか実装して良いと思います.

このimmutable_insert()関数を用いて挿入操作

NODE *head2 = immutable_insert(head,2,'f');

を行うと,以下のような感じになります.

f:id:kyuridenamida:20141224000147p:image

(番号はわかりやすさのために勝手に振ってるだけです

なんでhead2に代入してるのかっていうと,更新したとき根の部分をどっかに保持しとかないとせっかく永続化したのに行方不明になっちゃうからです.別に用途によっては先頭とか必要ない場合も有るし,必要に応じてください.



さてさて,お次は木構造の永続化です.

平衡二分木は永続化でない部分が最高に面倒くさいので,今回は遅延評価付きセグメントツリーの永続化についてやっちゃいます.

(工事中 たぶんちょっとしたらできます)

[追記]

思ったより本質でない部分でコードが複雑化していて時間がかかりそう

第25回高専プロコン競技部門参加記

今さらですが書こうと思います.解法についての詳細は↓

http://www.slideshare.net/opuctplab/h25-40607479

第25回高専プロコン競技部門,府立大学高専で優勝しました.

メンバーは@refiute @kagasantwi @kyuridenamida,そしてコーチ役OBの@mecha_g3です(雑用してくれた後輩もいました).

@mecha_g3には開発において,アドバイスをいろいろもらったりめちゃくちゃ助かりました.彼のおかげと言っても過言ではないし,感謝しても感謝したりません.

書き忘れていましたが同時開催というか,NAPROCKという国際大会があって,一般大学も含んで一緒に全く同じ競技をしていて,それにおいては東大に負け2位でした.

東大に負けてしまいましたが,決勝があのサイズだったからギリギリ負けただけで,16x16だったら圧倒的に負けていたと思います.悔しいですが悔しいと思ってもとらぬ狸の皮算用みたいなもんです.

4月当初

うわICPCとプロコン被ってる,ということでICPCとプロコンにメールを送ったがさすがに対応はしてくれなさそう.高専プロコン5年皆勤したかったので,ICPC犠牲にする代わりに今年は勝とうと思う.

怪しいパーサーとソルバを作って放置.

4月~7月

受験

8月頭

受験の疲れで何もしてない

8月末

そろそろスライドパズルやんなきゃと思うけど適当な考察ばっかしてた

受験終わってなぜか英語の勉強とかしてた

9月中旬

そろそろ動かないとやばい,とりあえず画像ジグソーパズルソルバーの論文漁ろうみたいな気分になる

英語論文ゲッチュ,refiuteとkagasanを巻き込んで受験勉強の一環みたいなノリで全訳作業に当たる.そのときmecha_g3とかも手伝ってくれるビビる.

中間論文を書いていて血を吐いている

kagasanが復元可能判定のルーチンをささっと書いてくれたのでそれを組み込む.


9月下旬

愚直ソルバを作りなおす.どんなサイズでも多項式時間で解けるようになる

ビジュアライザとか作る.眺める.

愚直ソルバに少しダイクストラを用いたら劇的に改善する

画像パーサとかが形になる

定期的にミーティングする

中間論文を書いていて血を吐いている

10月上旬

スライドパズル議論の末いろいろ思いつく

ななめに埋めてみたりする

議論で,テーブル使う手法が上がっていたが実装が重いので後回し

適当なダイクストラを真面目にミーティングで議論したら,劇的に改善(ビビる)

中間論文発表死ぬ

10月中旬

改善なし,コンテスト直前,死ぬ

そろそろ複数手を用いた改善とかをミーティングする.

本番用GUIがすごくなっている

中間論文発表死ぬ死ぬ死ぬ

コンテスト前々日

徹夜で学校さぼってひたすら1日中テーブルを用いるソース書く(ただし放課後は学校にいって中間論文書く)

コンテスト前日朝

またも連続徹夜で夜から朝にかけてコード書いた後家を出発

コンテスト前日昼

指導教員が引率教員だったので,論文添削してもらいながら飛行機乗る

コンテスト前日夜

論文修正しながらテーブルのやつのバグ取りする

中間論文締め切り1分前くらいに提出完了

本番用GUIが超すごくなっている

めしくう

うおーーーーと開発している.

GUIがよい.人の手で改善できるGUIすばらしい.

refiuteくんがweb競技システムを完成させてくれて,仮想テストができる用になる(あれこの日だっけうろ覚え).


コンテスト一日目(予行演習と一回戦)

まーた徹夜した気がする

テーブル使うやつでしょぼいソースが出来上がる.割と少しよい.

でも少しテーブルが弱くて本番で使えない.

競技場でぜんぜん勝てないしまっっっっっったく自信がなかったので各方面に自信がないと主張しておく

予行演習

潜伏のために変な数字でゴールインしようと思ったが,眠たくてろくに実装できず諦め.

でも潜伏したいので適当にダイクストラの評価関数を逆にした最悪コードで戦う(提出チェックができればよいので)

「なんで1位なんだふざけるな」

お昼休み

爆速でホテルに戻って眠たさと闘いながら変な数値を出すコードを書く

そもそも一回戦は3位になると東大と準決勝で避けれて嬉しいということがわかっていたので,1回戦1試合目は予行演習みたいに提出テストだった.

一回戦

1回戦は,3試合ある.

1試合目ちゃんとプログラムが動作し変な数値になる.復元もできていてハッピー.

2試合目はまともなプログラムを出して1位やったね.

終わった後僕とmecha_g3だけすぐホテル戻る

引率教員とかrefiuteが金色堂にいって,kagasanは自由部門とかを眺めていて,もうひとり助っ人後輩は会場で残りの試合を眺めていてくれた.

ツイッターみたらさっきの変な値に対して妨害かもしれないみたいな意見が見えて「あれで妨害になるようなポンコツシステムではさすがにないだろう」みたいな気分になる.

僕は眠いけどとりあえずいろいろテーブルのソースをがんばる.

少し寝た(2時間くらい)

一回戦の日の夜

やはり先の2時間以外ろくに寝てない,徹夜っぽい.

試合結果見て,仮想的に第一回戦の各高専と戦う.

「あれ,東大にはギリギリ負けているけどソレ以外の高専に普通に勝っている.いい感じでは.」

みたいな気分になる.

GUIがさらに進化したりする.

テーブルを必死に自宅のパソコンに計算させたり手元で計算したりする.何時間もかかる.

で,テーブルを使ってdpしたりいろいろするがうまくいかない

結局時間かけて生成したあるテーブルを使うと解が改善するということが分かりそれを使おうと思う

準決勝の朝

死にかけているけど開発続ける

準決勝

1試合目,いろいろな解法を投げまくる

複数選択強制だったのでしない解法のほうが解がめっちゃよかったんだけどあとのほうで実行したせいで,時間コストがあれで更新されない.

しかも交換手数893とかいう奇跡的な感じで,めっちゃ出したかったけどダメだった.

1試合目1位で通過やったぜ.

準決勝→決勝の間

悪あがく.少し解の良いプログラムが降ってくる.

決勝試合開始直前

東大横,ウィッス.

決勝試合開始直後

うわ問題サイズちっさ,とりあえず復元

とりあえず計算はやいやつ出す.割と良い解.

そのあとちょっと時間くらいかかるやつ走らせる.タイムペナあるけどスコア更新だ.

東大と競り合ってる 勝てそうかなあ勝てそうかな

負けた

くやしみ

決勝試合中

まったり

決勝直後

悔しいけど嬉しい.高専プロコンは優勝なので,校長顕彰(図書券1000円もらえる)を5年皆勤できたわやったみたいな気持ちになる.最後の年だし5年前に憧れてた先輩と同じ感じだし嬉しい.

でもやっぱ東大に負けたの悔しい.冒頭でも書いたけど16x16でなかったから競り合えたとは思っていて,16x16だったらアレだったのかも.


表彰

横に沖縄の人

眠すぎて番が来るまで寝る.ほとんど記憶にない.

インタビューも記憶にない.

なぜかなんかこころにぽっかり穴が空いている.

そのあと

バスで仙台まで乗る.

久留米の人たちにクソ絡みされる.眠すぎてマトモに応答できないすみません.

牛タン食って,めっちゃねるほんと幸せ幸せ幸せ幸せ

観光

青葉城とか行く.なかなかたのしい

コンテスト数日後

優勝したのがうれしくなる

感想

休憩時間に色んな人と話した記憶はあって半分くらい覚えてたり覚えてなかったり.

結局画像全部一発で復元できてしまって人力GUIを使うところがなかったのが残念.

他の試合にあったイラストのやつだけは人力GUIを少し使わなければならなかったが,イラストがあったのはその試合だけだった.

あとあまりにも前後徹夜しすぎて全く交流を楽しむ余裕がなかったの,最後なのにもったいなかった.

決勝中に眠たさから何も考えずひたすら回数制限まで送信したのは今考えるとよくなかったなあ(送信したい人がいるのに).

反省している.

忘れないうちに書いておきました.

みんなありがとうございました.


なとりうむさんはすげえわ

受験期間における心境の変化

一発勝負文化への憎しみがどんどん大きなものへと変化した.

あと 少なくとも僕の受かり方は,「ちょうど数少ない自分の得意なところが出て,それが運よく難なく解けた」ことによるものだと思ってるから,嬉しいのは事実だけど同時に複雑な心境でもあるなあ.でも,単純にコンテストだと考えればまだ複雑な心境を抑えれる気がする.コンテストの賞品に人生の分岐かかってるのがアレか(もちろんどのコンテストも1位を取ったりするといろいろ人生に影響が出そうだけれども).

使った参考書

英語

(戒め)受験生なのに,単語帳をほとんど使わないまずい生活をしていたせいで,単語力が低すぎた.結果オーライだっただけで,いいことは何もなかったから単語帳は持とう.

大矢復 図解英語構文講義の実況中継 オススメ:高

英語苦手な人が構文の感覚的理解をして定着したいときにオススメの本.

基礎英文問題精講 オススメ:高

全ての文がためになる.感覚によってではなく,きちんと精読すれば,短期間でもかなり読解力がついた.

速読英単語必修編 オススメ:普通

割と読み物として面白いと思った.途中までしかやってないし単語帳のほうはやってないけど.

日頃から読むといいかもしれない.力がじわじわつきそう.

速読英熟語 オススメ:謎(高い?)

阪大の試験3日前とかに買って,あっちらほら訳せないような知らない英熟語がある!って思って慌てて読んでたので,割とオススメなのかもしれない.

工業英語ハンドブック オススメ:(東大受験生:高 他:普通)

工業英語に関するもので,英文とそれに対応する和文がひたすら書いてある.

和文⇒英文をする500個の例題集としては完璧.工業英語に欠かせない数量表現とかが,何度も何度も出てくるので,普通に番号を単調増加で練習しているだけでも,繰り返し定着させてくれる.

ドラゴンイングリッシュ オススメ:普通

割とためになった.それでも,単語力とか構文力とかが,少しでもある程度ある人がそれを自在に運用できるようにするための本だなと思った.逆に僕はこの本で色々構文を知ったりした.割とアリだと思う.

ちなみに僕はこの中の本で最後まで読んだのは大矢復だけなのであまりアテにしないでください.逆に言えば,最初のほう読むだけで割と英語できるようになった気分になりました.試験は振るわなかったけど.

数学

結局,なんかクラスメイトが解いてる問題を便乗して解いて力付けた気がする

徹底研究 オススメ度:高

買っといて絶対に損はない.頑張って理解しましょう.でも,僕も多分解けない問題けっこう存在します.苦手なセクションとかはいくらやっても忘れるなあ.

徹底演習 オススメ度:高

買っといて損はなさそう.頑張ってやりましょう.研究と演習は割と焦点当ててるところが違ったりするのでやはり研究2みたいな気分で買っとこう.僕はできなさそうなところを見つけてはやるみたいな適当なことをしていました.

明解演習 数理統計 オススメ:高

明解演習シリーズ,決して簡単ではないが,普通の確率の問題や,確率の記号の使い方,期待値とか分散とか,確率分布を学びたい人にはオススメ.そのへんを深く掘り下げたい人には超オススメ.

明解演習 微分積分 オススメ:高

明解演習シリーズ,決して簡単ではないが,たぶん演習・研究の積分するよりこっちやったほうがためになりそう.あんまりやってないから分からんけど,特に微分方程式とかはこれで学ぶといいことあります.数学力が本当に低い人が手を出す本ではない.

坂田アキラの数列が面白いほどわかる本 オススメ:普通

クソみたいにテンション高いけど,行列ではない漸化式の一般項を求める問題は,この1冊の後半部分だけで十分.なんとなく実践してきて知ってるけど,漸化式の解き方を体系的には学んだことがないみたいな人は,1日2日やればきちんと終わるレベルの範囲なので,やっとくといいかもしれない.編入程度なら怖いものなしです.

物理

物理は結局苦手だったのでよく分からん.

物理のエッセンス(各分野のやつ) オススメ度:高

超オススメ.物理がぜんぜん分からない人はまず黄色い本ではなくこっちをやりましょう.分からない状態でアレやってもきついです.


名門の森物理(各分野のやつ) オススメ度:普通

エッセンス一周したらやってもいいかもしれない.普通に初見で解くのが難しい問題ばかりです.僕はほとんど手を出せていないですが,物理力が上がる良問を取り揃えているように思える.

演習力学 オススメ度:高

なんでやらなかったのか,というか存在を知らなかったのか若干後悔してるレベル.編入標準レベルの例題がたくさんあります.剛体をやる際には絶対使いましょう.慣性モーメントを求める問題がちょっと少ない?もしかして僕が知らないだけ?

ビジュアルアプローチ力学 オススメ度:普通

演習力学の代わりに,こっちで勉強していました.でもやっぱり演習力学と同じカリキュラムだし,演習力学のほうをオススメします.慣性モーメントの問題はいくつか載っている.

電磁気学演習 オススメ度:高

難しいですが,電磁気を学ぶにはこれをするしかない!

きちんと理解するのは難しかったです(てかできてない...)

独学難しいね.

熱力学演習 オススメ度:?

正直,オススメなのかすらよく分からんくらいにしかやっていない.

この本に罪はない.が,東大と阪大の編入試験では使わない範囲が前半にきている.僕はアホなので真面目にやっていた.

さすがにエントロピー扱ってるけど,僕は基礎物理学演習Iでそれらを学んだ.

もしかしたら詳しく掘り下げているのかもしれない?分かり次第訂正します.トンチンカンなこと書いてたらコメントしてください.

多くの大学で出るような熱力の問題したい人は,まず物理のエッセンスと名門の森やったほうがいいかも.

基礎物理学演習I オススメ度:?

よく分からんけど熱力範囲にしか僕は使ってない.

基礎物理学演習II オススメ度:低い?

電磁気は電磁気学演習でやりましょう.ただ,現代物理やりたい人は,一応ひと通りやってるのでできるようになるかも.でも,そういう用途ならその手の専門な本を買ったほうがいいかも,僕はこれしかなかったからこれを少ししたけど.

編入試体験談(後半戦)

7月初頭

もうこんな辛い思いはしたくないと決意する.

東大試験終わった次の日に,基礎工の問題を見て全く解けないことに気づく.

なので,ひたすら英語を読解する練習を始めた.drafearに貸してもらった「基礎英文問題精講」を少しずつ読み始める.一気に詰め込んで復習をしないと忘れるということが反省として得られたので,一日10セクションずつきちんと理解しながら進め,次の日その復習+10セクションみたいなのを1週間繰り返す.最初は全く読めなかった英語が,だんだん読めるようになる.そもそも東大受験したのにお恥ずかしい話,強調構文すら意識したことがなかった.

過去問をやったらめっちゃできるようになっていたので,満足し,専門の勉強にシフト.

専門の勉強,アルゴリズムアセンブリはやるだけだと思っていて,実際解いてみるとほとんど解けるので満足する.

7月中旬

専門(論理回路)を本腰入れてやる.過去問を見る限り,割と「論理回路入門(坂井 修一)」とかいううちの教科書が編入に出る範囲をカバーしていることを知る(状態遷移図がミーリー型の表現のみであるが).でも最近はどうも状態遷移図ゲーが多いので,状態遷移図についてはwebサイトで学ぶ.テキパキこなせるように一応いくつか演習を行う.

H25実施編入試の過去問が学校にあることを知る.見てみると数学が易化しているが1問目のcosh逆関数を求めるやり方が,よくある一般的なテクだがただちに思いつくのは難しい感じで,慌てる.専門の論理回路が難しすぎるように見えて絶望する.それでも考えたら解けるだろうと信じる.

7月15日以降

ラストスパート,少し気が抜ける.英語,自己満足しているとこわいので,時間を測って過去5年分やり,教員に2年分だけ添削をお願いする.この時過去2年が急に難化していることに気づき,悲しむ.

また,演習力学を急いで図書館で借りて,剛体のところをやりまくる(早くこの本やっとけばよかったと猛烈に後悔した).あと名門の森(熱力範囲を含む)をdrafearに見せてもらって,分子運動論とかぐわーーーとやったり,エッセンスの熱力範囲復習したりする.電磁気も少し復習する.久しぶりにやったらビオ・サバールの法則すら満足に使えなくなっていることに気づき,少し焦る.あと導体棒とかも復習する.やってて気づいたのは,やっぱり物理向いてないわということでした.

試験前日

英語の添削をお願いしていたが,試験前日まで音沙汰がなく,「2年分見ましたが,英語英文も適切に意訳できているし,構文も抑えれている,和文英訳も文句なしです.自信を持って.」というメールが来る.何か指摘してくれないと情報量が0なんだけども,とにかく自信を持つ.実際忙しいのにも関わらず,添削急遽やって頂いてありがとうございました.

最後の日だし,物理をやったり,学校で友達と雑談したりして過ごす.

帰りに,一人でDDRする.

ラクガキスト(ESP)をプレイしたらフルコンできた.

「おっ縁起いいなっ」と思って調子に乗って,Paranoia Revolution(Expert)をプレイして即落ちする.「落ちるとか縁起悪すぎんよ」とか一人苦笑いする.

試験当日(筆記試験)

緊張する.シャーペン忘れる.鉛筆で頑張る(そもそも鉛筆指定だったし).

英語

英文和訳:2問あって,1個は割と簡単な文章で,もうひとつはとても難しい文章.2個目で,適当な嘘っぽい日本語しかかけず絶望する(単語が分からん).

英文読解:なぜか全然分からなかった.緊張で英文が頭に入ってこず,強引に解こうとして色々と間違えまくる.1つ和訳があったのですが,それすら単語の意味をまちがえて訳しまくる.最後の問は白紙同然("huge exception"とは何か具体的に述べよという「~という重大な例外」とだけ書いた).

和文英訳:相変わらず慌てていたのか,自信マンマンに適当な英語を書く.うっかり,someone doesn'tとか書いちゃう(こういうのはいつまでたってもやらかすね).

実際の試験では,大問3→大問1→大問2→大問3→大問1→大問2みたいな感じで,見直しも兼ねてループしながら解いてた.

詰まるところが多くて,気づいたらかなり時間が足りなくなってた.結局英文読解が出来なかった.

試験終了後に,「自信持って」とはなんだったのかみたいな気持ちになる.悲しくなる.

手応えは5割~6.5割

数学

試験問題を読む.どれも解けそうだったので,ガッツポーズする.

1問目:(1)sinh(x)の逆関数fを求めさせる問題.最初慌てて解き方が出てこない.なぜかsinh(x)のままで解けなかったっけ?とか思う.結局e^xの式に対して解の公式を適用する一般的なテクを使うと解けるなあとなって,解いた.でも慌てていたので2回くらい解の公式を計算ミスした.かなり見なおしたのですぐ発覚した.(2)fを積分する問題,奇跡的に楽な部分積分思いついたので計算したら解けた.(3),(4)は簡単な極限を計算する問題で,(2)を計算ミスなく解けた人に対するご褒美問題という印象を受けた.

2問目:

(1)以下の行列を直交行列により対角化せよ.

A=

[1 a]

[a 1]

(2)以下の行列が対角化できる必要十分条件を求めよ

B=

[1 c]

[0 b]

(1)はきちんとやるだけ.

(2)は,異なる2つの固有ベクトルが得れる⇔対角化できるということに気を付けつつ,b=1,c=0のケース(つまりB=Eのとき)に気をつければ,きちんと必要十分条件が列挙できた.

計算遅すぎるせいで,これなんだかんだ40分くらい計算した(もちろん検算しながらだけど).

3問目:

割と易しいタイプの確率.でも確率なので,きちんと定義に気をつけないと事故が発生しやすい.事故らないように文章を読み直しまくった.

(1) 与えられる確率のP(1),P(2),P(n)を求める問題

(2) 普通な確率

(3) 普通な確率

(4) 普通な確率 でもちょっと植木算に気をつけないといけない

最初(1)での確率を少し勘違いして列挙漏れしていて,その矛盾に気づいて修正するまで割と時間がかかってしまった.結局(1)解くのに30分以上は使った.しかもP(n)はかなり汚い形で放置した.

試験終わった直後,いくつか間違えてるだろうけどかなりできたかなあみたいな気持ちになってた.他の人の話をいろいろ聞いてみると確率が分からんけど,自分の解答は「答えだけなら」全完っぽかった.

ただ,議論がかなり怪しいところは多かった.sinh(x)の逆関数の定義域がx>0であるかのような誤解を与える表現をしたり,「k≠0またはl≠0」を「k,l≠0」と表現していたり.

専門・物理

まず全ての配布物に,最初の受験番号・学科名を書くのに5分以上使う.大幅なロス.

専門(アルゴリズム):挿入ソートとヒープソート,そしてそのトレースを行い,比較回数をオーダー記法で示す問題.

最初,頭が硬直していて,挿入ソートだなあと思いつつ挿入ソートか確認するのにめっちゃ時間をかけ,トレースするのにもめっちゃ時間をかけた.もう片方は自明にヒープソートっぽいものだった(後で考えてみると厳密にはヒープソートではなク,もどきである).

まず小問1の(ア),(イ),(ウ)に入るコードを考えるのにめちゃくちゃ時間をかけ,(ウ)に入るものがどうしても分からず,空白でも多分動くよなあ...みたいな気持ちになって,分からんので空白にした.トレースだけ1つ書けなかった.

専門(論理回路):

(1)4*4のカルノー図から,主項・必須項・最簡積和標準形・最簡和積標準形を求める問題.主項と必須項の定義を忘れてしまい絶望し,最簡和積標準形をカルノー図から作ったことがなくて絶望したが,まあ0囲んでゴニョゴニョすればいいかと思って作ったら出来た.

(2)0→1→0という入力パターンが来たら1を出力する回路の状態遷移図(ミーリー型)と,出力の関数と,そのときのフリップフロップで実装する場合のフリップフロップへの入力関数を最簡積和形で表したものをかけという問題.ドントケア意識して真理値表を書いたのにも関わらず,1つドントケア無視して答えを書いてしまった.アチャー.

(3)ミーリー型の状態遷移図をムーア型の状態遷移図に書き直せという問題.やったことがないけど多分こうだろみたいな感じで書いた.

かなり時間におわれていて,見直しが全くできなかった.論理回路だけは凡ミスするから慎重にやりたいのに.


専門(アセンブラっぽいの):何をやっているのかよくわからないプログラム.絶望しかない.吐きそうになってた.僕はトレースは本当に苦手なので,プログラムの意味を理解しようとしたが,やはり意味不明で時間がずっと奪われる.結局時間かけたのに何してるのか全く分からず,ほぼ全滅・白紙.C言語に書きなおしたらまだ見通しよくなったかもしれないと思うと後悔がやばかった.

物理(力学):剛体円盤滑車が,線密度ρの鎖と質量mの重りをぶんぶんしている.

簡単そうだと思った.でもなぜか求められる運動方程式のM'=ρx/2(∵重心はx/2)とか書いてしまった.つらすぎる.最後の方程式も解けなかったし.

物理(電磁気学):a*aの正方形コイルが空間を速度vで右に移動してる.電流Iが無限長のy軸を-y方向に流れている.そのときいろいろ問われる.

(1) 任意のxにおける磁界を求める.アンペールの法則

(2) コイルに発生する電位差を求める.ファラデーの法則&がんばってΦを求め計算する

(3) コイルに発生する電流を計算する

(4) コイルに働く力を求める

(5) 覚えてない

(6) 覚えてない

(2)の時点で計算があってる気がしなくて,死んでた.それからいろいろぐちゃぐちゃになった.

冷静に考えて熱力選択しとけばよかったと思った.


試験終わった直後の出来の気分

数学 8~9.5割

英語 4.8~6.5割

物理 3.0~6割

専門 5~6割

数学の重みがでかかったら,ボーダーには乗ると信じたかった.

物理で死んだと思ってた.本当に物理から逃げたいと心の底から思った.

物理で3割達成してたとすると,数学で中和されても6割で,受かる要素がなさすぎた.

試験終わった夜

疲労から,仮眠3時間,そこから起きる.マジで寝れなかった.試験終わった後はご飯を食べに行ったが食欲もなくという感じ.数学のアドバンテージはあるけど・・・物理があまりにもできなかった・・・運動方程式すら立てれないのか・・・英語もかなり点数揺れる・・・専門もバカみたいなミスをいくらかした・・・みたいなのが脳内でグルグルして,結局寝れたのは6時頃で起きたのは7時だった.

面接の日

面接がある.

面接

■まず何でこの学科を志望したの?

→高1でアルゴリズムの楽しさを知り,情報オリンピックパソコン甲子園・スーパーコンに参加していく上で,大学でより専門的なものを学びたいと思い...特に基礎工情報科学科がアルゴリズミックなので...

情報オリンピック参加したの?どこまで行ったの?

→代表選考合宿に2回行きました.代表にはなれませんでした.

■倍率は?

→全体参加者数を覚えてなかったので,うろ覚えの800という数字から少し減らして,「700人中20人くらいですね.」と答えた(盛るのはよくないから).

■もし代表になれてたら色んな大学行けたんちゃうかなあ.惜しいね.

→そもそも僕は高専生なので編入でそういう特典を実施しているところがなくて...

■あー,そうかそうか

■話は変わるけど試験の出来はどう?

→英語が全く自信がなくて,英文読解がほとんどできませんでした.数学は一応確率以外は自信を持って書いたんですけど,議論が甘いところが多く,減点されているかもしれません.問題の物理と専門は全く出来なくて,まず専門ですがアルゴリズムで問1のウが空白でも動くんじゃないかと思って空白にしてしまった...みたいなことを言って笑われた.あと論理回路でドントケアを考慮せずにうっかりまちがえてしまったこととか.トレースが大の苦手で,ぜんぜんアセンブラが出来なかったです.物理はどちらも履修した範囲だったのですが,いつもではやらないような間違いをたくさんしていたので,厳しいと3割くらいです.

■今まで他に大学受けましたか?これから受ける予定は?

→東大を受けました.一次筆記試験で不合格になってしまいました.この後は,阪大工学部のみ受ける予定です.

■東大の試験は難しかった?

→物理が苦手なので,とても難しかったですが,数学は基礎工の方が難しいと思いました.(今考えるとほんまかという感じだが,たしかにそういう手応えだった)

■2年から3年でいきなり成績伸びたけど?

→2年から3年は特に意識したことがないのですが,3年から4年ですか?

■いえ,それもありますが,2年からどんどん伸びてますよね?

→2年から3年で伸びた理由については分からないんですが,3年から4年で伸びた理由は,情報オリンピックに参加することがなくなって暇になったので,プログラミング中心の生活から学業中心の生活にシフトしたからだと思います(笑われる).

■以上で面接終わりとなります.

→ありがとうございました.

面接終了

外に出るとdrafearが居た.drafearは自分から言う前から情報オリンピックについて聞かれたと述べていて,僕は参加したこと言ったときに「今知った」みたいなリアクションをされたように見えたので,もしかしたらノーマーク受験生扱いなんかな~って少しブルーに思っていた.

図書館に入ると,2人の他高専の人と,もうひとりのうちのクラスメイトが会話をしている.そこで会話して仲良くなる.雑談で時間を潰すのは限界があるので,食堂に行こうとするが混雑.混雑しているので外で立ち往生していると,神戸高専の知り合いが目に入る.すると,その2人の他高専の人のうち1人と知り合いだった.なんという偶然.

まあ,その後食堂でご飯を食べ,遠方から来た高専の人が,おみやげを買いたいという話をしているので,梅田を案内する.ポケモンセンターに行ってプリキュアショップに行く.たまげたなあ・・・.時間を潰して戻ると発表15分前.合格発表は基本的に残酷なものなので,具体的には書かないことにします.


合格発表

貼りだされる.発表直前に,嘔吐感に駆られ,熱い外を歩いて発表を見に行く.合格番号が貼りだされている.僕が受けた9xx,合格者がかなり多い.見てみると番号があってかなり唖然とする.本当に唖然とした.ヨッシャアアと叫ぶこともなく,いろいろな感情が錯誤していることもあって,無表情でアタフタしていた.びっくりした.


僕の受けた情報学科ソフトウェア科学コースは,8人受験(出願10人),5人合格だった.倍率1.6倍,例年よりかなり低く見えるようにも思えるが,恐らくそんなことはなく,計算機科学コースが3人中0人合格(不正確な情報?)ということを知ったので,恐らく合格人数の総和は毎年と同じで,高得点者がもしかしたらソフトウェア科学コースに固まっていたのかもしれないという可能性がある.この2コースに関しては,学科毎の倍率を見ても当てにならないかもしれない.(8+3)/5=2.2倍と計算したほうが良いのかな?