Annotation of processmail/createtable.pl, revision 1.3

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

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