Fourmi de Langton

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

  1. 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
    1. Justement non, je ne veux pas que vous le fassiez à ma place, juste qu'on m'explique une manière de l'optimiser !
      En fait j'ai remis après coup toutes les directions à la place de Nord, Est, Sud et Ouest.
      Mon programme fonctionne, donc pour le coup, cette erreur je ne la comprend pas
    2. 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 ?
    3.         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]
    4. @LauRo46
      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?
    5. 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 ?