在紙上解題特別有靈感,電腦只是執行工具。
很抱歉昨天對於題目理解有誤,input的數字代表翻轉次數,而非面朝上數字。
有一些bug,待修改。
但是邏輯是對的,debug只錯最後一題。
def test(fun):
if(fun=="inp"):
return 1
if(fun=="die"):
return 1
if(fun=="newa"):
return 1
測試函數用來關掉監測輸出
import sys
def inp():
#遊戲數值
global ew,ns
#讀取處理
nuca=sys.stdin.readline()
nuca=int(nuca)
while(nuca!=0):#如果數字為0遊戲結束
ew=0
ns=0
for i in range(nuca):
st=sys.stdin.readline()
st=st.replace("\n","")
if(test("inp")):print(st)
die(st)
if(test("inp")):print("ew=",ew,"ns=",ns)
newa(ew,ns)
if(test("inp")):print("="*6)
#讀取下題測資
nuca=sys.stdin.readline()
nuca=int(nuca)
讀取函數
def die(st):
global ew,ns
if(st=="north"):
ns+=1
if(test("die")):print("ns=",ns)
elif(st=="south"):
ns-=1
if(test("die")):print("ns=",ns)
elif(st=="east"):
ew-=1
if(test("die")):print("ew=",ew)
else:
ew+=1
if(test("die")):print("ew=",ew)
判斷旋轉方向,並且進行統計。
例:往左翻三次:往右翻一次,等於往左翻二次。
def newa(lr,td):
#有沒有發現tdst[1],tdst[3]==lrst[1],lrst[3]
tdst=[2,1,5,6]
lrst=[3,1,4,6]
netd=[]
nelr=[]
if(test("die")):print(lr,td)
#先處理上下翻轉
for i in range(4):
td=td%4
netd.append(tdst[td])
td+=1
if(test("die")):print("td=",netd)
#上下翻轉處理完,橫排數字也會做變動
lrst[1],lrst[3]=netd[1],netd[3]
#後處理左右翻轉
for j in range(4):
lr=lr%4
nelr.append(lrst[lr])
lr+=1
if(test("die")):print("lr=",nelr)
print(nelr[1])
inp()
先處理上下翻轉,或左右翻轉,順序不重要。
重要的是,中間要有數字變動。
測試函數個別做開關,方便測試哪個階段出問題。
但是全開全關有點麻煩,目前在思考如何製作總開關。
文章有點長,感謝撥冗閱讀