Skip to content

Instantly share code, notes, and snippets.

@AlexandreGerault
Created June 9, 2019 17:27
Show Gist options
  • Save AlexandreGerault/19fc11caf0ac7bc487574c24ae7eee4e to your computer and use it in GitHub Desktop.
Save AlexandreGerault/19fc11caf0ac7bc487574c24ae7eee4e to your computer and use it in GitHub Desktop.
#!/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