perlでパスカル三角形

位置を指定するとその位置のパスカル三角形の値を返す。再帰で。

sub pascal{
 my ($n,$r) = @_;
 $n<2?1:$r==0?1:$n==$r?1:pascal($n-1,$r-1)+pascal($n-1,$r);
}

print pascal(0,0);
print "\n";
print pascal(1,0);
print pascal(1,1);
print "\n";
print pascal(2,0);
... 
print pascal(4,3);
print pascal(4,4);
print "\n";

三角形

$ perl pascal.pl 
1
11
121
1331
14641

この関数を利用して、最小完全ハッシュ関数を。

sub cn {
 my @table = @_;
 my ($hash,$n,$r) = (0,5,2);
 for (my $i=0;$n>$r && $r>0;$i++){
   $n--;
   $hash += pascal($n,$r--) if ($table[$i]);
 }
 return $hash;
}

が、「組合せ型の最小完全ハッシュ関数」の逆関数に持っていけなかった。再帰でパスカル三角形を右斜め下から左斜め方向に足していく組み合わせをつくっていって問い合わせの数値になったところのリストを返せばよいと思うんだけど、うまい書き方がみつからなかった。

SICP 3.13

リストの問題

(define (make-cycle x)
  (set-cdr! (last-pair x) x)
  x)

という定義に対し

gosh> (define z (make-cycle (list 'a 'b 'c)))
z
gosh> z
#0=(a b c . #0#)

これに(last-pair z)は無限ループ

Coma Out Of Body Electronica

Somaのなかでもダウンビート目の曲のコンピ

Coma Out Of Body Electronica

綺麗目でチルっぽいのが多いので、聴きやすい。

で、Envoy / Prologue 2 (Alignment Of The Planets)が収録されとる。

envoyのprologueはたぶん僕が院にあがるかあがらないかくらいの時に出たやつで、京阪三条のソレイユで買ったのを覚えている。っていうかこのヴァイナルはいまだに持ってる。ってもう10年以上も前の話なのか、、、、

化合物の3次元構造発生

smi23dっていう3D Coordinate Generatorが出てた。

おー素晴らしいよーマジで

後で触ってみよう。これが使えると色々できるようになりますな。

塩を取り除くコマンド

職場でいつものようにGUIをチマチマいじってたら、隣で塩を取り除くコマンドがないっちゅよと困っていた。openbabelにあるんじゃねーの?どれどれと探してみたけどなかった。さらに、いやあるだろふつーはとかいってググってもcgiみたいなもんしかみつからなかった。

smilesだったら.でsplitしてゴニョればOKなんだけど、座標情報落っこちるから、perlmolとかopenbabelで実装して任意のフォーマットにできるようなコマンドが欲しい。

それを仮にwashmolとすれば

washmol -i input.sdf [-o out.smi]

みたいに。デフォルトではインプットと同じフォーマットで返すような、調子いいコマンドが欲しくなった。

僕は塩を取り除くのはwashと言ってるんだけど、desaltとか色々と呼び方があんのね。

毎度!の冷やし

毎度!で冷やし。

毎度の冷やし

割とあっさり目だけど奥深い。なんつうか精進料理っぽい冷たいスープが、山葵かなんか入ってるような気がすんだけど。

美味いんだけど言葉であらわすのが難しい。

あと、毎度の麺もそうなんだけど細い麺ってつけ麺とか冷製にするとちょっと絡まりが強くて、箸でとりにくい気がするなぁとか食べてて思った。

メタモのタイムテーブルがでた

距離的にも、精神的にもルナーが遠い(ような気がする)

メタモのタイムテーブル

すその水ギョーザ

今年のB1にも出品されたすその水ギョーザを食べる機会があった。

先週末、阿波踊りのお祭りがあって、娘のユッキーが踊るらしいので録画隊として駆り出されたが暇すぎ。やることもないので、ビール飲んで巷で噂のすその水ギョーザつまんだ。

すその水ギョーザ

餃子なのにスイトンみたいで、しかも緑はモロヘイヤグリーン。謎の地元アイテムということで。

ちなみにモロヘイヤはよく食べるヨ。最近納豆とあえて食べるのがブーム

perlでPageRank

動かないのでこっちに書いておく。

どう書く?のお題でPageRankの計算を解いてたんだけどうまく動かない。

use Math::MatrixReal;

my $data = {
           1 => [2, 3, 4, 5, 7],
           2 => [1],
           3 => [1, 2],           4 => [2, 3, 5],
           5 => [1, 3, 4, 6],
           6 => [1, 5],
           7 => [5],
           };

sub pagerank {
 my $data = shift;
 my $rows = scalar(keys %$data);
 my $mat = Math::MatrixReal->new($rows,$rows);;

 while(my ($i, $link) = each %{$data}){
   for my $j (@{$link}){
     $mat->assign($j,$i,1/scalar(@{$link}));
   }
 }
 #print $mat;
 $det = $mat->det();
 print "det: ",$det,"\n";
}

pagerank($data);

実行結果

$ perl pr.pl 
det: -0

detが-0ってことは、複素数の計算ができてないとかそういうことかなぁ。全然わからんので書きかけで放り投げた。

個人用ツールバーフォルダにキーボードショートカットを使いたい

個人用ツールバーフォルダにfavidonだけ表示させて簡易ボタンとして使うのは便利だ。

だが、キーボードショートカットとかキーボードで操作できると便利だと思うんだがやり方がわからない。

Alt-bでたどるってのもぁ、、、