Drkcore

23 08 2007 perl SICP Tweet

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;
}

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

About

  • もう5年目(wishlistありマス♡)
  • 最近はPythonとDeepLearning
  • 日本酒自粛中
  • ドラムンベースからミニマルまで
  • ポケモンGOゆるめ

Tag

Python Deep Learning javascript chemoinformatics Emacs sake and more...

Ad

© kzfm 2003-2021