File:  [Local Repository] / processmail / Attic / createtable2.pl
Revision 1.3: download - view: text, annotated - select for diffs - revision graph
Mon Jan 24 03:16:35 2005 UTC (19 years, 5 months ago) by boris
Branches: MAIN
CVS tags: HEAD
Added new files

    1: #!/usr/local/bin/perl
    2: #$Id: createtable2.pl,v 1.3 2005/01/24 03:16:35 boris Exp $
    3: #
    4: #
    5: #
    6: # Исходные файлы и параметры
    7: #
    8: 
    9:     use Getopt::Std; 
   10: 
   11: $usage = 'createtable2.pl $Revision: 1.3 $, $Date: 2005/01/24 03:16:35 $'. "\n".
   12: "Usage: createtable2.pl [-d] [-s] [-T prelim_answers] [-M prelim_mail] [-t answers_file] [-m mail_file]  [-o results] \n";
   13: 
   14: require 'parameters.pl';
   15: require 'subroutines.pl';
   16: 
   17: die $usage unless getopts('t:T:m:M: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: #
   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: 
   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: #
  101: find_scores(\%teams,\@answers,\@ratings,0.01);
  102: 
  103: 
  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: }
  124: printf "%6s","О";
  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:     }
  151:     printf "%6.2f",$teams{$team}->{score};
  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>