Diff for /processmail/createtable.pl between versions 1.2 and 1.3

version 1.2, 2002/02/04 16:23:23 version 1.3, 2005/02/16 22:20:08
Line 6 Line 6
 # Исходные файлы и параметры  # Исходные файлы и параметры
 #  #
   
     use Getopt::Std;   use Getopt::Std; 
   
 $usage = 'createtable.pl $Revision$, $Date$'. "\n".  $usage = 
 "Usage: createtable.pl [-d] [-s] [-t answers_file] [-m mail_file]  [-o results] \n";  "Usage: createtable.pl [-d] [-s] [-t answers_file]  [-o results] \n";
   
 require 'parameters.pl';  require 'parameters.pl';
 require 'subroutines.pl';  require 'subroutines.pl';
   
 die $usage unless getopts('t:m:o:ds');  die $usage unless getopts('t:o:ds');
   
 $DEBUG=$opt_d;  $DEBUG=$opt_d;
 $SHORT=$opt_s;  $SHORT=$opt_s;
Line 25  my @ratings; Line 25  my @ratings;
 #  #
 # Читаем старые результаты  # Читаем старые результаты
 #  #
 if ($opt_t)  if ($opt_t) {
 {  
     die "Cannot open $opt_t\n" unless open(INFILE,$opt_t);      die "Cannot open $opt_t\n" unless open(INFILE,$opt_t);
     readhash(\@answers);  } else {
     close(INFILE);     *INFILE=*STDIN;
 }  }
       
   readhash(\@answers);
   close(INFILE);
   
   
 #  #
 # Читаем ответы команд  # Открываем файл для записи
 #  #
 if ($opt_m)  if ($opt_o) { 
 {      die "Cannot open $opt_o\n" unless open(OUTFILE,">$opt_o");
     die "Cannot open $opt_m\n" unless open(INFILE,$opt_m)      select OUTFILE;
 }  }
 else  
 {  # Находим максимальный вопрос
     *INFILE=*STDIN;  $MAXQUEST=1;
   for (my $i=1; $i<=$ROUNDS; $i++) {
       if ($MAXQUEST<$MAXQUEST[$i]) {
           $MAXQUEST=$MAXQUEST[$i];
       }
 }  }
 readmail(\%teams);  
 close(INFILE);  
 #  #
 # Чистим хэш %answers  # Таблица подводится отдельно по каждому раунду
 #  #
 collect_answers(\%teams,\@answers);  for (my $r=1; $r<=$ROUNDS; $r++) {
       if ($DEBUG) {
           print STDERR "Раунд $r\n";
       }
   #
   #  Читаем ответы в данном раунде
   #
   
       foreach my $file (split /\s+/, $FILES[$r]) {
           open (INFILE, $file);
           readmail(\%teams);
           collect_answers(\%teams,\@answers);
           close (INFILE);
       }
   
 #  #
 # Подсчитываем рейтинги вопросов  # Подсчитываем рейтинги вопросов
 #  #
 rate_questions(\%teams,\@answers,\@ratings);      rate_questions(\%teams,\@answers,\@ratings,$r);
 #  #
 # Вычисляем число ответов и рейтинги команд  # Вычисляем число ответов и рейтинги команд
 #  #
 find_scores(\%teams,\@answers,\@ratings);      find_scores(\%teams,\@answers,\@ratings,$r,0.01);
 #  #
 # Ну а теперь печатаем саму таблицу...  # Ну а теперь печатаем саму таблицу...
 #  #
 if ($opt_o)  
 {   
     die "Cannot open $opt_o\n" unless open(OUTFILE,">$opt_o");  
     select OUTFILE;  
 }  
 #  #
 # Печатаем заголовок  # Печатаем заголовок
 #  #
 printf "%5s ", "N";      print "ЗАЧЁТ  $NAME[$r]\n";
 for ($i=1;$i<=$MAXQUEST;$i++)      printf "%5s ", "N";
 {      for ($i=$MINQUEST[$r];$i<=$MAXQUEST[$r];$i++)
     if ($SHORT) {      {
         printf("%1d",$i%10);          if ($SHORT) {
     } else {              printf("%1d",$i%10);
         printf "%3d",$i;          } else {
               printf "%3d",$i;
           }
     }      }
 }      printf "%6s","О";
 printf "%3s","О";      printf "%4s","Р";
 printf "%4s","Р";      printf " КОМАНДА";
 printf " КОМАНДА";      print "\n";
 print "\n";  
 #  #
 # Печатаем команды построчно  # Печатаем команды построчно
 #  #
 foreach $team (sort       foreach $team (sort 
                 {                     {
                     $teams{$b}->{score} <=> $teams{$a}->{score}                         $teams{$b}->{score} <=> $teams{$a}->{score}
                     or                         or
                         $teams{$b}->{rating} <=> $teams{$a}->{rating}                             $teams{$b}->{rating} <=> $teams{$a}->{rating}
                 } keys %teams                     } keys %teams
                )                     )
 {  
     printf "%5d ",$teams{$team}->{regnum};  
     for ($i=1;$i<=$MAXQUEST;$i++)  
     {      {
         my $answer = $teams{$team}->{answers}[$i];          printf "%5d ",$teams{$team}->{regnum};
         my $score = $answers[$i]->{$answer}->{score};          for ($i=$MINQUEST[$r];$i<=$MAXQUEST[$r];$i++)
         $score = '-' unless $score;          {
         if ($SHORT) {              my $answer = $teams{$team}->{answers}[$i];
             printf "%1s",$score;              my $score = $answers[$i]->{$answer}->{score};
         } else {              $score = '-' unless $score;
             printf "%3s", $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";
     }      }
     printf "%3s",$teams{$team}->{score};  
     printf "%4s",$teams{$team}->{rating};  
     print " $team";  
     print "\n";  
 }  
 #  #
 # Печатаем последнюю строку таблицы  # Печатаем последнюю строку таблицы
 # в ней рейтинги вопросов  # в ней рейтинги вопросов
 #  #
 if ($SHORT) {      if ($SHORT) {
     print "Рейтинг\n";          print "Рейтинг\n";
     for ($j=0;$j<$MAXQUEST/12;$j++) {          for ($j=0;$j<$MAXQUEST[$r]/12;$j++) {
         my $max=$j*12+12;              my $max=$j*12+12;
         if ($max>$MAXQUEST) {              if ($max>$MAXQUEST[$r]) {
             $max=$MAXQUEST;                  $max=$MAXQUEST[$r];
         }              }
         for ($i=$j*12+1;$i<=$max;$i++){              for ($i=$j*12+1;$i<=$max;$i++){
             printf("%3s",$i);                  printf("%3s",$i);
               }
               printf "\n";
               for ($i=1+$j*12;$i<=$max;$i++){
                   printf("%3s",$ratings[$i]);
               }
               printf "\n";
         }          }
         printf "\n";      } else {
         for ($i=1+$j*12;$i<=$max;$i++){          printf "%5s ", "Р";
             printf("%3s",$ratings[$i]);          for ($i=$MINQUEST[$r]; $i<=$MAXQUEST[$r];$i++)
           {
               printf "%3s", $ratings[$i];
         }          }
         printf "\n";          print "\n";
     }  
 } else {  
     printf "%5s ", "Р";  
     for ($i=1; $i<=$MAXQUEST;$i++)  
     {  
         printf "%3s", $ratings[$i];  
     }      }
     print "\n";      print "\n";
 }  }

Removed from v.1.2  
changed lines
  Added in v.1.3


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