jug7.com
[ home / cgi / juggler / column / diary / bbs / link / welcome ]
source : 設定判別の判別開始プレイの計算
#!/usr/bin/perl
# BIG後の手持ちによる設定判別で、「何G以降に判別可能か」を調べる
$cginame = 'shchk.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);
}
if ($input=~m/auto=/) { ($auto, $num1, $num2) = @input; }
else { ($first, $loop, $number1, $number2, $credit) = @input; }
$credit = 30 if !$credit;
# HTML の radio ボタンにチェックを入れる
$credit_chk[$credit] = 'checked';
print "Content-Type: text/html\n\n";
# loop 枚数の自動表示
if ($auto) {
if ($num1 > $num2) { ($num1,$num2) = ($num2,$num1); } # 小さい数を $num1 に入れる
@data = ('95-96','95-97','95-98','95-99','96-97','96-98','96-99','96-100','97-98','97-99','97-100',
'97-101','98-99','98-100','98-101','98-102','99-100','99-101','99-102','99-103','100-101','100-102',
'100-103','100-104','101-102','101-103','101-104','101-105','102-103','102-104','102-105','102-106',
'103-104','103-105','103-106','104-105','104-106','105-106');
@data2 = (3,5,9,7,9,9,5,3,5,1,9,5,3,7,3,3,5,1,1,3,7,3,3,3,1,5,3,1,3,1,3,3,3,3,3,1,3,0);
@data3 = ('15-17','15','13','13','13-15','13','13','13','13','13','11','11','13-11',
'11','11','11','11','11','11-9-9','9-11','11-9','9-11','9-9-11','9','11-9-9','9','9',
'9','9','9','7','9-7','9-9-7','9-7','9-7','7-9','7-7-9','7-7-9');
for ($i=0; $i<=$#data; $i++) {
($o, $p) = split(/-/, $data[$i]);
if ($num1==$o && $num2==$p) { last; }
if ($i==$#data) { $error = 1; $er_msg = '入力された減算値から自動表示はできません。'; }
}
$first = $data2[$i]; $loop = $data3[$i];
$number1 = $num1; $number2 = $num2;
}
# ヘッダとフォームの表示
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='shchk_memo.html'>memo</a> / <a href='shchk.html'>source</a> ]</div>
<br><br><center>
<form action='$cginame' method='POST'>
<table border=0>
<tr><td>最初の手持ち枚数</td><td><input type='text' size=5 name='first' value='$first'> 枚</td></tr>
<tr><td>ループさせる手持ち枚数</td><td><input type='text' size=12 name='loop' value='$loop'> 枚</td></tr>
<tr><td>比較する減算値</td><td><input type='text' size=4 name='number1' value='$number1'> と
<input type='text' size=4 name='number2' value='$number2'></td></tr>
<tr><td>判別プレイのCRの値</td><td><input type='radio' name='credit' value=27 $credit_chk[27]>27
<input type='radio' name='credit' value=28 $credit_chk[28]>28
<input type='radio' name='credit' value=29 $credit_chk[29]>29
<input type='radio' name='credit' value=30 $credit_chk[30]>30
<input type='radio' name='credit' value=31 $credit_chk[31]>31</td>
</tr></table><br>
<input type='submit' value="計算開始">
</form>
<form action='$cginame' method='POST'>
<input type='hidden' name='auto' value=1>
( <input type='text' size=4 name='num1' value='$num1'> と <input type='text' size=4 name='num2' value='$num2'>
の減算値から <input type='submit' value='loop枚数を自動表\示'> )
</form>
BIG終了後にCRを落として<b>32枚</b>投入、そのまま1プレイ消化した後についてです。<br>
<font size=2>(22枚投入の場合は、上記のCRの値を [ 17,18,19,20,21 ] と考えてください。)</font><br>
<br>
ループさせる手持ちとは違う手持ち枚数が最初に1回のみあるときは、「最初の手持ち枚数」を指定します。<br><br>
ループさせる手持ち枚数が2つ以上ある場合は - でつなぎます。<br>
例)13枚と11枚手持ちを繰り返す場合は 「13-11」と記入。<br>
</center><br><br>
__ HTML __
# エラーチェック と GET での送信
if ((grep { !$_ } ($loop, $number1, $number2, $credit)) && !$auto) { $error = 1; $er_msg = '記入漏れがあります。'; };
if ($auto && (!$num1 or !$num2)) { $error=1; $er_msg='記入漏れがあります。'; }
if (grep {/[^\d]/} ($number1, $number2, $first, $credit, $num1, $num2)) { $error = 1; $er_msg = '数字以外の記入は無効です。'; }
if ($loop =~ m/[^\d-]/) { $error = 1; $er_msg = '数字と - 以外の記入は無効です。'; }
if ($ENV{'REQUEST_METHOD'} ne 'POST') { $error = 1; $er_msg = 0; }
if ($auto) {
$error = 1;
if ($num1 && $num2 && !$er_msg) {
print '<br><br><center><b>loop枚数の自動表示が完了しました。<br>計算開始ボタンを押してください。</b></font></center><br><br>';
} elsif(!$er_msg) {
$er_msg='loop 枚数が記入されていません。';
}
}
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='shchk_memo.html'>memo</a> / <a href='shchk.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 ($number1 > $number2) { ($number1, $number2) = ($number2, $number1); } # 小さい数を $number1 に入れる
$low = $number1 / 256; # 低設定域での払出し率
$high = $number2 / 256; # 高設定域での払出し率
print "<br><br><center><b>***** 計算結果 *****</b><br><br>";
print "減算値 $number1 での払い出し率は <b>$low</b><br>";
print "減算値 $number2 での払い出し率は <b>$high</b>\n<br><br></center>";
$in = $out = $bet = 0;
$first = ($first) ? $first+2 : 2;
@temochi = split(/-/, $loop);
$change = -1;
# ループ開始
for ($x=1; $x<=300; $x++) {
if (!$first) { $first = $temochi[$change]; push(@print, "-- ここから $temochi[$change] 枚手持ち --<br>\n"); }
if ($first>= 2) {
$first -= 2; $in += 2; $bet += 1;
} elsif ($first==1) {
$first -= 1; $in += 1; $bet += 2;
if ($#temochi >= 1) { # ループする手持ち枚数が2種類以上ある場合。( 7-9 枚 など )
$change += 1;
$change -= $#temochi+1 if $change > $#temochi;
}
}
$in_total = $x * 3;
$out = ($credit==30) ? $bet : ($credit==29) ? $bet-1 : ($credit==28) ? $bet-2 : ($credit==27) ? $bet-3 : $bet+1;
$rate = $out/$in_total;
if ($rate < $low) { $status = 'NG!'; $clr = $clr2 = ''; $check = $x; } # 低設定でも高確率状態
elsif ($rate > $high) { $status = 'NG!'; $clr = $clr2=''; $check = $x; } # 高設定でも低確率状態
else { $status = 'OK!'; $clr = '<font color=\'red\'><b>'; $clr2 = '</b></font>'; } # 判別プレイ
push(@print, "$clr $x P $clr2 で CR $credit なら 払い出し率 = $out/$in_total = $rate なので$clr $status $clr2<br>\n");
}
if ($check >= 300) { $answer = '判別プレイ不明。'; } # $check には判別不可能なプレイ数のうち、最も大きい数値が入る。
else { $check2 = $check + 1; $answer = "<font color='red'>$check2 P</font> から判別プレイ。"; }
# 結果の表示
print "<center><font size=4><b>CR が <font color='red'>$credit</font> の場合は、$answer</b></font></center>";
# 詳細結果の表示
print "<br><br><br><blockquote><b>各プレイにおける払出し率のの詳細</b><br><br>\n<font size=2>\n";
foreach (@print) { print; }
# フッタ
print <<"__ HTML __";
…<br>…<br>…<br>
</font></blockquote><br><br>
<div align='right'>[ <a href='shchk_memo.html'>memo</a> / <a href='shchk.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;
[ home / cgi / juggler / column / diary / bbs / link / welcome ]