jug7.com
[ home / cgi / juggler / column / diary / bbs / link / welcome ]
source : テーブルタグ吐き出し(秘宝伝用)
#!/usr/bin/perl
# データ取りした時の table タグを吐き出し
$cginame = 'table_for_data_hihou.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) ) {
($name,$value) = split(/=/, $str);
$value =~ s/%0D%0A/\n/g;
$value =~ s/\+/ /g;
$value =~ s/%2C/,/g;
push(@input, $value);
}
($rate, $data) = @input;
$rate = 5 if !$rate;
$payb = 15;
$payr = 1;
$jac = 112;
# ヘッダとフォームの表示
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='table_for_data_hihou_memo.html'>memo</a> / <a href='table_for_data_hihou.html'>source</a> ]</div>
<br><br><center>
<form action='$cginame' method='POST'>
<br><br>
<table border=1 align='center' cellspacing=0>
<tr align='right'><td>換金率</td><td><input type='text' size=4 name='rate' value='$rate'> 枚 = 100円</td></tr>
</table>
<br><br>
入力<br><textarea name='data' rows=8 cols=30></textarea><br>
<input type='submit' value="送信">
</form>
<table border=0 width='80%'>
<caption><b>入力の仕方</b></caption>
<tr><td>
入力は全て<font color=red>半角文字</font>で記入。<br>
BIGの場合 → <font color=red>プレイ数 半角スペース 獲得枚数</font>。(獲得枚数を記入せず、「プレイ数 半角スペース」のみでも可)<br>
REGの場合 → <font color=red>プレイ数 半角スペース r</font>。<br>
ヤメ時 → <font color=red>プレイ数 半角スペース end</font>。<br>
プレイ数には<font color=red>プレイ数-プレイ数</font>の区間指定も可(例: 100-300 → 100P〜300P)。<br>
BIG中小役は<font color='red'>「半角スペース プレイ数-スイカ-ハズレ」</font>で獲得枚数の後に記入。<br>
<br>初期投資、追加投資があった場合は、上記のあとに <font color=red>半角スペース *k</font> と記入。<br>
end のすぐ後に <font color=red>(コンマ)総獲得枚数</font> を記入すれば、収支とPAYOUTを計算する。<br><br>
<table border=0 align=center><tr valign=top><td>
<table border=1 cellspacing=0>
<tr bgcolor='#ffffcc'><td><font size=2>入力の例</font></td><td><font size=2>意味</font></td></tr>
<tr><td><font size=2>150 386 20-1-2 4k<br>248 r<br>48 400 23-0-1<br>35 end,420</font></td>
<td><font size=2>150P BIG ( 4k 投資 )<br>248P REG<br>48P BIG(400枚獲得)<br>35P ヤメ( 総獲得420枚 )</font>
</td></tr></table>
</td><td>
<table border=1 cellspacing=0>
<tr bgcolor='#ffffcc'><td><font size=2>入力の例</font></td><td><font size=2>意味</font></td></tr>
<tr><td><font size=2>17 r 1k<br>200 r 6k<br>690 end,0 16k</font></td>
<td><font size=2>17P REG ( 1k 投資 )<br>200P REG ( 6k 追い金 )<br>690P ヤメ( 16k 追い金、総獲得0枚 )</font>
</td></tr></table>
</td></tr></table>
</center>
</td></tr></table>
</center><br><br>
__ HTML __
# エラーチェックと GET での送信
if (!$data) { $error = 1; $er_msg = '記入漏れがあります。'; }
if (grep { /[^\d+]/ } ($payb, $payr, $rate)) { $error = 1; $er_msg = '不適切な文字が記入されています。'; };
if ($data =~ /[^ \d+endrk\n,\-]/) { $error = 1; $er_msg = '不適切な文字が入力されています。'; }
if (( @list = $data=~ /\n/g) >= 200) { $error = 1; $er_msg = '200行以上のデータは受けつけないようにしています。'; }
if ($data=~ /^\d+\-/) {
@list = split(/\n/, $data);
for (@list) {
if (/^(\d+)\-(\d+)/ && $2-$1<=0) { $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='table_for_data_hihou_memo.html'>memo</a> / <a href='table_for_data_hihou.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;
}
# データの表示
@data = split(/\n/, $data);
$data =~ s/\n/<br>/g;
print <<"__ HTML __";
<hr width='88%'><br>
<table border=1 align='center' cellspacing=0 cellpadding=5><caption><font size=2>入力データ 1</font></caption>
<tr align='right'><td>換金率 $rate 枚=100円</td></tr></table><br><br>
<table border=1 align='center' cellspacing=0><caption><font size=2>入力データ 2</font></caption>
<tr><td>$data</td></tr></table>
<br><br><br>
<table border=1 align='center' cellpadding=2 cellspacing=0><caption><font size=2>秘宝伝</caption>
<tr bgcolor='#ffffcc'><td><font size=2>投資</font></td><td><font size=2>プレイ数</font></td>
<td><font size=2>当選</font></td><td><font size=2>獲得枚数</font></td>
<td><font size=2>BIG回数<br>(BIG確率)</font></td><td><font size=2>REG回数<br>(REG確率)</font></td>
<td><font size=2>総プレイ数</font></td><td><font size=2>コメント<br>(プレイ-スイカ-ハズレ)</font></td></tr>
__ HTML __
# 実戦データの分割してテーブルで表示
$ren = $flag = $bigcount = $regcount = $t_bigget = 0;
$comment = ' ';
for (@data) {
if (/end/) { # ヤメ
$bonus = 'ヤメ'; $bigget=' '; $flag = 1;
$coin += $1 if /.+,(\d+)/;
} elsif (/r/) { # REG
$bonus='<b>REG</b>'; $regcount++; $bigget = ' '; $flag = 0;
} else { # BIG
$bonus = '<font color=\'red\' face=\'Arial black\'><b>777</b></font>';
$bigcount++; $flag = 1;
if (/^\d+ (\d+)( +|| \d+k)/ or /^\d+\-\d+ (\d+)( +|| \d+k)/) { $bigget = $1; $t_bigget += $bigget; } # 獲得枚数を取り出す
}
if (/(\d+)k/) { $toushi = $1; $t_toushi += $toushi; } else { $toushi = ' '; } # 投資額を取り出す
if (/^(\d+) /) { $game = $1; $t_game += $game; } # プレイ数を取り出す
elsif (/^(\d+)-(\d+)/) { # 区間入力のプレイ数
$start = $1; $hit = $2;
$game = $hit - $start;
$t_game += $game;
$comment = "$start 〜 $hit P";
}
if (/ (\d+\-\d+\-\d+)/) {
($b_play, $b_suika, $b_haz) = split(/\-/, $1);
$total_b_play += $b_play;
$total_b_suika += $b_suika;
$total_b_haz += $b_haz;
}
$clr = ($game <= 100) ? 'blue' : ($game >= 400) ? 'red' : 'black'; # プレイ数の色
if ($bigcount) { $bigp = int($t_game/$bigcount+0.5); $big = "$bigcount (1/$bigp)"; } else { $big = 0; }
if ($regcount) { $regp = int($t_game/$regcount+0.5); $reg = "$regcount (1/$regp)"; } else { $reg = 0; }
if ($toushi =~ /\d+/) { $toushi .='k'; }
$count += $game; # $count : 最大BIG間プレイ数を調べるためのフラグ
$ren++ if $count<=100 && $bonus=~ /777/ && $bigcount>=2; # 100P以内のBIGなら $ren++ とする
if ($flag) { # BIG の時に $flag が真
$s2nd = $count; $count=0;
$max = $s2nd if $max < $s2nd; # $max : 最大BIG間プレイ数
}
if ($comment eq ' ' && $bonus =~ /777/) { $comment = "$b_play-$b_suika-$b_haz"; }
elsif ($bonus=~ /777/) { $comment .= '<br>'."$b_play-$b_suika-$b_haz"; }
print $display ="<tr align='center'><td>$toushi</td><td><font color='$clr'>$game</font></td><td>$bonus</td><td>$bigget</td><td>$big</td><td>$reg</td><td>$t_game</td><td align='left'>$comment</td></tr>\n";
$comment = ' ';
$display =~ s/</</g; # ソース表示用に置換
$display =~ s/>/>/g;
$display =~ s/\n/<br>/g;
push(@print, $display);
}
# 上で表示したテーブルタグのHTMLソースの表示
print <<"__ HTML __";
</table><br><br>
<table border=1 align='center' cellspacing=0 width='80%'><caption><font size=2>↑ テーブルのソ\ース</font></caption><tr><td>
<table border=1 align='center' cellpadding=2 cellspacing=0><br>
<tr bgcolor='#ffffcc' align='center'><td><font size=2>投資</font></td><td><font size=2>
プレイ数</font></td><br><td><font size=2>当選</font></td><td><font size=2>
獲得枚数</font></td><br><td><font size=2>BIG回数<br>(BIG確率)</font></td>
<td><font size=2>REG回数<br>(REG確率)</font></td><br><td><font size=2>
総プレイ数</font></td><td><font size=2>コメント<br>(プレイ-スイカ-ハズレ)</font></td></tr><br>
__ HTML __
foreach (@print) { print; } # 実戦データ部分
print '</table></td></tr></table><br><br><br><br>';
# 実戦データの整理
$brcount = $bigcount + $regcount; # BR回数
$bigprob = &point(($t_game/$bigcount),2) if $bigcount; # BIG確率
$regprob = &point(($t_game/$regcount),2) if $regcount; # REG確率
$brprob = &point(($t_game/$brcount),2) if $brcount; # BR合成確率
$shushi = int($coin*100/$rate - $t_toushi*1000) if $rate; # 収支
$clr = ($shushi>=0) ? 'blue' : 'red';
$wari = ($coin-$t_toushi*50)/($t_game*3) *100+100 if $coin ne ''; # 機械割
$wari = &point($wari,2);
$bigget_ave = ($bigcount) ? &point(($t_bigget/$bigcount),2) : '<center>-</center>'; # BIG平均獲得枚数
$bunbo = ($bigcount > 1) ? $bigcount - 1 : 0;
$ren_rate = ($bunbo > 0) ? int($ren/$bunbo *100) : 0; # 100P以内のBIG連荘率
$per = $t_bigget + $regcount * ($jac+$payr) + $t_toushi * 50 - $coin;
$per = &point(($t_game*50/$per), 3) if $per;
# 実戦データ整理 を表示
$data2 = "<table border=1 align='center' cellspacing=0>
<tr><td colspan=7 align='center' bgcolor='#ffffaa'>秘宝伝</td></tr>
<tr><td bgcolor='#ffffaa'>プレイ数</td><td align='right'>$t_game</td><td> </td><td bgcolor='#ffffaa'>投資</td>
<td align='right'>$t_toushi k</td><td bgcolor='#ffffaa'>連荘率(BIG)</td><td align='right'>$ren/$bunbo = $ren_rate %</td></tr>
<tr><td bgcolor='#ffffaa'>BIG</td><td align='right'>$bigcount</td><td align='right'>1/$bigprob</td>
<td bgcolor='#ffffaa'>回収</td><td align='right'>$coin 枚</td><td bgcolor='#ffffaa'>最大BIG間</td>
<td align='right'>$max</td></tr>
<tr><td bgcolor='#ffffaa'>REG</td><td align='right'>$regcount</td><td align='right'>1/$regprob</td>
<td bgcolor='#ffffaa'>収支</td><td align='right'><b><font color='$clr'>$shushi 円</font></b></td><td bgcolor='#ffffaa'>1k当たりのP数</td>
<td align='right'>$per</td></tr>
<tr><td bgcolor='#ffffaa'>合成</td><td align='right'>$brcount</td><td align='right'>1/$brprob</td>
<td bgcolor='#ffffaa'>PAYOUT</td><td align='right'>$wari %</td><td bgcolor='#ffffaa'>平均BIG枚数</td>
<td align='right'>$bigget_ave</td></tr></table>
";
print "$data2";
# HTML ソース表示
$data2 =~ s/</</g;
$data2 =~ s/>/>/g;
$data2 =~ s/\n/<br>/g;
print q{<br><br><table border=1 align='center' cellspacing=0 width='80%'><caption>};
print q{<font size=2>↑ テーブルのソース</caption><tr><td>};
print $data2;
print '</td></tr></table>';
# その他のデータの表示 と フッタ
# BIG中小役による設定信頼度の計算
# 秘宝伝 BIG中 data
$rand = 65536;
$che = 2048;
$jacin = 17724;
@suika = (2000, 2200, 2400, 2600, 2800, 3000);
@haz = (6764, 6064, 5364, 4664, 3964, 3264);
#-----------------------
# 設定信頼度 計算開始
#-----------------------
$total_b_play = 0 if !$total_b_play;
$total_b_suika = 0 if !$total_b_suika;
$total_b_haz = 0 if !$total_b_haz;
$total_b_suika_p = &point(($total_b_play/$total_b_suika), 3) if $total_b_suika;
$total_b_haz_p = &point(($total_b_play/$total_b_haz), 3) if $total_b_haz;
for ($i=0; $i<=5; $i++) {
$p1 = ($suika[$i]/$rand)**$total_b_suika * (1-$suika[$i]/$rand)**($total_b_play-$total_b_suika);
$p3 = ($haz[$i]/$rand)**$total_b_haz * (1-$haz[$i]/$rand)**($total_b_play-$total_b_haz);
$p4 = $p1 * $p3;
$t_suika_p += $p1; push(@suika_p, $p1);
$t_haz_p += $p3; push(@haz_p, $p3);
$t_total_p += $p4; push(@total_p, $p4);
}
# 百分率にする
for ($i=0; $i<=5; $i++) {
$per1 = &point(($suika_p[$i]/$t_suika_p*100),3) if $t_suika_p;
$per3 = &point(($haz_p[$i]/$t_haz_p*100),3) if $t_haz_p;
$per4 = &point(($total_p[$i]/$t_total_p*100),3) if $t_total_p;
push(@n_suika, $per1);
push(@n_haz, $per3);
push(@n_total, $per4);
}
if ($total_b_play && $total_b_suika && $total_b_haz) {
print "<br>\n",'<table border=1 align=\'center\' cellspacing=0><tr><td>';
print 'BIG中小役<br>';
print 'プレイ-スイカ-ハズレ',"<br>\n";
print "$total_b_play-$total_b_suika-$total_b_haz<br>\n";
print "suika 1/$total_b_suika_p<br>";
print "haz 1/$total_b_haz_p<br>";
print "\n",'<br>設定信頼度<br>',"\n";
for ($i=1; $i<=6; $i++) { print "設 $i -> $n_total[$i-1] %<br>\n"; }
print '</td></tr></table>';
}
print <<"__ HTML __";
<br><br>
<table border=1 align='center' cellspacing=0><caption><font size=2>その他のデータ</font></caption>
<tr><td align='center' bgcolor='#ffffcc'><font size=2>BIG 総獲得枚数</font></td><td align='right'>$t_bigget 枚</td>
</tr></table>
<br><br>
<br><br><br><br>
<div align='right'>[ <a href='table_for_data_hihou_memo.html'>memo</a> / <a href='table_for_data_hihou.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=~m/(\d+)\.(\d+)/) { $x=$2; }
elsif ($value!~m/\./) { $x=''; $value=$value.'.'; }
$value= $value.'0'x($fig-length($x));
return $value;
}
[ home / cgi / juggler / column / diary / bbs / link / welcome ]