#On fait viellir les zombies grâce à cette fonction
defgetZombiesOlder(zombiesList):
foriinrange(15):
zombiesList[14-i]=zombiesList[13-i]
zombiesList[0]=0
#Sera utile pour vérifier si oui ou non une cellule contient des zombies : prend en paramètre la liste du nombre de zombies d'une cellule classés par âge
defare_they_zombies(zombies):
boolean=False
foriinzombies:
ifi!=0:
boolean=True
returnboolean
defzombies_repartition(zombies,N):#N is the number of zombies that we want to affect to a neighboring cell
repartition=[]#This repartition is done giving the age of the zombies
foriinzombies:
ifsum(zombies)!=0:
repartition.append((i/sum(zombies))*N)
returnrepartition
#Zombies présents dans une cellule
defenteredZombies(zombiesList):
returnsum(zombiesList)
#STEP ONE
defstepOne(Graph,protected):
graphe=Graph.copy()
#Calcul du nombre de zombies partant des cellules
zombiesStart=0
foriinrange(len(graphe)):
forjinrange(len(graphe[i])):
zombiesStart=zombiesStart+sum(graphe[i][j][2])
#Ici comme je ne peux pas faire une copie sans modifier la liste ensuite je suis obligé de faire un petit dico ce qui est un peu dommage
#graphe_memory = graphe.copy()
graphe_memory={}
foriinrange(len(graphe)):
forjinrange(len(graphe[i])):
graphe_memory[(i,j)]=sum(graphe[i][j][2])
#On parcourt la liste de toutes les cellul es et on regarde pour chacune d'elle s'il y a des zombies si oui on les répartis dans les cellules voisines
foriinrange(len(graphe)):
forjinrange(len(graphe[i])):
#print((i,j), 'noeud en question')
ifare_they_zombies(graphe[i][j][2])==1:#Cela signifie qu'on a bien des zombies dans cette cellule
neighbor=neighbors((i,j),(len(graphe),len(graphe[0])))#On récupère les cellules voisines
ifprotectedinneighbor:
neighbor.remove(protected)
neighbors_population=0
forninneighbor:
neighbors_population=neighbors_population+graphe[n[0]][n[1]][0]#On récupère la population totale de nos voisins
possible_neighbors=[]#Cette liste ne contiendra uniquement les voisins succeptibles d'être contaminés
lambdab_possible_neighbors=[]
forkinneighbor:
iflambdad(graphe,(i,j),k)!=0:
possible_neighbors.append(k)
lambdab_possible_neighbors.append(lambdad(graphe,(i,j),k))#On est en possession des voisins contaminables et des coefficients correspondants
ifpotentialKilledZombies>=enteredZombies(updatedGraph[i][j][2]):#On regarde si les zombies potentiels qui seront tués sont plus nombreux que ceux déjà présents
updatedGraph[i][j][2]=[0foriinrange(15)]#si c'est le cas on s'en débarasse
ifpotentialKilledZombies<enteredZombies(updatedGraph[i][j][2]):#Si on a plus de zombies que le nombre potentiel à tuer on conserve une partie
#On va répartir les zombies à tuer selon la quantité présente par tranche d'âge