Python Challenge 0-9

来源:互联网 发布:小说阅读网软件 编辑:程序博客网 时间:2024/05/16 12:02

这是一个神奇的网站….

现在卡在第七题还没有做出来。。。

(0):较简单,首先尝试了238发现不对,然后尝试2^38次方即可成功跳转url.

(1):题目是这样:

这里写图片描述

很容易想到将每个字母往后推2个,然后将下面哪一句话转换一下即可发现并不是答案而是让你对url进行decode,对url里面的map做一点微小的工作即可pass。

(2):

这里写图片描述

如果不告诉你source page还是有点难想到,但是说了就很容易了,进入,发现注释,然后只需要找到那些小写字母的内容(equality)即可。

def rare(s):    for each in s:        if each.isalpha():print(each)

(3)

这里写图片描述

这道题就需要一点编程了,我一开始想错了,以为是上下左右四个方向都必须有3个大写的字母,注意有且只能有3个,结果发现没有这样的小写字母,然后开脑洞改变了上下两个方向的surronded的定义,认为是不是只要有一个字母盖住就算呢,结果还是不对,浪费不少时间…最后仔细看了一下图,发现图上已经给你提示了…只需要左右有就可以了……

下面的代码比较丑,但做这个就只求做出来嘛~~~~

def check_real(s,i):    if i<0 or i>=len(s):return False    if s[i].islower():return False    count1 = 0;count2=0    j = i-1    while j>=0 and s[j].isupper():        count1+=1        j-=1    j = i+1    while j<len(s) and s[j].isupper():        count2+=1        j+=1    return count1==1 and count2==1def code(url):    test = dict()    num = 0    lines = []    with open(url) as f:        for line in f:            for i,each in enumerate(line):                if each.islower():                    if check_real(line,i-2) and check_real(line,i+2):                        print(each,num+1,i+1)

(4)

这里写图片描述

你点一下这个图片就发现进入了一个无限循环,每次都有一个新的url,那么写一个脚本不停的发送请求然后解析出下一个url然后循环即可。但是里面有一个陷阱,就是它存在一些其他的数字来干扰你,所以你分割字符串的时候一定要用 next nothing is作为分割符,中间还会出现让你把数字减半之类的信息,这时候就需要人工操作一下,最后进入peak.

def chain():    from urllib import request    next_str = 16044/2    for i in range(400):        with request.urlopen('http://www.pythonchallenge.com/pc/def/linkedlist.php?nothing={0}'.format(next_str)) as f:            data = f.read()            next_data = data.decode('utf-8')            try:                next_str = next_data.split('next nothing is')                next_str = int(next_str[-1])                print(next_str)            except:                print(next_data)                next_str = next_str/2

(5):

这里写图片描述

这道题我稍微看了一点参考(就一点~^_^~),我根据peak hell联想到了pickle,然后成功卡住,因为我是直接把那个pickle序列化之后的信息复制下来用来解码的,结果一直不成功,中间试过转变成bytes,但是还是有问题…最后查了一下发现应该用url直接获取数据,这样就得到了真正的bytes编码…(这里真是思维江化。。。),做出这个后面就很简单了,解密后发现是一个二维list,每一个list都是[(’ ‘,number),…]的形式,这个稍微想一下就知道是把所有的字符给打出来(画出来),注意,由于这个cmd窗口太小,导致打印出来的图像非常畸形,所以我在这里半天都看不懂是什么,进而怀疑思路,最后我尝试把字符写入一个文件再打开,发现了最终的答案(这一步卡了15分钟,中间还尝试把图像竖着看等脑洞…)

def peak():    from urllib.request import urlopen    raw = urlopen("http://www.pythonchallenge.com/pc/def/banner.p").read()    import pickle    data = pickle.load(urlopen("http://www.pythonchallenge.com/pc/def/banner.p"))    ret = ''    for each in data:        for s,num in each:            ret += ('*' if s!=' ' else ' ')*num        ret+='\n'    with open('ret.txt','w') as f:        f.write(ret)

(6)后面感觉难度变大了不少….,这道题我想了很久,中间还参考了一点点点资料…首先zip这个提示让我思考了一会,首先尝试zip.html结果不对,然后查了一些zipfile的用法..结果暂时没有帮助,最后尝试了channel.zip结果下载下来一个东西感到很高兴,接下来就是直接按照(4)的方式遍历这些文件,结果得到一句collect all the comments,我在这里卡了几乎2个小时….最后还是看了答案,中间做过的尝试有:对每一个数字转成16进制然后编码,结果根本解不出,后来想一下答案的编码页不会这么长,然后尝试找所有文件里面含有字符’c’的文件,当然也失败了…最后发现zipfile里面有一个类叫zipinfo,里面有一个成员叫做comment….所以接下来就获得这样一个东西…..

这里写图片描述

在这里也卡了半天….一开始直接输入hockey结果不对,想了10分钟才注意到每一个字母都是由其他字母构成的…..Fuck,答案是oxygen….

def channel(prefix=r'C:/Users/admin/Desktop/新建文件夹/'):    cur = 94191    import os    import zipfile    s = ''    zipFile = zipfile.ZipFile(prefix+'channel.zip')    for i in range(907):        with open(prefix+'{}.txt'.format(cur)) as f:            for line in f:                x = hex(cur)                if not line.startswith('Next'):print(line)                x=zipFile.getinfo('{}.txt'.format(cur))                s+=x.comment.decode()                cur = int(line.split('nothing is')[-1])    print(s)

(7)

这里写图片描述

这一题的关键就是对黑白像素的值进行ASCII码解码,但是我一开始思路走偏,想利用base64对这个图片的二进制进行解码。。。结果求出一堆乱七八糟的字符串,然后我也不能直接从二进制流里面读取到哪些是黑白像素…

期间还尝试检测这个图片是不是一个伪装的压缩文件(^_^)..

在室友提醒下改用PIL读取像素来分析,经过观察可以发现黑白像素的RGB是一样的,所以利用这个条件可以确定像素位置是43行到51行的607列,接下来就是将像素提取为图片里面的小方块,注意千万不要直接去重,因为有可能两个小方块的RGB恰好一样….我一开始就是直接去重结果得到了看似正确的信息(在这里折腾了超级久…),但是关键数字漏掉了几个。。。。经过观测发现小方块应该是7个像素点,所以利用这个条件就可以取到所有小方块的数值然后得到一个数组,这些数组都是在ASCII码范围内的数字,所以直接翻译即可(最后的答案是integrity)

def oxygen():    import base64,sys    from PIL import Image    img = Image.open('oxygen.png')    box = (0, 43, 608, 52)    belt = img.crop(box)    pixels = belt.getdata()    lBelt = belt    lBelt = belt.convert('L')    lPixels = lBelt.getdata()    str = []    for i in range(0, 608,7):        str.append(chr(lPixels[i]))        last = lPixels[i]    print (''.join(str))

(8)这题相对前面要简单很多,首先发现源码里面的注释,首先尝试base64(为什么我对这个有怨念。。。),发现结果不对,然后搜索了最开头那个奇怪的字符,发现是使用bzip2进行压缩的,然后进行解压就得到答案.中间我搜索的时候不小心瞥到一眼一个blog的答案,提到gzip,然后我就用zlib进行解压,结果死活format不对(zlib对应的三种解压格式我都试了一遍…),最后又搜索一下才发现是bzip~~~~,最后答案是huge,file

x = bz2.decompress(uw)

(9)暂时卡住了~~~

0 0
原创粉丝点击