Je souhaite parcourir un tableau par les diagonales et non par les lignes et les colonnes. Par exemple, le code qui suit utilise les lignes et les colonnes :
for i in range(3):
for j in range(3):
print(i, j, sep=",", end=" / ")
Et il donne ceci :
0,0 / 0,1 / 0,2 / 1,0 / 1,1 / 1,2 / 2,0 / 2,1 / 2,2 /
Je voudrais un programme qui donne ceci :
0,0 / 1,0 / 0,1 / 2,0 / 1,1 / 0,2 / 2,1 / 1,2 / 2,2 /
Le parcours se ferait par couche, en testant d'abord les positions proches de 0.
J'ai une grosse quantité de données à parcourir, sur trois dimensions. Voire cinq… Je sais déjà que les solutions intéressantes sont proches de l'origine. J'arrive à le faire pour deux dimensions, mais j'ai du mal pour plus de dimensions. Il faudrait aussi les dimensions puissent être de tailles différentes :
def loopDiag(taille):
for diag in range(taille+1):
for i in range(1+diag):
x, y = diag-i, i
yield x, y
for diag2 in range(1,taille+1):
diag = taille-diag2
for i in range(1+diag):
x, y = diag-i, i
x, y = taille-x, taille-y
yield x, y
print(list(loopDiag(5)))
[(0, 0), (1, 0), (0, 1), (2, 0), (1, 1), (0, 2),
(3, 0), (2, 1), (1, 2), (0, 3), (4, 0), (3, 1),
(2, 2), (1, 3), (0, 4), (5, 0), (4, 1), (3, 2),
(2, 3), (1, 4), (0, 5), (1, 5), (2, 4), (3, 3),
(4, 2), (5, 1), (2, 5), (3, 4), (4, 3), (5, 2),
(3, 5), (4, 4), (5, 3), (4, 5), (5, 4), (5, 5)]