--- processmail/subroutines.pl 2008/03/24 16:01:47 3.1 +++ processmail/subroutines.pl 2013/10/11 15:39:35 3.2 @@ -1,7 +1,7 @@ # В этот файл собраны процедуры, общие для всей системы # работы с ответами. # -#$Id: subroutines.pl,v 3.1 2008/03/24 16:01:47 boris Exp $ +#$Id: subroutines.pl,v 3.2 2013/10/11 15:39:35 boris Exp $ # sub readhash { @@ -176,6 +176,7 @@ sub dumphash } return 1; } + # # Сбрасываем ответы на вопрос $number с оценкой $symbol # в формате, пригодном для собрания сочинений @@ -239,7 +240,7 @@ sub rate_questions # # Подсчитываем рейтинги команд # @{$nopoint_questions} - список номеров вопросов, идущих вне зачёта. -# Для них проставляются плясы/минусы, но они не учитываются в подсчёте +# Для них проставляются плюсы/минусы, но они не учитываются в подсчёте # очков и рейтингов команд. # sub find_scores @@ -287,11 +288,11 @@ sub check_dup_numbers # Имена команд, номера которых встречаются >1 раза. # Массив uniq_compr_names содержит по одному имени на каждый повторяющийся - # номер (чуть позже мы найдём все имена, соответствующие каждому из - # этих номеров). + # номер (чуть позже мы найдём все имена, соответствующие каждому из + # этих номеров). # '+0' - чтобы номера обрабатывались как числа (072 == 72). my @uniq_compr_names = - grep( $seen{$teams->{$_}->{regnum}+0}++ > 1, keys %$teams ); + grep( ++$seen{$teams->{$_}->{regnum}+0} > 1, keys %$teams ); # А теперь извлекаем номера из полученного списка. my @dup_numbers = map {$teams->{$_}->{regnum}} @uniq_compr_names; @@ -301,7 +302,7 @@ sub check_dup_numbers if ( @dup_numbers ) { print STDERR "\nВНИМАНИЕ! Одинаковые номера у нескольких команд:\n"; foreach my $num ( @dup_numbers ) { - my @dup_names = grep($teams->{$_}->{regnum} == $num, keys %$teams); + my @dup_names = grep($teams->{$_}->{regnum}+0 == $num+0, keys %$teams); print STDERR "\tНомер $num: " . join(", ", @dup_names) . "\n"; } print STDERR "\n"; @@ -309,5 +310,24 @@ sub check_dup_numbers } +# +# Считаем ответы на вопрос $number с оценкой $symbol +# (фактически, это anondump(), только без печати списка +# таких ответов). +# +sub countanswers +{ + my ($teams,$answers,$number,$symbol) = @_; + my $num=0; + foreach $answer (keys %{$answers->[$number]}) + { + if ($$answers[$number]->{$answer}{score} eq $symbol) + { + $num++; + } + } + return $num; +} + 1;