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

[Python Challenge通关]第1关 what about making trans_第1张图片

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 参考

你可能感兴趣的:(Python,python,challenge)