mazha 的个人资料A New Age照片日志列表更多 工具 帮助
2006/2/16

想继续做 blog search 了~

上回手动做了 300 多,这次怎么也要 3k 么~
 
再说手动也太土了,不过怎么才知道这个人是不是88上的呢 @.@~~
 
谁给点建议吧~
 
 

[PC_13] call him

做 PC 以来最艰苦的一关~
学校里边玩 PC 的人绝大多数止步于 12 关,这下算是个突破了~ \o/~~~
 
描述一下:一个电话拨号盘的图片,中间 '5' 数字上有链接,点过去连到 /phonebook.php,页面显示出 XML 错误  faultCode: 103   faultString: XML error: no element found at line 1
电话图片下面一行字:'phone that evil',这是在页面上看到的,实际源文件里面写的是 phone that <remote /> evil
 
不明就里,不过 title 是 'call him',加上图片电话再加上这个 phonebook,基本想到是要找到那个 'evil' 或他的电话号码。
 
想起上关结尾时留下的小尾巴线索: Bert is the evil ! 试着把 bert 敲入 URL,果然出现 'Yes! Bert is evil!'
于是,解题的关键锁定在如何 call 到 bert,显然他的电话要从 phonebook.php 中得到……
 
尝试着在 phonebook.php 后边加上参数翻来覆去的试 phonebook.php?evil=bert, phonebook.php?remote=bert, phonebook.php?bert .... 出错信息始终没有变过 :(
 
而且我对 http 协议并不熟悉,实在没办法了,去下了个 ethereal,专门监控 http 包,察看包的内容,与此同时,用 python 的 httplib 模块写了些代码做连接测试
 

[code 1]

 
 import httplib
 
 headers = {'Accept': '*/*',
             'Accept-Language': 'zh-cn',
             'Accept-Encoding': 'gzip, deflate',
             'Host': 'www.pythonchallenge.com',
             'Connection': 'Keep-Alive',
             'Authorization': 'Basic aHVnZTpmaWxl'}
 
 body = '<?xml version="1.0" encoding="UTF-8" ?>\
         <remote><evil>bert</evil></remote>'
 
 hc = httplib.HTTPConnection('www.pythonchallenge.com')

 #hc.request('GET', '/pc/phonebook.php', '', headers)
 #hc.request('GET', '/pc/phonebook.php', body, headers)
 hc.request('POST', '/pc/phonebook.php', body, headers)
 
 r = hc.getresponse()
 data = r.read()
 
 print data
 

 
刚开始使用的是 HTTP GET 方法,得到的结果与开始时一样,后来改为 POST,还是说第一行没有找到 element,于是又加了 http body 作为 element,结果不同了!显示的错误信息变成了 faultCode: 1  faultString: Unknown method
虽然还是出错信息,但是至少不再是我看了不下一百遍的那条了。
unknown method? 难道页面一直想要的是一个 method? 突然我脑中想起了另一个模块,xmlrpclib,这个模块前两天为了实现编程连接 space 写 blog 刚好研究过的,是专门用来通过 xml 调用远程方法的,不妨一试
 

[code 2]

 
 import xmlrpclib
 
 sp = xmlrpclib.ServerProxy('http://www.pythonchallenge.com/pc/phonebook.php',
                            allow_none = True )
 
 print sp.system.listMethods()
 

 
当结果输出 ['phone', 'system.listMethods', 'system.methodHelp', 'system.methodSignature', 'system.multicall'] 的时候,我这个激动啊,'phone' !看到这个方法我知道这关我就要过了!
接着查看 phone 方法的说明和参数列表

[code 3]

 
 print sp.system.methodHelp('phone') 
 print sp.system.methodSignature('phone') 
 

 
得到输出: 
Returns the phone of a person
[['string', 'string']]
 
哇哈哈,最后

[code 4]

 
 print sp.phone('Bert') 
 

 
得到电话: 555-ITALY
输入 url,找不到页面,去掉 555- 显示: SMALL letters. -_-!
最后一次 italy, 耶!看到了朝思暮想的第 14 关!
 
2006/2/13

[PC_12] dealing evil

又是颇有难度的一关,图片是一个人在发纸牌,像赌场的那种,纸牌分成了四五堆~
源文件里什么都没有,一时没了着落~
最后线索来源于图片的 url  <img src="evil1.jpg">,既然取名 evil1.jpg,很自然的想到还会有 evil2.jpg,试一下果然有这个图片,上面歪歪扭扭的手写体写着 "not jpg , _.gfx" 看着像 dying message,巨寒~
后缀名改为 .gfx 后得到文件 evil2.gfx。
 
拿到文件后继续迷茫,上网四处艘 gfx 文件是什么格式,没有一个符合的~~
用 uedit 打开,看出些许端倪,这时想起网页上的图片,幡然醒悟,于是每隔 5 个字节存到一个文件中,最终根据获得的文件的 Magic Number 判断出文件类型,打开后信息一目了然~
 

[code]

 
 import os
 
 gfx = file( 'evil2.gfx', 'rb' )
 a = os.path.getsize('evil2.gfx')
 
 rslt0 = file( '0', 'wb' )
 rslt1 = file( '1', 'wb' )
 rslt2 = file( '2', 'wb' )
 rslt3 = file( '3', 'wb' )
 rslt4 = file( '4', 'wb' )
 
 for i in range(0, a, 5 ) :
     rslt0.write(gfx.read(1))
     rslt1.write(gfx.read(1))
     rslt2.write(gfx.read(1))
     rslt3.write(gfx.read(1))
     rslt4.write(gfx.read(1))
 
 rslt0.close()
 rslt1.close()
 rslt2.close()
 rslt3.close()
 rslt4.close()
 

 
代码有些冗繁,五张图片 0,4 为 jpg 格式;1,3 为 png 格式;2 为 gif 格式~
0 到 5 上面分别歪歪扭扭的写着 dis,pro,port,ional,ity 其中 ity 又被划掉了 -.-~
(第三张我得到的文件打开时报错说有损坏,只显示了一半,不过足够分辨出字母了,重试了几次还是一样,不知道问什么:(~ )
 
连起来: disproportional
 
 
PS: 还有一些细节,试过 evil2.jpg 后当然不会就此打住,接着试了 evil3.jpg,evil4.jpg,evil5.jpg ...
得到的图片都是说回去吧,后面没有啦之类的,而最后一个页面是一行文字: Bert is the evil....
 

[PC_11] odd even

网格状的图片,无提示,
不过 title 已经足够了,按奇偶把像素分开么,
写代码还是花了些功夫,对 PIL 不熟悉:(
 

[code]

 
 import Image
 import ImageDraw
 
 pic = Image.open('cave.jpg')
 im1 = Image.new("RGB", (640, 480), 0)
 im2 = Image.new("RGB", (640, 480), 0)
 
 for i in range(0, 640 * 480):
     if ( i%640 + i/640 ) % 2:
         im1.putpixel(((i/2)%320, i/640 ), pic.getpixel((i%640, i/640)))
     else :
         im2.putpixel(((i/2)%320, i/640 ), pic.getpixel((i%640, i/640)))
 
 im1.save('PC_11_1.png')
 im2.save('PC_11_2.png')
 

 
得到两张图片,一张没什么东西,另一张血红背景,右上角四个暗黄色的字母 —— evil
 

[PC_10] what are you looking at?

一进去就看到上关画出来那头牛的真面目了,满帅的哈哈~~
然后一个问题: len(a[30])=? 源文件什么提示都没有~
点一下牛图片有个txt文件: a = [1, 11, 21, 1211, 111221,  是道数列题。
我现在当然知道是怎么做,可当时和 RhythmBox 刚开始做这题的时候为了找 a 的规律冥思苦想了好几天呢~
后来公务员考试期间拿这道题考 glitter 和 tomcat ,得知这个竟是 google 的一道面试题,~>.<~ 看来牟希望去 google 了么~~~
 
呵呵,还有,当时寝室都在准备考研,为了不把精力浪费在 PythonChallenge 上,寝室里一度发誓不写python的,不过最后到底抵挡不住 python challenge 的诱惑,于是我用 c 写了程序过了这关~
 
那好吧,现在把 python 的代码补上~~ :)

[code]

 
 a = ['1']
 ss = ''
 
 for k in range( 31 ):
     s = a[-1] + '$'
     c = s[0]
     count = 0
     for j in range( len(s) ):
         if s[j] == c :
             count += 1
         else :
             ss = ss + str( count ) + c
             c = s[j]
             count = 1
     a.append( ss )
     ss = ''
 
 print len(a[30])
 

 
结果:5808
2006/2/12

[PC_09] connect the dots

页面上一棵树的图片,书的轮廓上分布着一些黑点,源文件中提示:
first+second=?
 
first:
146,399,163,403,170,393,169,391,166,386,170,381,170,371,170,355,169,346,167,335,170,329,170,320,170,
310,171,301,173,290,178,289,182,287,188,286,190,286,192,291,194,296,195,305,194,307,191,312,190,316,
……
second:
156,141,165,135,169,131,176,130,187,134,191,140,191,146,186,150,179,155,175,157,168,157,163,157,159,
157,158,164,159,175,159,181,157,191,154,197,153,205,153,210,152,212,147,215,146,218,143,220,132,220,
……
 
于是每两个连续的数为一组,作为一个点的横纵坐标,连起来之后就是两幅图像
两幅图像叠起来就知道是什么了~~
没有 PIL 还真做不了呢,当然你也可以字符打点打出来~~
看着像不像就不知道了~~~
 

[code]

 
 import Image
 import ImageDraw
 
 im = Image.new("RGBA", (600, 600), (0,0,0,255))
 draw = ImageDraw.Draw(im)
 
 twolist = [first, second]
 for c in twolist:
     for i in range( 0, len(c) - 2, 2 ):
         draw.line((c[i], c[i+1], c[i+2], c[i+3]), 255)
 del draw
 im.save('PIC_09.jpg')
 

 
文档上说 save 时可以识别文件名,并保存成相应的文件格式的,真牛b~~
打开 pic_09.jpg 看到一头红牛(如果保存为.png的话是头白牛,hoho)~~
试试 cow 敲进去,看到一行:hmm. it's a male.
哈,是呢,人家是长角的~~~
 
答案就是: BULL !~
 

[PC_08] working hard?

页面图片是一只勤劳的小蜜蜂, 下面还有一句 what's the missing link?
点一下蜜蜂果然有个 hyper link,但是需要有账号密码认证的 :(
 
源文件拿来看,哦,有了~
<!--
un: 'BZh91AY&SYA\xaf\x82\r\x00\x00\x01\x01\x80\x02\xc0\x02\x00 \x00!\x9ah3M\x07<]\xc9\x14\xe1BA\x06\xbe\x084'
pw: 'BZh91AY&SY\x94$|\x0e\x00\x00\x00\x81\x00\x03$ \x00!\x9ah3M\x13<]\xc9\x14\xe1BBP\x91\xf08'
-->
 
虽然知道 un 肯定是 user name, pw 肯定是 password ~
可就只给你这两行字也够你琢磨一阵子的,还好我知道它们是啥意思~
据说 bzip 压缩的压缩文件都是 BZ 开头的,嗯~~~
 
又一次领略到 python 库用起来真简单,回忆用 c++ 写 rar 的解压程序时候用了一天多~~ T.T
 

[code]

 
 import bz2
 
 un = 'BZh91AY&SYA\xaf\x82\r\x00\x00\x01\x01\x80\x02\xc0\x02\x00 \x00!\x9ah3M\x07<]\xc9\x14\xe1BA\x06\xbe\x084'
 pw = 'BZh91AY&SY\x94$|\x0e\x00\x00\x00\x81\x00\x03$ \x00!\x9ah3M\x13<]\xc9\x14\xe1BBP\x91\xf08'
 
 print 'username : ' + bz2.decompress( un )
 print 'password : ' + bz2.decompress( pw )
 

 
huge  &  file  ,搞定~
 

[PC_07] smarty

玩物丧志,几天电子琴玩的很 high,差点忘了 python 了~~
 
ms当年第一次看人玩 pythonchallenge 就是从第七关开始,所以知道是什么套路,只要看看相关的模块就行了
 
这关网页上一张彩色图片,图片上有不同灰度的一条灰色方块,读一下方块的色深值,转换成 ASCII 就可以了~
 
因为想尽量用标准库来做,于是在 library reference 里翻啊翻,看到一个 imgfile 模块,虽然简陋(只能处理 RGB 图像,而且是把图像文件存到一个 string 里),不过这关用用应该也够了,谁知用了就说找不到模块,气得我直接去翻文件夹还是没有,文档上明明说是 build-in module 么~ @.@
 
无奈还是去下载了 python image library,打出来的结果是
"smart guy, you made it. the next level is [105, 110, 116, 101, 103, 114, 105, 116, 121]"
 
靠,居然不直接告诉你,还要再转一遍 ASCII,简直多此一举么
如法炮制,本关结果 integrity
 
 

[code]

 
 import Image
 
 im = Image.open( 'oxygen.png', 'r' )
 
 for i in range(1, 607, 7):
     sys.stdout.write((lambda (a,b,c,d) : chr(a)) ( im.getpixel((i, 46)) ))
 
 for t in [105, 110, 116, 101, 103, 114, 105, 116, 121]:
     sys.stdout.write(chr(t))
 

 
PS: 最后发现那个 imgfile 模块 "It is available only on Silicon Graphics machines"
-.- 那好吧... 反正我做完了~~~  \o/~~~
 

幸福在哪里?

早饭的时候在新闻频道看到《纪事》栏目做的一期节目,幸福在哪里
 
只简单的两个问题:
 ——你幸福吗?
 ——你认为幸福是什么?
 
记者扛着摄像机走遍了全国来寻找答案
工人,司机,学生,情侣,青海寺庙中年迈的僧人,正在农村操办婚事的青年,父亲去世母亲出走帮爷爷送牛奶的小女孩……
几乎所有的人都说自己是幸福的,然而什么是幸福,有一半的人回答 不知道
 
幸福是什么?在哪里?
 
一个司机说:幸福么,我开车赚了钱就很幸福,赚不到钱就不幸福
幸福是对物质的占有?
 
看到那个送牛奶的小女孩时,妈很同情她的身世,可是她分明灿烂地笑着,那笑容很幸福
幸福是对生活的习惯?
 
青海一座寺院中的活佛说:出家人私心杂念较少,其他人幸福
幸福是对拥有的满足?
 
……
 
我猜,幸福是一种对比,
别人与自己的对比,过去与现在的对比,梦想与现实的对比,需要与拥有的对比,付出与收获的对比
每个人心中都有一杆天平,幸福与不幸就摇摆在这几对对比之中,
 
想要获得幸福吗?调整你的天平吧
 
 
 
 
 
 
 
我幸福吗?
 
2006/2/10

半年多过去了 ...

生活还是一样么?
未来是什么颜色的?
虽然很努力,但是能改变多少呢?
命运一抬手,轻松的把我抛到另一个境况,我要适应吧,我会适应吗?
终归没有破釜沉舟的魄力和勇气呃~
可是平庸太让人沮丧了,一点点来吧
狗狗说成熟是有肚量去容忍不能改变的事情,有勇气去改变可以改变的事情,有智慧去区分这两类事情
我差得远呢……
 
 
 
 
 
 
 
 
还有的休息么?
 

RPG role characteristic

mazha的個人資料

攻擊
75
防禦
75
敏捷
88
耐力
84
意志
87
智商
68
種族
人類
職業
賢者
屬性
 
 
不就是谦虚了一下数学么,智商居然只有 68 ~
哼~~
2006/2/9

MSN Spaces MetaWeblog API

今天无所事事,研究了一下 MSN 的 MetaWeblog API,就是一套基于 XML-RPC 协议的远程方法调用接口~
不算是新技术了,RPC 和 XML 两种技术很自然的结合~~
 
主要关心的还是它到底给出了那些接口,结果比较令人失望~
明确给出的只有 8 个最基本的方法,不过的确在 spaces 上也做不了什么其他的事了~
 
打算一会写点代码测试一下,说不定会有一些新发现和惊喜~
比如支持的 HTML tag 比在线编辑多几个什么的,YY ing~~
 
看了 M$ 官方的 demo 代码,主要用的就是 CookComputing.XmlRpc 这个 namespace ,代码虽然很短,但是基本功能都介绍了,因为本来就没什么内容么~~
python 2.0 还是 2.2 以后有一个 module  xmlrpclib,也是专门干这个的,一会去试用一下~
 
[ 附:MSN Spaces XmlRpc 主要参数 ]

  service endpoint:  https://storage.msn.com/storageservice/MetaWeblog.rpc
    date-time type:  datetime.iso8601 / UTC
          encoding:  UTF-8
transport protocol:  HTTPS/SSL
          username:  <the name of the MSN Space>
          password:  <the user’s secret word>
Methods:
metaWeblog.newPost              posts a new entry to a blog.
metaWeblog.editPost             edits an existing entry on a blog.
metaWeblog.getPost              returns a specific entry from a blog.
metaWeblog.getCategories        returns the list of categories that have been used in the blog.
metaWeblog.getRecentPosts       returns the most recent draft and non-draft blog posts in descending
                                order by publish date.
blogger.deletePost              deletes a post from the blog.
blogger.getUsersBlogs           returns information about the user's space.
blogger.getUserInfo             returns basic user information, such as name, email address, and userid.
 
 
2006/2/7

郁闷事~~

1. 没看到下大雪。虽然一下火车就看到银装素裹的世界,但是到现在还没有赶上一场爽快的雪,只有一天早上朦胧的看到窗外飘着丁点大的雪粉,起床后连丁点都没了,倒是新闻上杭州南京大雪下得不亦乐乎,地磁极果然要移动了么?~
 
2. DC 不听话。或者电脑不听话,反正我无论如何也没法把 CF 卡上的照片导到电脑上。唉,匆忙回家,没带读卡器没带连接线,一次同学会就照得满满了,好不容易过了初五去电脑城 5 块钱买了根 USB 线,回来却怎么连也找不到设备,系统服务能开得都给它开了,没辙了~
 
3. 进校代理挂了。刚回来的几天用的好好的,还在窃喜有网络在家在杭一个样,隔三差五的逛逛 ftp,拖拖软件,找找电子书,谁知道刚过了年就挂了 ~>.<~ 校内没人维护啊,人不在果然还是有区别的,算了,反正最开始就做了没代理的打算了么~
 
4. 差不多行了……
 
 

买了个电子琴~

昨天陪妈逛街,本来打算买些衣服,可是逛了一下午啥衣服都没买,北方冬天没有我喜欢的浅色衣裤~ :(
在联华超市的玩具柜台看到一个电子琴,弹了几下很有趣,于是对比了几种,买了一个回来~~ \o/~~~
 
555,可惜我是音乐盲,连 do ri mi 都不知道是哪个键的~ -.-
乱弹啊乱弹~~
 
PS: 今天妈去串门,拎回来一把吉他,原来是表弟的,现在他不玩了,汗汗,我没音乐细胞的哇~~~

[PC_06] now there are pairs

原文件中的第一句便是 <html> <!-- <-- zip -->
自然的把 url 中 channel.html 换成 channel.zip 得到一个 zip 文件~
 
先用 winrar 察看了一下,其中 910 个 txt 文件,发现 readme.txt,读之:
 

[readme.txt]

 
 welcome to my zipped list.
 
 hint1: start from 90052
 hint2: answer is inside the zip
 

 
和第 4 关一样的规则哈~ : )
好歹这次从本地读,不会那么痛苦了,从上次的标程中学了些技巧,代码好看些了~
 

[code]

 
 import re
 import zipfile
 
 z = zipfile.ZipFile( 'channel.zip', 'r' )
 r = re.compile( ' (\d*)$' )
 nothing = 90052
 
 for i in range( 1000 ):
     str = z.read( '%s.txt' % nothing )
     rslt = r.findall( str )
     try:
         nothing = int( rslt[0] )
     except:
         print '%s.txt' % nothing + ' : ' + str
         break;
 

 
输出结果:  46145.txt : Collect the comments.
噢,那好吧,找 comments
>>> print z.comment 发现压缩包没有注释,顿时傻眼~
又用 winrar 仔细检查了一下,没找到
再用 uedit 打开压缩包,还是没什么发现
思考半天无果,rhythm 提示说每个文件有各自的注释的,再翻文档,噢,值得一试~~
修改了一下代码:
 

[code]

 
 import zipfile
 import re
 
 z = zipfile.ZipFile( 'channel.zip', 'r' )
 r = re.compile( ' (\d*)$' )
 nothing = 90052
 cm = ''
 
 for i in range( 1000 ):
     str = z.read( '%s.txt' % nothing )
     rslt = r.findall( str )
     cm += z.getinfo( '%s.txt' % nothing ).comment
     
     try:
         nothing = int( rslt[0] )
     except:
         break;
  print cm
 

 
输出文件很 pp~
 

[output]

 
 ****************************************************************
 ****************************************************************
 **                                                            **
 **   OO    OO    XX      YYYY    GG    GG  EEEEEE NN      NN  **
 **   OO    OO  XXXXXX   YYYYYY   GG   GG   EEEEEE  NN    NN   **
 **   OO    OO XXX  XXX YYY   YY  GG GG     EE       NN  NN    **
 **   OOOOOOOO XX    XX YY        GGG       EEEEE     NNNN     **
 **   OOOOOOOO XX    XX YY        GGG       EEEEE      NN      **
 **   OO    OO XXX  XXX YYY   YY  GG GG     EE         NN      **
 **   OO    OO  XXXXXX   YYYYYY   GG   GG   EEEEEE     NN      **
 **   OO    OO    XX      YYYY    GG    GG  EEEEEE     NN      **
 **                                                            **
 ****************************************************************
  **************************************************************
 

 
敲入 hockey.html 得到:
it's in the air. look at the letters.
 
不用多想了, OXYGEN !
2006/2/6

[PC_05] peak hell

页面上只写着 "pronounce it",源文件中有提示"peak hell sounds familiar ?",我单词量贫乏于是大感头痛,只好打开金山词霸,从 p 开始翻发音近似的,估计是 pe 或 pi 开头发音有'k'而且有可能含有 L 的,还算幸运,试了 pecul,pekoe,pexol,pickel 等词后,成功地找到了 pickle,敲入 url ,看到 yes! pickle!
虽然找到了这个关键字,可还是一头雾水,于是就把 pickel 的同义词又试了一遍,连 salt 这样的词都试了,结果当然是一无所获 :(
[2006-1-31 4:11:01]
 
============================================================
 
在读 python library reference 的时候看到了 pickle 库,心中豁然开朗,原来是要用它!花了一天把这个库研究了一遍,原来是用来对象序列化的,可是拿什么东西来 pickle 或 unpickle 呀~
[2006-2-2 00:00:00]
 
============================================================
 
过年诸事繁杂,接连串了几天亲戚,加上同学会,没时间来玩
问了一下 rhythm,说有一个输入文件,赶紧再检查一边源文件,果然里面一行 <peakhell src="banner.p"/> 被窝当作垃圾 tag 无视掉了,猪头啊猪头~~
拿到 banner.p 后发现是个 pickled 对象,Unpickler.load 解出来,是一个 list,这里又画了些脑筋,最后关头终于发现奥秘,list 中的每个子 list 为一行,将子 list 的 tuple (a, b) 中 a 打印 b 次组成一幅图案。。。
 

[code]

 
 import pickle
 import sys
 
 o = pickle.Unpickler( file("banner.p") ).load()
 
 for x in o:
     for (a, b) in x:
         sys.stdout.write( a * b )
     print ''
 

 

[output]

 
                                                                                                
               #####                                                                      ##### 
                ####                                                                       #### 
                ####                                                                       #### 
                ####                                                                       #### 
                ####                                                                       #### 
                ####                                                                       #### 
                ####                                                                       #### 
                ####                                                                       #### 
       ###      ####   ###         ###       #####   ###    #####   ###          ###       #### 
    ###   ##    #### #######     ##  ###      #### #######   #### #######     ###  ###     #### 
   ###     ###  #####    ####   ###   ####    #####    ####  #####    ####   ###     ###   #### 
  ###           ####     ####   ###    ###    ####     ####  ####     ####  ###      ####  #### 
  ###           ####     ####          ###    ####     ####  ####     ####  ###       ###  #### 
 ####           ####     ####     ##   ###    ####     ####  ####     #### ####       ###  #### 
 ####           ####     ####   ##########    ####     ####  ####     #### ##############  #### 
 ####           ####     ####  ###    ####    ####     ####  ####     #### ####            #### 
 ####           ####     #### ####     ###    ####     ####  ####     #### ####            #### 
  ###           ####     #### ####     ###    ####     ####  ####     ####  ###            #### 
   ###      ##  ####     ####  ###    ####    ####     ####  ####     ####   ###      ##   #### 
    ###    ##   ####     ####   ###########   ####     ####  ####     ####    ###    ##    #### 
       ###     ######    #####    ##    #### ######    ###########    #####      ###      ######
                                                                                                
 

 

找到 channel, 可喜可贺~

2006/2/4

初中同学聚会~

说起来初中毕业之后,和原来同学联系的就不很多了~
相识10年,离别8年,再见面时又熟悉又陌生,可相聚时无拘无束的感觉一点都没变,总的来说各同学读书的还在读书,工作的早已工作,结婚的不多,有小孩的还未出现~
坤和贝贝十年之恋始终在一起,郎才女貌令人羡慕;麒大班长英姿依旧,举手投足尽显伟人风采,让人相形见绌;超越兄弟掌管家族企业,对初中同学情谊记挂尤深;若谷直攻硕博,依然学海遨游;天祥人俊如龙,事业有成,在哈市已然小有名气;宇一表人才,内外兼修,成为人民警察新鲜血液;子洋是我毕业后最想念的人之一,看到他就想起那时一起玩闹,一起闯祸的情形;烨变化颇大,初见简直没出来,身子比那时瘦了三分之一;而诗博和鑫倒是身形一如当年,看到倍感亲切;春阳仿佛格外激动,尤其酒过三巡后动情之致,喜而泣言兄弟情谊;磊说可能来沪杭一带工作,这下相见机会多多;志宇,启龙和以前没大变化;女生们都比印象中的漂亮多了,后悔为啥当时没发现呢~@.@~
好像大学毕业班搓也没喝下这么多酒,啤酒白酒一轮一轮的上,居然没有醉倒,K歌结束回到家才开始觉得有点头痛,躺在床上欣然睡去,一觉醒来意犹未尽~
找回老朋友的感觉真好~
2006/1/31

[PC_04] follow the chain

第三关花了我一天多...
终于从字母缝里发现了 linkedlist, 输进去得到一行 linkedlist.php
呦,换动态网页了噢~
 
嗯,这次的图片有链接了,源码中的提示说" urllib may help. don't try ALL nothings, since it will never end. ~300 times is enough. "
点下图片 url 转到 http://www.pythonchallenge.com/pc/def/linkedlist.php?nothing=12345
页面显示  and the next nothing is 32302
综合一下提示和 Title ,好歹知道要干嘛了...
[2006-1-26 20:15:02]

 

==========================================================

这几天过年被迫串门,都没时间玩 PC 了 : (
继续继续~~

这关思路很简单,只要 "follow the url chain" 就可以了~
很快写出代码,发现网络状况是个问题 -..-'!
每次最多也只能走出 40 多步,而且速度 "那是相~~当~~慢~~" 了,没办法哎,只好每次跑50个,按一下 F9,隔个十来分钟再按一下这样...

[code]

 
 import urllib
 
 url = "http://www.pythonchallenge.com/pc/def/linkedlist.php?%s"
 
 nothing = history[-1]
 for i in range(50):
     next = urllib.urlencode( {'nothing': nothing} )
     nothing = int( urllib.urlopen( url % next ).read()[-5:] )
     history.append( nothing )
 

 

由于每页获得的信息格式都一样,我就偷懒的只读最后 5 个字节转成 int~
幸好 nothing 基本都是 5 位的,一少部分是 4 位,中间只遇到过一次 3 位的,导致程序出错,手动恢复了一下,也没改~
读到 200 多条( nothing=92118 )的时候遇到一个页面,页面信息和以前不同:Yes. Divide by two and keep going.
觉得很 ft, 算出来,继续,又过了十来页就结束了,最后一个 nothing=65667 最后一个页面上写着 peak.html

 

嗯,胜利~  \o/~~~

code on spaces

经常要把代码贴到 space 上,总是手工换字体调颜色加边框太麻烦了~
写了段代码来把代码格式化一下,这样直接贴 HTML 就可以有下面的效果了~

PS: 总算找到一款等宽字体,前面贴的代码难看死了 -.-


 

[code]

 
 html_pre = '<P>[code]</P>\n<P style="BORDER-RIGHT: #000000 1px dashed; \
 BORDER-TOP: #000000 1px dashed; BORDER-LEFT: #000000 1px dashed; \
 BORDER-BOTTOM: #000000 1px dashed; BACKGROUND-COLOR: #ebf3f2">\n<FONT \
 face="Courier New, Courier, Monospace" color=#000000>&nbsp;<BR>'
 
 infile = file( 'in', 'rU' )
 outfile = file( 'out', 'w+' )
 
 lst = infile.readlines()
 outfile.write( html_pre + '\n' )
 
 for str in lst:
     str = str.replace( '\n', '' )
     str = str.replace( '&', '&amp;' )
     str = str.replace( '<', '&lt;' )
     str = str.replace( '>', '&gt;' )
     str = str.replace( '\"', '&quot;' )
     str = str.replace( ' ', '&nbsp;' )
     outfile.write( '&nbsp;' + str + '<BR>\n' )
 
 outfile.write( '&nbsp;\n</FONT></P>' )
 
 infile.close()
 outfile.close()
 

2006/1/29

除夕飘渺抢楼

看到 zjuonline 的抢楼公告,就想去玩玩~
下午 c++ 写了几小时 winsock ,总算登陆发贴一般操作没问题了,
可是把想要发贴时间精确到88时间的秒级以上还是搞不定,
没办法获得主机时间,只想了两个折衷方案:
1)把自己机器时间设置的和88主机尽量一致,这个多试几次能近似到秒,优点是不受网络条件限制,缺点是如果主机时间临时调整的话就没法一致了。
2)想知道时间的时候就发一贴,再去读帖子里的时间,这种方法优缺点刚好与上面的对调,网络的延时对获取的时间精确度影响很大。
我最终用的是第二种,虽然比第一种有些麻烦,但网络条件好的话能比第一种更精确 ...
另外系统有发贴时间限制,一次最多6片帖子,这个是硬限制了,除非用很多线程 ~
可 c++ 的多线程太麻烦,有点后悔没用 java 写 : (
 
写好之后想想只做到这样的话到最后还是只能靠碰运气,就有点不想去玩了~
然后在 test 板看到 ob 也在测试程序,居然上了十几个mj -.- 我从来没想过给 mj 抢浮云~
一秒之内发贴几十篇,真狠嘞~~
 除他之外还有好多好多人,用脚本的用脚本,用快捷键的用快捷键,霎时间 test 板一片喧嚣~
心里算算这样的形势下一个 id 抢到整的数学期望也太低了,遂决定放弃,我从来不喜欢买彩票的~
 
0点将至时果然热闹非凡,一秒钟内至少出现几屏帖子,服务器没有崩溃或出现严重bug,顺利通过此次压力测试,让人感到欣慰。瞬时数据不知道主机有没有纪录,很难得的资料啊。