pythonchallenge(29-33)

本文通过一系列复杂的逻辑谜题和图像解析,引导读者探索技术领域的深度。从理解字符编码到解析分形图形,再到利用非传统工具进行图像处理,文章展示了技术挑战的乐趣。最后,通过一系列谜题和游戏,达到了技术探索的高潮。
摘要由CSDN通过智能技术生成
29.  http://www.pythonchallenge.com/pc/ring/guido.html
标题是silence! 图片名称是woisit. 图片有点像一个人。应该是猜一种职业。
注意到,源文件里有大量空格,每行的空格数还不一样。把空格数转换成ascii码再用bz2解码。
import urllib
import bz2
 
content = urllib.urlopen(url).read()
content = content.split( '\n' )[12:]
 
t =  '' .join([chr(len(line))  for  line  in  content])
print bz2.decompress(t)
结果:Isn't it clear? I am yankeedoodle!(yankee doodle一首雄赳赳气昂昂的歌~)

图片似乎没什么信息,还让你放松relax...来到30关也不容易。
下了一个csv文件,是一些数字。
7367个浮点数,*256变成53*139的图片。
import Image
 
imsize = (53,139)
new  = Image. new ( 'L' , imsize, 0)
 
data = open( 'yank.csv' , 'r' ).read().split( ',' )
N = len(data)
for  in  range(N):
     pixel = float(data[i])*256
     print (i%imsize[0], i/imsize[0])
     new .putpixel((i%imsize[0], i/imsize[0]), int(pixel))
new  new .transpose(Image.ROTATE_90)  #图像旋正
new  new .transpose(Image.FLIP_TOP_BOTTOM)
new .show()
得到了一个公式
这图片不好认,还旋了几下才正。n=str(x[i])[5]+str(x[i+1])[5]+str(x[i+2])[6]
如果x[i]是指csv里的浮点数的话。0.82207, 0.91181, 0.88563 则 n为086
data = open( 'yank.csv' , 'r' ).read().split( ',' )
data = map(lambda x: x.strip(), data)
t = [data[i][5]+data[i+1][5]+data[i+2][6]  for  in  range(0,len(data)-2,3)]
print  '' .join([chr(int(i))  for  in  t])
数据读取不熟练...
结果:
So, you found the hidden message.
There is lots of room here for a long message, but we only need very little space to say "look at grandpa", so the rest is just garbage.
VTZ.l'tf*Om@I"p]#R`cWEBZ40ofSC>OZFkRP0\)+b?Ir)S%Jt3f{ei%n2<FErFx~...一堆乱码。

居然grandpa就过了。。。后面的是干嘛?留着以后用?还是garbage(垃圾)?

一堆石头。。题目:where am I?
<!-- short break, this ***REALLY*** has nothing to do with Python -->
和python无关,难道猜测石头的风景区是哪里?
这又是一个找用户名密码的题。google搜图,还真是泰国的一处旅游景点(阿公石), 用户名kohsamui,密码thailand.
(题外话,我用谷歌百度都搜了,谷歌出来阿公石,百度乱七八糟的石头(夹杂一两幅阿公石)。谷歌搜图做得比百度好)
可是,并没有过, That was too easy. You are still on 31...   ti
题目UFOs? 图片名称mandelbrot(分形图形)
利用给定的参数画分形图。(分形图行绘制参考链接  http://old.sebug.net/paper/books/scipydoc/fractal_chaos.html
和原图很相似,有少量像素不一样,差值为正负16. 一共1679个,因式分解23*73(唯一分解),利用正负号不同再构造出一幅图。
import Image  
imgbase = Image.open( 'mandelbrot.gif' )  
img = imgbase.copy()  
left = 0.34  
top = 0.57+0.027  
width = 0.036  
height = 0.027  
max = 128  
diff = []  
for  in  range(imgbase.size[1]):  
     for  in  range(imgbase.size[0]):  
         point0 = complex(left + i*width/imgbase.size[0], top - (1+j)*height/imgbase.size[1])  
         point = 0+0j   
         for  in  range(max):  
             point = point **2 + point0  
             if  point.imag**2+point.real**2>4:  
                 break  
         img.putpixel((i,j),k)  
         if  k!=imgbase.getpixel((i,j)):  
             diff.append(k - imgbase.getpixel((i,j)))  
img.save( 'out31.png' )  
img2 = Image. new ( '1' ,(23,73))  
img2.putdata([i<0  for  in  diff])  
img2.save( 'out31_2.png' )
最后得到一个这个图形
谷歌搜图,arecibo message

提示1.  <!-- you are in level 32 --> (正面图上没有32.所以这里提示,无解题信息)
提示2.  <!-- for warmup.txt --> 
提示3.  Fill in the blanks
题目etch-a-scetch是一种画图共具,详见 https://www.youtube.com/watch?v=nYM__s3R5q0 
一种叫Nonogram的游戏,代码有点长,今天先不写。。

提示1. 
If you are blinded by the light,
 remove its power, with its might.
 Then from the ashes, fair and square,
 another truth at you will glare.
 提示2. beer1.jpg 下载得beer2.png 

结合下载的图片,提示1,应该是对像素做处理。
把较亮的像素移除,然后用剩下的像素(像素总数应该是平方)重新组成一幅新图。
 
最后一关,不着急。先看图片大小138*138 
from PIL import Image  
import math
 
im = Image.open( 'beer2.png' )
print im.size
total = im.size[0] * im.size[1]
histogram = im.histogram()
ashes = total
for  in  range(len(histogram)-1, 0, -1):
     ashes = ashes - histogram[i]
     print histogram[i]
     if  histogram[i] != 0 and math.sqrt(ashes) == int(math.sqrt(ashes)):
         print ashes, i
         break
不断去掉最亮的两个像素值,剩下最亮的打开,其余关掉。再去掉最亮的两个,如此循环……
from PIL import Image  
import math
 
im = Image.open( 'beer2.png' )
im.load()
data = list(im.getdata())  #原始图像像素
ashes = [i  for  in  data  if  i < 193]   #去掉最高两组
 
s = sorted(list(set(ashes)))
for  in  range(len(s)-1, 0, -2):
     
     size = math.sqrt(len(ashes))
     print size
     
     new  = Image. new ( '1' , (int(size),int(size)))  #新建图像
     new .putdata([j==s[i]  for  in  ashes])
     new .save( 'pictures/%d.jpg' %i) #注意,事先的pictures文件夹要建好,python不能自动建文件夹
     ashes = [pixel  for  pixel  in  data  if  pixel < s[i-1]]‘
gremlins。
终于全部过关
还蛮好玩的一个游戏~我会想你的::>_<::
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值