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 -&gt; $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 ]