# score.pl $RANKINGS = "rank.txt"; get_info(); process_info(); calc_scr(); #disp_scr(); rank(); sub get_info { print "---Enter the following data---\n", "\tNumber of black balls in goal:\t"; $blk_bls = ; print "\tNumber of big balls in goal:\t"; $big_bls = ; print "\tNumber of robots in endzone:\t"; $rbt_end = ; print "\tNumber of goals on the bridge:\t"; $gls_brg = ; print "\tNumber of seconds remaining:\t"; $tim_rmn = ; print "\t\tIs this a qualifying match(1 or 0):\t"; if( == 1) { for(1..4) { print "\tDoes team $_ have its large ball in goal(1 or 0):\t"; $ball[$_] = ; } } for(1..4) { print "\tNumber of rule violations for team $_:\t"; $rl_vlt[$_] = ; } } sub process_info { $mult = $gls_brg + 1 + ($gls_brg == 2); if(tim_rmn <= 120 && tim_rmn >= 91) { $mult *= 3 } elsif(tim_rmn <= 90 && tim_rmn >= 61) { $mult *= 2.5 } elsif(tim_rmn <= 60 && tim_rmn >= 31) { $mult *= 2 } elsif(tim_rmn <= 30 && tim_rmn >= 15) { $mult *= 1.5 } else { $mult *= 1 } } sub calc_scr { $all_scr = ($blk_bls + $rbt_end * 10 + $big_bls * 10) * $mult; for(1..4) { $tm_scr[$_] = ($all_scr * (1 + $ball[$_] * .1)) * ((10 - $rl_vlt[$_]) * .1); } } sub disp_scr { for(1..4) { print "Team $_ score is: $tm_scr[$_]\n" } } ## ...EXPERIMENTAL... sub get_team_info { for(1..4) { print "\tEnter number of team $_:\t"; $tm_nmb[$_] = ; if($fst_tm[$_] = first_time($tm_nmb[$_])) { print "\tEnter names of team members, separated by space\n", "\t(e.g., mrawls srawls):\t"; $mbr_nms[$_] = ; } } } sub first_time { open(RANKINGS) or die "Failed to open $RANKINGS, at"; if( =~ /New File/) { $new_file = 1; return 1; } @entries = split /^<>$/, ; @numbers = map { ($a,$b) = split /:/,$_,2; $a } @entries; for $n(@numbers) { if($n == $_[0]) { return } } return 1; } sub rank { get_team_info(); open(RANKINGS) or die "Failed to open $RANKINGS, at"; @entries = split /^<>$/, ; for $i(1..4) { if(!$fst_tm[$i]) { $j = -1; for(@numbers) { $j++; $_ == $tm_nmb[$i] && break; } ($tn,$as,$hs,$mn,$nm) = split /:/, $entries[$j]; $as = ($as + $tm_scr[$i]) / 2; $tm_av[$i] = $as; if($tm_scr[$i] > $hs) { $hs = $tm_scr[$i] } ++$nm; $tm_rank[$i] = "\n$tn:$as:$hs:$mn:$nm\n"; } else { $tm_nmb[$i] =~ s/\n//; $mbr_nms[$i] =~ s/\n//; $tm_rank[$i] = "\n$tm_nmb[$i]:$tm_scr[$i]:$tm_scr[$i]:$mbr_nms[$i]:1\n" } } if(!$new_file) { @averages = map { ($a,$b,$c) = split /:/, $_, 3; $b } @entries; for $i(1..4) { for(0..$#averages) { if($averages[$_] < $tm_avg[$i]) { @part_1 = (@entries)[0..$_-1]; @part_2 = ($tm_avg[$i],(@entries)[$_..$#entries]); @sorted = (@part_1,@part_2); open(RANKINGS,">$RANKINGS"); print RANKINGS join '<>', @sorted; } } } } else { open(RANKINGS,">$RANKINGS"); @sorted = sort { (split /:/, $b)[1] <=> (split /:/, $a)[1] } @tm_rank; pop @sorted; print RANKINGS join '<>', @sorted; } }