jug7.com
[ home / cgi / juggler / column / diary / bbs / link / welcome ]
source : スパイダーマン2 設定推測
#!/usr/bin/perl
# スパイダーマン2 二項分布によるデータのみからの設定信頼度
$cginame = 'spd2s.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, $piz_emp, $piz_pie, $piz_wpg, $wm_b, $wm_m, $wm, $s1_big, $s1_mid, $s_big, $s_mid, $bell_big, $bell_mid, $che_b) = @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=5 value='$play'><br>
ピザ:空 <input type='text' size=3 name='piz_emp' maxlength=4 value='$piz_emp'><br>
ピザ:ピース(白箱) <input type='text' size=3 name='piz_pie' maxlength=4 value='$piz_pie'><br>
ピザ:上記以外 <input type='text' size=3 name='piz_wpg' maxlength=4 value='$piz_wpg'><br>
スイカ重複BIG <input type='text' size=3 name='wm_b' maxlength=4 value='$wm_b'><br>
スイカ重複MID <input type='text' size=3 name='wm_m' maxlength=4 value='$wm_m'><br>
スイカ総回数 <input type='text' size=3 name='wm' maxlength=4 value='$wm'><br>
1枚役重複BIG <input type='text' size=3 name='s1_big' maxlength=4 value='$s1_big'><br>
1枚役重複MID <input type='text' size=3 name='s1_mid' maxlength=4 value='$s1_mid'><br>
単独BIG <input type='text' size=3 name='s_big' maxlength=4 value='$s_big'><br>
単独MID <input type='text' size=3 name='s_mid' maxlength=4 value='$s_mid'><br>
ベル重複BIG <input type='text' size=3 name='bell_big' maxlength=4 value='$bell_big'><br>
ベル重複MID <input type='text' size=3 name='bell_mid' maxlength=4 value='$bell_mid'><br>
角チェ重複 <input type='text' size=3 name='che_b' maxlength=4 value='$che_b'><br>
<br>
考慮しない場合は空欄。ゼロなら 0 と記入。<br>
全設定が均等に設置という仮定のもとに計算。<br>
<input type='submit' value="開始">
</form>
__ HTML __
# エラーチェックとGET送信
if ($ENV{'REQUEST_METHOD'} ne 'POST') {
print '<a href=\'spd2s_memo.html\'>memo</a> <a href=\'spd2s.html\'>source</a> <a href=\'../index.html\'>top へ戻る</a>',"\n",'</body></html>';
exit;
}
if($play > 19999) {
print '<center><font size=4 color=\'red\'><b>ERROR ! (プレイ数制限)</b></font></center>';
print '<a href=\'spd2s_memo.html\'>memo</a> <a href=\'spd2s.html\'>source</a> <a href=\'../index.html\'>top へ戻る</a>',"\n",'</body></html>';
exit;
}
# spiderman2 data 1/x
@piz_emp = ('2.01', '2.11', '2.24', '2.39', '2.56', '2.78');
@piz_pie = ('3.28', '3.20', '3.12', '3.05', '2.98', '2.91'); # piece
@piz_wpg = ('5.06', '4.68', '4.29', '3.94', '3.65', '3.37'); # whole + gold (ホール + 金)
@wm_b = ('3276.800', '2730.667', '3276.800', '2730.667', '2340.571', '1820.444'); # BIG重複スイカ
@wm_m = ('5461.333', '4096.000', '5461.333', '4096.000', '4096.000', '4096.000'); # MID重複スイカ
@wm_h = ('145.636', '148.272', '145.636', '148.272', '149.626', '152.409'); # 非重複スイカ
@s1_big = ('4096', '2730.667', '2048', '1638.4', '1638.4', '1638.4'); # 1枚重複BIG
@s1_mid = ('4096', '8192', '8192', '4096', '4096', '2730.667'); # 1枚重複MID
@s_big = ('5461.333','5461.333','2978.909','2730.667','2730.667','2340.571');
@s_mid = ('16834','5461.333','3640.889','8192','3276.8','3276.8');
@bell_big = ('8192','5461.333','8192','5461.333','4096','3276.8');
@bell_mid = ('8192','8192','8192','8192','16384','5461.333');
@che_b = ('1365.333', '1489.455', '1489.455', '1365.333', '1170.286', '1260.308');
#------------
# 計算開始
#------------
$big_prob = &point(($play/$big), 3) if $big;
$mid_prob = &point(($play/$mid), 3) if $mid;
$bonus = $big + $mid;
$bonus_prob = &point(($play/$bonus), 3) if $bonus;
$piz_total = $piz_emp + $piz_pie + $piz_oth;
$wm_h = $wm - $wm_b - $wm_m; # 非重複スイカ回数
for ($i=0; $i<=5; $i++) {
$p_total = 10**43;
# ピザ関連
if ($piz_emp ne '' && $piz_pie ne '' && $piz_wpg ne '') {
if ($piz_emp or ($piz_emp eq '0')) { # ピザ:空
$p_piz_emp = (1/$piz_emp[$i])**$piz_emp * (1-1/$piz_emp[$i])**($piz_total-$piz_emp); $p_total *= $p_piz_emp;
}
if ($piz_pie or ($piz_pie eq '0')) { # ピザ:piece
$p_piz_pie = (1/$piz_pie[$i])**$piz_pie * (1-1/$piz_pie[$i])**($piz_total-$piz_pie); $p_total *= $p_piz_pie;
}
if ($piz_wpg or ($piz_wpg eq '0')) { # ピザ:whole + gold
$p_piz_wpg = (1/$piz_wpg[$i])**$piz_wpg * (1-1/$piz_wpg[$i])**($piz_total-$piz_wpg); $p_total *= $p_piz_wpg;
}
}
$p_total *= 10**43;
# スイカ関連
if ($wm_b or ($wm_b eq '0')) {
$p_wm_b = (1/$wm_b[$i])**$wm_b * (1-1/$wm_b[$i])**($play-$wm_b); $p_total *= $p_wm_b;
}
if ($wm_m or ($wm_m eq '0')) {
$p_wm_m = (1/$wm_m[$i])**$wm_m * (1-1/$wm_m[$i])**($play-$wm_m); $p_total *= $p_wm_m;
}
if ($wm or ($wm eq '0')) {
$p_wm_h = (1/$wm_h[$i])**$wm_h * (1-1/$wm_h[$i])**($play-$wm_h); $p_total *= $p_wm_h;
}
$p_total *= 10**43;
# その他
if ($s1_big or ($s1_big eq '0')) { $p_s1_big = (1/$s1_big[$i])**$s1_big * (1-1/$s1_big[$i])**($play-$s1_big); $p_total *= $p_s1_big; }
if ($s1_mid or ($s1_mid eq '0')) { $p_s1_mid = (1/$s1_mid[$i])**$s1_mid * (1-1/$s1_mid[$i])**($play-$s1_mid); $p_total *= $p_s1_mid; }
if ($s_big or ($s_big eq '0')) { $p_s_big = (1/$s_big[$i])**$s_big * (1-1/$s_big[$i])**($play-$s_big); $p_total *= $p_s_big; }
if ($s_mid or ($s_mid eq '0')) { $p_s_mid = (1/$s_mid[$i])**$s_mid * (1-1/$s_mid[$i])**($play-$s_mid); $p_total *= $p_s_mid; }
$p_total *= 10**43;
if ($bell_big or ($bell_big eq '0')) { $p_bell_big = (1/$bell_big[$i])**$bell_big * (1-1/$bell_big[$i])**($play-$bell_big); $p_total *= $p_bell_big; }
if ($bell_mid or ($bell_mid eq '0')) { $p_bell_mid = (1/$bell_mid[$i])**$bell_mid * (1-1/$bell_mid[$i])**($play-$bell_mid); $p_total *= $p_bell_mid; }
if ($che_b or ($che_b eq '0')) { $p_che_b = (1/$che_b[$i])**$che_b * (1-1/$che_b[$i])**($play-$che_b); $p_total *= $p_che_b; }
if (!$p_total) { $check = 1; }
$p_total2 += $p_total;
push(@p_total, $p_total);
}
# 百分率にする
for ($i=0; $i<=5; $i++) {
$per = &point(($p_total[$i]/$p_total2*100), 2) if $p_total2;
push(@per, $per);
}
# 結果の表示
for ($i=1; $i<=6; $i++) { print "設 $i -> $per[$i-1] %<br>\n"; }
if ($check) { print '# (評価不可能)',"\n"; }
print '<a href=\'spd2s_memo.html\'>memo</a> <a href=\'spd2s.html\'>source</a> <a href=\'../index.html\'>top へ戻る</a><hr>',"\n",'</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 ]