初めてのRubyを読む

最近買った数冊のうちの一冊

ProductName 初めてのRuby
Yugui
オライリージャパン / ¥ 2,310 ()
通常24時間以内に発送

アイデンティテイ

>> 0.object_id
=> 1
>> 1.object_id
=> 3
>> 2.object_id
=> 5

整数のobject_idは二倍して1を足した整数?だとすると偶数部分は何なの?

スイーツ:-)

富士のキャトルエピスで。

1215936032 1215936035

1215936041

チェリーのタルトを買ったのだけど、家に帰ったら娘がごねて(エクレアじゃなくて)チェリーのタルトを食べたいと言い出したので、しょうがなくエクレアを。これはこれで美味しいのでまぁいいか的な判断。

あとは、先週末の東京出張のお土産で駅構内にあるクイーンアリスで適当に。

1215936030 1215936039

こっちはどれをチョイスしても最終的に自分の好きなものが選択されるように計算して。

ベランダコーディング

今日も風がとても気持ちよかったので、朝夕はベランダにアウトドアチェアーを持ち出して、缶ビール(夕方)を片手にmacbookと戯れる。

1215936037

快適。意外に集中できていい感じ。この調子で、BBQでTDDとか横文字三つを並べる駆動開発とかやれたらいいんだけど、さすがにマンションのベランダで炭をおこすのは無理か、、、

無線LAN完備のキャンプ場とかないかな。

C++クックブック

一通り読んだ。

ProductName C++クックブック
D. Ryan Stephens,Christopher Diggins,Jonathan Turkanis,Jeff Cogswell
オライリー・ジャパン / ¥ 4,515 ()
通常24時間以内に発送

が、3章の文字列処理ぐらいしかちゃんと理解できてないような。まぁ、クックブックなので参照したい時にひいて、理解を深める本なので、大体どういう事が書いてあるかをざっと掴んでおけばいい気もするけど。

読んで学ぶために買うならロベールか。

ProductName ロベールのC++入門講座
ロベール
毎日コミュニケーションズ / ¥ 3,990 ()
通常24時間以内に発送

SRM409-DIV2-500

indexが昇順になるように文字列を連結していってその長さを答える

最初はindexを増やしていきながらマッチする文字列領域を決めていくという流れでコードを書いたのだけどそれだとシステムテストが通せなかったので、あきらめた。

{"aaaaaaaaaa", "a", "ab", "a", "abbbb"}

が14でなくて16になってしまう。

結局マージしたい文字列がsuperstringに含まれるかfindして、見つかればインデックスを書き換えて次の文字をマージしていく。含まれない場合はオーバーラップしている部分を一文字ずつ減らしながら探っていく方法に変えた。

class OrderedSuperString {
public:
  int getLength(vector <string> words) {
    string superstring = words[0];
    int ind = 0;
    if(words.size() == 1) return superstring.length();

    for(int i=1;i<words.size();++i){
      int matched = superstring.find(words[i],ind);
      if(matched != string::npos){ 
        ind = matched; continue;
      }

      int overlapped; 
      for(overlapped=min(superstring.length()-ind,words[i].length());overlapped>0;--overlapped){
        if(superstring.substr(superstring.length()-overlapped,overlapped) == words[i].substr(0,overlapped)) break;
      }
      ind = superstring.length()-overlapped;
      superstring += words[i].substr(overlapped,words[i].length()-overlapped);
    }
    return superstring.length();
  }
};

かれーの店 うどん

五反田のうどんにカレーを食べに。軽く夏日でこのタイミングでカレーを食べるのはいかがなものかと思ったが、東京に出てくるのも久々なので。

1215844965

目当ては季節の夜かれー。

1215844964

酸味と辛さがスカッとくる。次に東京行けるのいつかなー。

ネットわらしべ長者物語

「ブログって情報発信でしょ」とか。そんな感じで職場の同僚が話をしたけど、あれは明らかに情報収集ツールだよなと思ふ。

自分のサイトをブックマークしたユーザーのダイアリをRSSリーダーで購読したり、自分のブログをLDRに登録したヒトが他に何を登録しているのかチェックしつつ面白そうなサイトをLDRに突っ込んだりとか、コメントのやりとり以外にもwin-winの関係を築けるのが良いのだと思うのだけど。

なんかバランスよく価値観をマッチングさせてるのが心地良いんだよなと。

で、わらしべ長者のお話って物理的な等価交換ネタだったけど、ブログ(を含めた最近のツール)ってのは、win-winで自分を成長させる情報の等価交換物語とも捉えられるよなとふと思った。

わらしべ長者の主人公は単なるお人好しで運が良かった的なストーリーになっとるけど、実は緻密に計算された人生計画だったりして。

加爾基 精液 栗ノ花

葬列と宗教

ProductName 加爾基 精液 栗ノ花
椎名林檎
EMIミュージック・ジャパン / ¥ 3,059 (2008-07-02)
通常24時間以内に発送

SRM190-DIV2-500

文字当て

countメソッドを覚えたのでメモ。

class Hangman {
public:
  string guessWord(string feedback, vector <string> words) {
    vector <string> candidates;

    for(int i=0;i<words.size();i++) {
      if(words[i].length() == feedback.length()) {
    vector <char> used,fused;
    int mismatched =0;
    for(int j=0;j<feedback.length();j++) {
      if(feedback[j] != '-' && feedback[j] != words[i][j]) {
        mismatched++;
      }
      else if (feedback[j] != '-' && feedback[j] == words[i][j]) {
        int fc = (int) count(feedback.begin(), feedback.end(), feedback[j]);
        int wc = (int) count(words[i].begin(), words[i].end(), feedback[j]);
        if (fc != wc) mismatched++;
      }
      }
      if(mismatched>0) continue;
        candidates.push_back(words[i]);
      }
    }
    if (candidates.size() == 1) return candidates[0];
    else return "";
  }
};

SRM189-DIV2-250

cutoffに合わせて丸める

  int round(string num, string cutoff) {
    stringstream ss,ss2;
    int i;
    double f,c;
    ss << num;
    ss >> f;
    ss2 << cutoff;
    ss2 >> c;
    i = int(f);
    if(f-i > c) i++;
    return i;
  }

それだけ