题目描述
一块 n×n 正方形的黑白瓦片的图案要被转换成新的正方形图案。写一个程序来找出将原始图案按照以下列转换方法转换成新图案的最小方式:
-
转 90°:图案按顺时针转 90°。
-
转 180°:图案按顺时针转 180°。
-
转 270°:图案按顺时针转 270°。
-
反射:图案在水平方向翻转(以中央铅垂线为中心形成原图案的镜像)。
-
组合:图案在水平方向翻转,然后再按照 1∼3 之间的一种再次转换。
-
不改变:原图案不改变。
-
无效转换:无法用以上方法得到新图案。
如果有多种可用的转换方法,请选择序号最小的那个。
只使用上述 7 个中的一个步骤来完成这次转换。
输入格式
第一行一个正整数 n。
然后 n 行,每行 n 个字符,全部为 @
或 -
,表示初始的正方形。
接下来 n 行,每行 n 个字符,全部为 @
或 -
,表示最终的正方形。
输出格式
单独的一行包括 1∼7 之间的一个数字(在上文已描述)表明需要将转换前的正方形变为转换后的正方形的转换方法。
输入输出样例
输入 #1
3 @-@ --- @@- @-@ @-- --@
输出 #1
1
说明/提示
【数据范围】
对于 100% 的数据,1≤n≤10。
题目翻译来自 NOCOW。
USACO Training Section 1.2
import copy # 为了后续的深拷贝
m = int(input())
start = [] #初始图案
for i in range(m):
a = list(input())
start.append(a)
start0 = copy.deepcopy(start)
# print('start=',start)
end = [] #结果图案
for i in range(m):
a = list(input())
end.append(a)
# print('end=',end)
ans = [[0 for i in range(m)]for i in range(m)] #比较图案
# print('ans=',ans)
def compare(a,b): #比较两个图案是否一致
for i in range(m):
for j in range(m):
if a[i][j] != b[i][j]:
return 0
return 1
def work1(): #顺时针转90°
for i in range(m):
for j in range(m):
ans[j][m-i-1] = start[i][j]
x = compare(end,ans)
return x
def work2(): #顺时针转180°
for i in range(m):
for j in range(m):
ans[m-i-1][m-j-1] = start[i][j]
x = compare(end,ans)
return x
def work3(): #顺时针转270°
for i in range(m):
for j in range(m):
ans[m-j-1][i] = start[i][j]
x = compare(end,ans)
return x
def work4(): #反射(沿着中心轴对调)
for i in range(m):
for j in range(m):
ans[i][m-j-1] = start[i][j]
x = compare(end,ans)
return x
work4()
w4 = copy.deepcopy(ans)
def work5(): #先对调,然后在方法123中选一个
for i in range(m):
for j in range(m):
ans[j][m-i-1] = w4[i][j]
x = compare(end,ans)
for i in range(m):
for j in range(m):
ans[m-i-1][m-j-1] = w4[i][j]
x += compare(end,ans)
for i in range(m):
for j in range(m):
ans[m-j-1][i] = w4[i][j]
x += compare(end,ans)
if x>0:
x = 1
return x
def work6():
x = compare(start0,end)
return x
def work():
if work1():
print('1')
return
if work2():
print('2')
return
if work3():
print('3')
return
if work4():
print('4')
return
if work5():
print('5')
return
if work6():
print('6')
return
print('7')
work()