Monthly Archive for September, 2006

認められること

かえりみちにて

昨日眺めていたTV番組で、家をスタートレック風に改造しすぎて破産した人の話がありました。話自体は、以前/.JPとかで読んだことがあったので特に言うべきこともないのですが、彼をそこに駆りたてたものが胸に残りました。

最初はちょっとした気まぐれで改造してみたんだ。そしたら友達みんながすごいすごいと言ってくれた。そこで、もうちょっとやってみた。みんなは絶賛してくれたよ。あとはもう坂道を転がるだけ (ry

みたいなエピソードだったように覚えています。

人を動かすのに大きく影響するのは、他の人から認められるということなのだと思います。名誉を求めるということも、この認められるという気持ちを強くしていった結果なのかもしれません。

多くの人に認められるということは、他のものに代えることのできない財産なのでしょう。増やしていけるように毎日を過ごしていきたいと思うのでした。

one step further

頭をクラクラするくらい酷使しました。のーみそコネコネ

ComputerScienceの深淵に先がまだまだあること、データ構造アルゴリズムの知識とその応用がぜんぜんできていないことなんかを身に沁みて知ったのでした。

やっぱり自分の頭で考えたことしか身につかないということですね。久々に大学への数学でもやり直そうかしら。 ちゃらちゃらとスクリプトを書いてる場合じゃない。基本をがっちり抑えておかないと。

課題が分かったことで先へ進む道筋をつけることができた、という前向きな姿勢を貫くのです。


The Art of Computer Programming Volume1 Fundamental Algorithms Third Edition 日本語版
ドナルド・E・クヌース 有澤 誠 和田 英一 青木 孝 筧 一彦 鈴木 健一 長尾 高弘
アスキー (2004/02/18)
売り上げランキング: 39,871
おすすめ度の平均: 5
5 読者を未来へと連れて行く、古典中の古典
5 とにかく買え、苦しめ、そして感動しろ
5 超豪華な翻訳陣!

a very llittle step closer to

little bouquet

ここ数日やきもきとしていたストーリーに、ついに進展がみられました。よかった!

これまで、自分から外へと出ていくことはそんなに多くなかったように思います。 いま、自分から一歩を踏み出して、道を歩きはじめていることに、いちばん喜んでいるのは自分じゃないかな。ほんの少しの前進ですが、とにかく進み始めることができたこと、それをいま祝えること、そんなことがうれしい。

one step closerなのです。closer to ( じぶん | よりよい世界 | みんな | すべて! )

なにに近づこうとしてるのかは分からないけれど、いま立っているところから見える something better を目指して一歩を蹴り出していきたい。いこう。

砂漠 – 伊坂幸太郎

砂漠 を読み終えました。相変わらずの伊坂ワールドにめくるめく浸ることの快感です。 話の組み立てかたやちょっとしたフックがある毎に、「うまいなぁ」と零してしまいます。おもしろい。


砂漠
砂漠
posted with amazlet on 06.09.10
伊坂 幸太郎
実業之日本社 (2005/12/10)

CodeJam Qualification Round : SystemTestとおった

よかったー。 これでこのRoomでは11番ということになりました。750点問題が悔やまれてなりません。

しかし、こんなにもSystemTestでFailする人がいるとは… 早撃ちガンマンなだけではだめということなのですね。スピードと正確さでバランス良く解くのって難しそうだなぁと。

ランキングのスクリーンショット

ちょっと気になったのでとってみました。

Set 3の順位:

QualificationSet3

Set 3 Room 27の順位: ‘QualificationSet3-Room27

こんな感じでした。

Google CodeJam 2006 で使ったテンプレート

惨敗に終わったCodeJam 2006ですが、ちょっとだけTipsとか。

問題内容を公開してしまうのはルール上違反なのかもしれないので、問題とその解答は書きません。ですが、自分がCodeJamに望むにあたり、ちょっとでも早くコードを書き始めることができるようなテンプレートをつくっていました。 何かの役に立てればと思い公開してみます。

コードは続きにて。

工夫

  • 問題のクラス、メソッドなどをマクロにして差し替え可能に
  • テストケースをちょっとは簡単に記述できるように

使い方

  • XXXが書かれているコメントのところを、問題に合わせて書き直し
  • コンパイルオプションに -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専用になってしまっていたりと美しくありません。 でもまぁ今回に関しては実用に足りたかなと。

CodeJam Qualification Round 750点問題

ぬおおっ、こっちの方が素早く解けてしまったっっっ!! しかも解答内容に自信あるし。テストケースちゃんと全部通るし。

しまったなぁ、こっちを最初からやっとけば300点くらいはとれたかもだなぁ。

とか言っても、けっきょく300点くらいではこのRoomのベスト10に入れるか入れないかくらいの成績でしかないわけで。きびしいなぁ。

あと、いま割とさっくりとできたのは時間外だからプレッシャーが少なかったというのもあると思います。やはりまだまだです。

ちなみに問題は、Permanentに関するものでした。


追記 :Official Rules and Regulations を読んでも特に問題なさそうなので、問題の概要を加えました。

CodeJam Qualification Round 結果

91.62pts

だめだ… OTZ

詳細

  • Qualification Set 3 Room 27
  • C++で
  • 250点問題のみ :(
  • 問題の理解に11分 :(
  • ようやく全てのテストケースが通ったのでSubmitしたのが残り1分21秒、ぎりぎりすぎ :(
  • そんなに難しい問題ではなかったのにぃ :(
  • コードの行数 : 213 (テストコード含む)
  • 750点問題は覗いただけ
  • 現時点で自分のRoomの23番なのでだめでしょう
  • 1位の得点がずばぬけてる (955.78 / 1000)。ありえない
  • 2, 3位の得点は660-700とまだありえるレベル

これでSystem Testing Phaseで落とされたらさらにげんなりだなぁ。

もう少ししたら (あと1時間) 終了の時間です。 最終結果はどうなることやら。いちおう終わりのときを待ってみることにします。 待つ間に750問題をやってみよう。

反省

  • 問題の理解遅すぎ
  • いきあたりばったり
  • gdbとかつかってると遅すぎ
  • 普段からエラーチェックをコンパイラまかせにしてコードを書いてるから、一発で通るまともなコードが書けない
  • 頭の回転遅め
  • 解き方が2つあって、やや迷ってしまった
  • Python覚えることにしよう
  • というか、いまさらman atoiとかしてる時点でアウトかも >_< (どのヘッダをincludeしないといけないか忘れていた)

とにかく頭の回転を速くしないといかんと痛感しました。猛烈にトレーニングしないとまずすぎです。

しかし、決められた時間内で問題を解くなんて久しぶりでした。やっぱりこういうの好きなのかも。TopCoderで鍛え直そうかな。

CodeJam Qualification Round開始

いそいそと準備のためのコードとか書いてるうちにこんな時間になってしまいました…

今から参戦してきます。結果は1時間後に。

Hikiで使えるXML-RPC API

さっきの続き。

Hiki総本山を探したのですがなさそうなので、Hikiで使えるXML-RPCのAPIをざっとリストにしておきます。Hikiのバージョンは0.8.6で。 Rubyコードを読まないひと向けの情報かも。

  • wiki.getPage (page)
  • wiki.getPageInfo (page)
  • wiki.putPage (page, content, attributes)
  • wiki.getAllPages()

/hiki/xmlrpc.rbから抽出しました。

各APIについては、qwik.jp/wikibana-gihyo:WikiとXML-RPCあたりが詳しそうです。