【搜狗 后端开发笔试 】密文解码

题目

密文是一张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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值