プログラミングRuby

Moose CookBookを読んでいたら、Rubyも気になりだしたのでおもむろにプログラミングRuby を読み出した(以前買った初版のほうだけど)。

ProductName プログラミングRuby 第2版 言語編
Dave Thomas,Chad Fowler,Andy Hunt
オーム社 / ¥ 3,990 ()
通常24時間以内に発送

というわけで一通り読み終えた。

土曜日で集中力が続く日はよいなぁ。

Moose cookbookを読み始めた

ちょっと余裕が出てきたのでここらでMooseなど

.Netでpython実装とかjavaでpython実装とかそういうのに比べて、perlでperlを変えていくサマはまるで、今週号のハミィのようだと思った。

ProductName ピューと吹く!ジャガー1 「ふえとポエムと、時々、オトン」

Happinet(SB)(D) / ¥ 1,980 (2008-07-25)
近日発売 予約可

となるとironpython,jythonはハメ字郎の作る笛の如きものなのかね。

と娘と追いかけっこをしながら思った、週末の夜

SRM404

灰色に落ちた。というか実力に見合った色かもしれん。

  • 250: 問題をちゃんと理解してなくて撃沈
  • 500: 素直にとけば良さげな問題だったが、なんかおかしな事になって終了
  • 1000: unopened

500は後でちゃんと解く。

AOHARU YOUTH

シャッフルしてたらひっかかったので、アルバム通して聴いたけど、 やっぱいいですのー。

ProductName HIGHVISION
スーパーカー
キューンレコード / ¥ 3,059 (2002-04-24)
通常24時間以内に発送

そういえば、エウレカの時は日曜ちゃんと朝起きてたなぁ。 それ以来テレビはほとんど見てなくて、最近「電脳コイル」と「精霊の守人」を立て続けにみた。

Catalyst+jQuery+Flotの組み合わせ

Catalyst::View::JSONとjQueryの組み合わせでJSONデータのやりとりは簡単にできるのでたまにグラフを書きたくなったらFlotを使うとよさげな感じ

あんま凝ったことはできないのでちょっとした折れ線グラフかヒストグラムな用途

tickに数字以外のものを表示させるメモ

data:  [[0,2],[1,4],[2,6]]
ticks: [[0, "red"], [1, "brue"], [2, "pink"]]

という感じで xの値と対応させたい文字列を合わせてticksに指定する。

SRM176-DIV2-500

ベクタのベクタを作ったらなんだかpush_backが多くて見にくいなと思ってたら stringの二次元配列を作ってる解答があったので見習う。

あと、ベクタのベクタを作る場合にダイヤモンドの間にスペースを入れないとコンパイルエラーになる理由がよくわからん。

using namespace std;
class Matching {
public:
  vector <string> findMatch(vector <string> first, vector <string> second) {
    vector <string> cards, colors, shadings, numbers, ret;
    cards.push_back("CIRCLE");   cards.push_back("SQUIGGLE");   cards.push_back("DIAMOND");
    colors.push_back("RED");     colors.push_back("BLUE");      colors.push_back("GREEN");
    shadings.push_back("SOLID"); shadings.push_back("STRIPED"); shadings.push_back("EMPTY");
    numbers.push_back("ONE");    numbers.push_back("TWO");      numbers.push_back("THREE");
    vector < vector<string> > data;
    data.push_back(cards);
    data.push_back(colors);
    data.push_back(shadings);
    data.push_back(numbers);
    for(int i=0;i<first.size();i++){
       if(first[i] == second[i]){
    ret.push_back(first[i]);    
      }else {
     for(int j=0;j<data[i].size();j++){
      if(data[i][j] != first[i] && data[i][j] != second[i]) ret.push_back(data[i][j]);
    }
      }
    }
    return ret;
  }

ライフサイエンス統合DBのこと

PNEのバックナンバーが探せるってのが便利。早速自分の書いたやつを検索して「おーあるじゃん」とかやってみたり。

あと、OpenIDサーバーが立っていてなんじゃ?と思ってたら、研究開発創作日誌に書いてあった。

でも、IDの使い回し以外に他にもなんか考えているんだろうか?気になる。

AnnoCPANの論文版みたいなのできたらええかもしれんなぁといつも思うけど、OpenIDとか組み合わせるともっと面白いかもしれんなぁ。

YAPCのトーク聴いとけばよかったなぁ。

というわけでいまからニコニコで見る

追記 08.06.03

AnnoCPANはCPANのPODにアノテーションつけられるサービスです。

論文もああいう風にパラグラフとかのもっと細かい単位でアノテーションつけたりできればよいんではなかろうかと思ってます。

IFは雑誌のおおざっぱな指標にしかならなくて、個々の記事の質はやっぱまちまちだからなーなんて思ったりしてるので、なんか適当にアイデンティティを保証さえできれば、どういう論文にどういうアノテーションをつけてるかとかで(アノテーター自体の)クオリティとか把握しやすいと思うんですよね。

あと、そういう場合にpagerank的なやり方でなんかファクター作れんのかなぁとかそういうことに興味があったりとか。

SRM175-DIV2-550

過半数とるまで、最下位の票を無効にしてもう一度投票し直しまっせっていう問題。

投票者は候補者をランク付けしておいて、一位の候補者が過半数を取っていればいいし、もしそうでなかったら、最下位に投票した投票者の票の次のランクの候補者に票を割り振っていくという。

シュワルツ変換でソートをかけていって、一位が過半数とってたらその候補者をreturnすればいいし、そうでなかったら、最下位候補者を投票の文字列から除いて再度やればいいのはわかったんだけど、 c++での書き方がわからん。

結局こんな感じになってしまった。一位と最下位調べるのにmapで組を作っておいて、イテレータで走査してminとmaxを記憶というやり方までは一緒。そのあと、最下位を消すのがわからなかったけど、この解答ではfindして見つかったindexをeraseしてた、なるほど。

perlだと

@votes = sort {$b->[1] <=> $a->[1]} map {[$_,$votes->{$_}]} split(//,$candidates);

っていうふうにつなげられるのがよいんだけどな。

$ballots = [map {s/$votes[-1]->[0]//;$_ } @$ballots];

あとCだと文字列の置換がまだしっくりこない。

perlの解答

sub outcome {
  my ($candidates, $ballots) = @_;
  my $total = @$ballots;
  return "" if  $total == 0;
  my($votes, @votes);
  while(1) {
    $votes = count_vote($ballots);
    @votes = sort {$b->[1] <=> $a->[1]} map {[$_,$votes->{$_}]} split(//,$candidates);
    return $votes[0]->[0] if($votes[0]->[1] * 2 >= $total);
    $ballots = [map {s/$votes[-1]->[0]//;$_ } @$ballots];
    $candidates =~ s/$votes[-1]->[0]//;
  }
}

sub count_vote {
  my $ballots = shift;
 my $counts = {};
  $counts->{substr($_,0,1)}++ for (@$ballots);
  return $counts;
}

print  outcome("ABC",["ACB", "BCA", "ACB", "BCA", "CBA"]);                       # B
print  outcome("DCBA",["ACBD", "ACBD", "ACBD", "BCAD", "BCAD", "DBCA", "CBDA"]); # B
print  outcome("ACB",["ACB", "BCA", "ACB", "BCA", "ACB", "BCA", "CBA", "CAB"]);  # ""
print  outcome("CAB",["ACB", "BCA", "ACB", "BCA", "ACB", "BCA", "CAB", "CAB"]);  # A
print  outcome("Z",["Z"]);                                                       # Z

ルービックキューブ二種

だいぶ前にRubic キューブと置換の乗算を読んで以来、ルービックキューブが欲しくてたまらなかったのだけど、ふと2x2のキューブがあるという事実を発見し、セットで購入。

ProductName ルービックの2×2 キューブ(CUBE)

メガハウス / ¥ 1,260 (2002-03-20)
通常24時間以内に発送

ProductName ルービックキューブ (6面完成攻略書付)

メガハウス / ¥ 2,079 (2005-01-23)
通常24時間以内に発送

2x2は娘が遊ぶかなと期待してたんだけど、揃える以前にまわす事ができず、怒って床に叩き付けてた。

とはいえ、自分で遊んでも、全面揃えるのは結構難しい。あとでhaskellのやつに倣って2x2の解き方を書いてみる。

マリオカート wii

二歳の娘でもハンドル握らせればできるかなと思って購入してみた。

ProductName マリオカートWii(「Wiiハンドル」×1同梱)

任天堂 / ¥ 5,800 (2008-04-10)
通常24時間以内に発送

が、無理だった。

wifi対戦がやたらと楽しい。ちょっと精進して勝てるように頑張るかも。