螺旋陣列的智障寫法
因應(?)PYTHON的老師出了一個作業是螺旋陣列
大概就是長這樣
輸入:W12A1.py 1 2 3 4 5 6 7 8 9 10 11 12 4 3
實在不知道怎麼寫,只好土法煉鋼一個一個填上去了@@
def rotate(listtmp, m, n):
# 建立一個LIST,用以填入數字,其中多建立一個外圈作為牆壁,並將內容填入 -1
l2 = [[-1 for i in range(int(n) + 2)]for i in range(int(m) + 2)]
for i in range(1, len(l2) - 1): # 除了最外圍,其餘填入0
for j in range(1, len(l2[i]) - 1):
l2[i][j] = 0
# 到這裡,最外圍變成-1,其餘為0,-1代表牆壁,避免填出範圍
x = 0 # X填到哪裡
y = 1 # Y填到哪裡
inl = 0 # 輸入串列目前輸入到哪裡
trave = "R" # 目前填的方向
while inl < len(listtmp): # 直到所有輸入的值都被填入
# 向RIGHT填入
if(trave == "R"):
x += 1
while(l2[y][x] != -1 and l2[y][x] == 0):
l2[y][x] = listtmp[inl]
x += 1
inl += 1
trave = "D"
x -= 1
# 向Down填入
if(trave == "D"):
y += 1
while(l2[y][x] != -1 and l2[y][x] == 0):
l2[y][x] = listtmp[inl]
y += 1
inl += 1
trave = "L"
y -= 1
# 向LEFT填入
if(trave == "L"):
x -= 1
while(l2[y][x] != -1 and l2[y][x] == 0):
l2[y][x] = listtmp[inl]
x -= 1
inl += 1
trave = "U"
x += 1
# 向UP填入
if(trave == "U"):
y -= 1
while(l2[y][x] != -1 and l2[y][x] == 0):
l2[y][x] = listtmp[inl]
y -= 1
inl += 1
trave = "R"
y += 1
for i in range(1, len(l2) - 1):
print("\n")
for j in range(1, len(l2[i]) - 1):
print("{0: >3}".format(str(l2[i][j])), end=' ')
if __name__ == "__main__":
numlist = [None for i in range(len(sys.argv) - 3)]
for i in range(1, len(sys.argv) - 2):
numlist[i - 1] = sys.argv[i]
rotate(numlist, sys.argv[len(sys.argv) - 2], sys.argv[len(sys.argv) - 1])
# W12A1.py 1 2 3 4 5 6 7 8 9 10 11 12 4 3