Il rempli simplement un tableau au dimension que vous souhaiter en spirale
ex :
5x5 :
0 1 2 3 4
15 16 17 18 5
14 23 24 19 6
13 22 21 20 7
12 11 10 9 8
ou encore en 10x10 :
0 1 2 3 4 5 6 7 8 9
35 36 37 38 39 40 41 42 43 10
34 63 64 65 66 67 68 69 44 11
33 62 83 84 85 86 87 70 45 12
32 61 82 95 96 97 88 71 46 13
31 60 81 94 99 98 89 72 47 14
30 59 80 93 92 91 90 73 48 15
29 58 79 78 77 76 75 74 49 16
28 57 56 55 54 53 52 51 50 17
27 26 25 24 23 22 21 20 19 18
(erf là sa rend mal c'est pas bien presenter en colonnes, y prend pas en compte tt les espaces (que le prog met automatiquement pour faire une belle presentation en colonne :p)
Source / Exemple :
##
#Remplissage d'un tableau en spirale
##
size=(10,10)
#construction du tableau
tab=[]
for i in range(size[0]):
tab.append([])
for j in range(size[1]):
tab[-1].append(0)
x=0
y=0
lh=0 #ligne haut
lb=0 #ligne bas
hd=0 #hauteur droite
hl=0 #hauteau gauche
sens='d'
for k in range(size[0]*size[1]):
if(size[0]-x-hd>1 and sens=='d') :
tab[x][y]=k
x+=1
elif(sens=='b' and y<size[1]-lb) :
tab[x][y]=k
y+=1
elif(sens=='g' and x>=hl):
tab[x][y]=k
x-=1
elif(sens=='h' and y>=lh):
tab[x][y]=k
y-=1
else :
if(sens=='d'):
sens='b'
lh+=1
tab[x][y]=k
y+=1
elif(sens=='b') :
sens='g'
hd+=1
tab[x-1][y-1]=k
y=size[1]-lb-1
x=size[0]-hd-2
elif(sens=='g'):
sens='h'
lb+=1
y=size[1]-lb-1
x=hl
tab[x][y]=k
y-=1
elif(sens=='h'):
sens='d'
hl+=1
tab[x+1][lh]=k
x+=2
y=lh
tabpr=''
for i in range(size[1]):
for x in range(size[0]):
num=str(tab[x][i])
#juste pour que le tableau saffiche correctement :p
if(len(num)<len(str(size[0]*size[1]-1))):
num=((len(str(size[0]*size[1]-1))-len(num))*' ')+num
###
tabpr+=num+' '
tabpr+='\n'
print tabpr
Conclusion :
Voilà, je sais que c'est simple mais c'etait pour voir la diff de nbre de ligne avec un code en c que javais trouver :
http://forum.hardware.fr/hardwarefr/Programmation/Jte-defi-remplir-tableau-sujet-62471-1.htm
ps : si vous souhaiter avoir un zero au centre y faut juste jouer avec la boucle "for k in range(size[0]*size[1]):" :
genre pour commencer à un et avoir un zero au centre ça donne "for k in range(1, size[0]*size[1]):" et pour commencer à zero et avoir un zero au centre ça donne "for k in range(size[0]*size[1]-1):"
Vous n'êtes pas encore membre ?
inscrivez-vous, c'est gratuit et ça prend moins d'une minute !
Les membres obtiennent plus de réponses que les utilisateurs anonymes.
Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.
Le fait d'être membre vous permet d'avoir des options supplémentaires.