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, 6 months ago) by boris
Branches: MAIN
CVS tags: HEAD
New changes from Lev

#!/usr/bin/perl
#
#$Id: collection.pl,v 3.3 2013/10/30 19:28:30 boris Exp $
#
# Собрание сочинений
#

use Getopt::Std; 

$usage = 
"Usage: collection.pl [-d] [-s|-m] [-t table_file]  [-o results] \n";

require 'parameters.pl';
require 'subroutines.pl';

die $usage unless getopts('t:o:dsm');

$DEBUG=$opt_d;
$SHORT=$opt_s;
$MEDIUM=$opt_m;

# Находим максимальный и минимальный вопрос и слегка подстраховываемся.
$MINQUEST=1e99;
$MAXQUEST=-1;
for (my $r=1; $r<=$ROUNDS; $r++) {
    if ($MINQUEST>$MINQUEST[$r]) {
        $MINQUEST=$MINQUEST[$r];
    }
    if ($MAXQUEST<$MAXQUEST[$r]) {
        $MAXQUEST=$MAXQUEST[$r];
    }
}
if ($MINQUEST < 0 || $MAXQUEST < 0) {
   die "Отрицательные номера вопросов не поддерживаются!\n";
}

my %teams;
my @answers;
#
# Читаем старые результаты
#
if ($opt_t)
{
    die "Cannot open $opt_t\n" unless open(INFILE,$opt_t);
    readhash(\@answers);
    close(INFILE);
}

#
# Читаем ответы команд
#
for (my $r=1; $r<=$ROUNDS; $r++) {
    foreach my $file ( @{$FILES[$r]} ) {
	open (INFILE, $file);
	readmail(\%teams);
	collect_answers(\%teams,\@answers);
	close (INFILE);
    }
}

#
# Пишем измененную таблицу в файл.
#
if ($opt_o)
{ 
    die "Cannot open $opt_o\n" unless open(OUTFILE,">$opt_o");
    select OUTFILE;
}
for ($i=$MINQUEST;$i<=$MAXQUEST;$i++)
{
    print "\nВОПРОС $i:\n";
    if ( ! $SHORT || countanswers(\%teams,\@answers,$i,'+') ) {
        print "\nЗАСЧИТАНО:\n";
        anondump(\%teams,\@answers,$i,'+');
    }
    if ( ! $SHORT || countanswers(\%teams,\@answers,$i,'+') ) {
        print "\nНЕ ЗАСЧИТАНО:\n";
        anondump(\%teams,\@answers,$i,'-');
    }
    if ( ! ($SHORT || $MEDIUM) || countanswers(\%teams,\@answers,$i,'?') ) {
        print "\nНЕ ЯСНО:\n";
        anondump(\%teams,\@answers,$i,'?');
    }
    print "\n"; 			# Added by LG for better readability
}
print "***\n";

#
# На всякий случай проверяем на наличие команд с дублирующимися номерами.
#
check_dup_numbers(\%teams);


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