#!/usr/local/bin/perl
#$Id: createtable2.pl,v 1.2 2005/01/24 03:14:49 boris Exp $
#
#
#
# Исходные файлы и параметры
#
use Getopt::Std;
$usage = 'createtable2.pl $Revision: 1.2 $, $Date: 2005/01/24 03:14:49 $'. "\n".
"Usage: createtable2.pl [-d] [-s] [-T prelim_answers] [-M prelim_mail] [-t answers_file] [-m mail_file] [-o results] \n";
require 'parameters.pl';
require 'subroutines.pl';
die $usage unless getopts('t:T:m:M:o:ds');
$DEBUG=$opt_d;
$SHORT=$opt_s;
my %teams;
my @answers;
my @ratings;
#
# ПРЕДВАРИТЕЛЬНЫЕ РЕЗУЛЬТАТЫ
#
# Читаем старые результаты
#
if ($opt_T)
{
die "Cannot open $opt_T\n" unless open(INFILE,$opt_T);
readhash(\@answers);
close(INFILE);
}
#
# Читаем ответы команд
#
if ($opt_M)
{
die "Cannot open $opt_M\n" unless open(INFILE,$opt_M)
}
else
{
*INFILE=*STDIN;
}
readmail(\%teams);
close(INFILE);
#
# Чистим хэш %answers
#
collect_answers(\%teams,\@answers);
#
# Вычисляем число ответов и рейтинги команд
#
find_scores(\%teams,\@answers,\@ratings);
#
# ОКОНЧАТЕЛЬНЫЕ РЕЗУЛЬТАТЫ
#
#
# Читаем старые результаты
#
if ($opt_t)
{
die "Cannot open $opt_t\n" unless open(INFILE,$opt_t);
readhash(\@answers);
close(INFILE);
}
#
# Читаем ответы команд
#
if ($opt_m)
{
die "Cannot open $opt_m\n" unless open(INFILE,$opt_m)
}
else
{
*INFILE=*STDIN;
}
readmail(\%teams);
close(INFILE);
#
# Чистим хэш %answers
#
collect_answers(\%teams,\@answers);
#
# Подсчитываем рейтинги вопросов
#
rate_questions(\%teams,\@answers,\@ratings);
#
# Вычисляем число ответов и рейтинги команд
#
find_scores(\%teams,\@answers,\@ratings,0.01);
#
# Ну а теперь печатаем саму таблицу...
#
if ($opt_o)
{
die "Cannot open $opt_o\n" unless open(OUTFILE,">$opt_o");
select OUTFILE;
}
#
# Печатаем заголовок
#
printf "%5s ", "N";
for ($i=1;$i<=$MAXQUEST;$i++)
{
if ($SHORT) {
printf("%1d",$i%10);
} else {
printf "%3d",$i;
}
}
printf "%6s","О";
printf "%4s","Р";
printf " КОМАНДА";
print "\n";
#
# Печатаем команды построчно
#
foreach $team (sort
{
$teams{$b}->{score} <=> $teams{$a}->{score}
or
$teams{$b}->{rating} <=> $teams{$a}->{rating}
} keys %teams
)
{
printf "%5d ",$teams{$team}->{regnum};
for ($i=1;$i<=$MAXQUEST;$i++)
{
my $answer = $teams{$team}->{answers}[$i];
my $score = $answers[$i]->{$answer}->{score};
$score = '-' unless $score;
if ($SHORT) {
printf "%1s",$score;
} else {
printf "%3s", $score;
}
}
printf "%6.2f",$teams{$team}->{score};
printf "%4s",$teams{$team}->{rating};
print " $team";
print "\n";
}
#
# Печатаем последнюю строку таблицы
# в ней рейтинги вопросов
#
if ($SHORT) {
print "Рейтинг\n";
for ($j=0;$j<$MAXQUEST/12;$j++) {
my $max=$j*12+12;
if ($max>$MAXQUEST) {
$max=$MAXQUEST;
}
for ($i=$j*12+1;$i<=$max;$i++){
printf("%3s",$i);
}
printf "\n";
for ($i=1+$j*12;$i<=$max;$i++){
printf("%3s",$ratings[$i]);
}
printf "\n";
}
} else {
printf "%5s ", "Р";
for ($i=1; $i<=$MAXQUEST;$i++)
{
printf "%3s", $ratings[$i];
}
print "\n";
}
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>