May 6

    大家也许想过,如果玩家足够牛 B 的话,俄罗斯方块游戏是不是永远也玩不死呢?不是的。我曾经在这里介绍过,理论上说,俄罗斯方块游戏是不能永无止境地玩下去的,总有一个时候你会死掉。事实上,如果允许电脑不随机出牌,可以有意为难你的话,电脑可以利用一个简单的算法迅速把你整死。倘若电脑真的能故意陷害你,玩俄罗斯方块会是什么样的呢?
    今天,我还真找到了这么一个在线俄罗斯方块游戏 HATETRIS 。在这个游戏中,下一个方块并不是随机给的,游戏将用一套确定性算法精心为你挑选一个对你最不利的方块,让你感受一下想要什么偏没有什么的痛苦。毫不夸张地说,在这个游戏中,即使想消掉一行也是一件很困难的事。
    游戏是用 JavaScript 写的,你可以在下面这个框架中点 start new game 直接开始游戏。游戏没有重力因素(方块不会自动下落),这可以给你充分长的思考时间。技术细节和高分记录请移步这里
    想让俄罗斯方块更变态一些,方法不止一种。如果喜欢这个游戏,欢迎挑战我自己原创的变态俄罗斯方块 PiTetris

查看更多 »

Mar 14

    早上好!今天是 3 月 14 日,一年一度的圆周率日。为了和大家庆祝这个日子,我下载了一个 JavaScript 俄罗斯方块游戏 Js Tetris 的源代码,并且小小地修改了一下。那 7 种四联骨牌已经不复存在了,你将看到圆周率中的数字一个接一个地依次落下。这恐怕有希望成为史上最变态的俄罗斯方块了吧。
    游戏改造完毕后,我自己居然沉迷了好久。把积木换成数字后游戏变得不是一般的困难,有很多小技巧有待大家慢慢去摸索。我个人的最好成绩是第 32 位。你呢?


 

Apr 1

    在数学研究中,我们经常需要寻找一个命题的充分条件。有时候,我们在解题过程中会不自觉地思考结论的充分条件。例如,等底等高便是两个三角形面积相等的充分条件,这就为我们证明三角形面积相等指明了一条道路,接下来我们只需要说明那两个三角形的确是等底等高的就行了。又如,“任意顶点的度数大于等于n/2”是“无向图存在Hamilton回路”的充分条件,它经常被用来说明一个图有Hamilton回路。不过,与寻找必要条件不同的是,寻找一个命题“可以由什么推出来”是一个逆向思维,构造一个充分条件并不容易。有没有一种寻找充分条件的系统方法呢?我最近几天加班加点地研究,终于完成了一个充分条件分析器。你可以在输入框中属于一个与变量x相关的命题,系统将自动给出一个命题的充分条件。这个系统虽然是测试版,但它已经十分强大了。它不仅支持三角函数、对数函数、指数函数、阶乘等各类函数,还支持极限、微分、积分运算,甚至能够处理包括中文在内的自然语言。如果你不知道该输入什么,你可以先点击下面的几个样例试一试。

Example 1   Example 2   Example 3   Example 4   Example 5

Mar 22

Dec 1

    我们之前已经见过了正则表达式的一些很特殊的用法。这里我们再来看一个:用正则表达式判断数的整除性。例如,下面这个表达式可以匹配01串S当且仅当S是一个可以被3整除的二进制数。

^1((10*1)|(01*0))*10*$

    如果你不信的话,不妨把下面这段代码粘贴进浏览器的地址栏,然后回车运行一下:

javascript:alert(/^1((10*1)|(01*0))*10*$/.test("1000000100"))

    被test的是516的二进制表达。516可以被3整除,因此程序返回true。你可以自己把1000000100换成其它的二进制数试试。
    但是呢,从这个正则表达式里我们竟看不出任何端倪。奇怪了,为什么这个正则表达式可以用于判断整除性?能被3整除的二进制数究竟有何规律?

查看更多 »

Mar 23

    今天又学到一个牛B东西。你相信吗?正则表达式竟然可以用来判定素数,甚至可以用来解方程!下面这段正则表达式可以用来判断,一个字符串的长度是否为合数(假设这个字符串里全是字符'1'):
^1?$|^(11+?)\1+$
    不信的话,把下面这段代码复制到你浏览器的地址栏里运行一下,True表示这个数为合数,False表示这个数为素数:

javascript:var st="1";for(var i=2;i<100;i++)document.write(i," ",/^1?$|^(11+?)\1+$/.test(st=st+"1"),"<br/>");document.close();

    其实,它的原理很简单。加号表示匹配一次或多次(加上一个问号表示非贪婪模式),\1表示引用括号里的内容,头尾的^和$则避免了部分匹配的情况。这样,^(11+?)相当于枚举除数大小,而\1+$则用于检验整个字符串是否能按此大小恰好分完。如果除得尽,则匹配成功,字符串长度为合数。另外,前面的^1?$只是为了处理n=0或n=1时的特殊情况,而符号|则表示“或者”的意思。

    采用同样的方法,我们还可以想出正则表达式其它一些类似的用途。比如,我们可以用这个正则表达式检查方程11x + 2y + 5z = 115是否有自然数解:
^(.*)\1{10}(.*)\2{1}(.*)\3{4}$
    正则表达式中,{x}表示和前面的内容匹配x次。只要用这个表达式去检测一个有115个字符的字符串,匹配成功则表示有自然数解。它的原理和上面的基本一样,我就不再重复了。

参考资料:http://blog.stevenlevithan.com/archives/algebra-with-regexes

Jun 9

    近来可能有人需要这个,我在这里简单说一下。

    我没有找到好的同学录服务提供商,基本上都是些又打广告又骗钱的地方,并且缺乏web 2.0的基本元素。相比之下,可能有的同学会选择自己架设私人单班同学录,这样感觉更自由一些。很可惜,我也没有找到比较好的asp同学录源码,不见任何web 2.0不说,代码奇丑无比。最终我选择了才阿ASP同学录v5.3免费版,因为关键字“asp同学录”在搜索引擎里排第一的就是它。
    虽然代码非常丑,但使用起来没有发现任何后台上的问题。一个比较麻烦的前台问题是,部分页面不支持FireFox。下面是一些需要修改的地方,修改之后该asp程序基本上就可以在FireFox上使用了。

    首先是论坛显示页面严重错误。用FireFox浏览这里你会发现论坛页面的排版惨不忍睹。原因出在代码的表格宽度上,你需要改动两个文件共四处位置。删掉voteview.asp的323行和441行的width="100%",再删掉talkview.asp的318行和366行的width="100%",FireFox浏览就正常了。
    还有,部分页面的提交按钮无效。这是因为FireFox不允许JavaScript再次定义function window.onload()。一个解决方法是把函数内容放在<body onload="">里。这个问题涉及四个文件,分别是reg_fill.asp、umod.asp、talkpub.asp和talkvote.asp。删掉这四个文件中的window.onload函数,前两个文件中的<body>改成<body onload="facesel();">,后两个文件中的<body>改成<body onload="showfj();">。至此,除了无鼠标悬停效果(影响不大)外,FireFox基本上可以浏览了。

    另外,这个asp程序的安全问题很严重,建议大家更改数据库位置(同时需要修改in_conn_db.asp文件)。更好的办法是把数据库后缀名改为.asp并插入一个防下载表。网上相关的教程很多,这里不具体说了。
    最后,可能你不希望来一大帮蜘蛛把你们班的私人信息抓个遍。写一个robots.txt是个不错的方法。

    2007.06.11 发现并修复一个新问题:和PJBlog发生冲突(也有可能与其它同一空间的asp程序发生冲突)。具体表现为时间显示混乱,日和月数字对调。这个问题产生的原因是PJBlog定义了Session.LCID,而这个同学录没有,因此访问了同一域名下的Blog后再回到同学录就出错了。解决方法是更改同学录的in_conn.asp文件,在Session.CodePage=936下面加上Session.LCID=2052。

    以后若发现还有其它问题我将在这里更新。

Matrix67原创
转贴请注明出处

May 3


    和大家一样,我也是一个G饭,将百度设为默认搜索引擎的唯一一个原因仅仅是上网看到了不认识的单词后,鼠标选中一拖(用了Drag de Go)就可以看到百度词典的链接。有时也会用一下搜狗,因为搜狗还有一个显示偏僻字读音的功能。今天没事干,打算写一个Greasemonkey脚本让Google显示搜索关键字的读音和释义(中英文都可以)。
    花了大概两个小时,具体方法是给Dict.cn发送XMLhttp请求,并把结果插入到Google页面中。我做人还算厚道,用了别人的东西是要链一下别人的,因此加了一个“View More”链接。不知道Google本身或者FireFox插件能不能实现这样的效果,反正我是没有找到。我想肯定有人需要这个,因此发布出来大家可以测试一下。

点击这里安装
注意:安装前请确认你正在使用FireFox并已经安装了Greasemonkey插件!
成功使用或有任何问题的同志在下面留个言


    目前我在FireFox 2.0和英文google环境下使用正常,大家发现Bug请帮忙报告一下。不过我好像每次叫大家报告Bug时都没人理我。
    目前已知问题:由于编码问题,中文关键字的“View More”链接无效。
    Matrix67原创,转贴请注明出处。

« 更早的日志