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>