aher

Chainmail post melee morale possibilities for 6 LF vs 6 LF

Mar 4th, 2013
117
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Perl 2.05 KB | None | 0 0
  1. #!/usr/bin/perl
  2. # Chainmail post melee morale possibilities for 6 LF vs 6 LF
  3. foreach $lA (1..6) {
  4.   foreach $lB (1..6) {
  5.     foreach $m (1..6) { # Morale die
  6.       # Step 1: Compute fewer casaulties
  7.       $dA = 6 - $lA;
  8.       $dB = 6 - $lB;
  9.       if( $dA < $dB ) {
  10.         $r1A = $m * ($dB - $dA);
  11.         $r1B = 0;
  12.       } elsif( $dB < $dA ) {
  13.         $r1B = $m * ($dA - $dB);
  14.         $r1A = 0;
  15.       } else { # $dA == $dB
  16.         $r1A = 0;
  17.         $r1B = 0;
  18.       }
  19.       # Step 2: Compute greater survivors
  20.       if( $lA > $lB ) {
  21.         $r2A = $lA - $lB;
  22.         $r2B = 0;
  23.       } elsif( $lB > $lA ) {
  24.         $r2B = $lB - $lA;
  25.         $r2A = 0;
  26.       } else { # $lA == $lB
  27.         $r2A = 0;
  28.         $r2B = 0;
  29.       }
  30.       # Step 3: Surviving figures
  31.       $r3A = 4*$lA;
  32.       $r3B = 4*$lB;
  33.       # Step 4: Morale scores
  34.       $sA = $r1A + $r2A + $r3A;
  35.       $sB = $r1B + $r2B + $r3B;
  36.       # Difference
  37.       $diff = abs($sA - $sB);
  38.       # Double difference because no. figures per side < 20
  39.       $diff *= 2;
  40.       $diff{$diff}++;
  41.     }
  42.   }
  43. }
  44.  
  45. foreach $d (sort {$a <=> $b} (keys %diff)) {
  46.   print $d, " ", $diff{$d}, "\n";
  47.   if( $d >= 0 && $d <= 19 ) {
  48.     $meleecontinues += $diff{$d};
  49.   } elsif($d >= 20 && $d <= 39) {
  50.     $backhalfgoodorder += $diff{$d};
  51.   } elsif($d >= 40 && $d <= 59) {
  52.     $backonegoodorder += $diff{$d};
  53.   } elsif($d >= 60 && $d <= 79) {
  54.     $retreatonemove += $diff{$d};
  55.   } elsif($d >= 80 && $d <= 99) {
  56.     $routoneandhalfmove += $diff{$d};
  57.   } else { # $d >= 100
  58.     $surrender += $diff{$d};
  59.   }
  60.   $total += $diff{$d};
  61. }
  62.  
  63. print "Melee continues            (0-19): ", $meleecontinues, "\n";
  64. print "Back 1/2 move, good order (20-39): ", $backhalfgoodorder, "\n";
  65. print "Back 1 move, good order   (40-59): ", $backonegoodorder, "\n";
  66. print "Retreat 1 move            (60-79): ", $retreatonemove, "\n";
  67. print "Rout 1 1/2 move           (80-99): ", $routoneandhalfmove, "\n";
  68. print "Surrernder                 (100+): ", $surrender, "\n";
  69. print "Total:                             ", $total, "\n";
Advertisement
Add Comment
Please, Sign In to add comment