Annotation of processmail/createtable2.pl, revision 1.3
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>