Annotation of processmail/createtable2.pl, revision 1.2

1.1       boris       1: #!/usr/local/bin/perl
1.2     ! boris       2: #$Id: createtable2.pl,v 1.1 2004/12/08 20:48:37 boris Exp boris $
1.1       boris       3: #
                      4: #
                      5: #
                      6: # Исходные файлы и параметры
                      7: #
                      8: 
                      9:     use Getopt::Std; 
                     10: 
1.2     ! boris      11: $usage = 'createtable2.pl $Revision: 1.1 $, $Date: 2004/12/08 20:48:37 $'. "\n".
        !            12: "Usage: createtable2.pl [-d] [-s] [-T prelim_answers] [-M prelim_mail] [-t answers_file] [-m mail_file]  [-o results] \n";
1.1       boris      13: 
                     14: require 'parameters.pl';
                     15: require 'subroutines.pl';
                     16: 
1.2     ! boris      17: die $usage unless getopts('t:T:m:M:o:ds');
1.1       boris      18: 
                     19: $DEBUG=$opt_d;
                     20: $SHORT=$opt_s;
                     21: 
                     22: my %teams;
                     23: my @answers;
                     24: my @ratings;
1.2     ! boris      25: 
        !            26: #
        !            27: # ПРЕДВАРИТЕЛЬНЫЕ РЕЗУЛЬТАТЫ
        !            28: #
        !            29: 
        !            30: # Читаем старые результаты
        !            31: #
        !            32: if ($opt_T)
        !            33: {
        !            34:     die "Cannot open $opt_T\n" unless open(INFILE,$opt_T);
        !            35:     readhash(\@answers);
        !            36:     close(INFILE);
        !            37: }
        !            38: 
        !            39: #
        !            40: # Читаем ответы команд
        !            41: #
        !            42: if ($opt_M)
        !            43: {
        !            44:     die "Cannot open $opt_M\n" unless open(INFILE,$opt_M)
        !            45: }
        !            46: else
        !            47: {
        !            48:     *INFILE=*STDIN;
        !            49: }
        !            50: readmail(\%teams);
        !            51: close(INFILE);
        !            52: #
        !            53: # Чистим хэш %answers
        !            54: #
        !            55: collect_answers(\%teams,\@answers);
        !            56: 
        !            57: #
        !            58: # Вычисляем число ответов и рейтинги команд
        !            59: #
        !            60: find_scores(\%teams,\@answers,\@ratings);
        !            61: 
        !            62: 
        !            63: #
        !            64: # ОКОНЧАТЕЛЬНЫЕ РЕЗУЛЬТАТЫ
        !            65: #
        !            66: 
1.1       boris      67: #
                     68: # Читаем старые результаты
                     69: #
                     70: if ($opt_t)
                     71: {
                     72:     die "Cannot open $opt_t\n" unless open(INFILE,$opt_t);
                     73:     readhash(\@answers);
                     74:     close(INFILE);
                     75: }
                     76: 
                     77: #
                     78: # Читаем ответы команд
                     79: #
                     80: if ($opt_m)
                     81: {
                     82:     die "Cannot open $opt_m\n" unless open(INFILE,$opt_m)
                     83: }
                     84: else
                     85: {
                     86:     *INFILE=*STDIN;
                     87: }
                     88: readmail(\%teams);
                     89: close(INFILE);
                     90: #
                     91: # Чистим хэш %answers
                     92: #
                     93: collect_answers(\%teams,\@answers);
                     94: #
                     95: # Подсчитываем рейтинги вопросов
                     96: #
                     97: rate_questions(\%teams,\@answers,\@ratings);
                     98: #
                     99: # Вычисляем число ответов и рейтинги команд
                    100: #
1.2     ! boris     101: find_scores(\%teams,\@answers,\@ratings,0.01);
        !           102: 
        !           103: 
1.1       boris     104: #
                    105: # Ну а теперь печатаем саму таблицу...
                    106: #
                    107: if ($opt_o)
                    108: { 
                    109:     die "Cannot open $opt_o\n" unless open(OUTFILE,">$opt_o");
                    110:     select OUTFILE;
                    111: }
                    112: #
                    113: # Печатаем заголовок
                    114: #
                    115: printf "%5s ", "N";
                    116: for ($i=1;$i<=$MAXQUEST;$i++)
                    117: {
                    118:     if ($SHORT) {
                    119:        printf("%1d",$i%10);
                    120:     } else {
                    121:        printf "%3d",$i;
                    122:     }
                    123: }
1.2     ! boris     124: printf "%6s","О";
1.1       boris     125: printf "%4s","Р";
                    126: printf " КОМАНДА";
                    127: print "\n";
                    128: #
                    129: # Печатаем команды построчно
                    130: #
                    131: foreach $team (sort 
                    132:                {
                    133:                    $teams{$b}->{score} <=> $teams{$a}->{score}
                    134:                    or
                    135:                        $teams{$b}->{rating} <=> $teams{$a}->{rating}
                    136:                } keys %teams
                    137:               )
                    138: {
                    139:     printf "%5d ",$teams{$team}->{regnum};
                    140:     for ($i=1;$i<=$MAXQUEST;$i++)
                    141:     {
                    142:        my $answer = $teams{$team}->{answers}[$i];
                    143:        my $score = $answers[$i]->{$answer}->{score};
                    144:        $score = '-' unless $score;
                    145:        if ($SHORT) {
                    146:            printf "%1s",$score;
                    147:        } else {
                    148:            printf "%3s", $score;
                    149:        }
                    150:     }
1.2     ! boris     151:     printf "%6.2f",$teams{$team}->{score};
1.1       boris     152:     printf "%4s",$teams{$team}->{rating};
                    153:     print " $team";
                    154:     print "\n";
                    155: }
                    156: #
                    157: # Печатаем последнюю строку таблицы
                    158: # в ней рейтинги вопросов
                    159: #
                    160: if ($SHORT) {
                    161:     print "Рейтинг\n";
                    162:     for ($j=0;$j<$MAXQUEST/12;$j++) {
                    163:        my $max=$j*12+12;
                    164:        if ($max>$MAXQUEST) {
                    165:            $max=$MAXQUEST;
                    166:        }
                    167:        for ($i=$j*12+1;$i<=$max;$i++){
                    168:            printf("%3s",$i);
                    169:        }
                    170:        printf "\n";
                    171:        for ($i=1+$j*12;$i<=$max;$i++){
                    172:            printf("%3s",$ratings[$i]);
                    173:        }
                    174:        printf "\n";
                    175:     }
                    176: } else {
                    177:     printf "%5s ", "Р";
                    178:     for ($i=1; $i<=$MAXQUEST;$i++)
                    179:     {
                    180:         printf "%3s", $ratings[$i];
                    181:     }
                    182:     print "\n";
                    183: }

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>