#! /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=<IN>;
  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;
