Bonsoir

J'ai une matrice de n lignes par m colonnes (variables : rows et columns)

Code : Sélectionner tout - Visualiser dans une fenêtre à part
a = [[10] * columns for i in range(rows)]
Ce qui me donne un grid du style

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
0    0    0    0    0    0   
0    0    0    0    0    0   
0    0    0    0    0    0   
0    0    0    0    0    0   
0    0    0    0    0    0   
0    0    0    0    0    0   
0    0    0    0    0    0   
0    0    0    0    0    0


j'ai une suite numérique stockée dans une liste de façon aléatoire.
Par exemple
Code : Sélectionner tout - Visualiser dans une fenêtre à part
l = list(random.sample(range(500, 800,2), len(range(500,800,2))))

Je tente de remplir la matrice avec les données de cette suite numérique de manière aléatoire avec cette contrainte : la première case est placée au hasard, les autres sont adjacentes avec un coté commun (pas une arête)


Je tire donc une case au hasard de la matrice que je remplis avec le 1er élement de la liste

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
randomColumns = random.randrange(columns)
randomRows = random.randrange(rows)
 
# On place un nombre au hasard dans le tableau
posListe = 0
a[randomRows][randomColumns] = l[posListe]

Depuis cette case, j'essaie de simuler un parcours au hasard en me basant sur un tuple contenant 2 éléments (déplacement horizontal ou vertical et avance ou recule)

Code : Sélectionner tout - Visualiser dans une fenêtre à part
choix = ((-1,1),('avColumns','avRows'))
que je récupère de avec un random.choice

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
avanceColOrRow = random.choice(choix[1])
avance = random.choice(choix[0])
Puis pour la case suivante,

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
if avanceColOrRow == 'avColumns':
	# Je teste si proche du bord
        if randomColumns == 0 :
        	avance = 1
        	print('COLUMNS 0')
   	 elif randomColumns == columns -1:
        	avance = -1
        	print("COLUMNS -1")
    	else:
        	avance = random.choice(choix[0])
        	print("COLUMN Avance : : "  + str(avance) )
Et aussi je réalise le test si c'est avRows qui est sorti


J'ai en parallèle également un tableau à une entrée pour mettre les cases déjà parcourues
Je compare ces cases à la case sortie du test précédent. SI elle figure déjà dans le tableau, je recommence, sinon j'incremente le tableau et avance à la nouvelle position


J'ai un compteur aussi pour le nombre de test. Au bout de 6 fois de la même stratégie, je sors de la boucle et retente mais chance

Le hic, c'est que ça marche très mal.


En fait je voudrais avoir au final un grid ainsi (avec un serpentin de la suite numérique), ce cheminement serait remodelé à chaque nouveau lancement du script

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
 
0    0    0    0    0    0   
70   75   80   85   90   0   
65   0    5    0    95   100   
60   0    10   15   0    0   
55   50   0    20   0    0   
0    45   0    25   0    0   
0    40   35   30   0    0   
0    0    0    0    0    0

Mais je doute fortement de mon algorithme


AUriez vous des conseils pour y parvenir ? Peut être des modules existent ils ou alors mon approche est très mauvaise. Même que des mots clefs pour aider à affiner mes recherches sont les bienvenus.

D'avance merci,