From b774361c00873c619adc74e75807cd618f7661a9 Mon Sep 17 00:00:00 2001 From: Martin Mares Date: Fri, 8 Jun 2001 15:25:46 +0000 Subject: [PATCH] Lots of minor improvements. --- bin/mo-score | 53 ++++++++++++++++++++++++++++++++++++++++------------ 1 file changed, 41 insertions(+), 12 deletions(-) diff --git a/bin/mo-score b/bin/mo-score index f609fc3..1c2c012 100755 --- a/bin/mo-score +++ b/bin/mo-score @@ -4,7 +4,9 @@ $debug = 0; $detail = 0; $html = 0; $tex = 0; -$usage = "Usage: mo-score [--detail] [--html] [--tex] ..."; +$extras = 0; +$alt = 0; +$usage = "Usage: mo-score [--detail] [--alt] [--extras] [--html] [--tex] ..."; while (($arg = $ARGV[0]) =~ /^--([a-z]+)$/) { shift @ARGV; $var = "\$$1"; @@ -18,24 +20,41 @@ open (CT, "bin/mo-get-users --full |") || die "Cannot get list of contestants"; while () { chomp; ($u,$f) = split /\t/; + ($u eq "somebody") && next; $users{$u}=$f; } close CT; print STDERR 0+keys %users, "\n"; +print STDERR "Scanning exceptions... "; +if ($extras && open (EX, "exceptions")) { + while () { + chomp; + (/^$/ || /^#/) && next; + @a = split /\s+/; + $u = shift @a; + defined $users{$u} || die "Unknown user $u"; + while (@a) { $extra{$u} += shift @a; } + } + close EX; + print STDERR "OK\n"; +} else { print STDERR "none\n"; } + print STDERR "Scanning task results... "; +$need_tasks = join("|", @ARGV); foreach $u (keys %users) { opendir (D, "testing/$u") or next; foreach $t (readdir(D)) { $t =~ /^\./ && next; + $t =~ /$need_tasks/ || next; $known_tasks{$t} = 1; - $tt = "testing/$u/$t/points"; + $tt = "testing/$u/$t/points" . ($alt ? ".alt" : ""); -f $tt || next; print STDERR "$u/$t "; open (X, $tt) || die "Unable to open $tt"; while () { chomp; - /^(\d+) (\d+)(.*)/ || die "Parse error: $_"; + /^(\S+) (-?\d+)\s*(.*)/ || die "Parse error: $_"; $ttest = $1; $tpts = $2; $trem = $3; @@ -44,11 +63,14 @@ foreach $u (keys %users) { $remarks{$u}{$t}{$ttest} = $trem; $cmt = $tpts; if ($tpts == 0) { - $msg = $3; - if ($msg =~ /^Compile /) { $cmt = "CE"; } - elsif ($msg =~ /^Time limit exceeded/) { $cmt = "TO"; } - elsif ($msg =~ /^Exited with error /) { $cmt = "RE"; } - elsif ($msg =~ /^Caught fatal signal /) { $cmt = "SG"; } + if ($trem =~ /^Compile /) { $cmt = "CE"; } + elsif ($trem =~ /^Time limit exceeded/) { $cmt = "TO"; } + elsif ($trem =~ /^Exited with error /) { $cmt = "RE"; } + elsif ($trem =~ /^Caught fatal signal /) { $cmt = "SG"; } + elsif ($trem =~ /^([A-Za-z])\S*\s+([A-Za-z])/) { + ($cmt = "$1$2") =~ tr/a-z/A-Z/; + } + elsif ($trem =~ /^Wrong answer/) { $cmt = "WA"; } } $comment{$u}{$t}{$ttest} = $cmt; $total{$u}{$t} += $tpts; @@ -64,10 +86,17 @@ print STDERR "Creating table template... "; @body = ('','$u','$users{$u}'); @bodysums = (); @footer = ('"Total"','',''); +if (keys %extra) { + push @header, "Extra"; + push @body, '$extra{$u}'; + $col = 0+@footer; + push @bodysums, $col; + push @footer, "sum($col)"; +} foreach $t (@ARGV) { defined $known_tasks{$t} || die "Unknown task $t"; - push @header, "$t"; - push @body, "\$total{\$u}{'$t'}"; + push @header, substr($t, 0, 4); + push @body, "(\$xx = \$total{\$u}{'$t'}) > 0 ? \$xx : 0"; $col = 0+@footer; push @footer, "sum($col)"; push @bodysums, $col; @@ -123,7 +152,7 @@ while ($i < @table) { if ($i == $j+1) { ${table[$j]}[0] = "$i."; } else { - ${table[$j]}[0] = $j+1 . ".--" . $i . "."; + ${table[$j]}[0] = $j+1 . ".-" . $i . "."; $j++; while ($j < $i) { ${table[$j++]}[0] = ""; }; } @@ -148,7 +177,7 @@ if ($debug) { foreach $r (@table) { print "", join('',map { if ($hdr) { $_ = "$_"; } - else { $_ = "$_"; } + else { $_ = " 14 ? " width=150" : "") . ">$_"; } } @$r), "\n"; $hdr = 0; } -- 2.39.2