SyntaxHighlighter

StackEdit CSS

2013年11月7日木曜日

U20プログラミングコンテストに参加した話

 最近の活動としてU20プログラミングコンテストに参加して、そこでいろいろ得たものがあるのでそれを整理するという意味でこのエントリを書こうと思った。

提出した作品

「Cuick」(GitHub)というプログラミング言語。これは、速く書くことを目的としたプログラミング言語で、競技などの小規模なプログラム向けだ。バイナリコードではなく、C++のコードを生成する。開発言語はJavaで、パーサジェネレータにJavaCCを使わせてもらった。
速く書くために、

  • 糖衣(ショートカット)構文の充実
    →タイプ量の軽減や余計なことを考えずにすみ、速くなる
  • 覚えることは少なめに
    →調べる時間を減らすことで速くなる
  • デバッグ支援
    →デバッグの時間を軽減することで速くなる

という方針で言語仕様を決定した。

予選締切りまで

 原案を思いついたのはたしか6月ぐらいだと思う。最初はRubyとかPythonとかのLLの機能をつけた言語だったのだが、これだと存在意義がよく分からないので、目をつけたのが競技プログラミング。競技プログラミングは実装時間が重要なのでなるべく早くソースコードをかけるようなプログラミング言語を作ろうと考えた。
 7月半ばまでは言語仕様を考えた。なるべく早くソースコードをかける=>ソースコードが短くなることを考慮した。また、C++にはないデバッグ、テスト機能も考えた。@testは相談に乗ってくれた先生が元だ。また、このあたりから実装を始めた。とりあえずパーサーを作った。
 8月は夏休みなのだが自分は高専プロコンにも参加しているのでそっちとの兼ね合いをとるのが難しかった。高専プロコンを少しおざなりにしていたところがあったので、高専プロコンのメンバーにも怒られたりした。
 8月後半。締め切りの8月30日までにすべての機能を実装できないと悟ったので、バグを治すことにした。また、友人のアイデアでWeb上でもC++に変換できるようにもした(これはRubyのsinatraを使った)。締め切り当日まで予選資料を書いていたがなんとか間に合ってホッとした

最終審査会まで

 9月に入ってからは期末テストだったので、テスト勉強をしながら結果を待った。で、結果が来たときは結構嬉しかった(そのせいか勉強に身が入らずにテスト結果が微妙だったのは秘密)。
 最終審査会のプレゼン資料締め切りが9月後半で、テストが終わったのがその1週間前だったので普通に間に合うかと思ったが、高専プロコンも終盤でなかなか忙しかったので、あまり作成、練習時間が取れなかった。

最終審査会

 結論から言うと、もっとプレゼンを練習しておけばよかったと思う。
 自分は個人部門の最後だったので他の参加者のプレゼンを見ていたのだがあまり練習していなさそうな人が資料もなしにスラスラしゃべるのを見て、自分大丈夫かなぁと思っていたら見事失敗しましたよ。前に出たら緊張で頭真っ白になって原稿飛んだし、内容も内容で後から見たらここはこうしたら方がいいんじゃないかというところが何箇所かあった。緊張は練習すれば消えると先生が言っていたのを思い出した。内容も練習すれば問題点が見つかるものだと思う。
 また、Cuick自体の評価だが「ユニーク」とは言われたがそれ以上は言われなかった。色々理由を考えた。

  • アプローチが微妙だった

    審査員の方がエディタのスニペットや補完と違って学習コストがかかると仰っていた。それに自分はC++と構文を似せていると押し通したが、今考えるとプログラミング言語というアプローチが微妙なのかなぁと思ったり思わなかったり。

  • Cuickって結局何なのか

    審査員の方が仰っていたのだがCuickって実行環境としてなのか、ただ単にツールとしてなのかはっきりしない。確かに考えてみると中途半端な感じがする。だからなんだろうと思わなくもないが。同じ個人部門のFulynは実行環境だとはっきりわかった。

  • 競技プログラミングをよく知らない

    実は競技プログラミングはよくわからない(情報オリンピック予選落ちレベル)。すみません。よく知っている人に意見を聞けばよかったなぁと後悔する。とはいいつつもそういう人は周りにいないので聞けないが。

  • 目に見える具体的なデータが示せてない

    プレゼン前日にある問題をC++とCuickで解いてみたのだが、ぶっちゃけあまり時間が変わらなかった。問題によって個体差はあると思うが、正直Cuickの存在意義がわからなくなってしまった(ホビー言語としてなら十分面白いかも)

  • プレゼンがアレゲだった

というわけで、最終審査会当日はクタクタだった(東京までの移動もあるしね)。次の日は表彰式だが2時45分集合で、どうせなので東京観光していた。と言っても秋葉原に行っただけだがw 一人でぶらぶら移動するのが結構楽しくて、一人旅の面白さを知ってしまった気がする。

他の作品

 これはいいと思った作品が数点あるので感想を書いておく。

  • Arrow Judge

    オンラインジャッジを実現するためのオープンソースシステム。自分もオンラインジャッジシステムを作ったことがあるが、それよりも1枚も2枚も上手だった。例えば、セキュリティ対策だ。自分が作ったやつはセキュリティ対策は皆無だったが、Arrow Judgeはちゃんとセキュリティ対策をしておりすごいと思った。また自分で問題を投稿できるというところは使用場面もはっきりしておりいいと思った。

  • Fulyn

    OSECPU向けの関数型言語。関数型言語はよくわからないので、言語自体の感想は言えないが、まだ高級プログラミング言語がないOSECPU向けに作るのは少し興味が出た。プレゼンは全然わからんかったw

プレゼンを見ただけだがレベルが高いなーと思った。自分は彼らのようにはなれないが、自分の強いところを生かして彼らに並べるようになりたいなーと漠然と思ったわけですよ

感想

 今まで生きてきた中で一番濃い体験をしたと思う(小並感)。まず、自分より上の人と接したことでワールドというものを肌で感じたとこだ。井の中の蛙ってやつですよ。次に、自分はプレゼンが苦手だと決めつけていたがそれは練習してないだけだったということだ。
 こういう大会に出るといろいろ考えられて成長できるのでこれからもどんどん大会などの出場しようと思った。

0 件のコメント:

コメントを投稿