jug7.com
[ home / cgi / juggler / column / diary / bbs / link / welcome ]
source : ジャグラー 設定信頼度 2
#!/usr/bin/perl
# ジャグラー 設定配分状況、打ち手の狙う設定とGET率を加味したデータからの設定信頼度
$cginame = 'js2.cgi';
$title = 'ジャグラー データからの設定信頼度 2';
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, $distr, $target, $get) = @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>
設定状況 <input type='text' size=20 name='distr' maxlength=15 value='$distr'><br>
狙う設定 <input type='text' size=3 name='target' maxlength=6 value='$target'><br>
GET率 <input type='text' size=3 name='get' maxlength=3 value='$get'><br>
<input type='submit' value="開始">
<br><br><a href=\'js2_comment.html\'>使用説明</a>
</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;
}
@distr = split(//, $distr);
for ($i=0; $i<=$#distr; $i++) {
if ($distr[$i]==1) { $distr2[0]++; }
elsif ($distr[$i]==2) { $distr2[1]++; }
elsif ($distr[$i]==3) { $distr2[2]++; }
elsif ($distr[$i]==4) { $distr2[3]++; }
elsif ($distr[$i]==5) { $distr2[4]++; }
elsif ($distr[$i]==6) { $distr2[5]++; }
}
@target = split(//, $target);
for (@distr) {
if (!($_>=0 && $_<=6)) {
print '<center><font size=4 color=\'red\'><b>ERROR ! (設定は1〜6まで)</b></font></center>';
print '<a href=\'../index.html\'>top へ戻る</a>',"\n",'</body></html>';
exit;
}
}
for (@target) {
if (!($_>=0 && $_<=6)) {
print '<center><font size=4 color=\'red\'><b>ERROR ! (設定は1〜6まで)</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 ($i=0; $i<=5; $i++) {
$p1 = ($big[$i]/$rand)**$big * (1-$big[$i]/$rand)**($play-$big);
$p2 = ($reg[$i]/$rand)**$reg * (1-$reg[$i]/$rand)**($play-$reg);
$p3 = $p1 * $p2;
$t_bigp += $p1; push(@bigp,$p1);
$t_regp += $p2; push(@regp,$p2);
$t_brp += $p3; push(@brp, $p3);
}
# 設定配分状況を加味する
if ($distr) {
$t_bigp = $t_regp = $t_brp = 0;
for ($i=0; $i<=5; $i++) {
$bigp[$i] = ($bigp[$i]*$distr2[$i]/($#distr+1));
$regp[$i] = ($regp[$i]*$distr2[$i]/($#distr+1));
$brp[$i] = ($brp[$i] *$distr2[$i]/($#distr+1));
$t_bigp += $bigp[$i];
$t_regp += $regp[$i];
$t_brp += $brp[$i];
}
}
# 狙う設定とGET率を加味する
if ($target) {
$t_bigp = $t_regp = $t_brp = 0;
for ($i=0; $i<=5; $i++) {
for (@target) {
if ($_ == ($i+1)) { $flag = 1; last; } else { $flag = 0; }
}
if ($flag) {
$bigp[$i] = $bigp[$i]*$get/($#target+1);
$regp[$i] = $regp[$i]*$get/($#target+1);
$brp[$i] = $brp[$i] *$get/($#target+1);
} else {
$bigp[$i] = $bigp[$i]*(100-$get)/(6-$#target+1);
$regp[$i] = $regp[$i]*(100-$get)/(6-$#target+1);
$brp[$i] = $brp[$i] *(100-$get)/(6-$#target+1);
}
$t_bigp += $bigp[$i];
$t_regp += $regp[$i];
$t_brp += $brp[$i];
}
}
# 百分率にする
for ($i=0; $i<=5; $i++) {
$per1 = &point(($bigp[$i]/$t_bigp*100),2) if $t_bigp;
$per2 = &point(($regp[$i]/$t_regp*100),2) if $t_regp;
$per3 = &point(($brp[$i]/ $t_brp*100), 2) if $t_brp;
push(@nb,$per1);
push(@nr,$per2);
push(@nbr,$per3);
}
# 結果の表示
print '<br>',"<b>BR合成</b> (1/$brp)<br>",'BRからの設定信頼度<br>';
for ($i=1; $i<=6; $i++) { print "設 $i -> $nbr[$i-1] %<br>\n"; }
print '<br>',"BIG $big 回 (1/$bp)<br>",'BIG からの設定信頼度<br>';
for ($i=1; $i<=6; $i++) { print "設 $i -> $nb[$i-1] %<br>\n"; }
print '<br>',"REG $reg 回 (1/$rp)<br>",'REG からの設定信頼度<br>';
for ($i=1; $i<=6; $i++) { print "設 $i -> $nr[$i-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 ]