jug7.com
[ home / cgi / juggler / column / diary / bbs / link / welcome ]


source : ジャグラー 設定信頼度


#!/usr/bin/perl
# ジャグラー 二項分布によるデータのみからの設定信頼度

$cginame = 'js.cgi';
$title   = 'ジャグラー データからの設定信頼度';

if ($ENV{'REQUEST_METHOD'} eq 'POST') {
    read (STDIN, $input, $ENV{'CONTENT_LENGTH'});
}
foreach $str (split(/&/,$input)) {
    ($name,$value) = split(/=/, $str);
    push(@input, $value);
}
($play, $big, $reg) = @input;

print "Content-Type: text/html\n\n";


# ヘッダとフォームの表示
print <<"__ HTML __";
<!DOCTYPE html PUBLIC '-//W3C//DTD HTML 4.01 Transitional//EN'>
<html lang='ja'>
<head>
<meta http-equiv='Content-Type' content="text/html; charset=shift_jis">
<title>jug7.com - cgi $title</title>
 <style type="text/css"> <!--
   A:hover {color:#ff0000;}
 --></style>
</head>
<body text='#000000' bgcolor='#ffffff' link='#0000ff' alink='#ff0000' vlink='#0000cc'>
<hr>
<b>$title</b><br>
<form action='$cginame' method='POST'>
プレイ数 <input type='text' size=6 name='play' maxlength=4 value='$play'><br>
BIG   <input type='text' size=3 name='big' maxlength=4 value='$big'><br>
REG   <input type='text' size=3 name='reg' maxlength=4 value='$reg'><br><br>
<input type='submit' value="開始">
</form>
__ HTML __


# エラーチェックとGET送信
if ($ENV{'REQUEST_METHOD'} ne 'POST') {
    print '<a href=\'../index.html\'>top へ戻る</a>',"\n",'</body></html>';
    exit;
}
if($play > 9999) {
    print '<center><font size=4 color=\'red\'><b>ERROR ! (プレイ数制限)</b></font></center>';
    print '<a href=\'../index.html\'>top へ戻る</a>',"\n",'</body></html>';
    exit;
}

# jug data
$rand = 16384;
@big = (55, 60, 63, 67, 68, 68); # /16384
@reg = (25, 26, 27, 30, 35, 45);

#------------
#  計算開始
#------------
$big = 0 if !$big;
$reg = 0 if !$reg;

$bp  = &point(($play/$big), 2) if $big;
$rp  = &point(($play/$reg), 2) if $reg;
$br  = $big + $reg;
$brp = &point(($play/$br), 2) if $br;

for ($x=0; $x<=5; $x++) {
    $p1 = ($big[$x]/$rand)**$big * (1-$big[$x]/$rand)**($play-$big);
    $p2 = ($reg[$x]/$rand)**$reg * (1-$reg[$x]/$rand)**($play-$reg);
    $p3 = $p1 * $p2;

    $t_bigp += $p1; push(@bigp,$p1);
    $t_regp += $p2; push(@regp,$p2);
    $t_brp  += $p3; push(@brp, $p3);
}

# 百分率にする
for ($x=0; $x<=5; $x++) {
    $per1 = &point(($bigp[$x]/$t_bigp*100),2) if $t_bigp;
    $per2 = &point(($regp[$x]/$t_regp*100),2) if $t_regp;
    $per3 = &point(($brp[$x]/ $t_brp*100), 2) if $t_brp;

    push(@nb,$per1);
    push(@nr,$per2);
    push(@nbr,$per3);
}

# 結果の表示
print '<br>',"BR合成 (1/$brp)<br>",'BRからの設定信頼度<br>';
for ($x=1; $x<=6; $x++) { print "設 $x -&gt; $nbr[$x-1] %<br>\n"; }

print '<br>',"BIG $big 回 (1/$bp)<br>",'BIG からの設定信頼度<br>';
for ($x=1; $x<=6; $x++) { print "設 $x -&gt; $nb[$x-1] %<br>\n"; }

print '<br>',"REG $reg 回 (1/$rp)<br>",'REG からの設定信頼度<br>';
for ($x=1; $x<=6; $x++) { print "設 $x -&gt; $nr[$x-1] %<br>\n"; }


print '<br><br><a href=\'../index.html\'>top へ戻る</a><hr></body></html>';

exit;

# 少数を四捨五入して指定の桁にする
sub point {
    my($value, $fig, $x);
    ($value, $fig) = @_;

    $value = int($value * (10 ** $fig) + 0.5) / (10 ** $fig);
    if ($value =~ /(\d+)\.(\d+)/) { $x = $2; }
    elsif ($value !~ /\./)        { $x =''; $value .= '.'; }
    $value = $value.'0' x ( $fig - length($x) );
    return $value;
}


[ home / cgi / juggler / column / diary / bbs / link / welcome ]