大家也许想过,如果玩家足够牛 B 的话,俄罗斯方块游戏是不是永远也玩不死呢?不是的。我曾经在这里介绍过,理论上说,俄罗斯方块游戏是不能永无止境地玩下去的,总有一个时候你会死掉。事实上,如果允许电脑不随机出牌,可以有意为难你的话,电脑可以利用一个简单的算法迅速把你整死。倘若电脑真的能故意陷害你,玩俄罗斯方块会是什么样的呢?
今天,我还真找到了这么一个在线俄罗斯方块游戏 HATETRIS 。在这个游戏中,下一个方块并不是随机给的,游戏将用一套确定性算法精心为你挑选一个对你最不利的方块,让你感受一下想要什么偏没有什么的痛苦。毫不夸张地说,在这个游戏中,即使想消掉一行也是一件很困难的事。
游戏是用 JavaScript 写的,你可以在下面这个框架中点 start new game 直接开始游戏。游戏没有重力因素(方块不会自动下落),这可以给你充分长的思考时间。技术细节和高分记录请移步这里。
想让俄罗斯方块更变态一些,方法不止一种。如果喜欢这个游戏,欢迎挑战我自己原创的变态俄罗斯方块 PiTetris 。
JavaScript
Happy Pi Day!一起来挑战俄罗斯方块圆周率版
早上好!今天是 3 月 14 日,一年一度的圆周率日。为了和大家庆祝这个日子,我下载了一个 JavaScript 俄罗斯方块游戏 Js Tetris 的源代码,并且小小地修改了一下。那 7 种四联骨牌已经不复存在了,你将看到圆周率中的数字一个接一个地依次落下。这恐怕有希望成为史上最变态的俄罗斯方块了吧。
游戏改造完毕后,我自己居然沉迷了好久。把积木换成数字后游戏变得不是一般的困难,有很多小技巧有待大家慢慢去摸索。我个人的最好成绩是第 32 位。你呢?
Update: 如果上下左右按钮会带动浏览器的滚动条,可以用 W 、 S 、 A 、 D 代替。如果浏览器不支持框架,也可以直接打开 http://www.matrix67.com/PiTetris/tetris.html 进行游戏。
(愚人节玩笑)史上最牛充分条件分析器测试版发布
在数学研究中,我们经常需要寻找一个命题的充分条件。有时候,我们在解题过程中会不自觉地思考结论的充分条件。例如,等底等高便是两个三角形面积相等的充分条件,这就为我们证明三角形面积相等指明了一条道路,接下来我们只需要说明那两个三角形的确是等底等高的就行了。又如,“任意顶点的度数大于等于n/2”是“无向图存在Hamilton回路”的充分条件,它经常被用来说明一个图有Hamilton回路。不过,与寻找必要条件不同的是,寻找一个命题“可以由什么推出来”是一个逆向思维,构造一个充分条件并不容易。有没有一种寻找充分条件的系统方法呢?我最近几天加班加点地研究,终于完成了一个充分条件分析器。你可以在输入框中属于一个与变量x相关的命题,系统将自动给出一个命题的充分条件。这个系统虽然是测试版,但它已经十分强大了。它不仅支持三角函数、对数函数、指数函数、阶乘等各类函数,还支持极限、微分、积分运算,甚至能够处理包括中文在内的自然语言。如果你不知道该输入什么,你可以先点击下面的几个样例试一试。
追Geek MM小工具:IOCCC情书生成器v0.1
趣题:用正则表达式判断一个二进制数是否能被3整除
我们之前已经见过了正则表达式的一些很特殊的用法。这里我们再来看一个:用正则表达式判断数的整除性。例如,下面这个表达式可以匹配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整除的二进制数究竟有何规律?