File:  [Local Repository] / processmail / collection.pl
Revision 3.3: download - view: text, annotated - select for diffs - revision graph
Wed Oct 30 19:28:30 2013 UTC (10 years, 8 months ago) by boris
Branches: MAIN
CVS tags: HEAD
New changes from Lev

    1: #!/usr/bin/perl
    2: #
    3: #$Id: collection.pl,v 3.3 2013/10/30 19:28:30 boris Exp $
    4: #
    5: # Собрание сочинений
    6: #
    7: 
    8: use Getopt::Std; 
    9: 
   10: $usage = 
   11: "Usage: collection.pl [-d] [-s|-m] [-t table_file]  [-o results] \n";
   12: 
   13: require 'parameters.pl';
   14: require 'subroutines.pl';
   15: 
   16: die $usage unless getopts('t:o:dsm');
   17: 
   18: $DEBUG=$opt_d;
   19: $SHORT=$opt_s;
   20: $MEDIUM=$opt_m;
   21: 
   22: # Находим максимальный и минимальный вопрос и слегка подстраховываемся.
   23: $MINQUEST=1e99;
   24: $MAXQUEST=-1;
   25: for (my $r=1; $r<=$ROUNDS; $r++) {
   26:     if ($MINQUEST>$MINQUEST[$r]) {
   27:         $MINQUEST=$MINQUEST[$r];
   28:     }
   29:     if ($MAXQUEST<$MAXQUEST[$r]) {
   30:         $MAXQUEST=$MAXQUEST[$r];
   31:     }
   32: }
   33: if ($MINQUEST < 0 || $MAXQUEST < 0) {
   34:    die "Отрицательные номера вопросов не поддерживаются!\n";
   35: }
   36: 
   37: my %teams;
   38: my @answers;
   39: #
   40: # Читаем старые результаты
   41: #
   42: if ($opt_t)
   43: {
   44:     die "Cannot open $opt_t\n" unless open(INFILE,$opt_t);
   45:     readhash(\@answers);
   46:     close(INFILE);
   47: }
   48: 
   49: #
   50: # Читаем ответы команд
   51: #
   52: for (my $r=1; $r<=$ROUNDS; $r++) {
   53:     foreach my $file ( @{$FILES[$r]} ) {
   54: 	open (INFILE, $file);
   55: 	readmail(\%teams);
   56: 	collect_answers(\%teams,\@answers);
   57: 	close (INFILE);
   58:     }
   59: }
   60: 
   61: #
   62: # Пишем измененную таблицу в файл.
   63: #
   64: if ($opt_o)
   65: { 
   66:     die "Cannot open $opt_o\n" unless open(OUTFILE,">$opt_o");
   67:     select OUTFILE;
   68: }
   69: for ($i=$MINQUEST;$i<=$MAXQUEST;$i++)
   70: {
   71:     print "\nВОПРОС $i:\n";
   72:     if ( ! $SHORT || countanswers(\%teams,\@answers,$i,'+') ) {
   73:         print "\nЗАСЧИТАНО:\n";
   74:         anondump(\%teams,\@answers,$i,'+');
   75:     }
   76:     if ( ! $SHORT || countanswers(\%teams,\@answers,$i,'+') ) {
   77:         print "\nНЕ ЗАСЧИТАНО:\n";
   78:         anondump(\%teams,\@answers,$i,'-');
   79:     }
   80:     if ( ! ($SHORT || $MEDIUM) || countanswers(\%teams,\@answers,$i,'?') ) {
   81:         print "\nНЕ ЯСНО:\n";
   82:         anondump(\%teams,\@answers,$i,'?');
   83:     }
   84:     print "\n"; 			# Added by LG for better readability
   85: }
   86: print "***\n";
   87: 
   88: #
   89: # На всякий случай проверяем на наличие команд с дублирующимися номерами.
   90: #
   91: check_dup_numbers(\%teams);
   92: 

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>