#! /usr/bin/perl #Syntax is teststats filename where filename is the name of the results file. #Prints statistics about how many students missed each test case #Assumes results will have lines like Test 11 or Test 3 (spacing) $filename = shift @ARGV; ($dir) = $filename =~ m:(\w+)[_-]results:; $home="/u/cs/class/cs131/cs131xx"; $types=1; unless ($dir) { print "Syntax is teststats filename \neg: teststats HW2-results\n"; exit; } $total=@files=`ls $home/*/$filename`; undef $/; foreach $f (@files) { open (IN, $f) or warn "Couldn't open $f: $!\n"; $input=; if ($types) {while ($input=~m# (\w+)Test:?\s*(\d+):?#go) { $counts{$1}{$2}++; }} #combine? else {while ($input=~m# Test\s*(\d+):#go) { $counts{"main"}{$2}++; } } close IN; } $stats[0]="$total submissions\n"; foreach $type (sort keys %counts) { push @stats, "\nFor test type Type: $type\n"; $i=0; foreach $num (sort {$a<=>$b} keys %{$counts{$type}}) { push @stats, sprintf " %3d (%4.1f%%) Test %2d ", $counts{$type}{$num}, 100*$counts{$type}{$num}/$total, $num; push @stats, "\n" if ($i++ %4==3); } push @stats, "\n"; @list= sort {$counts{$type}{$b} <=> $counts{$type}{$a} }keys %{$counts{$type}}; $#list=7 if ($#list >7); for ($i=0; $i<@list; $i++) { if ($counts{$type}{$list[$i]}==0) {$#list=$i-1; last;} else {$list[$i].="($counts{$type}{$list[$i]})";} } push @stats, "Top ", $#list+1, " most difficult tests: @list\n" if (@list); } print @stats; open (OUT, ">$home/$dir/teststats.txt") or die "Can't create $home/$dir/teststats.txt: $!\n"; print OUT @stats; close OUT;