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