python challenge 10解题总结

 python challenge 10网址:www.pythonchallenge.com/pc/return/bull.html 

点击图片后出现www.pythonchallenge.com/pc/return/sequence.txt,信息如下:

a = [1, 11, 21, 1211, 111221,

原来就是要找规律的题目,第一个数字是1,第二个数字是11,第三个是21,第四个是。。。,仔细看看上述的数字,会发现原来规律就是:

第一个是1;

第二个是前面一个数字是一个1,就是11;

第三个是前面的数字有两个1,就是21;

第四个就是前面的数字有一个2,一个1,就是1211;

第五个就是前面的数字为一个1,一个2,两个1,就是111221;

。。。。。。。。。。。。。。。。。

得出结果是5808,python challenge 11的网址就是:www.pythonchallenge.com/pc/return/5808.html

如果需要用户名和密码的话,用户名为huge,密码为file。


源代码:

test=['1']
a='1'
i=0
j=0
s=''
while(i<=31):
    while(j<len(a)):
        temp=a[j]
        count=1
        for k in range(j+1,len(a)):
            if a[k]==temp:
                count+=1
                continue
            else:
                break
        s=s+str(count)+a[j]
        j=j+count
    test.append(s)
    a=s
    s=''
    i+=1
    j=0
print len(test[30])    

阅读全文 »

python challenge 11解题总结

python challenge 11网址:www.pythonchallenge.com/pc/return/5808.html

首先页面的图片很模糊,而且页面源码的标题为odd,even,那么需要对图片进行奇偶坐标的一些处理:

直接把奇列和偶列分开来,显示为两张图片就行了,代码如下:

from PIL import Image
if __name__ == '__main__':   
       
    img = Image.open('cave.jpg')   
       
    w = img.size[0]   
    h = img.size[1]   
       
    odd = even = Image.new(img.mode, (w/2, h/2))   
       
    for x in range(w):   
        for y in range(h):   
            pixel = img.getpixel((x, y))   
            if x % 2 == 0 and y % 2 == 0:   
                odd.putpixel((x/2, y/2), pixel)   
            elif x % 2 == 1 and y % 2 == 0:   
                even.putpixel(((x-1)/2, y/2), pixel)   
            elif x % 2 == 0 and y % 2 == 1:   
                even.putpixel((x/2, (y-1)/2), pixel)   
            elif x % 2 == 1 and y % 2 == 1:   
                odd.putpixel(((x-1)/2, (y-1)/2), pixel)   
                   
    odd.show()   
    even.show() 


结果会显示evil,下一关的网址是:www.pythonchallenge.com/pc/return/evil.html

 

 

如果需要用户名和密码的话,用户名为huge,密码为file。

阅读全文 »

python challenge 12 解题总结

python challenge 12网址:www.pythonchallenge.com/pc/return/evil.html 

本来以为这个谜题又是与图片打交道,实际则不是。但是查看源代码以及改变一些URL来检查,没有什么进展,于是稍微搜索一下网上的提示:

页面源码中,图片的名称是evil1.jpg,于是把URL地址改为evil2.jpg,打开一个画面,显示not jpg -- .gfx,URL继续改为evil2.gfx,把这个文件下载下来。按照页面上发牌的图片找出提示:以发牌的形式分成5份。 另外,读取图片时需要使用2进制的方式读取。 源代码如下:

f = open('evil2.gfx', 'rb')  
data = f.read()  
for i in range(5):
    file = open('evil_%d.jpg' % i, 'wb')
    file.write(data[i::5])
    file.close()  
f.close() 

 

下一关:www.pythonchallenge.com/pc/return/disproportional.html

 

需要的用户名密码为:huge(用户名),file(密码)

阅读全文 »

python challenge 13解题总结

python challenge 13 网址:www.pythonchallenge.com/pc/return/disproportional.html

打开网页的源码能够看到<area shape="circle" coords="326,177,45" href="../phonebook.php" />这条信息,于是打开网页www.pythonchallenge.com/pc/phonebook.php,显示如下信息:

<methodResponse><fault><value><struct><member><name>faultCode</name><value><int>105</int></value></member><member><name>faultString</name><value><string>XML error: Invalid document end at line 1, column 1</string></value></member></struct></value></fault></methodResponse>

这里就想到了python的模块xmlrpclib,于是就用

test=xmlrpclib.ServerProxy('http://www.pythonchallenge.com/pc/phonebook.php')

以及print test.system.listMethods()发现了有phote的方法,于是就得出答案了,源代码如下:

test = xmlrpclib.ServerProxy("http://www.pythonchallenge.com/pc/phonebook.php")
ret = test.phone('Bert')   #这里的Bert是上一关的提示信息
print ret

下一关的网址:www.pythonchallenge.com/pc/return/italy.html

 

需要的用户名密码为:huge(用户名),file(密码)

阅读全文 »

python challenge 14解题总结

python challenge 14网址:www.pythonchallenge.com/pc/return/italy.html

根据网页标题的提示:walk around,网页代码的提示:100*100 = (100+99+99+98) + (…,还有那张螺旋状的面包图片,猜测,要把下面那张图(其实这个图是10000*1的,居然能显示成方的)以这种形式展开:

import PIL.Image
def nextpoint(direction,oldpoint):
        if direction==0:
            return oldpoint+1
        elif direction==1:
            return oldpoint+100
        elif direction==2:
            return oldpoint-1
        elif direction==3:
            return oldpoint-100
        else:
            print 'wrong!'
im=PIL.Image.open('wire.png')
newim=PIL.Image.new(im.mode,[100,100])
context=list(im.getdata())
result=[1]*10000
result[0:100]=context[0:100]
p=100
i=1
nextp=0
oldpoint=99
for v in range(99,0,-1):
        for q in range(v,0,-1):
                nextp=nextpoint(i,oldpoint)
                result[nextp]=context[p]
                p=1+p
                oldpoint=nextp
        i=(i+1)%4
        for q in range(v,0,-1):
                nextp=nextpoint(i,oldpoint)
                result[nextp]=context[p]
                p=1+p
                oldpoint=nextp
        i=(i+1)%4        
newim.putdata(result)
newim.save('w2.png')


下一关地址:www.pythonchallenge.com/pc/return/cat.html 页面显示uzi,于是输入网址:www.pythonchallenge.com/pc/return/uzi.html

需要的用户名密码为:huge(用户名),file(密码)

阅读全文 »

python challenge 15解题总结

python challenge 15网址:www.pythonchallenge.com/pc/return/uzi.html

 其实题目的主要意思就是:1**6年 Jan 26的后一天,猜猜这是谁的生日?用google搜搜吧

代码:

import calendar   
print [i for i in range(1006, 2006, 10) if calendar.weekday(i, 1, 1) == 3][-3]  

下一关的网址:www.pythonchallenge.com/pc/return/mozart.html

 

需要的用户名密码为:huge(用户名),file(密码)

阅读全文 »

python challenge 16解题总结

 

python challenge 16网址:www.pythonchallenge.com/pc/return/mozart.html


打开页面源码发现一句提示:let me get this straight,提示说把它弄直,图片里面杂乱无章的点很明显有很多是品红色的短线,把图按行平移,使得红线对齐。

源代码为:

import Image, ImageChops    
image = Image.open("mozart.gif")  
magic = chr(195)  
for y in range(image.size[1]):  
     box = 0, y, image.size[0], y + 1  
     row = image.crop(box)  
     bytes = row.tostring()  
     i = bytes.index(magic)  
     row = ImageChops.offset(row, -i)  
     image.paste(row, box)  
image.save("new.gif")  


于是下一关的网页为:www.pythonchallenge.com/pc/return/romance.html

阅读全文 »

python challenge 17解题总结

 

python challenge 17网址:www.pythonchallenge.com/pc/return/romance.html

这道谜题比较复杂,需要结合前面几个题一起来解,需要python的re, urllib, urllib2, bz2, xmlrpclib  这些模块,首先利用 urllib, urllib2去请求URL,获取一些数据,接着利用bz2模块对数据进行处理,。。。

源代码如下:

import re, urllib, urllib2, bz2, xmlrpclib  
  
# First of all, get the data that is hidden within the "Set-Cookie" headers:  
  
uri = "http://www.pythonchallenge.com/pc/def/linkedlist.php?busynothing=%s"  
nn_rep = re.compile("the next busynothing is (d+)")  
cookie_val = re.compile("info=([^;]+);")  
result = []  
n = "12345"  
  
while True:  
    h = urllib.urlopen(uri % n)  
    next = h.read()  
    cookie = h.info().getheader("Set-Cookie")  
    h.close()  
  
    cval = cookie_val.search(cookie)  
  
    if cookie and cval:  
        result.append(urllib.unquote_plus(cval.group(1)))  
  
    try:  
        n = nn_rep.search(next).group(1)  
    except:  
        break  
  
print bz2.decompress("".join(result)  
  
# Get Leopold's phone numer using the code for level 13:  
  
conn = xmlrpclib.ServerProxy("http://www.pythonchallenge.com/pc/phonebook.php")  
  
print conn.phone("Leopold")  
  
# Now phone Mozart's father and tell him that "the flowers are on their way":  
  
uri = "http://www.pythonchallenge.com/pc/stuff/violin.php"  
msg = "the flowers are on their way"  
req = urllib2.Request(  
    uri, headers = { "Cookie": "info=" + urllib.quote_plus(msg)}  
)  

下一关网址为:www.pythonchallenge.com/pc/return/balloons.html

阅读全文 »

python challenge 18解题总结

 

python challenge 18的网址是:www.pythonchallenge.com/pc/return/balloons.html,打开网页后会出现如下的图片,并且网页源代码会给出提示:can you tell the difference? 仔细对比两个图片会发现这两个图片的亮度显然不同,于是打开www.pythonchallenge.com/pc/return/brightness.html,再仔细看网页源代码,结果发现另外一个提示:maybe consider deltas.gz,于是把deltas.gz给下载下来(www.pythonchallenge.com/pc/return/deltas.gz)。

 

分析下载下来的文件的源代码:

import gzip, difflib  
   
h = gzip.open("deltas.gz")  
d = difflib.Differ()  
  
part_1, part_2 = [], []  
file_1, file_2, file_3 = [], [], []  
  
for line in h:  
    part_1.append(line[0:53])  
    part_2.append(line[56:-1])  
  
h.close()  
  
for line in list(d.compare(part_1, part_2)):  
    if line[0] == "+":  
        file_1.append(line[2:])  
    elif line[0] == "-":  
        file_2.append(line[2:])  
    else:  
        file_3.append(line[2:])  
  
for n, data in enumerate((file_1, file_2, file_3)):  
    temp = []  
  
    for line in data:  
        temp.extend([chr(int(o, 16)) for o in line.strip().split(" ") if o])  
  
    h = open("%s.png" % (n + 1), "wb")  
    h.writelines(temp)  
    h.close()  
print urllib2.urlopen(req).read()  

下一关的网址:www.pythonchallenge.com/pc/hex/bin.html(用户名:butter 密码:fly)

阅读全文 »

python challenge 19解题总结

 python challenge 19网址:www.pythonchallenge.com/pc/hex/bin.html(用户名:butter,密码是fly)。打开网页后出现下面的图片,仔细打开源代码会发现:

一个电子邮件,下载后能弄出音乐,听到sorry。图中显示的印度地图颜色是反的,联想到反转。

除了文件头之外的都前后字节交换,从新的音乐听到idiot,然后过去……

源代码如下:

import base64, wave, array
 
# Input ...
 
h = open("data")
 
a = array.array("c", base64.b64decode(h.read())) a.byteswap() h.close()
 
# ... Processing ...
 
h = wave.open("modified.wav", "wb")
 
h.setnchannels(1) h.setsampwidth(1) h.setframerate(22050)
 
# ... Output h.writeframes(a.tostring()) h.close()

 

 

下一关网址:www.pythonchallenge.com/pc/hex/idiot.html

阅读全文 »