Algo simple : remplissage d'un tableau en spirale

Soyez le premier à donner votre avis sur cette source.

Snippet vu 9 325 fois - Téléchargée 29 fois

Contenu du snippet

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):"

A voir également

Ajouter un commentaire

Commentaires

econs
Messages postés
4030
Date d'inscription
mardi 13 mai 2003
Statut
Modérateur
Dernière intervention
23 décembre 2008
19 -
En fait, j'avais pas bien lu l'exemple en C++.
Comme il a fait un remplissage 'générique' de tableaux, c'est forcément plus long. Par contre, en un seul code, il implémente plusieurs solutions. Du coup, c'est un peu plus long.
econs
Messages postés
4030
Date d'inscription
mardi 13 mai 2003
Statut
Modérateur
Dernière intervention
23 décembre 2008
19 -
Effectivement, c'est bien plus court que l'exemple proposé en C.
Reste à voir si cet exemple était optimisé ...
En tous cas, ton code a l'air propre. Bien joué !

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.