Skip navigation.

Dahema & Gromit

Pearl Harbor sucked and I miss you

Posts tagged with "fun"

Killer Bean Forever

,

Matrix Reloaded 的动画师过去4年以14x7的工作量勤奋制作着Killer Bean Forever,从 Michael Nielsen 的blog看来的。
Killer Bean Forever - Official Trailer - video powered by Metacafe

做个题目吧

,

Smullyan的书 to mock a mockingbird and other logic puzzles 中的一题,我用Cartman替代书中的名字。

Cartman兄弟四人,分别叫Cartman1、Cartman2、Cartman3、Cartman4,他们外表完全一致,特点见下图:



关于什么是(in)accurate,体现在以下问答中:

问:“1+1等于2么?”(要求回答“是”或者“不”)

答:
Cartman1:“是。” (知道正确答案,并且说实话)
Cartman2:“不。” (知道错误答案,并且说实话)
Cartman3:“不。” (知道正确答案,并且说谎)
Cartman4:“是。” (知道错误答案,并且说谎)

Smullyan的题目:你去Cartman兄弟家时,看见一张照片,里面有四兄弟中的一个,如果你分别问Cartman兄弟中的某人:“这是你的照片么?”,三个人回答“不是”,另外一人回答“是”。当你问“你相信这是你的照片么?”,同样是三人回答“不是”,一人回答“是”。

你知道照片里的fat ass是Cartman兄弟中的哪一个么?



(南方公园的图片全部来自网络,文字是我添上的。)

章鱼和鲨鱼


Self-reproducing program

,

打印自身的程序不是什么新闻,但是是很有意思的。当一个程序以自身(这里指源程序)为参数时,可以输出自己,也可以推而广之把源码自身进行各种处理,比如计算源程序文件的md5sum。

想出一个这种程序的过程是很有趣的,恰如Ken Thompson在 Reflections on Trusting Trust 中所言:"If you have never done this, I urge you to try it on your own. The discovery of how to do it is a revelation that far surpasses any benefit obtained by being told how to do it."

这种程序的基本结构分成三部分,如下图所示:


其中部分3是程序,1+2是data,string的内容就是string声明之后的内容。在程序中首先要把部分1作为string输出,然后是string S的内容,其中的escape sequence(转义序列?)要特殊处理,比如\n变为\\n等等。这部分对应上图部分3中的print2(S),即输出data部分,所有string S中的escape sequence要以literal的方式输出,比如\\不能输出为\而要输出为\\。print1(S)是输出程序部分,这时不再需要literal方式输出escape sequence。

下面是个python小程序,先输出自身,再输出源程序的md5sum,目的是表明“输出源程序本身”只是“以源程序本身作为参数”的一个特例。

s="import sys\nimport md5\ns2=\"s=\\\"\"\nfor c in s:\n\tif c == \"\\n\":\n\t\ts2+=\"\\\\n\"\n\telif c == \"\\t\":\n\t\ts2+=\"\\\\t\"\n\telif c == \"\\\"\":\n\t\ts2+=\"\\\\\\\"\"\n\telif c == \"\\\\\":\n\t\ts2+=\"\\\\\\\\\"\n\telse:\n\t\ts2+=c\ns2+=\"\\\"\\n\"\ns2+=s\nprint s2\nsys.stdout.write(\"** md5sum of this source = \"+md5.new(s2+\"\\n\").hexdigest()+\"\\n\")"
import sys
import md5
s2="s=\""
for c in s:
        if c == "\n":
                s2+="\\n"
        elif c == "\t":
                s2+="\\t"
        elif c == "\"":
                s2+="\\\""
        elif c == "\\":
                s2+="\\\\"
        else:
                s2+=c
s2+="\"\n"
s2+=s
print s2
sys.stdout.write("** md5sum of this source = "+md5.new(s2+"\n").hexdigest()+"\n")

点击下载程序,md5sum self.py的结果是:
57b814596d57dc2c503a26b2003fb181  self.py
这和self.py的输出是一致的。

Update:

严格地说,上面程序有点画蛇添足,因为源程序中并不包括md5sum的结果,这里有个稍加修改的程序self2.py,仅输出源程序自身。


充满创造力的达芬奇

, ,

以前看过BBC的一个短系列片,介绍了一些达芬奇的奇思妙想,并拍摄了其中一部分设想的实现,你不得不佩服达芬奇的创造力堪称一绝。

昨天看见有人介绍了达芬奇的机动车,贴上youtube的video,更详细参见http://brunelleschi.imss.fi.it/automobile/data/06_digitale/interattivo.dcr(可用ctrl或者shift配合鼠标键调整)。


Jeff Tupper’s self-referent fact

,

整理电脑桌面,临时存的东西删掉,不然就归档,顺手贴一个Experimental Mathematics In Action中的截图:

Shut up!

,


龙子龙孙书画展

蒋经国书画:




毛新宇博士的真迹: