カードが被らない確率

問題:

110枚のカードが (19,26,26,17,14,8) という枚数ごとに、種類に分けられているとする(たとえば、赤19枚、青26枚…のように考えてください)。

このカードをよくシャッフルして、上から4枚めくるとき、カードが4種類全て違うものになる、確率はどれくらいか。

一応サンファンの話題。このゲームには「金鉱掘り」というカードがあって、これが建っていると、他人が「採掘」行動をしたとき、おこぼれでカードが貰えるようになっている。貰える条件というのが、上に書いたように、「山札から4枚連続でめくって、その額面コストが全部違う場合」ということになってるわけだ。つまりそこだけ運試し。で、それはどれくらいの運試しなのだろう、ということ。

出るときはどんどん出るし、出ないときは出ない(当たり前だ)。前から仲間内で話題にはしていたのだが、やはり気になる人は他にもいるらしく、今日見た、サンファンの情報をまとめてられるページにもコスト対効果のことが書かれてあった。

http://www15.ocn.ne.jp/~sirou/Boardgame/03/sanjuan/index.html

1%以下というのは「うそぉ?」だったので、頭の体操がてらperlで計算してみた。書き方考え方その他違ってるかも…。

@arr_cards = (19,26,26,17,14,8); # かぶってはいけない種類ごとの枚数
$allcards  = 110; # 全カード枚数
$initdepth = 4;   # 何枚めくるか

print &drawpile($allcards,$initdepth,@arr_cards) . "\n";

sub drawpile{
    my($allcards , $depth , @restarr) = @_;
    my $allRatio = 0;
    my $currRatio = 0;
    my $restRatio = 0;
    my $i;
    $depth--;
    for ($i = 0 ;  $i <= $#restarr ; $i++){
        $currRatio = $restarr[$i] / $allcards;
        if ($depth > 0){
            @newarr = @restarr;
            splice(@newarr , $i , 1);
            $allcards--;
            $restRatio = &drawpile($allcards , $depth , @newarr);
            $currRatio *= $restRatio;
        }
        $allRatio += $currRatio;
    }
    return($allRatio);
}

こたえ、0.294872453182322。
…えっ、3割? 絶対嘘だ。