Annotation of processmail/createtable2.pl, revision 1.3

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>