草季庵でコースと日本酒

御殿場の杉名沢あたりにある蕎麦屋さんで。

1212276734 1212276727

日本酒は「國香」「磯自慢」あたり。

1212276732 1212276722

蕎麦せんべいに混じった塩昆布の塩気がいいアクセントになって酒がうまい。

蕎麦豆腐と出し巻き卵

1212276709 1212276720

揚げ蕎麦がきとホタテのサラダ

1212276717 1212276724

鴨焼きと天ぷら

1212276711 1212276736

蕎麦と菓子

1212276713 1212276715

満足

SRM173-DIV2-500

splitができなくて難儀した。

というわけでxでsplit。substrで前から切り刻んでいく。

#include <vector>
#include <string>
#include <iostream>

using namespace std;

int main(){
  string str = "..x..x.xxx.xxx.....x.x...x..x.x....x.x...";
  int cutAt;
  while( (cutAt = str.find_first_of('x')) != str.npos ){
    if(cutAt > 0)
      {
       cout << str.substr(0, cutAt).size() << endl;
      }
    str = str.substr(cutAt + 1);
  }
}

あーこれだと最後のstringは何もしないな。

しま坂

YAPC::Asia 2008のお昼は両日ともここで。

1211631795 1211631797 1211631799 1211631811

つけ麺よりも普通のラーメンのほうがうまかった。

c++で降順にソート

三番目の引数に設定する

sort(vc.begin(), vc.end(), greater<int>());

または

sort(vc.rbegin(), vc.rend());

catalystのres-&gt;bodyにファイルハンドルを渡す

Catalyst::Plugin::Static::Simpleで静的にサーブしているpdfとかの文書ファイルに(ベーシックとか)なんか適当な認証をかけたくて悩んでた。

そういうファイルはApacheとかに任せれば解決するんだろうけど、残念ながらApache動かせないというシチュエーション。

散々悩んだあげく別にStatic::Simple使わなくていいじゃんということに気づいてしまい、おもむろにStatic::Simpleのソースを読み始めた。

どうせFile::Slurpでもしてbodyに出力してるんだろうなぁと思ってたんだけど違った。

if ( Catalyst->VERSION le '5.33' ) {
    # old File::Slurp method
    my $content = File::Slurp::read_file( $full_path );
    $c->res->body( $content );
}
else {
    # new method, pass an IO::File object to body
    my $fh = IO::File->new( $full_path, 'r' );
    if ( defined $fh ) {
        binmode $fh;
        $c->res->body( $fh );
    }
    else {
        Catalyst::Exception->throw( 
            message => "Unable to open $full_path for reading" );
    }
}

最近のバージョンはファイルハンドルをres->bodyに渡せるのか。IO::Allとかもいけんのかな?

どう書くの「出力の一時停止と再開」をperlのthreadで

書いてみた

最初に書いたのがこれ。

use strict;
use threads;
use threads::shared;

$| = 1; 

my $f : shared;
my $ob = threads->create(\&observe);
my $pr = threads->create(\&print_a); 

$ob->join();
$pr->join();

sub observe {
 my $i;
 while(1){
   $i = <STDIN>;
   chomp($i);
   exit if $i eq 'q';
   if ($i eq 'p'){
     $f == 1 ? $f-- : $f++;
   } 
 }
}

sub print_a {
 while(1){
   if($f == 1){
     print "a";
     sleep 1;
   } 
 }
}

Term::ReadLineがよくわからなかったので、あえて使わずに書いてみたら相当ダメな感じになってしまったので、Web+DB Pressを引っ張りだしてきて書き直して投稿。

つけ麺TETSU

品川駅の近くのとこのラーメン屋がいっぱいはいってるところ

1211631803 1211631809 1211631801

麺が太い、削り節が濃厚でうまい。ガシガシ食べる系。

SRM171-DIV2-250

"3d18"みたいな文字列を二つのintに分けるのにfindとsubstrを使ったが、

string dice = "3d18";
int j = dice.find("d");
int rolls = atoi(dice.substr(0,j).c_str());
int num = atoi(dice.substr(j+1,dice.length() - j - 1).c_str());

そういう場合にはsscanfでよいらしい。

string dice = "3d18";
int n,s;
sscanf( dice.c_str(), "%dd%d",&n,&s);

それにしてもsplitがないのが不便だな。

TopCoderをやってみたヨ

c++を学ぶのによさげなのでTopCoderのpracticeを解いていたんだけど、ちょうど深夜1時にSRM402があったので、ふと参戦してみようと思った。

で、参戦した。

250点と500点問題を解いた。250点問題は問題の意図を間違えていて、あわてて修正したのでかなりロスった。500はやけに簡単ダナァと思ったら、ダブルデータという落とし穴があった(僕を含め、何人かはこれで撃墜されてた)。

チャレンジタイムとかいう、バグリそうなテストデータを突っ込んでみようタイムがやたらと楽しい。見てただけだけど、ヒトのコードを見ながら色々考えるので、この時間は結構勉強になるな。

初参加の僕は真っ先に標的にされてあっさり500点問題を撃墜されたけど、いわゆる念の洗礼というやつか。

それから今回、同じ組には、初参加は僕の他に3人いたけど、そのうち2人は1問も解いてなかった。みんなそんな感じで参加しにくるのかと。

というわけで、緑色だ。

sortした時に最大値を得るのにnums[nums.size()-1]とやったけど、*--nums.end()でもいいのかね。最小値はnums[0]でも*nums.begin()でわかりやすいのに。

#include <iostream>
#include <vector>
#include <algorithm>

using namespace std;

int main () {
  vector <int> vec;
  vec.push_back(4);
  vec.push_back(7);
  vec.push_back(6);
  vec.push_back(3);
  sort(vec.begin(), vec.end());
  cout << *--vec.end() << endl; // 7
}

高砂と楯野川

最近飲んだやつ

高砂「純米」

1211631804

静岡の酒米「誉富士」を使用。誉富士はなんか酸味が足りないっていうか緩い感じになる気がする。高砂なのにどしっとした感じがしない。高砂の山廃はちょっと濃すぎる感があるので、このくらいがいいかも。

楯野川

1211631807

島田酒店で購入。すっきりしている感じ。