第28回全国高等専門学校プログラミングコンテストの競技部門に参加してきました。感想とか振り返っておきます。
1年前
忘れもしない前回の競技部門。
とりあえずソルバを書きましたがアナログな入力データの精度には到底対応できるわけないまま終わりました。
2ヶ月前
夏休みごろから本腰を入れて開発を開始。去年の資産を流用したおかげで結局ほぼそのままでした。
1週間前
あと1週間だと…… #procon28 pic.twitter.com/xuV9BjHHMj
— ぱらつり (@paralleltree) October 1, 2017
学習しない人間なので今年も直前になって慌て始めます。
研修旅行と書類の提出期間が重なってわりと危なかったです。
つらすぎて上映会始まってる #procon28 pic.twitter.com/adDN5v0l5c
— ぱらつり (@paralleltree) October 6, 2017
前の週の日曜日になって探索方法をビームサーチにするべきだと思い至りました。今までまともに探索書いたこと無かったので発想が無かったんですね。
次の日から木曜日まで毎日終電帰りになりました。結局金曜日も終電1本前の電車で帰りました。
プレミアムフライデーですが今から帰宅です
— ぱらつり (@paralleltree) September 29, 2017
差し入れ情報です #procon28 pic.twitter.com/mCHDQHM5kg
— ぱらつり (@paralleltree) October 3, 2017
0日目
隣の車両覗いてきたらパソコンが一列に並んでる明らかなプロコン勢を2,3グループ見かけて思わずにやけてしまった #procon28
— ぱらつり (@paralleltree) October 7, 2017
徳山駅着いた瞬間明らかに高専生だなという人たちだらけで面白かったです。
その日の夜はラーメンしました。
ラーメンで優勝👊👊 #procon28 pic.twitter.com/Acr5PaZzck
— ぱらつり (@paralleltree) October 7, 2017
その後ホテルに戻ってからピースの反転の可能性があることに気づきました。
慌ててソルバに対応させて就寝。
1日目
1回戦
本番のパズルが作成したソルバで安定して解けるかが未知数だったので、配置情報をすべて読んでからピースを並べていきました。
回答時に若干ゃ事故を起こしたものの、結果的には5位で通過できたので良かったです。
ピースを埋めきった後に起きた小山高専の事故です↓
メンバーT「テープで留めたし持ち上げて台に移せるでしょw」
ピース「ガシャン」
ぼく「お前ーーー!!!」#procon28— ぱらつり (@paralleltree) October 8, 2017
夜は2日目に備えるためにコードと向き合うことになりましたが、結果5時位まで起きていてほぼ徹夜状態でした。
ねむい #procon28 pic.twitter.com/zgqW0NFIRa
— ぱらつり (@paralleltree) 2017年10月7日
現実逃避してる #procon28 pic.twitter.com/15L1kzbgR5
— ぱらつり (@paralleltree) October 7, 2017
2日目
敗者復活戦
みんなピース並べるの早くない????
パズル完成までのスピードが昨日の比じゃなくて震えてる #procon28
— ぱらつり (@paralleltree) 2017年10月9日
明らかに昨日と動きが違っていてびっくりしました。
そして自分は眠気と戦いつつ敗者復活戦を見ながら配置情報を読むコードを実装していました。
準決勝
形状情報のみで50秒前後で解が出ました。
が、徹夜効果で頭が回らずにピース並べに手間取って11分の6位でした。
決勝進出を決めましたが自分の先輩以来3年ぶりのことなのでこれだけでめっちゃ緊張していました。
決勝行くと思うと緊張してご飯が喉を通らない #procon28
— ぱらつり (@paralleltree) 2017年10月9日
決勝
焦ってピースを落とした
形状情報のみでソルバは4秒程度で解が出ましたが、思っていたよりも早くて動揺してしまった。
決勝、ソルバは4秒で解いたのに人力部分で差をつけられてしまった。徹夜ダメ絶対 #procon28
— ぱらつり (@paralleltree) 2017年10月9日
ここでも人力要素が足を引っ張ってしまったために9分で8位。
プログラムはちゃんと動いたのに手が動かなくて本当に悔しかったです。やっぱり徹夜はしちゃダメですね。
しかしながら最後のパズルスライド回答は今までで一番うまくいったので満足です。
何とも言えない結果に終わりましたが、決勝まで進めたので良かったと思います。もう少し順位高かったら特別賞も狙えたんですけどね~~~~。
終了後は
音ゲー部門参戦 #procon28 pic.twitter.com/4q5GDQAVR3
— ぱらつり (@paralleltree) October 9, 2017
道中でゲーセン勢と合流して一駅先のゲームセンターに行きました。音ゲー充実しすぎていてすごかったです。
自分は無事NEW GAME!イベントをコウさんまで走りきって優勝
コウさんです pic.twitter.com/OYBsHl1euQ
— ぱらつり (@paralleltree) October 9, 2017
前日の徹夜が響いてホテルに戻ってからはぶっ倒れてました。
全体の構成とソルバについて
今回は4年生2人と3年生1人で参加しましたが、自分はソルバ、もう1人の4年生は結果のタブレット表示、3年生はQRコードの読み取りを担当していました。
メンバーの得意なところがいい感じに重なって良いチームだったと思います。
僕は今回C#でソルバを書きましたが、今回は完全解を求めることが前提となっていたため、最終的(5日前)にビーム幅を徐々に広げるchokudaiサーチを採用しました。評価関数はこれまでのわくとピースの一致頂点数の積算値です。
勝ち進んでいけば行くほどソルバが解く時間短くなってて面白かった。むしろ1回戦の問題解けないんだけど #procon28
— ぱらつり (@paralleltree) October 9, 2017
これがわくと同じ90度のピースだらけとかだと歯が立たなかったと思います。
ちなみに徹夜して書いたコードは蓋を開けてみれば殆ど使っていませんでした。
今回本番で使ったパソコン(予算で購入されたので「税金」というコードネームがついている)での参考記録(秒)はこんな感じです。
適当な前処理(結合可能なピースをくっつけておく)をかけましたが早くなったり遅くなったりしてますね???
ラウンド | 問題No. | 前処理なし | 前処理あり |
---|---|---|---|
予行演習 | 1 | 06.26 | -- |
1回戦 | 5 | 44.25 | -- |
準決勝 | 10 | 10.20 | 49.58 |
決勝 | 13 | 5.20 | 4.09 |
使用したコードはGitHubで公開していますので興味があればどうぞ。
小山高専の競技部門で使ったソルバのソースです。名前が27になってるのは察してください🌞🌞🌞 https://t.co/gTJkPmELH1 … #procon28
— ぱらつり (@paralleltree) 2017年10月11日
まとめ
今年も木片パズルで血の気が引きましたが、いろいろ考えながらソルバを作っていい勉強になったし、最後のプロコンを楽しむことができました。
後半は形状情報だけで答え出せたので良かったです。ステージの上で答えが出た時は本当に感動しました。
都立品川のノーヒント完答にはどうあがいても叶わないですが。
ただうちの学校は3年ぶりくらいに決勝まで進出できたので純粋に嬉しかったです。
本番でネットワークが想定通りに動いたのが予行演習のときだけだったのでつらいつらいした #procon28
— ぱらつり (@paralleltree) October 9, 2017
本番で本当にネットワーク関係が不調(手順踏むの忘れてたりなぜか反映されなかったり)で、やっぱり本番はうまくいかないなあと感じました。
それでもいざ終わると何とも言えない気持ちになりますね。来年以降は後輩にどんどん頑張ってほしいです。
パソコン開いたら決勝戦のままだった #procon28 pic.twitter.com/sJgDz2Mg0R
— ぱらつり (@paralleltree) 2017年10月11日
組み立てずにいられなかった…… pic.twitter.com/GR3UNPMC4G
— ぱらつり (@paralleltree) 2017年10月11日
プロコン終了直後はいろいろ熱入ったままなんですけど毎年急速に冷めてしまうのがつらい。
拳で像の前で写真とったら他の2人がポーズとってくれなくて、よく見たら自分は逆に足組んでた #procon28 pic.twitter.com/cCGkQeuKvI
— ぱらつり (@paralleltree) October 10, 2017