Wiki内検索
最近更新したページ
最新コメント
漫画部 by awesome things!
FrontPage by awesome things!
麻雀/2008/09 by awesome things!
麻雀スクリプト by stunning seo guys
関アニ声優 by awesome things!
麻雀/2008/11 by stunning seo guys
プリキチ by awesome things!
プリキュアの黒 by check it out
麻雀/2008/05 by awesome things!
麻雀/2008/10 by stunning seo guys
Menu
タグ

麻雀スクリプト


テキストをそのまま表示するモードとか無いのかな?


open OUT;

#@logs = <sca*.log>;
@logs = <sca*.gz>;



@L7523 = ();

for $logname (@logs)
{
open IN,$logname; @buf = <IN>; close IN;

@date = ();

for $line (@buf) { if ($line =~ /^L7523/) { push(@date,$line); } } push(@L7523,sort @date); push(@L7523,"**$logname\n");
}

open OUT,">L7523-.log";
print OUT reverse(@L7523);
close OUT;


スクリプトを書き換えるのが面倒で手作業で処理
**sca20090128.log.gz ↓ **2009_01_24
それと
深夜帯を前日に移動



use Time::Local;

open OUT;



@L7523 = ();

open IN,"L7523.log";
@buf = <IN>;
close IN;

for $line (@buf)
{
if ($line =~ /^\*\*(\d\d\d\d)_(\d\d)_(\d\d)$/) { @week = ("日","月","火","水","木","金","土"); $time = timelocal(0,0,0,$3,$2-1,$1-1900); ($d,$d,$d,$mday,$mon,$year,$wday) = localtime($time); $line = sprintf("**%04d_%02d_%02d (%s)\n",1900 + $year,$mon+1,$mday,$week[$wday]);

push(@L7523,$line); } elsif ($line =~ /^L7523 | /) { $line =~ /(\d\d):/; if ($1 < 12) { local $h = $1 + 24; $line =~ s/\d\d:/$h:/; }

$ments = 0; while ($line =~ /\((\+|-)?\d+\)/g) { $ments++; } if ($ments == 4) { push(@L7523,$line); }

} else { push(@L7523,$line); }
}

open OUT,">L7523_.log";
print OUT @L7523;
close OUT;




open IN,"L7523_.log";
@buf = <IN>;
close IN;

%ranking;

count(\%ranking,\@buf);

@ranking = values(%ranking);

@data = ();
@tmp = ();
for (@buf)
{
if (/^\*\*(\d\d\d\d)_(\d\d)_(\d\d) \((.+)\)/) { push(@data,[@tmp]); @tmp = (); $dcount++; push(@tmp,"$2/$3($4)"); next; } push(@tmp,$_);
}
push(@data,[@tmp]);


%ranking = ();
count(\%ranking,$data[1]);
@today = sort { $b->{score} <=> $a->{score} } (values(%ranking));

%ranking = ();
count(\%ranking,$data[2]);
@yesterday = sort { $b->{score} <=> $a->{score} } (values(%ranking));

$today = sprintf("■%sの通算得点ランキング\n",$data[1][0]);
$today .= &make_list(\@today,\@yesterday);



%ranking = ();
count(\%ranking,$data[1]);
count(\%ranking,$data[2]);
count(\%ranking,$data[3]);
@latest3 = sort { $b->{score} <=> $a->{score} } (values(%ranking));

%ranking = ();
count(\%ranking,$data[2]);
count(\%ranking,$data[3]);
count(\%ranking,$data[4]);
@yesterday3 = sort { $b->{score} <=> $a->{score} } (values(%ranking));

$latest3 = sprintf("■最近三日(%s〜%s)の通算得点ランキング\n",$data[1][0],$data[3][0]);
$latest3 .= &make_list(\@latest3,\@yesterday3);


my $play_count = 50;

%ranking = ();
for (my $i = 8;$i < @data;$i++)
{
count(\%ranking,$data[$i]);
}
@tmp = sort ave_cmp values(%ranking);

@lastweek_all;
for (@tmp)
{
if ($_->{play} >= $play_count) { push @lastweek_all,$_; }
}


%ranking = ();
for (my $i = 1;$i < @data;$i++)
{
count(\%ranking,$data[$i]);
}
@tmp = sort ave_cmp values(%ranking);
@ranking_all;
for (@tmp)
{
if ($_->{play} >= $play_count) { push @ranking_all,$_; }
}

$ranking_all = sprintf("■%s通算平均得点ランキング(%d戦以上)\n",$data[1][0],$play_count);
$ranking_all .= &make_list(\@ranking_all,\@lastweek_all);


$week;
$data[1][0] =~ /\d\d\/\d\d\((.+)\)/;
if ($1 == "土")
{
%ranking = (); for (my $i = 1;$i <= 7;$i++) { count(\%ranking,$data[$i]); } my @week = sort { $b->{score} <=> $a->{score} } (values(%ranking)); %ranking = (); for (my $i = 8;$i <= 14;$i++) { count(\%ranking,$data[$i]); } my @last_week = sort { $b->{score} <=> $a->{score} } (values(%ranking));



$week = sprintf("■週間(%s〜%s)通算得点ランキング\n",$data[7][0],$data[1][0]); $week .= &make_list(\@week,\@last_week);

}


open OUT,">wiki_rank.txt";
print OUT "http://wiki.livedoor.jp/kann_ani_wiki/d/%cb%e3%bf%...\n\n";
print OUT "$week\n\n$ranking_all\n\n$today\n\n$latest3";
close OUT;








sub ave_cmp { $b->{score} / $b->{play} <=> $a->{score} / $a->{play} }

sub make_list1
{
my $list =<<;
順位プレーヤ名通算得点平均得点対戦1位2位3位4位平均順位


my $rank= 1; for (@_) { my $ave = $_->{score} / $_->{play}; my $rave = ($_->{n1} + $_->{n2} * 2 + $_->{n3} * 3 + $_->{n4} * 4) / $_->{play}; $list .= sprintf("|right:%d|%s|right:%d|right:%.2f|right:%d|right:%d|right:%d|right:%d|right:%d|right:%.2f|\n", $rank++,,$_->{name},$_->{score},$ave,$_->{play},$_->{n1},$_->{n2},$_->{n3},$_->{n4},$rave) } return $list;
}


sub make_list
{
my $now = shift; my $prev = shift;

my $list =<<;
順位プレーヤ名通算得点前回比平均得点対戦1位2位3位4位平均順位


my $rank= 1; for (@$now) { my $prev_score = get_score($_->{name},$prev); my $score_sub = $_->{score} - $prev_score; if ($score_sub > 0) { $score_sub = "+" . $score_sub; }

my $prev_rank = get_rank($_->{name},$prev); my $comp;

if ($prev_rank == 0) { $comp = "新"; $score_sub = "--"; } elsif ($rank < $prev_rank) { $comp ="↑"; } elsif ($rank > $prev_rank) { $comp ="↓"; } else { $comp ="→"; }

my $ave = $_->{score} / $_->{play}; my $rave = ($_->{n1} + $_->{n2} * 2 + $_->{n3} * 3 + $_->{n4} * 4) / $_->{play}; $list .= sprintf("|right:%d(%s)|%s|right:%d|right:%s|right:%.2f|right:%d|right:%d|right:%d|right:%d|right:%d|right:%.2f|\n", $rank,$comp,$_->{name},$_->{score},$score_sub,$ave,$_->{play},$_->{n1},$_->{n2},$_->{n3},$_->{n4},$rave);

$rank++; } return $list;
}

sub get_rank
{
my $name = shift; my $ranking = shift;

my $i = 1; for my $x (@$ranking) { if (($name cmp $x->{name}) == 0) { return $i; } $i++; } return 0;
}

sub get_score
{
my $name = shift; my $ranking = shift;

for my $x (@$ranking) { if (($name cmp $x->{name}) == 0) { return $x->{score}; } } return 0;
}



sub count
{
my $ranking = $_[0]; my $data = $_[1];

for my $line (@$data) { my @name; if ($line =~ /^L7523 \| \d\d:\d\d \| .* \| (.+)\(([+-]?\d+)\) (.+)\(([+-]?\d+)\) (.+)\(([+-]?\d+)\) (.+)\(([+-]?\d+)\)/) { } elsif ($line =~ /^L7523 \| \d\d:\d\d \| (.+)\(([+-]?\d+)\) (.+)\(([+-]?\d+)\) (.+)\(([+-]?\d+)\) (.+)\(([+-]?\d+)\)/) { } else { next; } @name = ($1,$3,$5,$7);

for my $name (@name) { unless ($ranking->{$name}) { $ranking->{$name} = {"name" => $name,"play" => 0,"score" => 0,"n1" => 0,"n2" => 0,"n3" => 0,"n4" => 0}; } }

my $t = $ranking->{$1}; $t->{play}++; $t->{score} += $2; $t->{n1}++;

$t = $ranking->{$3}; $t->{play}++; $t->{score} += $4; $t->{n2}++;

$t = $ranking->{$5}; $t->{play}++; $t->{score} += $6; $t->{n3}++;

$t = $ranking->{$7}; $t->{play}++; $t->{score} += $8; $t->{n4}++; }
}




use Time::Local;

open OUT;




@L7523 = ();

open IN,"L7523.log";
@buf = <IN>;
close IN;

for $line (@buf)
{
if ($line =~ /^\*\*(\d\d\d\d)_(\d\d)_(\d\d)$/) { @week = ("日","月","火","水","木","金","土"); $time = timelocal(0,0,0,$3,$2-1,$1-1900); ($d,$d,$d,$mday,$mon,$year,$wday) = localtime($time); $line = sprintf("**%04d_%02d_%02d (%s)\n",1900 + $year,$mon+1,$mday,$week[$wday]);

push(@L7523,$line); } elsif ($line =~ /^L7523 | /) { $line =~ /(\d\d):/; if ($1 < 12) { local $h = $1 + 24; $line =~ s/\d\d:/$h:/; }

$ments = 0; while ($line =~ /\((\+|-)?\d+\)/g) { $ments++; } if ($ments == 3) { push(@L7523,$line); } } else { push(@L7523,$line); }
}

open OUT,">L7523_3.log";
print OUT @L7523;
close OUT;





open IN,"L7523_3.log";
@buf = <IN>;
close IN;

%ranking;

count(\%ranking,\@buf);

@ranking = values(%ranking);

@data = ();
@tmp = ();
for (@buf)
{
if (/^\*\*(\d\d\d\d)_(\d\d)_(\d\d) \((.+)\)/) { push(@data,[@tmp]); @tmp = (); $dcount++; push(@tmp,"$2/$3($4)"); next; } push(@tmp,$_);
}
push(@data,[@tmp]);


my $play_count = 3;

%ranking = ();
for (my $i = 8;$i < @data;$i++)
{
count(\%ranking,$data[$i]);
}
@tmp = sort { $b->{score} <=> $a->{score} } values(%ranking);

@lastweek_all;
for (@tmp)
{
if ($_->{play} >= $play_count) { push @lastweek_all,$_; }
}


%ranking = ();
for (my $i = 1;$i < @data;$i++)
{
count(\%ranking,$data[$i]);
}
@tmp = sort { $b->{score} <=> $a->{score} } values(%ranking);
@ranking_all;
for (@tmp)
{
if ($_->{play} >= $play_count) { push @ranking_all,$_; }
}

$ranking_all = sprintf("■%s通算得点ランキング(%d戦以上)\n",$data[1][0],$play_count);
$ranking_all .= &make_list(\@ranking_all,\@lastweek_all);


$week;
$data[1][0] =~ /\d\d\/\d\d\((.+)\)/;
if ($1 == "土")
{
%ranking = (); for (my $i = 1;$i <= 7;$i++) { count(\%ranking,$data[$i]); } my @week = sort { $b->{score} <=> $a->{score} } (values(%ranking)); %ranking = (); for (my $i = 8;$i <= 14;$i++) { count(\%ranking,$data[$i]); } my @last_week = sort { $b->{score} <=> $a->{score} } (values(%ranking));



$week = sprintf("■週間(%s〜%s)通算得点ランキング\n",$data[7][0],$data[1][0]); $week .= &make_list(\@week,\@last_week);

}


open OUT,">wiki_rank3.txt";
print OUT "http://wiki.livedoor.jp/kann_ani_wiki/d/%cb%e3%bf%...\n\n";
print OUT "$week\n\n$ranking_all";
close OUT;








sub ave_cmp { $b->{score} / $b->{play} <=> $a->{score} / $a->{play} }

sub make_list1
{
my $list =<<;
順位プレーヤ名通算得点平均得点対戦1位2位3位平均順位


my $rank= 1; for (@_) { my $ave = $_->{score} / $_->{play}; my $rave = ($_->{n1} + $_->{n2} * 2 + $_->{n3} * 3) / $_->{play}; $list .= sprintf("|right:%d|%s|right:%d|right:%.2f|right:%d|right:%d|right:%d|right:%d|right:%.2f|\n", $rank++,,$_->{name},$_->{score},$ave,$_->{play},$_->{n1},$_->{n2},$_->{n3},$rave) } return $list;
}


sub make_list
{
my $now = shift; my $prev = shift;

my $list =<<;
順位プレーヤ名通算得点前回比平均得点対戦1位2位3位平均順位


my $rank= 1; for (@$now) { my $prev_score = get_score($_->{name},$prev); my $score_sub = $_->{score} - $prev_score; if ($score_sub > 0) { $score_sub = "+" . $score_sub; }

my $prev_rank = get_rank($_->{name},$prev); my $comp;

if ($prev_rank == 0) { $comp = "新"; $score_sub = "--"; } elsif ($rank < $prev_rank) { $comp ="↑"; } elsif ($rank > $prev_rank) { $comp ="↓"; } else { $comp ="→"; }

my $ave = $_->{score} / $_->{play}; my $rave = ($_->{n1} + $_->{n2} * 2 + $_->{n3} * 3) / $_->{play}; $list .= sprintf("|right:%d(%s)|%s|right:%d|right:%s|right:%.2f|right:%d|right:%d|right:%d|right:%d|right:%.2f|\n", $rank,$comp,$_->{name},$_->{score},$score_sub,$ave,$_->{play},$_->{n1},$_->{n2},$_->{n3},$rave);

$rank++; } return $list;
}

sub get_rank
{
my $name = shift; my $ranking = shift;

my $i = 1; for my $x (@$ranking) { if (($name cmp $x->{name}) == 0) { return $i; } $i++; } return 0;
}

sub get_score
{
my $name = shift; my $ranking = shift;

for my $x (@$ranking) { if (($name cmp $x->{name}) == 0) { return $x->{score}; } } return 0;
}



sub count
{
my $ranking = $_[0]; my $data = $_[1];

for my $line (@$data) { my @name; if ($line =~ /^L7523 \| \d\d:\d\d \| .* \| (.+)\(([+-]?\d+)\) (.+)\(([+-]?\d+)\) (.+)\(([+-]?\d+)\)/) { } elsif ($line =~ /^L7523 \| \d\d:\d\d \| (.+)\(([+-]?\d+)\) (.+)\(([+-]?\d+)\) (.+)\(([+-]?\d+)\)/) { } else { next; } @name = ($1,$3,$5);

for my $name (@name) { unless ($ranking->{$name}) { $ranking->{$name} = {"name" => $name,"play" => 0,"score" => 0,"n1" => 0,"n2" => 0,"n3" => 0}; } }

my $t = $ranking->{$1}; $t->{play}++; $t->{score} += $2; $t->{n1}++;

$t = $ranking->{$3}; $t->{play}++; $t->{score} += $4; $t->{n2}++;

$t = $ranking->{$5}; $t->{play}++; $t->{score} += $6; $t->{n3}++; }
}
2009年02月01日(日) 00:50:29 Modified by ID:eKo7Q3/vrw




スマートフォン版で見る