Lua Challenge -- From Python Challenge

本文解析了PythonChallenge网站Level1的谜题,通过ASCII码转换揭示了解题线索,并介绍了Lua和Python两种语言实现方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Preface

其实是有点无聊顺便带巩固Lua的,然后也顺带玩儿下python的,学过的就不能忘记嘛~~而且,学习Lua的时候,好多都是以理论为主,没有太怎么实践。学习编程语言不写永远都没有用的诶~所以,这篇主要记录的是Lua的代码,如果有需要会记录Python的代码。

PS:PythonChallenge 来源于:PythonChallenge Official Websiteshiyanlou:PythonChallenge_1


Level 0

问题描述

URL:http://www.pythonchallenge.com/pc/def/0.html


Calc.jpg
Hint: try to change the URL address.

解法方案

看这个样子,应该是2^38次方。
打开Lua的交互式环境:
lua238

输入新的URL:http://www.pythonchallenge.com/pc/def/274877906944.html

跳转到另一个页面,Level 1


Level 1

问题描述

URL:http://www.pythonchallenge.com/pc/def/map.html


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码+2得到后的结果。因此,将整段文本进行转换,代码如下:

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."

output = ""

for i=1, #text do
    -- string.sub(text, i, i)用来遍历字符串的每个字符
    -- string.byte('a') 将'a'转换成ASCII值
    -- string.char(97) 将97转换成字母'a'
    local byte = string.byte(string.sub(text, i, i))
    local chr = string.char(byte)
    if byte >= string.byte('a') and byte <= string.byte('z') then
        output = output ..  string.char((byte + 2 - string.byte('a')) % 26 + string.byte('a'))
    else
        output = output .. string.char(byte)
    end
end
print(output)

test_1

这个就是转换后,官方推荐我们用string.maketrans(),当然这个是python的,lua的不管~对string.maketrans()的阐述在本关的附录部分。

现在对url进行转换,改成text = "map.html",结果如下:
ocr.jvon

结果是:ocr.jvon

然后URL变为:http://www.pythonchallenge.com/pc/def/ocr.jvon

下载得到ocr.jvon,里面的内容:

Have you ever heard of jvon files !?

额,其实这里我懵掉了,什么鬼,明明才Level1的,下面应该有Level2的,图片上都有0,1啊,应该有2的提示吧。

然后看了下实验楼的,好吧,只需要把URL变成:http://www.pythonchallenge.com/pc/def/ocr.html就可以了。Level 2!! Next Level

但是下载下来的ocr.jvon是可以打开的,里面是文本文件。或许是彩蛋或许是后续关卡,反正处于Level 1的我不知道。



附录:Python的string.maketrans()用法

此段内容摘抄自:shiyanlou:PythonChallenge_1

从python交互式环境help(string.maketrans)得到以下信息:
help(string.maketrans)

help(string.translate)
hep(string.translate)

如果英文不好直接看代码:

#codeing:utf-8

import string

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."

def trans(text):
    table = string.maketrans(
            string.ascii_lowercase,
            string.ascii_lowercase[2:] + string.ascii_lowercase[:2])
    print(string.translate(text, table))


if __name__ == '__main__':
    trans(text)

仔细看string.maketrans()里面的两个参数,其中string.lowercase指的是小写的26个英文字母a-z,第二个参数是要转换的格式c-z+ab,也就是将每个字符后移两位的方法,因此直接用定义好的方法table,将text字符串应用该方法转换即可。

同样可以得到以下信息:
python_string.maketrans


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值