#!/usr/bin/perl -w
# Given an input file from kmeans' "printclusters" output, generate a file
# with one line per datapoint, containing the index of the cluster it's in


my @classes;                    # vector of cluster memberships

my %classes_seen;               # names of classes seen, mapped to their numerical ID
my $last_class_id = -1;         # last ID given

my $curr_id = undef;

# read input
while(<ARGV>) {
  chomp;
  if(/^\+\#\s+(\S+)/) {
    my $cname = $1;
    $curr_id = $classes_seen{$cname};
    if(!defined($curr_id)) {
      $curr_id = ++$last_class_id;
      $classes_seen{$cname} = $curr_id;
    }
    next;
  } elsif(/^\+\s*(\d+)/) {
      $classes[$1] = $curr_id;
    next;
  } else {
    die("bad input");
  }
}

# output
map {
  if(defined($_)) {
    print "$_\n";
  } else {
    print "NaN\n";
  }
} @classes;
