fork(1) download
  1. careening = True
  2. foehn = 31
  3.  
  4. atk_bonus = .1*foehn
  5. hp_bonus = .2*careening + .1*foehn
  6.  
  7. trials = 10000
  8.  
  9. army = {
  10. 'Galley': {'n': 0, 'atk': 150, 'hp': 2000, 'fire': 0, 'chains': 0},
  11. 'Galleon': {'n': 17, 'atk': 500, 'hp': 15000, 'fire': 0, 'chains': 0},
  12. 'Fireship': {'n': 3, 'atk': 0, 'hp': 4000, 'fire': 100, 'chains': 0},
  13. 'Caravel': {'n': 0, 'atk': 200, 'hp': 6000, 'fire': 0, 'chains': 75}
  14. }
  15. enemies = {
  16. 'Boat': {'n': 0, 'atk': 50, 'hp': 300, 'fire': 0, 'chains': 0},
  17. 'Trireme': {'n': 116, 'atk': 200, 'hp': 3000, 'fire': 0, 'chains': 0},
  18. 'Turtle Ship': {'n': 58, 'atk': 150, 'hp': 10000, 'fire': 0, 'chains': 0},
  19. 'Blast Ship': {'n': 30, 'atk': 800, 'hp': 8000, 'fire': 0, 'chains': 0}
  20. }
  21.  
  22. A = ['atk', 'hp', 'fire', 'chains']
  23. enemy_totals = {}
  24. for a in A: enemy_totals[a] = 0
  25. for unit in enemies:
  26. for a in A: enemy_totals[a] += enemies[unit]['n'] * enemies[unit][a]
  27.  
  28. army_totals = {}
  29. for a in A: army_totals[a] = 0
  30. for unit in army:
  31. for a in A: army_totals[a] += army[unit]['n'] * army[unit][a]
  32.  
  33. from numpy.random import rand
  34. def randomize(n): return n * (1 + .25 * (rand() - rand()))
  35. def fight(d):
  36. my_hp = army_totals['hp'] * (1+hp_bonus)
  37. enemy_hp = enemy_totals['hp']
  38. fire, chains = 0, 0
  39. i = 0
  40. while enemy_hp > 0 and i < 50:
  41. i += 1
  42. chains += randomize(army_totals['chains'])
  43. fire += randomize(army_totals['fire'])
  44. atk = randomize(army_totals['atk'])
  45. my_dmg = (fire + atk)*(1+atk_bonus)
  46. enemy_dmg = max(randomize(enemy_totals['atk']) - chains, 0)
  47. enemy_hp -= my_dmg
  48. my_hp -= enemy_dmg
  49. return my_hp > 0
  50. print sum(map(fight, range(trials))), "/", trials
Success #stdin #stdout 0.52s 25496KB
stdin
Standard input is empty
stdout
0 / 10000