Es ist ein Programm, das numerische Werte wie unten gezeigt spiralförmig anordnet.
25 10 11 12 13
24 9 2 3 14
23 8 1 4 15
22 7 6 5 16
21 20 19 18 17
Ich habe 1 in die Mitte gelegt und eine Runde darum gemacht, um die Zahlen zu platzieren.
Erster Platz 1 in der Mitte.
1
↓ Machen Sie als nächstes einen Schritt über 1.
2
1
↓ Machen Sie eine volle Umdrehung im Uhrzeigersinn.
2 3
1
↓ Geh runter
2 3
1 4
5
↓ Gehe nach links
2 3
1 4
7 6 5
↓ Geh hoch
9 2 3
8 1 4
7 6 5
Wiederholen Sie die obigen Schritte für die angegebene Größe.
Python-Skript.
spiral.py
# coding: utf-8
import itertools
#Ordnen Sie die Zahlen spiralförmig an
#
#Beispiel)
# 10 11 12 13
# 9 2 3 14
# 8 1 4 15
# 7 6 5
def spiral(n):
N = (-1, 0)
E = ( 0, 1)
S = ( 1, 0)
W = ( 0, -1)
def advance(p, d):
return p[0] + d[0], p[1] + d[1]
path = [(0, 0)]
for size in itertools.count(3, 2):
if len(path) >= n: break
p = path[-1]
p = advance(path[-1], N) #Machen Sie einen Schritt nach oben
path.append(p)
#Machen Sie eine volle Umdrehung im Uhrzeigersinn
for d in [E, S, W, N]:
step = size-2 if d == E else size-1
for _ in range(step):
p = advance(p, d)
path.append(p)
display(path[:n])
def display(path):
m = { path[i] : i+1 for i in range(len(path)) }
rs = [p[0] for p in m]
cs = [p[1] for p in m]
minrow, maxrow = min(rs), max(rs)
mincol, maxcol = min(cs), max(cs)
fmt = '%%%ds' % len(str(len(path)))
for r in range(minrow, maxrow+1):
for c in range(mincol, maxcol+1):
if c > mincol:
print(' ', end='')
x = m[r, c] if (r, c) in m else ' '
print(fmt % x, end='')
print()
def main():
while True:
s = input("size> ")
spiral(int(s))
if __name__ == '__main__':
main()
Dies ist das Ausführungsergebnis. size>
ist die Eingabeaufforderung. Wenn Sie einen numerischen Wert angeben, wird diese Zahl spiralförmig angeordnet.
size> 9
9 2 3
8 1 4
7 6 5
size> 25
25 10 11 12 13
24 9 2 3 14
23 8 1 4 15
22 7 6 5 16
21 20 19 18 17
size> 38
26 27 28 29 30 31
25 10 11 12 13 32
24 9 2 3 14 33
23 8 1 4 15 34
22 7 6 5 16 35
21 20 19 18 17 36
38 37
@trsqxyz hat es umgeschrieben.
Recommended Posts