version 3.0, 2008/03/23 17:50:50
|
version 3.2, 2013/10/11 15:39:35
|
Line 176 sub dumphash
|
Line 176 sub dumphash
|
} |
} |
return 1; |
return 1; |
} |
} |
|
|
# |
# |
# Сбрасываем ответы на вопрос $number с оценкой $symbol |
# Сбрасываем ответы на вопрос $number с оценкой $symbol |
# в формате, пригодном для собрания сочинений |
# в формате, пригодном для собрания сочинений |
Line 239 sub rate_questions
|
Line 240 sub rate_questions
|
# |
# |
# Подсчитываем рейтинги команд |
# Подсчитываем рейтинги команд |
# @{$nopoint_questions} - список номеров вопросов, идущих вне зачёта. |
# @{$nopoint_questions} - список номеров вопросов, идущих вне зачёта. |
# Для них проставляются плясы/минусы, но они не учитываются в подсчёте |
# Для них проставляются плюсы/минусы, но они не учитываются в подсчёте |
# очков и рейтингов команд. |
# очков и рейтингов команд. |
# |
# |
sub find_scores |
sub find_scores |
Line 276 sub find_scores
|
Line 277 sub find_scores
|
} |
} |
|
|
|
|
1; |
# |
|
# Проверяем на наличие дублирующихся номеров у разных команд. |
|
# |
|
sub check_dup_numbers |
|
{ |
|
my ($teams) = @_; |
|
|
|
|
|
|
|
|
|
my %seen; |
|
|
|
# Имена команд, номера которых встречаются >1 раза. |
|
# Массив uniq_compr_names содержит по одному имени на каждый повторяющийся |
|
# номер (чуть позже мы найдём все имена, соответствующие каждому из |
|
# этих номеров). |
|
# '+0' - чтобы номера обрабатывались как числа (072 == 72). |
|
my @uniq_compr_names = |
|
grep( ++$seen{$teams->{$_}->{regnum}+0} > 1, keys %$teams ); |
|
|
|
# А теперь извлекаем номера из полученного списка. |
|
my @dup_numbers = map {$teams->{$_}->{regnum}} @uniq_compr_names; |
|
@dup_numbers = sort @dup_numbers; |
|
|
|
# И печатаем предупреждение. |
|
if ( @dup_numbers ) { |
|
print STDERR "\nВНИМАНИЕ! Одинаковые номера у нескольких команд:\n"; |
|
foreach my $num ( @dup_numbers ) { |
|
my @dup_names = grep($teams->{$_}->{regnum}+0 == $num+0, keys %$teams); |
|
print STDERR "\tНомер $num: " . join(", ", @dup_names) . "\n"; |
|
} |
|
print STDERR "\n"; |
|
} |
|
} |
|
|
|
|
|
# |
|
# Считаем ответы на вопрос $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; |