Search on the blog

2010年5月9日日曜日

Google Code Jam 予選

昨日、Google Code Jamの予選が行われた。
今年のFinal Roundは、映画onceの舞台アイルランドで開催される。
決勝戦に進めるのは、世界の精鋭プログラマー25人のみ。
問題はすべて英語で出題されるという言語の壁を乗り越えて、私は、、風になる。(意味不明)

このプログラミングコンテストに参加するのは、今年が初めてである。
私は、1カ月前から準備を始めたはずだった
Google Code Jamでは、使用する言語は任意である。無償で提供されるものであれば、どの言語を使っても、どんなツールを使っても構わない。
使用経験のある言語は、C/C++、Java、VBA、php。
どの言語を使おうか考えた。
  • Cはテキスト処理に弱い。リストやハッシュが標準で提供されていないため少々面倒だ。
  • C++、Javaは、ライブラリが充実していて機能的には問題ないが、オブジェクト指向という言語の性格上、スピード重視の小規模プログラミングには向かない。
  • phpは、CGI専用というイメージがあったので何となく使いたくなかった。
さて、どうする‥‥。
私が出した結論は、「Perlだ!Perlしかない。」
それから、Google Code Jamに向けて、地獄のPerl修行が始まった。
が、2日で終了(笑)
まあ予選ぐらいは何とかなるだろう。Golden Weekあるし、そこで練習しよう!!
しかし、Golden Weekは、旅行に出かけたり、Google App EngineにはまったりでPerlの勉強はできず。

そして、ついに、運命の予選の日が訪れた。
なんと、本番当日になって、ルールを読み出すというだめっぷり。
とほほのPerl入門を見ながら、問題を解くというだめっぷり。

しかし、神様は、私を見捨てなかった。
今年の問題、か、か、簡単すぎるーーーーー。
特に、問題A。肝となるコーディングは、1行だけ(笑)
Google Code Jamは、各ラウンドA、B、Cの三問から構成され、それぞれの問題は、small setとlarge setと呼ばれる小規模の問題(単純な実装で解ける)、大規模の問題(ひらめきが必要)を含んでいる。
予選ラウンドは、A、B、Cの任意の問題においてsmall set、large set両方に正解すれば突破となる。

私は、とりあえず、Aが解けて満足して、そのあとCに挑戦した。
少し時間はかかったが、Cも解けた。
だが、Perlが、
1000000000000000000
とファイル出力すべき場面で
1.0e+18
と出力していたことが判明。
だが、時既に遅し。
いろいろ調べたが、sprintf()によるフォーマッティングでも解決しないようだ。
数値を文字列にフォーマットすれば、解決するだろうと思ったがどうやらそんな単純なことではないらしい。
数値の表示桁数の設定を指定したりもしたが、これでも無理。
結局、上位桁の数値から逐次出力するような関数を自分で作らないといけないってことか??

ダメだ、ダメだ。
そんなの面倒くさい。
こうなったら、Perl辞めてやる。次は、Pythonだ!!!
本戦に向け、今日から鬼のPython修行が始まるはずだ

0 件のコメント:

コメントを投稿