#!/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);