Created
June 9, 2019 17:27
-
-
Save AlexandreGerault/19fc11caf0ac7bc487574c24ae7eee4e to your computer and use it in GitHub Desktop.
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
#!/usr/bin/python3 | |
from random import randint | |
import matplotlib.pyplot as plt | |
import numpy as np | |
def rollDice(dice): | |
return [randint(1,6) for i in range (0, dice)] | |
def bestAttackers(attackers): | |
bestAttackers = attackers.copy() | |
if(len(attackers) == 3): | |
bestAttackers.remove(min(bestAttackers)) | |
return bestAttackers | |
def deadAttackers(attackers, defensers): | |
result = 0 | |
bestAtks = bestAttackers(attackers) | |
if max(bestAtks) <= max(defensers): | |
result += 1 | |
if (len(attackers) == len(defensers) == 2 and min(bestAtks) <= min(defensers)): | |
result += 1 | |
return result | |
def deadDefensers(attackers, defensers): | |
result = 0 | |
bestAtks = bestAttackers(attackers) | |
if max(bestAtks) > max(defensers): | |
result += 1 | |
if (len(attackers) == len(defensers) == 2 and min(bestAtks) > min(defensers)): | |
result += 1 | |
return result | |
def simulate(attackers_amount, defensers_amount): | |
laps, attackers_list, defensers_list = list(), list(), list() | |
lap = 0 | |
while (attackers_amount > 1 and defensers_amount > 0): | |
lap += 1 | |
attackers = list() | |
if (attackers_amount >= 4): | |
attackers = rollDice(3) | |
elif (attackers_amount == 3): | |
attackers = rollDice(2) | |
else: | |
attackers = rollDice(1) | |
defensers = rollDice(2) if defensers_amount >= 2 else rollDice(1) | |
attackers_amount -= deadAttackers(attackers, defensers) | |
defensers_amount -= deadDefensers(attackers, defensers) | |
laps.append(lap) | |
attackers_list.append(attackers_amount) | |
defensers_list.append(defensers_amount) | |
return laps, attackers_list, defensers_list | |
if __name__ == "__main__": | |
simulations, attackers_victories_list, defensers_victories_list = list(), list(), list() | |
attackers_victories, defensers_victories = 0, 0 | |
attackers_amount = int(input("How many attackers at beggining: ")) | |
defensers_amount = int(input("How many defensers at beggining: ")) | |
simulations_amount = int(input("How many simulations do you want to make? ")) | |
for i in range(0, simulations_amount): | |
simulations.append(simulate(attackers_amount, defensers_amount)) | |
for simulation in simulations: | |
laps, attackers, defensers = simulation[0], simulation[1], simulation[2] | |
if attackers[len(attackers) - 1] > defensers[len(defensers) - 1]: | |
attackers_victories += 1 | |
if attackers[len(attackers) - 1] < defensers[len(defensers) - 1]: | |
defensers_victories += 1 | |
attackers_victories_list.append(attackers_victories) | |
defensers_victories_list.append(defensers_victories) | |
plt.plot(np.arange(0, len(simulations), 1), attackers_victories_list, '+r') | |
plt.plot(np.arange(0, len(simulations), 1), defensers_victories_list, '^b') | |
plt.legend(['Attackers victories', 'Defensers victories']) | |
plt.title('Nombre de victoires') | |
plt.xlabel('Nombre de simulations') | |
plt.ylabel('Victoires accumulées') | |
plt.show() |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment