#! /usr/bin/perl

# avg-addy - compute the average of a list of email addresses

# Copyright (c) 1998. Greg Bacon. All Rights Reserved.
# This program is free software.  You may distribute it or modify it
# (perhaps both) under the terms of the Artistic License which comes
# with the Perl Kit.

use strict;
use integer;

my @name;
my $namelen = 0;

my @hname;
my @hnamelens;

my $total = 0;
my $total_parts = 0;

while (<>) {
    chomp;

    next unless /\S/;  ## blank lines suck
    next unless /.@./;

    my($i,$j);
    $total++;

    s/^(.*?)@//;
    my $name = $1;
    $namelen += length $name;

    my @parts = split /\./, $_;
    $total_parts += @parts;

    $i = 0;
    foreach my $ch (split //, $name) {
        $name[$i] ||= 0;
        $name[$i] += ord($ch);
        $i++;
    }

    $i = 0;
    foreach my $part (@parts) {
        $hnamelens[$i] ||= 0;
        $hnamelens[$i] += length $part;

        $j = 0;
        foreach my $ch (split //, $part) {
            $hname[$i][$j] ||= 0;
            $hname[$i][$j] += ord($ch);
            $j++;
        }

        $i++;
    }
}

my $avg = '';

## cull what we don't need
my $avg_name_len = $namelen / $total;
splice @name, $avg_name_len;

my $avg_num_parts = $total_parts / $total;
splice @hname,     $avg_num_parts;
splice @hnamelens, $avg_num_parts;

foreach my $n (@name) {
    $avg .= chr($n / $total);
}

$avg .= '@';

for (my $i = 0; $i < @hname; $i++) {
    my $avg_len = $hnamelens[$i] / $total;

    splice @{$hname[$i]}, $avg_len;

    foreach my $n (@{$hname[$i]}) {
        $avg .= chr($n / $total);
    }

    $avg .= '.';
}

$avg =~ s/\.$//;
print "Average address: $avg\n";
