相当棒的24点游戏算法,Javascript写的,不懂,谁能翻译成C/C++?
2008-11-21 10:43
567 查看
24点算法
游戏地址:http://www.prcer.com/tools/24/24-1.html
Javascript代码:
<script language="JavaScript">
// 程序作者:海浪
// 日期:2005-8-13
function lop(j)
{
if(j>0)
{
var ss = lop(j-1);
var px = "";
var oo = "$1"+j+"$2";
for(var k=0; k<=j; k++)
{
var re = new RegExp("(//d{"+k+"})(.*?;)","g");
px += ss.replace(re,oo);
}
return px;
}
else
return "0;";
}
var gt = lop(3).slice(0,-1).split(";");
for(var i=0; i<gt.length; i++)
gt[i] = gt[i].split("");
var ot = [];
var op = ["+","-","*","/"];
for(var x=0; x<4; x++)
for(var y=0; y<4; y++)
for(var z=0; z<4; z++)
{
ot[ot.length] = "( (a"+op[x]+"b)"+op[y]+"c) "+op[z]+"d";
ot[ot.length] = "( a"+op[x]+"(b"+op[y]+"c)) "+op[z]+"d";
ot[ot.length] = "a"+op[x]+"( (b"+op[y]+"c)"+op[z]+"d) ";
ot[ot.length] = "a"+op[x]+"( b"+op[y]+"(c"+op[z]+"d)) ";
ot[ot.length] = "( a"+op[x]+"b) "+op[y]+"(c"+op[z]+"d)";
}
///////////////////////////////////////////////////////////////
var ggcs;
function ggcsclass()
{
this.pjys = 0;
this.zq = 0;
this.cw = 0;
this.hl = 0;
this.gx();
}
function ggcsclass.prototype.gx()
{
k_pjys.innerText = this.zq==0?0:Math.round(this.pjys/this.zq*100)/100;
k_zq.innerText = this.zq;
k_cw.innerText = this.cw;
k_hl.innerText = this.hl;
}
function ggcsclass.prototype.phl()
{
this.hl++;
this.gx();
k_jg.innerText = "此题被忽略!!";
}
function ggcsclass.prototype.pcw()
{
this.cw++;
this.gx();
k_jg.innerText = "错误!!";
}
function ggcsclass.prototype.pzq()
{
var d = jcsl.endDate();
this.pjys += d/1000;
this.zq++;
this.gx();
k_jg.innerText = "正确!用时"+Math.round(d/10)/100+"秒!";
}
window.onload = function()
{
ggcs = new ggcsclass();
}
///////////////////////////////////////////////////////////////
var jcsl=null;
function jclass()
{
this.xpa = [];
this.ssjg = "";
this.wx = 1E-10;
this.date = null;
}
function jclass.prototype.rnd()
{
for(var ii=0; ii<4; ii++)
this.xpa[ii] = Math.floor(Math.random()*10)+1;
}
function jclass.prototype.fapai()
{
for(var ii=0; ii<4; ii++)
document.getElementById("pk"+ii).innerText = this.xpa[ii];
this.date = new Date();
}
function jclass.prototype.endDate()
{
return new Date()-this.date;
}
function jclass.prototype.jw()
{
var a,b,c,d;
this.ssjg= "";
for(var i=0; i<gt.length; i++)
{
a=this.xpa[gt[i][0]]-0;
b=this.xpa[gt[i][1]]-0;
c=this.xpa[gt[i][2]]-0;
d=this.xpa[gt[i][3]]-0;
for(var h=0; h<ot.length; h++)
if(Math.abs(eval(ot[h])-24)<=this.wx)
this.jcf(ot[h].replace("a",a).replace("b",b).replace("c",c).replace("d",d));
}
}
function jclass.prototype.jcf(t)
{
var str = t;
var zz1 = t.replace(/[/(/)]/g,"");
var zz2 = t.replace(/[/(/)] /g,"");
var zz3 = t.replace(/[/(/)](?! )/g,"");
if(Math.abs(eval(zz1)-24)<=this.wx)
str = zz1;
else if(Math.abs(eval(zz2)-24)<=this.wx)
str = zz2;
else if(Math.abs(eval(zz3)-24)<=this.wx)
str = zz3;
var res = str.replace(/ /g,"")+"=24/n";
if(this.ssjg.indexOf(res)==-1)
this.ssjg += res;
}
function jclass.prototype.scda()
{
sskgxx.innerText = "全部答案:/n"+this.ssjg;
}
function jclass.prototype.gx(ss)
{
var sw1 = ss.match(//(/g), sw2 = ss.match(//)/g);
sw1 = (sw1==null)?0:sw1.length;
sw2 = (sw2==null)?0:sw2.length;
if(sw1!=sw2)
return "左右括号个数不一样";
if(!/^/(*(/d+)/)*[/+/-/*//]/(*(/d+)/)*[/+/-/*//]/(*(/d+)/)*[/+/-/*//]/(*(/d+)/)*$/.test(ss))
return "算术表达式格式不正确";
var str = "#"+RegExp.$1+"|#"+RegExp.$2+"|#"+RegExp.$3+"|#"+RegExp.$4+"|";
for(var ii=0; ii<4; ii++)
{
var lok = "#"+this.xpa[ii]+"|";
if(str.indexOf(lok)!=-1)
str = str.replace(lok,"");
else
return "算术表达式中数字不对";
}
return "yes";
}
//////////////////////////////////////////////////////////////
function fpaaSystem()
{
if(jcsl!=null)
ggcs.phl();
jcsl = new jclass();
do {
jcsl.rnd();
jcsl.jw();
} while(jcsl.ssjg=="");
k_jg.innerText = "";
sskgxx.innerText = "";
gstext.value = "";
jcsl.fapai();
}
function fpaaInput()
{
var ins = prompt("请输入四个数字(如: 5,4,7,10)","");
if(ins==null) return;
if(!/^/d{1,2},/d{1,2},/d{1,2},/d{1,2}$/.test(ins)) { alert("输入的内容不正确!");return; }
var vf = jcsl!=null;
jcsl = new jclass();
jcsl.xpa = ins.split(",");
jcsl.jw();
if(jcsl.ssjg=="") { alert("此题无解!!!");return; }
if(vf)
ggcs.phl();
k_jg.innerText = "";
sskgxx.innerText = "";
gstext.value = "";
jcsl.fapai();
}
function ckda()
{
if(jcsl==null) return;
ggcs.phl();
jcsl.scda();
jcsl=null;
}
function okaa()
{
if(jcsl==null) return;
var gs = gstext.value;
var str = jcsl.gx(gs);
if(str!="yes")
{
alert("算式错误:"+str+"!");
return;
}
if(Math.abs(eval(gs)-24)<=jcsl.wx)
ggcs.pzq();
else
ggcs.pcw();
jcsl.scda();
jcsl=null;
}
function tocs(n)
{
if(jcsl==null) return;
gstext.value+=jcsl.xpa
;
}
</script>
谁能翻译下呢?
翻译出来的发邮件给我哦:hm.y@live.cn
游戏地址:http://www.prcer.com/tools/24/24-1.html
Javascript代码:
<script language="JavaScript">
// 程序作者:海浪
// 日期:2005-8-13
function lop(j)
{
if(j>0)
{
var ss = lop(j-1);
var px = "";
var oo = "$1"+j+"$2";
for(var k=0; k<=j; k++)
{
var re = new RegExp("(//d{"+k+"})(.*?;)","g");
px += ss.replace(re,oo);
}
return px;
}
else
return "0;";
}
var gt = lop(3).slice(0,-1).split(";");
for(var i=0; i<gt.length; i++)
gt[i] = gt[i].split("");
var ot = [];
var op = ["+","-","*","/"];
for(var x=0; x<4; x++)
for(var y=0; y<4; y++)
for(var z=0; z<4; z++)
{
ot[ot.length] = "( (a"+op[x]+"b)"+op[y]+"c) "+op[z]+"d";
ot[ot.length] = "( a"+op[x]+"(b"+op[y]+"c)) "+op[z]+"d";
ot[ot.length] = "a"+op[x]+"( (b"+op[y]+"c)"+op[z]+"d) ";
ot[ot.length] = "a"+op[x]+"( b"+op[y]+"(c"+op[z]+"d)) ";
ot[ot.length] = "( a"+op[x]+"b) "+op[y]+"(c"+op[z]+"d)";
}
///////////////////////////////////////////////////////////////
var ggcs;
function ggcsclass()
{
this.pjys = 0;
this.zq = 0;
this.cw = 0;
this.hl = 0;
this.gx();
}
function ggcsclass.prototype.gx()
{
k_pjys.innerText = this.zq==0?0:Math.round(this.pjys/this.zq*100)/100;
k_zq.innerText = this.zq;
k_cw.innerText = this.cw;
k_hl.innerText = this.hl;
}
function ggcsclass.prototype.phl()
{
this.hl++;
this.gx();
k_jg.innerText = "此题被忽略!!";
}
function ggcsclass.prototype.pcw()
{
this.cw++;
this.gx();
k_jg.innerText = "错误!!";
}
function ggcsclass.prototype.pzq()
{
var d = jcsl.endDate();
this.pjys += d/1000;
this.zq++;
this.gx();
k_jg.innerText = "正确!用时"+Math.round(d/10)/100+"秒!";
}
window.onload = function()
{
ggcs = new ggcsclass();
}
///////////////////////////////////////////////////////////////
var jcsl=null;
function jclass()
{
this.xpa = [];
this.ssjg = "";
this.wx = 1E-10;
this.date = null;
}
function jclass.prototype.rnd()
{
for(var ii=0; ii<4; ii++)
this.xpa[ii] = Math.floor(Math.random()*10)+1;
}
function jclass.prototype.fapai()
{
for(var ii=0; ii<4; ii++)
document.getElementById("pk"+ii).innerText = this.xpa[ii];
this.date = new Date();
}
function jclass.prototype.endDate()
{
return new Date()-this.date;
}
function jclass.prototype.jw()
{
var a,b,c,d;
this.ssjg= "";
for(var i=0; i<gt.length; i++)
{
a=this.xpa[gt[i][0]]-0;
b=this.xpa[gt[i][1]]-0;
c=this.xpa[gt[i][2]]-0;
d=this.xpa[gt[i][3]]-0;
for(var h=0; h<ot.length; h++)
if(Math.abs(eval(ot[h])-24)<=this.wx)
this.jcf(ot[h].replace("a",a).replace("b",b).replace("c",c).replace("d",d));
}
}
function jclass.prototype.jcf(t)
{
var str = t;
var zz1 = t.replace(/[/(/)]/g,"");
var zz2 = t.replace(/[/(/)] /g,"");
var zz3 = t.replace(/[/(/)](?! )/g,"");
if(Math.abs(eval(zz1)-24)<=this.wx)
str = zz1;
else if(Math.abs(eval(zz2)-24)<=this.wx)
str = zz2;
else if(Math.abs(eval(zz3)-24)<=this.wx)
str = zz3;
var res = str.replace(/ /g,"")+"=24/n";
if(this.ssjg.indexOf(res)==-1)
this.ssjg += res;
}
function jclass.prototype.scda()
{
sskgxx.innerText = "全部答案:/n"+this.ssjg;
}
function jclass.prototype.gx(ss)
{
var sw1 = ss.match(//(/g), sw2 = ss.match(//)/g);
sw1 = (sw1==null)?0:sw1.length;
sw2 = (sw2==null)?0:sw2.length;
if(sw1!=sw2)
return "左右括号个数不一样";
if(!/^/(*(/d+)/)*[/+/-/*//]/(*(/d+)/)*[/+/-/*//]/(*(/d+)/)*[/+/-/*//]/(*(/d+)/)*$/.test(ss))
return "算术表达式格式不正确";
var str = "#"+RegExp.$1+"|#"+RegExp.$2+"|#"+RegExp.$3+"|#"+RegExp.$4+"|";
for(var ii=0; ii<4; ii++)
{
var lok = "#"+this.xpa[ii]+"|";
if(str.indexOf(lok)!=-1)
str = str.replace(lok,"");
else
return "算术表达式中数字不对";
}
return "yes";
}
//////////////////////////////////////////////////////////////
function fpaaSystem()
{
if(jcsl!=null)
ggcs.phl();
jcsl = new jclass();
do {
jcsl.rnd();
jcsl.jw();
} while(jcsl.ssjg=="");
k_jg.innerText = "";
sskgxx.innerText = "";
gstext.value = "";
jcsl.fapai();
}
function fpaaInput()
{
var ins = prompt("请输入四个数字(如: 5,4,7,10)","");
if(ins==null) return;
if(!/^/d{1,2},/d{1,2},/d{1,2},/d{1,2}$/.test(ins)) { alert("输入的内容不正确!");return; }
var vf = jcsl!=null;
jcsl = new jclass();
jcsl.xpa = ins.split(",");
jcsl.jw();
if(jcsl.ssjg=="") { alert("此题无解!!!");return; }
if(vf)
ggcs.phl();
k_jg.innerText = "";
sskgxx.innerText = "";
gstext.value = "";
jcsl.fapai();
}
function ckda()
{
if(jcsl==null) return;
ggcs.phl();
jcsl.scda();
jcsl=null;
}
function okaa()
{
if(jcsl==null) return;
var gs = gstext.value;
var str = jcsl.gx(gs);
if(str!="yes")
{
alert("算式错误:"+str+"!");
return;
}
if(Math.abs(eval(gs)-24)<=jcsl.wx)
ggcs.pzq();
else
ggcs.pcw();
jcsl.scda();
jcsl=null;
}
function tocs(n)
{
if(jcsl==null) return;
gstext.value+=jcsl.xpa
;
}
</script>
谁能翻译下呢?
翻译出来的发邮件给我哦:hm.y@live.cn
相关文章推荐
- [华为OJ--C++]097-24点游戏算法
- C++实现24点游戏算法
- 24点算法研究(C和C++版)
- 简单算法之丢手绢游戏/c++
- 24点游戏算法思想与结果演示
- 华为机试:计算字符串的距离、24点游戏算法
- 24点游戏算法
- 华为OJ——24点游戏算法
- 24点游戏C++
- Javascript和HTML5利用canvas构建Web五子棋游戏实现算法
- 24点游戏 C++
- 24点算法C++程序
- 华为OJ 初级:24点游戏算法
- 内存管理:算法及其c/c++实现 翻译四
- 游戏开发A*寻路算法C++实现
- 【华为OJ】【097-24点游戏算法】
- 内存管理:算法及其c/c++实现 翻译六
- 判断四张扑克牌能否凑成24点游戏算法
- javascript和HTML5利用canvas构建猜牌游戏实现算法
- 基于递归全排算法的最笨方式实现24点游戏