Diff for /processmail/createtable.pl between versions 3.1 and 3.0

version 3.1, 2008/03/24 16:01:47 version 3.0, 2008/03/23 17:50:49
Line 56  for (my $i=1; $i<=$ROUNDS; $i++) { Line 56  for (my $i=1; $i<=$ROUNDS; $i++) {
 #  #
 # Таблица подводится отдельно по каждому раунду  # Таблица подводится отдельно по каждому раунду
 #  #
 my @nopoint_questions;                  # Здесь будут внезачётные вопросы  my @nopoint_questions;
 my @unknowns;                           # Сюда запомним все '?'  
 for (my $r=1; $r<=$ROUNDS; $r++) {  for (my $r=1; $r<=$ROUNDS; $r++) {
     if ($DEBUG) {      if ($DEBUG) {
         print STDERR "Раунд $r\n";          print STDERR "Раунд $r\n";
     }      }
   #
   #  Читаем ответы в данном раунде
   #
   
     #  
     #  Читаем ответы в данном раунде  
     #  
     foreach my $file ( @{$FILES[$r]} ) {      foreach my $file ( @{$FILES[$r]} ) {
         open (INFILE, $file);          open (INFILE, $file);
         readmail(\%teams);          readmail(\%teams);
Line 73  for (my $r=1; $r<=$ROUNDS; $r++) { Line 72  for (my $r=1; $r<=$ROUNDS; $r++) {
         close (INFILE);          close (INFILE);
     }      }
   
     #  #
     # Дополняем (добавляем к имеющемуся!) список вопросов, идущих вне зачёта  # Дополняем (добавляем к имеющемуся) список вопросов, идущих вне зачёта
     # в данном туре.  Для них проставляются плюсы и минусы, но они не входят  # в данном туре.  Для них проставляются плюсы и минусы, но они не входят
     # в суммарный результат и рейтинг команд.  # в суммарный результат и рейтинг команд.
     #  #
     foreach my $num ( @{$NOCOUNT[$r]} )      foreach my $num ( @{$NOCOUNT[$r]} )
     {      {
         # Если номер не начинается с минуса, то включить его в список          # Если номер не начинается с минуса, то включить его в список
Line 93  for (my $r=1; $r<=$ROUNDS; $r++) { Line 92  for (my $r=1; $r<=$ROUNDS; $r++) {
     my %seen;      my %seen;
     @nopoint_questions = grep( !$seen{$_}++, @nopoint_questions );      @nopoint_questions = grep( !$seen{$_}++, @nopoint_questions );
   
     #  #
     # Подсчитываем рейтинги вопросов  # Подсчитываем рейтинги вопросов
     #  #
     rate_questions(\%teams,\@answers,\@ratings,$r);      rate_questions(\%teams,\@answers,\@ratings,$r);
   #
     #  # Вычисляем число ответов и рейтинги команд
     # Вычисляем число ответов и рейтинги команд  #
     #  
     find_scores(\%teams,\@answers,\@ratings,$r,0.01,\@nopoint_questions);      find_scores(\%teams,\@answers,\@ratings,$r,0.01,\@nopoint_questions);
   #
     #  # Ну а теперь печатаем саму таблицу...
     # Ну а теперь печатаем саму таблицу...  #
     #  #
     #  # Печатаем заголовок
     # Печатаем заголовок  #
     #  
     # Столько столбцов до пробела в среднем формате ("++-++ +-+-+ -+--+")      # Столько столбцов до пробела в среднем формате ("++-++ +-+-+ -+--+")
     my $COL=5;      my $COL=5;
   
Line 138  for (my $r=1; $r<=$ROUNDS; $r++) { Line 135  for (my $r=1; $r<=$ROUNDS; $r++) {
     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}
Line 156  for (my $r=1; $r<=$ROUNDS; $r++) { Line 152  for (my $r=1; $r<=$ROUNDS; $r++) {
             my $answer = $teams{$team}->{answers}[$i];              my $answer = $teams{$team}->{answers}[$i];
             my $score = $answers[$i]->{$answer}->{score};              my $score = $answers[$i]->{$answer}->{score};
             $score = '-' unless $score;              $score = '-' unless $score;
               $score = 'X' 
             # Особо пометим взятые внезачётные вопросы.                  if ( $score eq '+' && @nopoint_questions && 
             if ( $score eq '+' && grep($_==$i, @nopoint_questions) ) {                       grep($_==$i, @nopoint_questions)
                 $score = 'X';                     );
             }  
   
             # И запомним, если вопрос не взят и не не взят ;-).  
             if ( $score eq '?' ) {  
                 my $unk = {  
                             question => $i,  
                             score => $score,  
                             team  => $team,  
                             regnum => $teams{$team}->{regnum},  
                             round => $r,  
                           };  
                 push( @unknowns, $unk );  
             }  
   
             # Ну наконец-то!  Печатаем.  
             if ($SHORT) {              if ($SHORT) {
                 printf "%1s",$score;                  printf "%1s",$score;
             } elsif ($MEDIUM) {              } elsif ($MEDIUM) {
Line 189  for (my $r=1; $r<=$ROUNDS; $r++) { Line 170  for (my $r=1; $r<=$ROUNDS; $r++) {
         print " $team";          print " $team";
         print "\n";          print "\n";
     }      }
   #
     #  # Печатаем рейтинги вопросов - длинный или короткий варианты.
     # Печатаем рейтинги вопросов - длинный или короткий варианты.  #
     #  
     if ($SHORT || $MEDIUM) {      if ($SHORT || $MEDIUM) {
         my $nline = 24;                         # По $nline рейтингов в строке          my $nline = 12;                         # По 12 рейтингов в строке
         print "\nРейтинг\n";          print "\nРейтинг\n";
         for ($j=0; $j<$MAXQUEST[$r]/$nline; $j++) {          for ($j=0; $j<$MAXQUEST[$r]/$nline; $j++) {
             my $max = $j*$nline + $nline;              my $max = $j*$nline + $nline;
Line 221  for (my $r=1; $r<=$ROUNDS; $r++) { Line 201  for (my $r=1; $r<=$ROUNDS; $r++) {
     }      }
     print "\n";      print "\n";
 }  }
   
   
 # Печатаем предупреждение если есть неясные ответы.  
 if ( @unknowns ) {  
     print STDERR "ВНИМАНИЕ!  Не всем ответам проставлены '+' и '-':\n";  
     foreach my $unk ( @unknowns ) {  
         print STDERR "\tКоманда $unk->{team} ($unk->{regnum}), "  
                 . "вопрос $unk->{question} ($NAME[$unk->{round}]): "  
                 . "$unk->{score}\n";  
     }  
 }  
 # На всякий случай проверяем на наличие команд с дублирующимися номерами.  
 check_dup_numbers(\%teams);  

Removed from v.3.1  
changed lines
  Added in v.3.0


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