Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!/usr/bin/perl
- # Chainmail post melee morale possibilities for 6 LF vs 6 LF
- foreach $lA (1..6) {
- foreach $lB (1..6) {
- foreach $m (1..6) { # Morale die
- # Step 1: Compute fewer casaulties
- $dA = 6 - $lA;
- $dB = 6 - $lB;
- if( $dA < $dB ) {
- $r1A = $m * ($dB - $dA);
- $r1B = 0;
- } elsif( $dB < $dA ) {
- $r1B = $m * ($dA - $dB);
- $r1A = 0;
- } else { # $dA == $dB
- $r1A = 0;
- $r1B = 0;
- }
- # Step 2: Compute greater survivors
- if( $lA > $lB ) {
- $r2A = $lA - $lB;
- $r2B = 0;
- } elsif( $lB > $lA ) {
- $r2B = $lB - $lA;
- $r2A = 0;
- } else { # $lA == $lB
- $r2A = 0;
- $r2B = 0;
- }
- # Step 3: Surviving figures
- $r3A = 4*$lA;
- $r3B = 4*$lB;
- # Step 4: Morale scores
- $sA = $r1A + $r2A + $r3A;
- $sB = $r1B + $r2B + $r3B;
- # Difference
- $diff = abs($sA - $sB);
- # Double difference because no. figures per side < 20
- $diff *= 2;
- $diff{$diff}++;
- }
- }
- }
- foreach $d (sort {$a <=> $b} (keys %diff)) {
- print $d, " ", $diff{$d}, "\n";
- if( $d >= 0 && $d <= 19 ) {
- $meleecontinues += $diff{$d};
- } elsif($d >= 20 && $d <= 39) {
- $backhalfgoodorder += $diff{$d};
- } elsif($d >= 40 && $d <= 59) {
- $backonegoodorder += $diff{$d};
- } elsif($d >= 60 && $d <= 79) {
- $retreatonemove += $diff{$d};
- } elsif($d >= 80 && $d <= 99) {
- $routoneandhalfmove += $diff{$d};
- } else { # $d >= 100
- $surrender += $diff{$d};
- }
- $total += $diff{$d};
- }
- print "Melee continues (0-19): ", $meleecontinues, "\n";
- print "Back 1/2 move, good order (20-39): ", $backhalfgoodorder, "\n";
- print "Back 1 move, good order (40-59): ", $backonegoodorder, "\n";
- print "Retreat 1 move (60-79): ", $retreatonemove, "\n";
- print "Rout 1 1/2 move (80-99): ", $routoneandhalfmove, "\n";
- print "Surrernder (100+): ", $surrender, "\n";
- print "Total: ", $total, "\n";
Advertisement
Add Comment
Please, Sign In to add comment