用JavaScript脚本实现的图灵机
作者:月影 来源:月影博客 时间:2009-01-21 18:10:00
Array.prototype._ = function(){
var _p = 0;
var _v = 0;
(function(){
for(var i = 0; i < arguments.length; i++){
var c = arguments[i];
if(typeof c == 'number'){
this[_p] = this[_p] || 0;
this[_p] += c;
}
else if(c instanceof Array){
if(c.length == 0){
this[_p] = _v;
}else if(c.length == 1){
_v = this[_p];
_p += c[0];
}else{
while(this[_p]){
arguments.callee.apply(this,c);
}
}
}
}
}).apply(this, arguments);
return this;
};
[+n] 读取指针处内容并且指针从当前位置前进n步
[-n] 读取指针处内容并且指针从当前位置后退n步
+n 指针指向的字节的值加n
-n 指针指向的字节的值减n
[] 将数据写入指针处
[ 如果指针指向的单元值为零,向前跳转到对应的]指令的次一指令处
] 如果指针指向的单元值不为零,向后跳转到对应的[指令的次一指令处
计算1+2+3......+100的值:
alert([100]._([[+1],[],-1],[-1],[[-1,[+1],+1,[-1]],[],[-1]])[0]);
比较两个数的大小,得到较小的那个:
alert([,,4,5,]._([+2],[[-2],+1,[+2],-1,[+1],-1,[0,[+1]],[-2]])[0]);