1: #!/usr/local/bin/perl
2: #$Id: createtable2.pl,v 1.1 2004/12/08 20:48:37 boris Exp $
3: #
4: #
5: #
6: # Исходные файлы и параметры
7: #
8:
9: use Getopt::Std;
10:
11: $usage = 'createtable.pl $Revision: 1.1 $, $Date: 2004/12/08 20:48:37 $'. "\n".
12: "Usage: createtable.pl [-d] [-s] [-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: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: if ($opt_t)
29: {
30: die "Cannot open $opt_t\n" unless open(INFILE,$opt_t);
31: readhash(\@answers);
32: close(INFILE);
33: }
34:
35: #
36: # Читаем ответы команд
37: #
38: if ($opt_m)
39: {
40: die "Cannot open $opt_m\n" unless open(INFILE,$opt_m)
41: }
42: else
43: {
44: *INFILE=*STDIN;
45: }
46: readmail(\%teams);
47: close(INFILE);
48: #
49: # Чистим хэш %answers
50: #
51: collect_answers(\%teams,\@answers);
52: #
53: # Подсчитываем рейтинги вопросов
54: #
55: rate_questions(\%teams,\@answers,\@ratings);
56: #
57: # Вычисляем число ответов и рейтинги команд
58: #
59: find_scores(\%teams,\@answers,\@ratings);
60: #
61: # Ну а теперь печатаем саму таблицу...
62: #
63: if ($opt_o)
64: {
65: die "Cannot open $opt_o\n" unless open(OUTFILE,">$opt_o");
66: select OUTFILE;
67: }
68: #
69: # Печатаем заголовок
70: #
71: printf "%5s ", "N";
72: for ($i=1;$i<=$MAXQUEST;$i++)
73: {
74: if ($SHORT) {
75: printf("%1d",$i%10);
76: } else {
77: printf "%3d",$i;
78: }
79: }
80: printf "%3s","О";
81: printf "%4s","Р";
82: printf " КОМАНДА";
83: print "\n";
84: #
85: # Печатаем команды построчно
86: #
87: foreach $team (sort
88: {
89: $teams{$b}->{score} <=> $teams{$a}->{score}
90: or
91: $teams{$b}->{rating} <=> $teams{$a}->{rating}
92: } keys %teams
93: )
94: {
95: printf "%5d ",$teams{$team}->{regnum};
96: for ($i=1;$i<=$MAXQUEST;$i++)
97: {
98: my $answer = $teams{$team}->{answers}[$i];
99: my $score = $answers[$i]->{$answer}->{score};
100: $score = '-' unless $score;
101: if ($SHORT) {
102: printf "%1s",$score;
103: } else {
104: printf "%3s", $score;
105: }
106: }
107: printf "%3s",$teams{$team}->{score};
108: printf "%4s",$teams{$team}->{rating};
109: print " $team";
110: print "\n";
111: }
112: #
113: # Печатаем последнюю строку таблицы
114: # в ней рейтинги вопросов
115: #
116: if ($SHORT) {
117: print "Рейтинг\n";
118: for ($j=0;$j<$MAXQUEST/12;$j++) {
119: my $max=$j*12+12;
120: if ($max>$MAXQUEST) {
121: $max=$MAXQUEST;
122: }
123: for ($i=$j*12+1;$i<=$max;$i++){
124: printf("%3s",$i);
125: }
126: printf "\n";
127: for ($i=1+$j*12;$i<=$max;$i++){
128: printf("%3s",$ratings[$i]);
129: }
130: printf "\n";
131: }
132: } else {
133: printf "%5s ", "Р";
134: for ($i=1; $i<=$MAXQUEST;$i++)
135: {
136: printf "%3s", $ratings[$i];
137: }
138: print "\n";
139: }
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>