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
    0
    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
      0
    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 ?
      0
    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]
      0
    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?
      0
    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 ?
      0