File:  [Local Repository] / processmail / createtable.pl
Revision 1.3: download - view: text, annotated - select for diffs - revision graph
Wed Feb 16 22:20:08 2005 UTC (19 years, 4 months ago) by boris
CVS tags: Version_3
Createtable works

    1: #!/usr/local/bin/perl
    2: #$Id: createtable.pl,v 1.3 2005/02/16 22:20:08 boris Exp $
    3: #
    4: #
    5: #
    6: # Исходные файлы и параметры
    7: #
    8: 
    9: use Getopt::Std; 
   10: 
   11: $usage = 
   12: "Usage: createtable.pl [-d] [-s] [-t answers_file]  [-o results] \n";
   13: 
   14: require 'parameters.pl';
   15: require 'subroutines.pl';
   16: 
   17: die $usage unless getopts('t:o:ds');
   18: 
   19: $DEBUG=$opt_d;
   20: $SHORT=$opt_s;
   21: 
   22: my %teams;
   23: my @answers;
   24: my @ratings;
   25: #
   26: # Читаем старые результаты
   27: #
   28: if ($opt_t) {
   29:     die "Cannot open $opt_t\n" unless open(INFILE,$opt_t);
   30: } else {
   31:    *INFILE=*STDIN;
   32: }
   33:     
   34: readhash(\@answers);
   35: close(INFILE);
   36: 
   37: 
   38: #
   39: # Открываем файл для записи
   40: #
   41: if ($opt_o) { 
   42:     die "Cannot open $opt_o\n" unless open(OUTFILE,">$opt_o");
   43:     select OUTFILE;
   44: }
   45: 
   46: # Находим максимальный вопрос
   47: $MAXQUEST=1;
   48: for (my $i=1; $i<=$ROUNDS; $i++) {
   49:     if ($MAXQUEST<$MAXQUEST[$i]) {
   50: 	$MAXQUEST=$MAXQUEST[$i];
   51:     }
   52: }
   53: 
   54: 
   55: #
   56: # Таблица подводится отдельно по каждому раунду
   57: #
   58: for (my $r=1; $r<=$ROUNDS; $r++) {
   59:     if ($DEBUG) {
   60: 	print STDERR "Раунд $r\n";
   61:     }
   62: #
   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: 
   73: #
   74: # Подсчитываем рейтинги вопросов
   75: #
   76:     rate_questions(\%teams,\@answers,\@ratings,$r);
   77: #
   78: # Вычисляем число ответов и рейтинги команд
   79: #
   80:     find_scores(\%teams,\@answers,\@ratings,$r,0.01);
   81: #
   82: # Ну а теперь печатаем саму таблицу...
   83: #
   84: #
   85: # Печатаем заголовок
   86: #
   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: 	}
   96:     }
   97:     printf "%6s","О";
   98:     printf "%4s","Р";
   99:     printf " КОМАНДА";
  100:     print "\n";
  101: #
  102: # Печатаем команды построчно
  103: #
  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: 		   )
  111:     {
  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: 	    }
  123: 	}
  124: 	printf "%6.2f",$teams{$team}->{score};
  125: 	printf "%4s",$teams{$team}->{rating};
  126: 	print " $team";
  127: 	print "\n";
  128:     }
  129: #
  130: # Печатаем последнюю строку таблицы
  131: # в ней рейтинги вопросов
  132: #
  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";
  148: 	}
  149:     } else {
  150: 	printf "%5s ", "Р";
  151: 	for ($i=$MINQUEST[$r]; $i<=$MAXQUEST[$r];$i++)
  152: 	{
  153: 	    printf "%3s", $ratings[$i];
  154: 	}
  155: 	print "\n";
  156:     }
  157:     print "\n";
  158: }

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