#!/usr/bin/perl -W

#use strict;

my %teams;
my %gamedays;
my %prev;
my %wins;
my %loses;
my %stdev;
my %pntsfor;
my %pntsagainst;

while (<>)
{
    my ($date, $team1, $score1, $team2, $score2) = /^([0-9]*) (.*): (.*) -- (.*): (.*)/;

    next if (!defined $date);
    print("$date) $team1: $score1, $team2: $score2\n");

    $gamedays{$date}{$team1} .= ":$team2,$score1,$score2";
    $gamedays{$date}{$team2} .= ":$team1,$score2,$score1";
    
    $teams{$team1} .= ":A,$team2,$score1,$score2";
    $teams{$team2} .= ":H,$team1,$score2,$score1";
    
    $pntsfor{$team1} += $score1;
    $pntsagainst{$team1} += $score2;
    $pntsfor{$team2} += $score2;
    $pntsagainst{$team2} += $score1;
    
    if ($score1 > $score2)
    {
        $wins{$team1}++;
        $loses{$team2}++;
        $wins{$team2} += 0;
        $loses{$team1} += 0;
    }
    elsif ($score1 < $score2)
    {
        $wins{$team2}++;
        $loses{$team1}++;
        $wins{$team1} += 0;
        $loses{$team2} += 0;
    }
}

for my $team (sort keys %teams)
{
#    print("$team: $teams{$team}\n\n");
    $prev{$team} = 50;
#    $prev{$team} = 0;
}

my %next;

for my $i (1..100)
{
#    print("\n\nIteration $i\n");
    for my $team (keys %teams)
    {
        my $sum = 0;
        my @results = split(/:/, $teams{$team});
        shift(@results);
        
        for my $result (@results)
        {
            my ($home, $opp, $score1, $score2) = split(/,/, $result);
            $sum += $score1 - $score2 + $prev{$opp} + (($home eq 'H') ? -2 : 2);
#            $sum += log($score1 / $score2) + $prev{$opp};
#            print "$team: $score1 vs $opp: $score2 = $sum\n";
        }
        $next{$team} = $sum / @results;
    }
    
#    for my $team (keys %teams)
#    {
#        $prev{$team} = ($prev{$team} + $next{$team}) / 2;
#    }
    %prev = %next;
}
    
for my $team (sort keys %teams)
{
    if ($wins{$team} + $loses{$team} > 10)
    {
        my $std = 0;
        my @results = split(/:/, $teams{$team});
        shift(@results);
        
        for my $result (@results)
        {
            my ($home, $opp, $score1, $score2) = split(/,/, $result);
            $std += ($next{$team} - ($score1 - $score2 + $prev{$opp})) ** 2;
#            $std += ($next{$team} - (log($score1 / $score2) + $prev{$opp})) ** 2;
#            print "$team: $score1 vs $opp: $score2 = $sum\n";
        }
        $std = sqrt($std / @results);
        
        printf("%9.5f: (+/- %8.5f) (%2d-%2d) (%5d-%5d) %s\n", $next{$team}, $std,
            $wins{$team}, $loses{$team}, $pntsfor{$team}, $pntsagainst{$team}, $team);
#        printf("%8.6f: (+/- %8.6f) (%2d-%2d) (%4d-%4d) %s\n", exp($next{$team}) / 2,
#            (-exp($next{$team} - $std) + exp($next{$team})) / 2 ,
#            $wins{$team}, $loses{$team}, $pntsfor{$team}, $pntsagainst{$team}, $team)
    
        for my $result (@results)
        {
            my ($home, $opp, $score1, $score2) = split(/,/, $result);
            my $sample = ($score1 - $score2) - ($next{$team} - $next{$opp});
#            $std += ($next{$team} - (log($score1 / $score2) + $prev{$opp})) ** 2;
#            printf("%30s: %8.6f\n", $result, $sample);
#            print "$sample\n";
        }

    }
#    printf("%-30s %8.6f\n", $team, $next{$team});
#    $prev{$team} = ($prev{$team} + $next{$team}) / 2;
}
