Created
May 11, 2012 01:46
-
-
Save andruby/2656994 to your computer and use it in GitHub Desktop.
Risk Simulation: Attacker or Defender advantage?
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| def game(attackers = 3, defenders = 2) # returns [attacker, defender] loses | |
| attack = (1..attackers).map { rand(6) }.sort.reverse[0..1].reverse | |
| defense = (1..defenders).map { rand(6) }.sort | |
| max_wins = [attackers, defenders].min | |
| attack_wins = (1..max_wins).map { attack.pop > defense.pop }.select{ |x| x}.count | |
| [max_wins - attack_wins, attack_wins] | |
| end | |
| def full_game(armies = 30) | |
| attack = defense = armies | |
| while [attack-1, defense].min > 0 | |
| g = game([attack-1,3].min, [defense,2].min) | |
| attack -= g.first | |
| defense -= g.last | |
| end | |
| attack > defense ? 1 : 0 # 1 for attacker winning | |
| end | |
| def simulate(times, armies) | |
| procent = ((1..times).map { full_game(armies) }.inject(&:+) / times.to_f) * 100 | |
| end | |
| 2.upto(50) { |armies| puts "For %2.0f armies: attacker winrate is %2.2f percent" % [armies, simulate(10_000, armies)] } |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| For 2 armies: attacker winrate is 10.47 percent | |
| For 3 armies: attacker winrate is 20.22 percent | |
| For 4 armies: attacker winrate is 32.04 percent | |
| For 5 armies: attacker winrate is 35.99 percent | |
| For 6 armies: attacker winrate is 39.22 percent | |
| For 7 armies: attacker winrate is 41.48 percent | |
| For 8 armies: attacker winrate is 45.43 percent | |
| For 9 armies: attacker winrate is 46.31 percent | |
| For 10 armies: attacker winrate is 49.10 percent | |
| For 11 armies: attacker winrate is 50.56 percent | |
| For 12 armies: attacker winrate is 50.80 percent | |
| For 13 armies: attacker winrate is 52.32 percent | |
| For 14 armies: attacker winrate is 51.69 percent | |
| For 15 armies: attacker winrate is 53.73 percent | |
| For 16 armies: attacker winrate is 55.68 percent | |
| For 17 armies: attacker winrate is 55.26 percent | |
| For 18 armies: attacker winrate is 56.54 percent | |
| For 19 armies: attacker winrate is 57.27 percent | |
| For 20 armies: attacker winrate is 57.54 percent | |
| For 21 armies: attacker winrate is 58.20 percent | |
| For 22 armies: attacker winrate is 58.91 percent | |
| For 23 armies: attacker winrate is 60.65 percent | |
| For 24 armies: attacker winrate is 60.44 percent | |
| For 25 armies: attacker winrate is 60.84 percent | |
| For 26 armies: attacker winrate is 61.43 percent | |
| For 27 armies: attacker winrate is 62.10 percent | |
| For 28 armies: attacker winrate is 62.91 percent | |
| For 29 armies: attacker winrate is 63.09 percent | |
| For 30 armies: attacker winrate is 62.68 percent | |
| For 31 armies: attacker winrate is 63.19 percent | |
| For 32 armies: attacker winrate is 63.66 percent | |
| For 33 armies: attacker winrate is 64.36 percent | |
| For 34 armies: attacker winrate is 65.49 percent | |
| For 35 armies: attacker winrate is 64.88 percent | |
| For 36 armies: attacker winrate is 65.83 percent | |
| For 37 armies: attacker winrate is 66.16 percent | |
| For 38 armies: attacker winrate is 66.39 percent | |
| For 39 armies: attacker winrate is 67.22 percent | |
| For 40 armies: attacker winrate is 67.10 percent | |
| For 41 armies: attacker winrate is 67.95 percent | |
| For 42 armies: attacker winrate is 68.28 percent | |
| For 43 armies: attacker winrate is 67.49 percent | |
| For 44 armies: attacker winrate is 68.88 percent | |
| For 45 armies: attacker winrate is 68.75 percent | |
| For 46 armies: attacker winrate is 68.78 percent | |
| For 47 armies: attacker winrate is 69.36 percent | |
| For 48 armies: attacker winrate is 69.62 percent | |
| For 49 armies: attacker winrate is 70.50 percent | |
| For 50 armies: attacker winrate is 71.22 percent |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment