[Python Challenge通关]第1关 what about making trans

map

everybody thinks twice before solving this.

g fmnc wms bgblr rpylqjyrc gr zw fylb. rfyrq ufyr amknsrcpq ypc dmp. bmgle gr gl zw fylb gq glcddgagclr ylb rfyr'q ufw rfgq rcvr gq qm jmle. sqgle qrpgle.kyicrpylq() gq pcamkkclbcb. lmu ynnjw ml rfc spj.

挑战地址,点我

分析

图片上给了三个映射:

K -> M
O -> Q
E -> G

前后两个字符之间都是间隔一个字符,再想一下ASCII码表,后面的字符和前面的字符的 ASCII 码值差为 2 。

页面上还给了一串乱七八糟的字符:

g fmnc wms bgblr rpylqjyrc gr zw fylb. rfyrq ufyr amknsrcpq ypc dmp. bmgle gr gl zw fylb gq glcddgagclr ylb rfyr'q ufw rfgq rcvr gq qm jmle. sqgle qrpgle.kyicrpylq() gq pcamkkclbcb. lmu ynnjw ml rfc spj.

这一串字符应该是经过上面的映射关系处理过的,或者说加密过的,加密算法就是上面的映射关系:每个字符向后偏移两个。

那一串字符中除了 a-z ,还有空格逗号括号,这些字符如果按照上面的映射关系会转换成引号句号*之类的,看起来更乱了,所以猜测应该保持不变,只需要处理 a-z

那么还有一个问题,yz 对应可以转换成什么呢?如果简单的按照上面的转换关系:

y -> {
z -> |

这也有些奇怪,猜想应该把 a-z-a 连成一个环:

y -> a
z -> b

用代码实现:

#!/usr/bin/env/ python3

text = "g fmnc wms bgblr rpylqjyrc gr zw fylb. rfyrq ufyr amknsrcpq ypc dmp. bmgle gr gl zw fylb gq glcddgagclr ylb rfyr'q ufw rfgq rcvr gq qm jmle. sqgle qrpgle.kyicrpylq() gq pcamkkclbcb. lmu ynnjw ml rfc spj."
result = ""
for c in text:
    if c < 'a' or c > 'z':
        result += c
    else:
        result += chr((ord(c) + 2 - ord('a')) % 26 + ord('a'))
print(result)

输出结果:

i hope you didnt translate it by hand. thats what computers are for. doing it in by hand is inefficient and that's why this text is so long. using string.maketrans() is recommended. now apply on the url.

解码后的信息提示可以使用 str.maketrans(),这个函数有什么作用呢,查看下官方文档

static str.maketrans(x[, y[, z]])
This static method returns a translation table usable for str.translate().

str.translate(table)
Return a copy of the string in which each character has been mapped through the given translation table.

从上面的解释看到,可以使用 str.maketrans() 创建一个映射表,然后使用 str.translate() 就可以根据映射表,把一个字符串转换成另一个字符串。

#!/usr/bin/env/ python3

text = "g fmnc wms bgblr rpylqjyrc gr zw fylb. rfyrq ufyr amknsrcpq ypc dmp. bmgle gr gl zw fylb gq glcddgagclr ylb rfyr'q ufw rfgq rcvr gq qm jmle. sqgle qrpgle.kyicrpylq() gq pcamkkclbcb. lmu ynnjw ml rfc spj."

table = str.maketrans("abcdefghijklmnopqrstuvwxyz", "cdefghijklmnopqrstuvwxyzab")
result = text.translate(table)

print(result)

解码后的信息还提示 now apply on the url.,当前页面的 url 是 http://www.pythonchallenge.com/pc/def/map.html,联想上一关,这里的 url 应该是指的 map, 需要把 map 使用上面的算法进行解码,得到了 ocr,替换 map 就得到了下一关的入口

参考资源:

  1. chr 官方文档
  2. ord 官方文档
  3. str.maketrans 官方文档
  4. str.translate 官方文档
  5. chr 参考
  6. ord 参考
  7. str.maketrans 参考
  8. str.translate 参考
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 4.7. Text Sequence Type — str Python中的文本数据由str对象或strings处...
    xpf2000阅读 3,288评论 0 2
  • 你们知道人与狗的区别吗? 狗比人讲信用,狗比人忠诚,如果你失信于我,那就请你删了我的联系方式,因为...
    李银朋阅读 939评论 0 0
  • 就在杨绛先生的死讯充斥整个消息圈时,我的注意力却被另一则消息给吸引——我一位同级的校友在昨天选择了跳楼自杀。死前,...
    马不理馒头阅读 188评论 0 0
  • 某图秀秀功能强大,修完之后令我惊讶, 乌黑眼圈消失没啦,肉肉脸颊削成尖哒。 糙汉变身软妹一个,温柔淑女犹如绿茶, ...
    荧光蓝绿阅读 185评论 2 3
  • 昨晚看到新浪微博的推送 突然感觉这次很可能是真的,因为地点年纪都相符!突然觉得很伤感,我第一个想到的是他的家人,之...
    不二大大ABC阅读 593评论 0 0