传说中的加密纸条 -- 2019-08-08 20:40:00

Posted gqy02

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了传说中的加密纸条 -- 2019-08-08 20:40:00相关的知识,希望对你有一定的参考价值。

原文: http://106.13.73.98/__/185/

"""
26个英文字母(大写),外加空格,一共27个字符分成3组,每组9个字符,
也就是:ABCDEFGHI、JKLMNOPQR、STUVWXYZ*  (此处用 * 代替空格)

根据当天的日期改变字母的位置:
    先根据月份数m,以分组为单位循环左移,移动 (m-1) 次
    在根据日期数d,将每个分组内的字符循环左移,移动 (d-1) 次

这里以3月8号为例:
    首先移动分组,3月需要循环左移2次,变成:STUVWXYZ*、ABCDEFGHI、JKLMNOPQR
    然后根据组内字符,8号需要循环左移7次,最终的编码为:Z*STUVWXY、HIABCDEFG、QRJKLMNOP

如果在3月8号传递信息“HAPPY”,那么H位于第2组的第1个,A位于第2组的第3个,P位于第3组的第9个,Y位于第1组的第9个
所以最终的编码为:21 23 39 39 19
"""
import time

struct_time = time.localtime()

# m, d = struct_time.tm_mon, struct_time.tm_mday
m, d = 3, 8

G = [
    ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I'],
    ['J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R'],
    ['S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', '*']
]


for i in range(m-1):
    G.append(G.pop(0))

for i in range(d-1):
    for g in G:
        g.append(g.pop(0))


for i in 'HAPPY':
    for g in G:
        if i in g:
            print(G.index(g) + 1, g.index(i) + 1)

实现方式二:通过索引加1余长度:
技术图片

实现方式三:Python独有的赋值方式:

for i in range(m-1):
    G[0], G[1], G[2] = G[1], G[2], G[0]

for i in range(d-1):
    for g in G:
        g[0], g[1], g[2], g[3], g[4], g[5], g[6], g[7], g[8] = g[1], g[2], g[3], g[4], g[5], g[6], g[7], g[8], g[0]

原文: http://106.13.73.98/__/185/

以上是关于传说中的加密纸条 -- 2019-08-08 20:40:00的主要内容,如果未能解决你的问题,请参考以下文章

DRF分页 -- 2019-08-08 20:40:11

洛谷 U5737 纸条

DRF频率 -- 2019-08-08 20:39:51

Linux系统引导过程 -- 2019-08-08 20:40:08

Python 多进程 -- 2019-08-08 20:39:52

Django缓存 -- 2019-08-08 20:40:04