Advertisement
Guest User

Untitled

a guest
Jun 20th, 2019
66
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.00 KB | None | 0 0
  1. #!/usr/bin/python3
  2.  
  3. from random import randint
  4. import matplotlib.pyplot as plt
  5. import numpy as np
  6.  
  7. def rollDice(dice):
  8. return [randint(1,6) for i in range (0, dice)]
  9.  
  10. def bestAttackers(attackers):
  11. bestAttackers = attackers.copy()
  12.  
  13. if(len(attackers) == 3):
  14. bestAttackers.remove(min(bestAttackers))
  15.  
  16. return bestAttackers
  17.  
  18. def deadAttackers(attackers, defensers):
  19. result = 0
  20. bestAtks = bestAttackers(attackers)
  21.  
  22. if max(bestAtks) <= max(defensers):
  23. result += 1
  24.  
  25. if (len(attackers) == len(defensers) == 2 and min(bestAtks) <= min(defensers)):
  26. result += 1
  27.  
  28. return result
  29.  
  30. def deadDefensers(attackers, defensers):
  31. result = 0
  32. bestAtks = bestAttackers(attackers)
  33.  
  34. if max(bestAtks) > max(defensers):
  35. result += 1
  36. if (len(attackers) == len(defensers) == 2 and min(bestAtks) > min(defensers)):
  37. result += 1
  38.  
  39. return result
  40.  
  41. def simulate(attackers_amount, defensers_amount):
  42. laps, attackers_list, defensers_list = list(), list(), list()
  43.  
  44. lap = 0
  45.  
  46. while (attackers_amount > 1 and defensers_amount > 0):
  47. lap += 1
  48. attackers = list()
  49. if (attackers_amount >= 4):
  50. attackers = rollDice(3)
  51. elif (attackers_amount == 3):
  52. attackers = rollDice(2)
  53. else:
  54. attackers = rollDice(1)
  55.  
  56. defensers = rollDice(2) if defensers_amount >= 2 else rollDice(1)
  57.  
  58. attackers_amount -= deadAttackers(attackers, defensers)
  59. defensers_amount -= deadDefensers(attackers, defensers)
  60.  
  61. laps.append(lap)
  62. attackers_list.append(attackers_amount)
  63. defensers_list.append(defensers_amount)
  64.  
  65. return laps, attackers_list, defensers_list
  66.  
  67.  
  68. if __name__ == "__main__":
  69. simulations, attackers_victories_list, defensers_victories_list = list(), list(), list()
  70. attackers_victories, defensers_victories = 0, 0
  71.  
  72. attackers_amount = int(input("How many attackers at beggining: "))
  73. defensers_amount = int(input("How many defensers at beggining: "))
  74. simulations_amount = int(input("How many simulations do you want to make? "))
  75.  
  76. for i in range(0, simulations_amount):
  77. simulations.append(simulate(attackers_amount, defensers_amount))
  78.  
  79. for simulation in simulations:
  80. laps, attackers, defensers = simulation[0], simulation[1], simulation[2]
  81.  
  82. if attackers[len(attackers) - 1] > defensers[len(defensers) - 1]:
  83. attackers_victories += 1
  84. if attackers[len(attackers) - 1] < defensers[len(defensers) - 1]:
  85. defensers_victories += 1
  86.  
  87. attackers_victories_list.append(attackers_victories)
  88. defensers_victories_list.append(defensers_victories)
  89.  
  90. plt.plot(np.arange(0, len(simulations), 1), attackers_victories_list, '+r')
  91. plt.plot(np.arange(0, len(simulations), 1), defensers_victories_list, '^b')
  92. plt.legend(['Attackers victories', 'Defensers victories'])
  93. plt.title('Nombre de victoires')
  94. plt.xlabel('Nombre de simulations')
  95. plt.ylabel('Victoires accumulées')
  96.  
  97. plt.show()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement