- 追加された行はこの色です。
- 削除された行はこの色です。
#navi(個人ページ)
**メモ表作成&発言数解析 [#ncce7468]
print "<html><head><style>td{font-size:x-small;}</style></head><table><tr><td>\n";
@data = <DATA>;
chomp @data;
$i = $#data;
while($i-- > 0){
last if $data[$i] eq 'ブラウザの更新ボタンは押さないでください';
}
while(1){
# last if $data =~ m/◆ アナ\x83\^の情報/;
$i++;
last if $data[$i] =~ m/◆ 出来事/;
last if $data[$i] =~ m/◆ 行動設定/;
next unless $data[$i] =~ m/ [\t ](.*)/;
next if $1 eq '';
$who = $1;
$id++;
$who[$id] = $1;
$id{$who} = $id;
$tmp1 .= "占CO\x81\@$1さん○<br />\n";
$tmp2 .= "_/$1\x81\@<br />\n";
unless($id % 5){
$tmp1 .= "<br />\n";
$tmp2 .= "<br />\n";
}
$i++;
$data[$i] =~ m/\x81\x69(.*)\x81\x6a/;
if($1 eq '生存中'){
# print STDERR "【$1/$data[$i]】\n";
$say{$who} = 0;
$time{$who} = 0;
}else{
# print STDERR "■$1/$data[$i]■\n";
}
}
&print_menbers();
$who='?';
while($i++ <= $#data){
if($data[$i] =~ /^◆(.*?)さん\t「(.*)」$/){
$who = $1;
$time{$who}++;
$say{$who} += length $2;
$text{$who} .= "$2\n";
}elsif($data[$i] =~ /^◆(.*?)さん\t「(.*)/){
$who = $1;
$time{$who}++;
$say{$who} += length $2;
$text{$who} .= "$2\n";
}elsif($data[$i] =~ m#^\s*\d+日目の朝となりました。\(\d+/\d+/\d+ \d+:\d+:\d+\)#){
$say{$who} -= 3;
last;
}elsif($data[$i] eq ' 戻る '){
$say{$who} -= 3;
last;
}else{
if($data[$i+1] =~ /^◆(.*?)さん\t「/ and $data[$i] =~ /(.*)」/){
$say{$who} += length $1;
$text{$who} .= "$1\n";
}else{
$say{$who} += length $data[$i];
$text{$who} .= "$data[$i]";
}
}
}
delete $say{'?'},$time{'?'},$text{'?'};
foreach$id(1..$#who){
$who = $who[$id];
print STDOUT "◆$say{$who}/$time{$who}=".int($time{$who} and $say{$who}/$time{$who}).".$who<br />";
$kansute .= " $who" if $time{$who} == 0;
$ohasute .= " $who" if $time{$who} == 1;
$other .= " $who" if $time{$who} > 2;
print "<br />\n" unless $id % 5;
}
print STDOUT "</td></tr></table>\n";
#print STDOUT "\n寡黙順 ", (join ' ', reverse @who), "◆完ステ◆$kansute", "◆おはステ◆$ohasute", "◆他◆\n";
#print STDOUT "\n寡黙順 ", "◆完ステ◆$kansute ◆おはステ◆$ohasute ◆他◆\n\n";
foreach$id(1..$#who){
print "<h5>$id $who[$id]</h5>\n<pre>$text{$who[$id]}</pre>";
}
sub print_menbers{
print STDOUT "$tmp1</td><td>";
print STDOUT "$tmp2</td><td>";
}
print STDOUT "</ul></html>\n";
__DATA__
**投票分析 [#k02c0b6d]
$wolves = 3;
@data = <DATA>;
chomp @data;
$i = $#data;
open TEST, ">./test.txt";
while($i-- > 0){
last if $data[$i] eq '';
}
while(1){
$i++;
# last until($data =~ /(.*?)さん \d 票 投票先 → (.*)さん/;
# last until($data[$i] =~ /^(.*?)さん \d+ \x95\[ 投\x95\[先 → (.*)さん/);
last until($data[$i] =~ /^(.*?)さん\t\d+ \x95\[\t投\x95\[先 → (.*)さん/);
($a, $b) = ($1, $2);
$gyaku{$b} .= ($hyou{$a} eq '' ? "$a ": "■$a ") if $hyou{$a} ne $b;
$hyou{$a} = $b;
$time{$b}++;
$flag{$a}->{$b} = $flag{$b}->{$a} = 1;
# push @all, $a;
}
@all = sort keys %hyou;
@who = sort {($time{$b} <=> $time{$a}) or ($hyou{$a} cmp $hyou{$b})} keys %gyaku;
map{print STDOUT "▼$_ ← $gyaku{$_}<br />\n"}@who;
sub think{
my $number;
my $commer;
my $wolf;
my @all;
my $select;
my @select;
($number, $commer, $wolf, @all) = @_;
while(-1 < $#all){
my $select = shift @all;
unless($flag{$commer}->{$select}){
push @select, $select;
}
}
# print STDOUT "\ns/@select";
while(-1 < $#select){
my $select = (shift @select);
unless($flag{$commer}->{$select}){
if(0 < $number){
&think($number - 1, $select, [@$wolf, $select], @select);
}else{
# print TEST "\n@{$wolf} $select";
map{$wolf{$_}++;}(@$wolf, $select);
}
}
}
}
&think(8 - 1, '', '', @all); print STDOUT "\n";
&think($wolves - 1, '', '', @all); print STDOUT "\n";
map{print STDOUT "◆$wolf{$_} $_"} sort {$wolf{$b} <=> $wolf{$a}}@all;
print STDOUT "\n";exit;
__DATA__
***投票分析の解説 [#gfc13042]
$wolvesに人狼の残頭数、__DATA__以降にグレラン投票の結果をぶち込むと、「人狼が身内票を入れていないという仮定で」人狼の組み合わせが何通り当てはまるか計算します。
例えば/27 トマト/15 メロン/と出力されたとしましょう。すると、トマトが人狼である組み合わせは27通り、メロンが人狼である組み合わせは15通りと推測されます。ですから、メロンに投票するよりはトマトに投票したほうがいいのでは…ということになります。
自分に無残な姿や共有者など、確定白の人はグレランから除いていった方が、精度は高くなっていきます。また対抗同士が人狼の組み合わせも殆ど見られませんから、仮想対抗票を入れるのもいいです。
弱点は3つ、身内票、人狼の残頭数の見誤り、本当に白い村人を人狼認定しやすいこと。まあどんな道具も振り回されすぎてはいけないということですね。
#navi(個人ページ)