题目
密文是一张NN的格子纸,每个格子都有一个字母。解密需要用到另一张NN的格子纸,这张纸有的格子是透明的,有的格子是涂黑的。两张纸重合后,将透明处的字母按照从上到下,行内自左到右的顺序读出,然后将解密纸顺时针旋转90度再读一次,一共读4次。现在给你密文和解密纸,请输出原文。
示例1:
输入:
[1101,1010,1111,1110] ,
[ABCD,EFGH,IJKL,MNPQ]
输出:
CFHQGLMPAIKNBDEJ
备注:
1<=N<=100
代码
# 输入:
# 1101,1010,1111,1110
# ABCD,EFGH,IJKL,MNPQ
# 输出CFHQGLMPAIKNBDEJ
# s = [i for i in input().split(',')] # 用户输入
# s2 = [i for i in input().split(',')]
s=["1101","1010","1111","1110"]
s2 = ["ABCD","EFGH","IJKL","MNPQ"]
res = [] # 存0出现的位置的索引(坐标)
res2 = [] # 存从字母矩阵中取出来的字符
for j in range(0, len(s)): # 行遍历
for k in range(0, len(s)): # 列遍历,因为是N*N的方阵 ,此处是宽度为len(s)
if '0' == s[j][k]: # 如果为0,记下坐标
res.append([j, k])
for k in range(4):
for m in range(0, len(s)):
if k == 0: # 第一次不作索引变换
continue
temp = res[m][0] # 下一次出现的位置相对于上一次的旧位置(x, y)来说为(y, len(s)-x-1)
res[m][0] = res[m][1]
res[m][1] = len(s)-temp-1
# print('res', res)
res.sort() # 排序,为了满足下一次从上往下,从左往右遍历条件
for l in range(len(s)):
res2.append(s2[res[l][0]][res[l][1]]) # 依次添加各个坐标上对应的矩阵元素
print(res2)
print(''.join(res2)) # 输出CFHQGLMPAIKNBDEJ