Fourmi de Langton [Fermé]

Signaler
Messages postés
5
Date d'inscription
dimanche 26 mars 2017
Statut
Membre
Dernière intervention
28 mars 2017
-
Messages postés
19
Date d'inscription
mercredi 29 octobre 2008
Statut
Membre
Dernière intervention
1 avril 2017
-
Bonjour à tous, dans le cadre d'un projet info sur la fourmi de Langton à présenter bientôt, j'aurais voulu savoir si quelqu'un pouvait m'aider à optimiser ma fonction jeu s'il vous plait !

<def jeu(n,p,nbr): # n est le nombre de colonnes, nbr le nombre de déplacements de la fourmi
    A=ones(n,p)
    c=0
    #f=[[i,k]] # liste coordonnées initiales de la positon de la fourmi
    x=n//2
    y=p//2
    f=[[x],[y]]
    Nord=[0,1]
    Sud=[0.-1]
    Est=[1.0]
    Ouest=[-1.0]
    dir=Nord # direction initiale
    while c<nbr:
        if A[f]==1:
            A[f]=0 #change la couleur de la case
            if dir==Nord: #tête vers le haut
                dir=Est
            elif dir==Sud: #tête vers le bas
                dir=Ouest
            elif dir==Ouest: #tête vers la gauche
                dir=Nord                                 
            elif dir==Est: #tête vers la droite
                dir=Sud
            c+=1
            x+=Nord[0]
            y+=Nord[1]
            f=[[x],[y]]
        else:
            A[f]=1 #change la couleur de la case
            if dir==Nord: #tête vers le haut
                dir=Ouest
            elif dir==Sud: #tête vers le bas
                dir=Est
            elif dir==Ouest: #tête vers la gauche
                dir=Sud
            elif dir==Est: #tête vers la droite
                dir=Nord
            c+=1
            x+=Nord[0]
            y+=Nord[1]
            f=[[x],[y]]
    return A>
</code>

1 réponse

Messages postés
19
Date d'inscription
mercredi 29 octobre 2008
Statut
Membre
Dernière intervention
1 avril 2017
11
Bonsoir!
Ouh là...
En faite là tu voudrais qu'on fasse ton truc à ta place en faite?
Je te laisse méditer sur cette erreur parmi le tas d'autres :
dir=Nord <-ici
while c<nbr:
if A[f]==1:
A[f]=0 #change la couleur de la case
if dir==Nord: <-ici, eyes roll...
dir=Est<-ici
elif dir==Sud: #tête vers le bas
dir=Ouest
elif dir==Ouest: #tête vers la gauche
dir=Nord
elif dir==Est: <-ici
dir=Sud<-ici
Messages postés
5
Date d'inscription
dimanche 26 mars 2017
Statut
Membre
Dernière intervention
28 mars 2017

Si je mets ça comme ça, c'est pour donner une valeur initiale à la direction mais après je change la valeur de dir dans la boucle non ?

Les listes sont sensées indiquer la direction de ma fourmi, si je ne mets pas de virgule entre mes chiffres dans une liste, je met quoi d'autre ?
Messages postés
5
Date d'inscription
dimanche 26 mars 2017
Statut
Membre
Dernière intervention
28 mars 2017

        if plateau[f]==1:
            plateau[f]=0 #change la couleur de la case 
            if dir==[0,1]: #tête vers le haut
                dir=[1,0]
            elif dir==[0,-1]: #tête vers le bas
                dir=[-1,0]
            elif dir==[-1,0]: #tête vers la gauche
                dir=[0,1]
            elif dir==[1,0]: #tête vers la droite
                dir=[0,-1]
            c+=1
            x+=dir[0]
            y+=dir[1]
Messages postés
19
Date d'inscription
mercredi 29 octobre 2008
Statut
Membre
Dernière intervention
1 avril 2017
11 >
Messages postés
5
Date d'inscription
dimanche 26 mars 2017
Statut
Membre
Dernière intervention
28 mars 2017

def jeu(n,p,nbr): # n est le nombre de colonnes, nbr le nombre de déplacements de la fourmi
    plateau = ones(n,p)
    c = 0
    x,y = n//2,p//2
    f = [[x],[y]]
    dir = [0,1]
    while c < nbr:
		if plateau[f] == 1:
			plateau[f] =0  #change la couleur de la case 
			dir = [dir[1],-dir[0]]		
		else:
			plateau[f] = 1 #change la couleur de la case 
			dir = [-dir[1],dir[0]]			
		c += 1
		x += dir[0]
		y += dir[1]
		f = [[x],[y]]		
	return plateau

Je ne vois pas l'intérêt de mettre f = [[x],[y]] au lieu de f = [x,y], il y a une raison?
Messages postés
5
Date d'inscription
dimanche 26 mars 2017
Statut
Membre
Dernière intervention
28 mars 2017

Pour f c'est peut être mieux oui ! Mais par contre, dans les boucles if, ce raccourci que tu proposes emmène au même résultat ?
Messages postés
19
Date d'inscription
mercredi 29 octobre 2008
Statut
Membre
Dernière intervention
1 avril 2017
11 >
Messages postés
5
Date d'inscription
dimanche 26 mars 2017
Statut
Membre
Dernière intervention
28 mars 2017

Testes le! J'ai tapé ça à minuit donc à vérifier, mais normalement oui.