--- processmail/createtable.pl 2013/10/11 15:39:35 3.3 +++ processmail/createtable.pl 2013/10/30 19:28:30 3.4 @@ -1,5 +1,5 @@ #!/usr/bin/perl -#$Id: createtable.pl,v 3.3 2013/10/11 15:39:35 boris Exp $ +#$Id: createtable.pl,v 3.4 2013/10/30 19:28:30 boris Exp $ # # # @@ -20,6 +20,21 @@ $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; my @ratings; @@ -44,15 +59,6 @@ if ($opt_o) { select OUTFILE; } -# Находим максимальный вопрос -$MAXQUEST=1; -for (my $i=1; $i<=$ROUNDS; $i++) { - if ($MAXQUEST<$MAXQUEST[$i]) { - $MAXQUEST=$MAXQUEST[$i]; - } -} - - # # Таблица подводится отдельно по каждому раунду # @@ -66,7 +72,7 @@ for (my $r=1; $r<=$ROUNDS; $r++) { # # Удаляем старые рейтинги (Ivan A Derzhanski ) # - for ($i=1;$i<=$MAXQUEST;$i++) { + for ($i=$MINQUEST;$i<=$MAXQUEST;$i++) { foreach $answer (keys %{$answers[$i]}) { %{$answers[$i]->{$answer}->{teams}} = (); } @@ -210,11 +216,11 @@ for (my $r=1; $r<=$ROUNDS; $r++) { if ($max>$MAXQUEST[$r]) { $max=$MAXQUEST[$r]; } - for ($i=$j*$nline+1; $i<=$max; $i++){ + for ($i=$MINQUEST[$r]+$j*$nline; $i<=$max; $i++){ printf("%3s",$i); } printf "\n"; - for ($i=$j*$nline+1; $i<=$max; $i++){ + for ($i=$MINQUEST[$r]+$j*$nline; $i<=$max; $i++){ printf("%3s",$ratings[$i]); } printf "\n"; @@ -229,6 +235,7 @@ for (my $r=1; $r<=$ROUNDS; $r++) { print "\n"; } print "\n"; + print "\n"; # LG: One more for better readability }