よかったー。 これでこのRoomでは11番ということになりました。750点問題が悔やまれてなりません。
しかし、こんなにもSystemTestでFailする人がいるとは… 早撃ちガンマンなだけではだめということなのですね。スピードと正確さでバランス良く解くのって難しそうだなぁと。
ランキングのスクリーンショット
ちょっと気になったのでとってみました。
Set 3の順位:
こんな感じでした。
one step closer
よかったー。 これでこのRoomでは11番ということになりました。750点問題が悔やまれてなりません。
しかし、こんなにもSystemTestでFailする人がいるとは… 早撃ちガンマンなだけではだめということなのですね。スピードと正確さでバランス良く解くのって難しそうだなぁと。
ちょっと気になったのでとってみました。
Set 3の順位:
こんな感じでした。
惨敗に終わったCodeJam 2006ですが、ちょっとだけTipsとか。
問題内容を公開してしまうのはルール上違反なのかもしれないので、問題とその解答は書きません。ですが、自分がCodeJamに望むにあたり、ちょっとでも早くコードを書き始めることができるようなテンプレートをつくっていました。 何かの役に立てればと思い公開してみます。
コードは続きにて。
-DLOCAL_TESTを加えてやれば、動くんではないでしょうか。
/*
* Google CodeJam 2006
*
* Template Code
*
* $Id: template.cc 320 2006-09-06 12:28:58Z takayama $
*/
/* ---------------------------------------------------------
* XXX: 1. modify for each case
*/
#define CLASS Hoge
#define METHOD_RET int
#define METHOD_NAME hoge
#define METHOD_ARG_T vector < string >
#define METHOD_ARG ss
// ---------------------------------------------------------
#include <vector>
#include <string>
#include <algorithm>
#ifdef LOCAL_TEST
#include <iostream>
#include <cassert>
#endif // LOCAL_TEST
#define NELM(arr) ( sizeof((arr)) / sizeof((arr[0])) )
using namespace std;
typedef vector <string> VS_;
typedef vector <string>::iterator VSI_;
typedef vector <int> VI_;
typedef vector <int>::iterator VII_;
/* ---------------------------------------------------------
* XXX: 2. Problem Solution
*/
class CLASS {
public:
METHOD_RET METHOD_NAME (METHOD_ARG_T METHOD_ARG);
private:
};
METHOD_RET CLASS::METHOD_NAME (METHOD_ARG_T METHOD_ARG) {
return 0;
}
/* ---------------------------------------------------------
* Test
*/
#ifdef LOCAL_TEST
template <class T>
void test (T &test_case, METHOD_RET assumption) {
CLASS obj;
METHOD_RET ret;
ret = obj.METHOD_NAME (test_case);
cout << "assumption = " << assumption << ", "
<< "result = " << ret << endl;
assert(assumption == ret);
}
void print_VS_(VS_& vs) {
for (VSI_ i= vs.begin(); i != vs.end(); i++) {
cout << *i << endl;
}
}
/*
* XXX: 3. add test cases here
*/
const int test_cases_length[] = {
2,
3,
};
const char *test_cases_arr[][256] = {
{"hoge", "fuga"},
{"moge", "yoga", "daru"},
};
/*
* XXX: 4. add expected result here
*/
const int assumptions[] = {
0,
0,
};
vector <VS_> test_cases;
int main(int argc, char**argv) {
size_t i;
for (i=0; i < NELM(test_cases_arr); i++) {
VS_ vs = VS_(
test_cases_arr[i],
test_cases_arr[i] + test_cases_length[i]);
test_cases.push_back(vs);
}
for (i=0; i < test_cases.size(); i++) {
test(test_cases[i], assumptions[i]);
}
return 0;
}
#endif // LOCAL_TEST
C++のtemplateをつかったら、もっときれいに書けるんだろうなぁとか思いますが、時間がなかったのでついついマクロにしてしまったり、テストケースの書き方がstring専用になってしまっていたりと美しくありません。 でもまぁ今回に関しては実用に足りたかなと。
ぬおおっ、こっちの方が素早く解けてしまったっっっ!! しかも解答内容に自信あるし。テストケースちゃんと全部通るし。
しまったなぁ、こっちを最初からやっとけば300点くらいはとれたかもだなぁ。
とか言っても、けっきょく300点くらいではこのRoomのベスト10に入れるか入れないかくらいの成績でしかないわけで。きびしいなぁ。
あと、いま割とさっくりとできたのは時間外だからプレッシャーが少なかったというのもあると思います。やはりまだまだです。
ちなみに問題は、Permanentに関するものでした。
追記 :Official Rules and Regulations を読んでも特に問題なさそうなので、問題の概要を加えました。
91.62pts
だめだ… OTZ
これでSystem Testing Phaseで落とされたらさらにげんなりだなぁ。
もう少ししたら (あと1時間) 終了の時間です。 最終結果はどうなることやら。いちおう終わりのときを待ってみることにします。 待つ間に750問題をやってみよう。
man atoiとかしてる時点でアウトかも >_< (どのヘッダをincludeしないといけないか忘れていた)とにかく頭の回転を速くしないといかんと痛感しました。猛烈にトレーニングしないとまずすぎです。
しかし、決められた時間内で問題を解くなんて久しぶりでした。やっぱりこういうの好きなのかも。TopCoderで鍛え直そうかな。
いままでのことは忘れ、最後の練習問題である1000点問題に取り組んでいます。むずい!
ハノイの塔の変形なのだろうけどなぁ。むー。
他の人を見ても、あまり高得点者はいないみたい。そんなものなんかしら。
いよいよGoogle CodeJam 2006だーーーっっ。 意気込んで有給休暇を頂き、準備を整えることにしました。のですが、どうも時差の計算を間違えたのか何なのか、一日ずれていました。 てっきり今日の深夜から始まって、明日一日の勝負かと思っていたのに …
…ま、明日一日存分に予習をしてカンを取り戻しておくことができて良かったのかもしれません。本戦は明後日の夜 (締切ぎりぎり) にやるしかないかな。
いずれにせよ、この前みたいな無惨な結果にならないよう、がんばらないと。
ここで要項をおさらいしておきます。
Qualification Round Coding Phase
Qualification Round System Testing Phase
2問を60分かー。できるかしらん。
なんか受験の頃を思い出してきました。ちょっとワクワク。
Practiceに2つ取り組んでいるうちに思ったこと。
求められているのは、
あと、過去問を調べてみたところ、アルゴリズムとしてはグラフや文字列のマッチングが問題になることが多いみたい。Googleで実際に解くような問題っぽいですね。
こうした現実的な問題に対して、いかに素早く適切な解を出せるかというところが、Googleでは大事なのかなと思ったりしました。
この前書いた Google Code Jam 2006 に続いて、500点問題にも取り組んでみました。
だめだ…
今回の問題は、割とアルゴリズムをイメージしやすかったので、けっこういけるんじゃないかなぁと期待していたのですが、だめでした。
というか、どうも問題に納得いかないのです。例で上げられている答えのうち、最後のやつがどうしても14にならなくて。
結局240行くらいのコードになってしまいました。 高得点者のコード見てみたら、もうぜんぜんシンプルな。そんなんでできるんかい、と突っ込みChallengeしてみたら、見事に玉砕してしまいました。
世界にはすごい人々がいるのだなぁと。でもまだあきらめずにやってみます。
Google Code Jam 2006 に参戦します。世界最高レベルのプログラマと対決するのです。
ということで、さっそくPracticeに挑んでみました。250pts問題を選んで、Problem Statementを読み、Constraintを理解し、手元の落書き帳でアルゴリズムをうんうん考えて、コードを書いてはテスト。テストが全て通ったところでsubmitしました。
しょぼっっっっっっっっっっ。(´・ω・`) 君にはがっかりだよ… (´・ω・`)
簡単と言われる問題に対して、
コードを書きあげるのに、こんなに苦労するなんて。自分の腑甲斐無さにこみ上げてくる涙を押し止めることができません。
高得点者のソースを見ながら自分の不足部分を考えてみました。
次はがんばるぞう。