paizaオンラインハッカソンPOH![ポー!]中間レポート――1週間で1万5,000ものコードが提出される!

2013年12月2日より開始したpaizaオンラインハッカソンVol1「新人女子の書いたコードを直すだけの簡単なお仕事です!」ですが、おかげ様で1週間で15,000ものコード提出を頂けています。今回は皆さんのチャレンジの様子について中間レポートをお届けします。

paizaオンラインハッカソンVol1
https://paiza.jp/poh/ec-campaign

paizaオンラインハッカソンとは?

「paizaオンラインハッカソン(略してPOH![ポー!]⁠⁠」はオンラインで誰でも気軽に参加できるハッカソンを目指しているので、とくに会員登録などをしなくても参加できるような仕組みとなっています。このハッカソンは、1つの課題に対してどのようにコードを書くかより深く考えるきっかけになればと思って企画しました。競技プログラミングではないので、Twitterやブログ、Githubなどでの解法の公開はとくに制限していません。むしろみんなでどうやったらより実行速度の速いコードが書けるのか議論していただき、学びの機会にしていただければと思っています。

野田さんという新人女子プログラマーが書いたコードを直す、というストーリーになっており、一見ネタ臭が漂う企画となっていますが、通常こういったプログラミングの企画だと、上級者を対象にした敷居の高い競技プログラミングや、凄腕の人ばかりあつまるハッカソンとなってしまいがちなので、敷居を下げつつ、実行時間を早くしていく過程での学びや楽しさを共有できればと思い企画しました。

100点への道のり

paizaオンラインハッカソンVol.1では、提出コードに対して3つのテストケース(小、中、大)を入力してそれぞれの実行時間が結果画面で表示されます。

実行時間の表示
実行時間の表示

今回のハッカソンでは遊び方は自由なのですが、まず100点を目指すベーシックなものと、100点を取った後に一番重いテストケースであるテストケース3でどこまで速くなるかを競う遊び方、すべてのテストケースで0.01を出す遊び方、最遅タイムを更新する遊び方などがあります。

まず100点を取るためにはまず3つのテストケースをタイムアウトせずに制限時間内(言語によって異なります)で通す必要がありますが、とりあえず動くプログラムを書くだけだとテストケース2、3を通すのが難しい設定になっています。

とある方のPHPでのチャレンジ記録をグラフ化すると下記のような感じでタイムを削っていっているのがわかります。

チャレンジ記録のグラフ例
チャレンジ記録のグラフ例

最初はテストケース1しか通っておらず、テストケース1の処理に4.15秒かかっています。その後4回目の提出では6.82秒という最遅タイムを出してしまいますが、8回目の提出ででテストケース1が1.67秒、テストケース3が6.03秒と100点を取っています(※テストケース2を図に入れると見にくいため省いています⁠⁠。

そして17回目の提出でテストケース1で0.01を叩き出すに至っています。テストケース1の最速(0.01秒)と最遅(6.82秒)を比較するだけでも、実に682倍も高速化できたことがわかります。

C#最速0.03秒への道のり

次にC#で一番重いテストケース3で最速タイム0.03秒(2013年12月13日現在)を出した方のチャレンジ記録です。

12月13日現在テストケース3での最速タイム(C#)
12月13日現在テストケース3での最速タイム(C#)

この方は実に276回もチャレンジしていただきました!初回提出からテストケース3まで通っており100点ですが、その時点でテストケース3は0.48秒の実行時間。ここから13回目の提出で0.17秒、126回目の提出で0.09秒、196回目の提出で0.03秒まで縮めてきており頭が下がります。C#でテストケース3の実行時間が0.03秒は、この原稿を書いている2013年12月13日現在最速のタイムとなります。

どうやったら早くできる?

現在下記のようなブログでさまざまな解法が掲載されていますので、まずは自分の力だけで試して、そのあとこれらのブログ等を参照して最速タイムを目指してみてください!

2014年1月8日のイベント期間終了後には、各言語の最速コードについても開示していく予定です。おたのしみに!

アルゴリズム初心者にはこちらもおすすめです!

paiza主催
paizaオンラインハッカソン(略してPOH![ポー!])

2013年12月2日AM11:00から2014年1月8日23:59まで。

画像

おすすめ記事

記事・ニュース一覧