Remplir une matrice avec une suite numérique avec positonnement au hasard
Bonsoir
J'ai une matrice de n lignes par m colonnes (variables : rows et columns)
Code:
a = [[10] * columns for i in range(rows)]
Ce qui me donne un grid du style
Code:
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:
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:
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:
choix = ((-1,1),('avColumns','avRows'))
que je récupère de avec un random.choice
Code:
1 2
| avanceColOrRow = random.choice(choix[1])
avance = random.choice(choix[0]) |
Puis pour la case suivante,
Code:
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:
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,