careening = True
foehn = 4

atk_bonus = .1*foehn
hp_bonus = .2*careening + .1*foehn

trials = 1000

army = {
  'Galley':   {'n':  0, 'atk': 150, 'hp':  2000, 'fire': 0},
  'Galleon':  {'n':  8, 'atk': 500, 'hp': 15000, 'fire': 0},
  'Fireship': {'n':  3, 'atk':   0, 'hp':  4000, 'fire': 100}
}
enemies = {
  'Boat':        {'n': 0,  'atk':   50, 'hp':   300, 'fire': 0},
  'Trireme':     {'n': 20, 'atk':  200, 'hp':  3000, 'fire': 0},
  'Turtle Ship': {'n': 10, 'atk':  150, 'hp': 10000, 'fire': 0},
  'Blast Ship':  {'n': 6,  'atk':  800, 'hp':  8000, 'fire': 0}
}

A = ['atk', 'hp', 'fire']
enemy_totals = {}
for a in A: enemy_totals[a] = 0
for unit in enemies:
  for a in A: enemy_totals[a] += enemies[unit]['n'] * enemies[unit][a]

army_totals = {}
for a in A: army_totals[a] = 0
for unit in army:
  for a in A: army_totals[a] += army[unit]['n'] * army[unit][a]

from numpy.random import rand
def randomize(n): return n * (1 + .25 * (rand() - rand()))
def fight(d):
  my_hp = army_totals['hp'] * (1+hp_bonus)
  enemy_hp = enemy_totals['hp']
  fire = 0
  i = 0
  while enemy_hp > 0 and i < 50:
    i += 1
    fire += randomize(army_totals['fire'])
    atk = randomize(army_totals['atk'])
    my_dmg = (fire + atk)*(1+atk_bonus)
    enemy_dmg = randomize(enemy_totals['atk'])
    enemy_hp -= my_dmg
    my_hp -= enemy_dmg
  return my_hp > 0
print sum(map(fight, range(trials))), "/", trials 