#!/usr/local/bin/perl #$Id: createtable.pl,v 1.2 2002/02/04 16:23:23 boris Exp $ # # # # Исходные файлы и параметры # use Getopt::Std; $usage = 'createtable.pl $Revision: 1.2 $, $Date: 2002/02/04 16:23:23 $'. "\n". "Usage: createtable.pl [-d] [-s] [-t answers_file] [-m mail_file] [-o results] \n"; require 'parameters.pl'; require 'subroutines.pl'; die $usage unless getopts('t:m:o:ds'); $DEBUG=$opt_d; $SHORT=$opt_s; my %teams; my @answers; my @ratings; # # Читаем старые результаты # if ($opt_t) { die "Cannot open $opt_t\n" unless open(INFILE,$opt_t); readhash(\@answers); close(INFILE); } # # Читаем ответы команд # if ($opt_m) { die "Cannot open $opt_m\n" unless open(INFILE,$opt_m) } else { *INFILE=*STDIN; } readmail(\%teams); close(INFILE); # # Чистим хэш %answers # collect_answers(\%teams,\@answers); # # Подсчитываем рейтинги вопросов # rate_questions(\%teams,\@answers,\@ratings); # # Вычисляем число ответов и рейтинги команд # find_scores(\%teams,\@answers,\@ratings); # # Ну а теперь печатаем саму таблицу... # if ($opt_o) { die "Cannot open $opt_o\n" unless open(OUTFILE,">$opt_o"); select OUTFILE; } # # Печатаем заголовок # printf "%5s ", "N"; for ($i=1;$i<=$MAXQUEST;$i++) { if ($SHORT) { printf("%1d",$i%10); } else { printf "%3d",$i; } } printf "%3s","О"; printf "%4s","Р"; printf " КОМАНДА"; print "\n"; # # Печатаем команды построчно # foreach $team (sort { $teams{$b}->{score} <=> $teams{$a}->{score} or $teams{$b}->{rating} <=> $teams{$a}->{rating} } keys %teams ) { printf "%5d ",$teams{$team}->{regnum}; for ($i=1;$i<=$MAXQUEST;$i++) { my $answer = $teams{$team}->{answers}[$i]; my $score = $answers[$i]->{$answer}->{score}; $score = '-' unless $score; if ($SHORT) { printf "%1s",$score; } else { printf "%3s", $score; } } printf "%3s",$teams{$team}->{score}; printf "%4s",$teams{$team}->{rating}; print " $team"; print "\n"; } # # Печатаем последнюю строку таблицы # в ней рейтинги вопросов # if ($SHORT) { print "Рейтинг\n"; for ($j=0;$j<$MAXQUEST/12;$j++) { my $max=$j*12+12; if ($max>$MAXQUEST) { $max=$MAXQUEST; } for ($i=$j*12+1;$i<=$max;$i++){ printf("%3s",$i); } printf "\n"; for ($i=1+$j*12;$i<=$max;$i++){ printf("%3s",$ratings[$i]); } printf "\n"; } } else { printf "%5s ", "Р"; for ($i=1; $i<=$MAXQUEST;$i++) { printf "%3s", $ratings[$i]; } print "\n"; }