meine eigene Frage zu beantworten:
Um herauszufinden, wie die Werte in bestimmten Weise zu platzieren, müssen wir Koordinaten für jedes Delta, um herauszufinden, Artikel.
Aus Gründen der Erklärung werde ich n = 60
Elemente verwenden.
Um das zu tun, müssen wir die Größe des Arrays wissen, dass wir bekommen, kann dies durch das, was @ Błotosmętek erreicht werden vorgeschlagen:
def array_size(n):
k = 0
while n > 0:
k += 1
n -= 6 * k
return 2 * k + 1
array_size = array_size(n)
(By the way, danke für große Heads-up.) Nun müssen wir die Koordinaten für die Array-Zentrum, das ist ziemlich einfach:
# This is (4, 4), the exact coordinates we need for said amount of items (60)
array_center = (array_size // 2, array_size // 2)
Als nächstes bekommen wir die Deltas. Ich bin nicht sicher, dass dies der beste Weg, dies zu tun ist, aber trotzdem:
def get_coordinates_delta(n):
x = [0]
x_ones = 1
x_zeroes = 1
while len(x) <= n:
x += ([1] * x_ones + [0] * x_zeroes + [-1] * (x_ones + 1) + [0] * x_zeroes)
x_ones += 2
x_zeroes += 1
y = [0, -1]
y_ones = 2
y_zeroes = 1
while len(y) <= n:
y += ([1] * y_ones + [0] * y_zeroes + [-1] * (y_ones + 1) + [0] * y_zeroes)
y_ones += 2
y_zeroes += 1
return [x for x in zip(x[:n], y[:n])]
coordinates_delta = get_coordinates_delta(n)
Und jetzt das Spaßteil, wir alles setzen wir auf das Gitter haben:
def fill_matrix():
matrix = [[0] * array_size for _ in range(array_size)]
x, y = array_center
for item, (dx, dy) in zip(range(n), coordinates_delta):
x += dx
y += dy
matrix[y][x] = item
return matrix
matrix = fill_matrix()
Voila,
for line in matrix:
print(line)
gibt uns dies:
[ 0, 0, 0, 0, 0, 37, 38, 39, 40]
[ 0, 0, 0, 59, 36, 19, 20, 21, 41]
[ 0, 0, 58, 35, 18, 7, 8, 22, 42]
[ 0, 57, 34, 17, 6, 1, 9, 23, 43]
[56, 33, 16, 5, 0, 2, 10, 24, 44]
[55, 32, 15, 4, 3, 11, 25, 45, 0]
[54, 31, 14, 13, 12, 26, 46, 0, 0]
[53, 30, 29, 28, 27, 47, 0, 0, 0]
[52, 51, 50, 49, 48, 0, 0, 0, 0]
Was haben Sie versucht? –
@EricDuminil Nicht viel. Ich habe die Frage aktualisiert, weiß aber noch nicht, wo ich anfangen soll – Spacehug