1.2.2 Transformations 方块转换
(transform.pas/c/cpp)
一块N x N(1<=N<=10)正方形的黑白瓦片的图案要被转换成新的正方形图案。写一个程序来找出将原始图案按照以下列转换方法转换成新图案的最小方式:
1:转90度:图案按顺时针转90度。
2:转180度:图案按顺时针转180度。
3:转270度:图案按顺时针转270度。
4:反射:图案在水平方向翻转(以中央铅垂线为中心形成原图案的镜像)。
5:组合:图案在水平方向翻转,然后再按照1到3之间的一种再次转换。
6:不改变:原图案不改变。
7:无效转换:无法用以上方法得到新图案。
如果有多种可用的转换方法,请选择序号最小的那个。
只使用1--7中的一个步骤来完成这次转换。
格式
PROGRAM NAME: transform
INPUT FORMAT:
file (transform.in)
第一行: 单独的一个整数N。
第二行到第N+1行: N行每行N个字符(不是“@”就是“-”);这是转换前的正方形。
第N+2行到第2*N+1行: N行每行N个字符(不是“@”就是“-”);这是转换后的正方形。
OUTPUT FORMAT:
file (transform.out)
单独的一行包括1到7之间的一个数字(在上文已描述)表明需要将转换前的正方形变为转换后的正方形的转换方法。
SAMPLE INPUT
3 @-@ --- @@- @-@ @-- --@
SAMPLE OUTPUT
1
时间限制: 1000ms
空间限制: 128MB
=====Analysis=====
这个不算难也不算简单
先写一个类(Class)
最开始先写数字 1 的转变,直接在列表里换
换完了之后后面的就可以在 1 的基础上变换了
注:之前写的库存,那个时候的技术还不太好
能通过即可
=====Code=====
fin= open('transform.in','r')
fout= open('transform.out','w')
lines=fin.read().splitlines()
N=int(lines[0])
box=[]
for i in range(1,N+1):
b=list(lines[i])
box.append(b)
result=[]
for i in range(N+1,2*N+1):
b=list(lines[i])
result.append(b)
temp = [row[:] for row in box]
class turn():
def num_1(box,temp): #顺时针90度
x=0
for i in range(len(box)-1,-1,-1): #3->1
y=0
for j in range(N):
temp[y][x]=box[i][j]
y+=1
x+=1
return temp
def num_2(box,temp): #顺时针180度
temp.reverse()
for i in temp:
i.reverse()
return temp
def num_3(box,temp): #顺时针270
temp_1=turn.num_2(box,temp)
temp_2= [row[:] for row in temp_1]
turn.num_1(temp_1,temp_2)
return temp_2
def num_4(box,temp): #延垂直中线翻转
for i in temp:
i.reverse()
return temp
def num_5(box,temp):
temp_1=turn.num_4(box,temp)
temp_2= [row[:] for row in temp_1]
num={1:turn.num_1,2:turn.num_2,3:turn.num_3}
for i in range (1,4):
temp_2= [row[:] for row in temp_1]
if num[i](temp_1,temp_2)== result:
return temp_2
def num_6(box,temp):
return box
def show(box,temp,result):
check=[]
num={1:turn.num_1,2:turn.num_2,3:turn.num_3,4:turn.num_4,5:turn.num_5,6:turn.num_6,}
for i in range(1,7):
temp = [row[:] for row in box]
if num[i](box,temp)==result:
fout.write(str(i)+'\n')
check.append(i)
break
if not check:
fout.write('7\n')
show(box,temp,result)
fout.close()