Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!/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()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement