#!/usr/local/bin/perl
require "/w/class.01/cs/cs131/cs131ta/risc/grades/column_names";           #has column labels and indexes

$column=convert_col (shift @ARGV);
$res=5;
$cutoff=25;

if (!$column || $column =~ m:\D:) {
  print "syntax is average column_number or average column_label\n";
  exit;
}

$names=shift @ARGV;
if ($names && $names <5) {$names=5;}
&readgrades;

$sum=0;$count=0;
$avgline=pop @grades;		#strip off fields and average
$field=shift @grades;

foreach $line (@grades) {
  @student=split (/,/, $line, -1);
  $val=$student[$column];
  if ($val =~ m:\d:) {
    if ($val >0) {
      push @list, $val;
      $sum+= $val;
      $count++;
    }
    $scores{int $val/$res}++;
    if ($val >$cutoff) {
      $sum2+=$val;
      $count2++;
    }
    push @{$names{int $val/$res}}, $student[$columns{"seas"}];
  }
  else {  push @nons, $student[0]; }
}
#exit;
$avg=  sprintf ("%4.1f", $sum/$count) if $count;
$avg2= sprintf ("%4.1f", $sum2/$count2) if $count2;

@avgs=split (/,/, $avgline, -1);
printf "Old avg was $avgs[$column], New is %4.1f for $count people, w/o <=$cutoff it's %4.1f for $count2 people\n", $avg, $avg2;
$avgs[$column]="$avg|$avg2";
$avgline=join (',', @avgs);
push @grades, $avgline;		#update average and put fields back
unshift @grades, $field;

@list=sort {$b <=> $a} @list;
print "median is $list[$#list/2], w/o <=$cutoff $list[$#list-$count+$count2/2]\n";

if ($names) {
  foreach $key (sort {$b <=> $a} keys %scores) {
    $width= $scores{$key} if ($scores{$key} >$width);   #max
  }
  $width+=2;
}
$sofar=0;
foreach $key (sort {$b <=> $a} keys %scores) {  #sort decreasing
  $sofar+= 100*$scores{$key}/$count;
  printf ">= %3d  %4.1f%% (%5.1f%%)   %2d %-${width}s", $res*$key, 100*$scores{$key}/$count,
        $sofar, $scores{$key}, "x" x $scores{$key};
  if ($names) {
    $i=1;
    $index=$#{$names{$key}};
    while ( $names*$i < $index){ #@{$names{$key}}) {
      $names{$key}[$i++*$names-1].="\n                            " . ' ' x $width . '| ';
    }
    print "|  @{$names{$key}}";
  }
  print "\n";
}
print "No grades for ".@nons.": @nons\n" if (@nons);

&writegrades;
