Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!/usr/bin/perl
- use strict;
- use warnings;
- my $file = $ARGV[0] or die "No file specified";
- my %scores = ();
- my %power = ();
- sub read_csv($) {
- my $file = shift;
- open(DATA, '<', $file) or die "could not open $file";
- my $header = <DATA>;
- chomp $header;
- my ($homeTeam, $homeScore, $awayTeam, $awayScore) = (0, 0, 0, 0);
- my @fields = split(/,\s*/, $header);
- for my $i (0 .. $#fields) {
- if ($fields[$i] =~ /Home team/i) {
- $homeTeam = $i;
- }
- if ($fields[$i] =~ /Vis team/i) {
- $awayTeam = $i;
- }
- if ($fields[$i] =~ /score/i) {
- ($homeTeam > $awayTeam) ? $homeScore = $i : $awayScore = $i;
- }
- }
- my $i = 0;
- while (my $line = <DATA>){
- chomp $line;
- @fields = split(/,\s*/, $line);
- $scores{$i}{'t1'} = $fields[$homeTeam];
- $scores{$i}{'t1s'} = $fields[$homeScore];
- $scores{$i}{'t2'} = $fields[$awayTeam];
- $scores{$i}{'t2s'} = $fields[$awayScore];
- $i++;
- }
- }
- sub calculate_deltas($$$$){
- my ($t1Power, $t2Power, $scoreDiff, $velocity) = @_;
- my $t1Target = $t2Power + $scoreDiff;
- my $t2Target = $t1Power - $scoreDiff;
- return ((($t1Target-$t1Power)*$velocity),(($t2Target-$t2Power)*$velocity));
- }
- sub init_power() {
- foreach my $i (keys %scores) {
- $power{$scores{$i}{'t1'}} = 100;
- $power{$scores{$i}{'t2'}} = 100;
- }
- }
- sub run_round($) {
- my ($velocity) = @_;
- my %new_power = %power;
- foreach my $i (keys %scores) {
- my $t1p = $power{$scores{$i}{'t1'}};
- my $t2p = $power{$scores{$i}{'t2'}};
- my $diff = $scores{$i}{'t1s'} - $scores{$i}{'t2s'};
- my ($d1, $d2) = calculate_deltas($t1p, $t2p, $diff, $velocity);
- $new_power{$scores{$i}{'t1'}} += $d1;
- $new_power{$scores{$i}{'t2'}} += $d2;
- }
- %power = %new_power;
- }
- sub print_sorted_power(%){
- my %pwr = @_;
- my @sorted = sort {$pwr{$a} <=> $pwr{$b}} (keys %pwr);
- foreach my $team (@sorted) {
- print "$team: $pwr{$team}\n";
- }
- }
- read_csv($file);
- init_power();
- my $roundMax = 10000;
- for (my $r = 0; $r < $roundMax; $r++) {
- my $velocity = .05 - .05*($r/$roundMax);
- run_round($velocity);
- }
- print_sorted_power(%power);
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement