I thought it might be interesting to track how people's solutions changed over the course of the game. Thanks to PGAS and Algorithm::Diff, this was easily done. Here's the script, which produces output suitable for either humans or gnuplot, in case you want to take a look.
/s #!perl use XMLRPC::Lite; use Algorithm::Diff qw(diff); use Data::Dumper; use strict; my ($golfer, $hole) = @ARGV; unless ($golfer && $hole) { die <<END; Usage: $0 GOLFER HOLE perl -s $0 -V GOLFER HOLE END } sub pgas { my ($func, @args) = @_; my $res = XMLRPC::Lite -> proxy('http://perlgolf.sourceforge.net/cgi-bin/PGAS/service') -> call("PGAS.$func", @args) -> result; $res; } my $data; if (-f "solns.$golfer") { print STDERR "Found cached file for $golfer\n"; $data = do "solns.$golfer"; } else { my $id = pgas('getGolferID', $golfer)->[0]{id}; $data = pgas('getSolutionsByGolfer', $id); open(O, ">solns.$golfer"); print O Dumper $data; close(O); } my @solns = map { [$_->{solution}, $_->{date}] } grep { $_->{hole} eq $hole } @$data; print STDERR @solns." solutions found in ".@{$data}." keys\n"; my $prev = shift @solns; $prev = $prev->[0]; $prev =~ s/^#!perl[\s\r\n]*//gs; $prev =~ s/[\r\n]+/ /gs; if ($::V) { print "\t\t$prev\n"; } else { print "# $golfer\n"; } $prev = [split '', $prev]; my ($cur, $t); while ($cur = shift @solns) { ($cur, $t) = @$cur; $cur =~ s/^#!perl[\s\r\n]*//gs; $cur =~ s/[\r\n]+/ /gs; my $pretty = $cur; $cur = [split '', $cur]; my @diff = diff($prev, $cur); my $ndiffs = 0; my %delta = (); foreach (@diff) { # This counts a replacement as 2 operations: # $ndiffs += @$_; foreach (@$_) { $delta{$_->[1]} = 1; } } $ndiffs = keys %delta; if ($::V) { print "Diff = $ndiffs\t$pretty\n"; } else { print "$t\t$ndiffs\n"; } $prev = $cur; } if (!$::V) { print "\n\n"; } __________________________________________________ Do You Yahoo!? LAUNCH - Your Yahoo! Music Experience http://launch.yahoo.com