jug7.com
[ home / cgi / juggler / column / diary / bbs / link / welcome ]
source : パチスロ簡易計算機
#!/usr/bin/perl
# パチスロ簡易計算機
$cginame = 'calc.cgi';
$title = 'パチスロ簡易計算機';
print "Content-Type: text/html\n\n";
if ($ENV{'REQUEST_METHOD'} eq 'POST') {
read (STDIN, $input, $ENV{'CONTENT_LENGTH'});
foreach $str (split(/&/,$input)) {
($key,$value) = split(/=/, $str);
$in{$key} = $value;
}
}
$in{'sub'} = 1 if !$in{'sub'};
$chk[$in{'sub'}] = 'checked';
$in{'rate1'} = 5 if !$in{'rate1'};
$in{'point2'} = 3 if !$in{'point2'};
$in{'point4'} = 3 if !$in{'point4'};
# ヘッダとフォームの表示
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'>
<font size=7><b><font face='Times New Roman,Times'>jug</font><font face='Bookman Old Style,arial black,Helvetica Black'>7</font><font face='Times New Roman,Times'>.com</font></b></font>
<hr color='#00aa00'>
<strong>[ <a href='../index.html'>home</a> / <a href='index.html'>cgi</a> / <a href='../jug/index.html'>juggler</a> / <a href='../column.html'>column</a> / <a href='../diary/index.html'>diary</a> / <a href='bbs.cgi'>bbs</a> / <a href='../link.html'>link</a> / <a href='../intro.html'>welcome</a> ]</strong>
<div align='center'><h2>$title</h2></div>
<hr width='70%'>
<div align='right'>[ <a href='calc_memo.html'>memo</a> / <a href='calc.html'>source</a> ]</div>
<br><br><center>
<form action='$cginame' method='POST'>
<table border=1 align='center' cellspacing=0><tr valign='top'><td>
<table border=0 cellspacing=0 cellpadding=2 width='100%'>
<tr><td bgcolor='#ffffcc' colspan=2><input type='radio' name='sub' value=1 $chk[1]> <b>機械割の計算</b></td></tr>
<tr><td>プレイ数</td><td><input type='text' size=14 name='play1' value="$in{'play1'}"> P</td></tr>
<tr><td>投資</td><td><input type='text' size=14 name='in1' value="$in{'in1'}"> k</td></tr>
<tr><td>獲得コイン</td><td><input type='text' size=14 name='coin1' value="$in{'coin1'}"> 枚</td></tr>
<tr><td>換金率</td><td><input type='text' size=2 name='rate1' maxlength=3 value="$in{'rate1'}">
<font size=2>枚 = 100円</font></td></tr>
</table>
</td><td>
<table border=0 cellspacing=0 cellpadding=2 width='100%'>
<tr><td bgcolor='#ffffcc' colspan=2><input type='radio' name='sub' value=2 $chk[2]>
<b>確率の計算 ( <font size=2>単純な割り算</font> )</b></td></tr>
<tr><td>プレイ数</td><td><input type='text' size=14 name='play2' value="$in{'play2'}"> P</td></tr>
<tr><td>当選</td><td><input type='text' size=14 name='hit2' value="$in{'hit2'}"> 回</td></tr>
<tr><td>表\示</td><td><font size=2>小数点 第
<input type='text' maxlength=2 size=2 name='point2' value="$in{'point2'}"> 桁<br>まで表\示</font></td></tr>
</table>
</td><td>
<table border=0 cellspacing=0 cellpadding=2 width='100%'>
<tr><td bgcolor='#ffffcc' colspan=2><input type='radio' name='sub' value=5 $chk[5]>
<b>組み合わせの計算</b></td></tr>
<tr><td><input type='text' size=7 name='str1' value="$in{'str1'}"> C <input type='text' size=7 name='str2' value="$in{'str2'}"></td></tr>
<tr><td><br>例)10 C 3<br><font size=2>10個の中から3個選ぶ<br>組み合わせの場合を計算。</font></td></tr>
</table>
</td>
</tr><tr valign='top'><td>
<table border=0 cellspacing=0 cellpadding=2 width='100%'>
<tr><td bgcolor='#ffffcc' colspan=2><input type='radio' name='sub' value=3 $chk[3]> <b>合成確率の計算</b></td></tr>
<tr><td>確率 1</td><td>1/ <input type='text' size=10 name='p31' value="$in{'p31'}"></td></tr>
<tr><td>確率 2</td><td>1/ <input type='text' size=10 name='p32' value="$in{'p32'}"></td></tr>
<tr><td>確率 3</td><td>1/ <input type='text' size=10 name='p33' value="$in{'p33'}"></td></tr>
<tr><td>確率 4</td><td>1/ <input type='text' size=10 name='p34' value="$in{'p34'}"></td></tr>
</table>
</td><td>
<table border=0 cellspacing=0 cellpadding=2 width='100%'>
<tr><td bgcolor='#ffffcc' colspan=2><input type='radio' name='sub' value=4 $chk[4]> <b>期待値の計算</b></td></tr>
<tr><td>プレイ数</td><td><input type='text' size=14 name='play4' value="$in{'play4'}"> P</td></tr>
<tr><td>確率</td><td>1/ <input type='text' size=10 name='p4' value="$in{'p4'}"></td></tr>
<tr><td>表\示</td><td><font size=2>小数点 第
<input type='text' maxlength=2 size=2 name='point4' value="$in{'point4'}"> 桁<br>まで表\示</font></td></tr>
</table>
</td><td> </td>
</tr>
</table><br><font size=2>計算したい項目にチェックをつけてください。</font><br><br>
<input type='submit' value="計算開始">
</form></center>
__ HTML __
# エラーチェックとGET送信
if (grep { /[^\d\.]/ } values %in) { $error = 1; $er_msg = '不適切な文字が記入されています。'; };
if ($ENV{'REQUEST_METHOD'} ne 'POST') { $error = 1; $er_msg = 0; }
if ($er_msg) {
print q{<center><b><font color='red' size=4>*** ERROR !! ***</font><br><br>},"\n";
print "$er_msg</b></center>\n";
}
if ($error) {
print '<br><br><br><br><br>';
print q{<div align='right'>[ <a href='calc_memo.html'>memo</a> / <a href='calc.html'>source</a> ]</div>};
print q{<strong>[ <a href='../index.html'>home</a> / <a href='index.html'>cgi</a> / <a href='../jug/index.html'>juggler</a> / <a href='../column.html'>column</a> / <a href='../diary/index.html'>diary</a> / <a href='bbs.cgi'>bbs</a> / <a href='../link.html'>link</a> / <a href='../intro.html'>welcome</a> ]</strong>};
print '</body></html>';
exit;
}
#-----------
# 計算開始
#-----------
if($in{'sub'} == 1) { # 実戦から機械割の計算
$wari = ($in{'coin1'}-$in{'in1'}*50)/($in{'play1'}*3) *100+100 if($in{'play1'});
$wari = &point($wari,3);
$shu = ($in{'coin1'}*100/$in{'rate1'}-$in{'in1'}*1000)/($in{'play1'}*3*20) *100+100 if($in{'play1'});
$shu = &point($shu,3);
print '<center><b>---- 機械割の計算 ----<br><br>';
print "機械割は <font color='blue' size=4>$wari %</font><br>";
print "収支割は <font color='blue' size=4>$shu %</font></b></center>";
} elsif($in{'sub'} == 2) { # 確率の計算
$prob = &point(($in{'play2'}/$in{'hit2'}), $in{'point2'}) if($in{'hit2'});
$prob2 = &point(($in{'hit2'}/$in{'play2'}*100), $in{'point2'}) if($in{'play2'});
$msg = $in{'point2'}+1;
print '<center><b>---- 確率の計算 <font size=2>( 単純な割り算 )</font> ----<br><br>';
print "確率は <font color='blue' size=4>1/$prob</font><br>( $prob2 % )</b><br>";
print "<font size=2>( 小数点第 $msg 位を四捨五入。)</font></center>";
} elsif($in{'sub'} == 3) { # 合成確率の計算
$p1 = 1/$in{'p31'} if $in{'p31'};
$p2 = 1/$in{'p32'} if $in{'p32'};
$p3 = 1/$in{'p33'} if $in{'p33'};
$p4 = 1/$in{'p34'} if $in{'p34'};
$prob = 1/($p1+$p2+$p3+$p4); $prob = &point($prob,3);
print '<center><b>---- 合成確率の計算 ----<br><br>';
print "合成確率は <font color='blue' size=4>1/$prob</font></b></center>";
} elsif($in{'sub'} == 4) { # 期待値の計算
$exp = $in{'play4'}/$in{'p4'} if $in{'p4'};
$sd = sqrt($exp*(1-1/$in{'p4'}));
$mpsd = $exp+$sd;
$mpsdp = &point(($in{'play4'}/$mpsd),$in{'point4'});
$mmsd = $exp-$sd;
$mmsdp = &point(($in{'play4'}/$mmsd),$in{'point4'});
$exp = &point($exp, $in{'point4'});
$mpsd = &point($mpsd, $in{'point4'});
$mmsd = &point($mmsd, $in{'point4'});
print '<center><b>---- 期待値の計算 ----<br><br>';
print "期待値は <font color='blue' size=4>$exp 回</font><br><br>";
print "M + SD : <font color='blue'>$mpsd 回 ( 1/$mpsdp )</font><br>";
print "M - SD : <font color='blue'>$mmsd 回 ( 1/$mmsdp )</font></b><br>";
print "<br> M : 平均値, SD : 標準偏差 。 M±SD は統計的によく起こりうる範囲。</b></center>";
} elsif ($in{'sub'} == 5) { # 組み合わせの計算
$p1 = $p2 = 1;
for ($i=$in{'str1'}; $i>$in{'str2'}; $i--) { $p1 *= $i; }
for ($i=$in{'str1'} - $in{'str2'}; $i>0; $i--) { $p2 *= $i; }
$p = $p1 / $p2;
if ($p=~ m/INF/ or $p=~ m/IND/) { $er = 1; }
print '<center><b>---- 組み合わせの計算 ----<br><br>';
print "$in{'str1'} C $in{'str2'} = ";
if ($er) {
print '(計算不能)';
} else {
print "<font size=4 color=\'blue\'>$p</font></b> (通り)";
}
print "</center>";
}
# フッタ
print <<"__ HTML __";
<br><br><br>
<div align='right'>[ <a href='calc_memo.html'>memo</a> / <a href='calc.html'>source</a> ]</div>
<strong>[ <a href='../index.html'>home</a> / <a href='index.html'>cgi</a> / <a href='../jug/index.html'>juggler</a> / <a href='../column.html'>column</a> / <a href='../diary/index.html'>diary</a> / <a href='bbs.cgi'>bbs</a> / <a href='../link.html'>link</a> / <a href='../intro.html'>welcome</a> ]</strong>
</body></html>
__ 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 ]