--- processmail/collection.pl 2005/01/24 03:14:49 1.2 +++ processmail/collection.pl 2013/10/30 19:28:30 3.3 @@ -1,22 +1,38 @@ -#!/usr/local/bin/perl +#!/usr/bin/perl # -#$Id: collection.pl,v 1.2 2005/01/24 03:14:49 boris Exp $ +#$Id: collection.pl,v 3.3 2013/10/30 19:28:30 boris Exp $ # # Собрание сочинений # - use Getopt::Std; -$usage = 'collection.pl $Revision: 1.2 $, $Date: 2005/01/24 03:14:49 $'. "\n". -"Usage: collection.pl [-d] [-t table_file] [-m mail_file] [-o results] \n"; +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:m:o:d'); +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; @@ -33,20 +49,15 @@ if ($opt_t) # # Читаем ответы команд # -if ($opt_m) -{ - die "Cannot open $opt_m\n" unless open(INFILE,$opt_m) +for (my $r=1; $r<=$ROUNDS; $r++) { + foreach my $file ( @{$FILES[$r]} ) { + open (INFILE, $file); + readmail(\%teams); + collect_answers(\%teams,\@answers); + close (INFILE); + } } -else -{ - *INFILE=*STDIN; -} -readmail(\%teams); -close(INFILE); -# -# Чистим хэш %answers -# -collect_answers(\%teams,\@answers); + # # Пишем измененную таблицу в файл. # @@ -55,21 +66,27 @@ if ($opt_o) die "Cannot open $opt_o\n" unless open(OUTFILE,">$opt_o"); select OUTFILE; } -for ($i=1;$i<=$MAXQUEST;$i++) +for ($i=$MINQUEST;$i<=$MAXQUEST;$i++) { print "\nВОПРОС $i:\n"; - print "\nЗАСЧИТАНО:\n"; - anondump(\%teams,\@answers,$i,'+'); - print "\nНЕ ЗАСЧИТАНО:\n"; - anondump(\%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 || 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);