`
nathan09
  • 浏览: 144607 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
文章分类
社区版块
存档分类
最新评论

相当棒的24点游戏算法,Javascript写的,不懂,谁能翻译成C/C++?

 
阅读更多

24点算法

游戏地址:http://www.prcer.com/tools/24/24-1.html

Javascript代码:

  1. <scriptlanguage="JavaScript">
  2. //程序作者:海浪
  3. //日期:2005-8-13
  4. functionlop(j)
  5. {
  6. if(j>0)
  7. {
  8. varss=lop(j-1);
  9. varpx="";
  10. varoo="$1"+j+"$2";
  11. for(vark=0;k<=j;k++)
  12. {
  13. varre=newRegExp("(//d{"+k+"})(.*?;)","g");
  14. px+=ss.replace(re,oo);
  15. }
  16. returnpx;
  17. }
  18. else
  19. return"0;";
  20. }
  21. vargt=lop(3).slice(0,-1).split(";");
  22. for(vari=0;i<gt.length;i++)
  23. gt[i]=gt[i].split("");
  24. varot=[];
  25. varop=["+","-","*","/"];
  26. for(varx=0;x<4;x++)
  27. for(vary=0;y<4;y++)
  28. for(varz=0;z<4;z++)
  29. {
  30. ot[ot.length]="((a"+op[x]+"b)"+op[y]+"c)"+op[z]+"d";
  31. ot[ot.length]="(a"+op[x]+"(b"+op[y]+"c))"+op[z]+"d";
  32. ot[ot.length]="a"+op[x]+"((b"+op[y]+"c)"+op[z]+"d)";
  33. ot[ot.length]="a"+op[x]+"(b"+op[y]+"(c"+op[z]+"d))";
  34. ot[ot.length]="(a"+op[x]+"b)"+op[y]+"(c"+op[z]+"d)";
  35. }
  36. ///////////////////////////////////////////////////////////////
  37. varggcs;
  38. functionggcsclass()
  39. {
  40. this.pjys=0;
  41. this.zq=0;
  42. this.cw=0;
  43. this.hl=0;
  44. this.gx();
  45. }
  46. functionggcsclass.prototype.gx()
  47. {
  48. k_pjys.innerText=this.zq==0?0:Math.round(this.pjys/this.zq*100)/100;
  49. k_zq.innerText=this.zq;
  50. k_cw.innerText=this.cw;
  51. k_hl.innerText=this.hl;
  52. }
  53. functionggcsclass.prototype.phl()
  54. {
  55. this.hl++;
  56. this.gx();
  57. k_jg.innerText="此题被忽略!!";
  58. }
  59. functionggcsclass.prototype.pcw()
  60. {
  61. this.cw++;
  62. this.gx();
  63. k_jg.innerText="错误!!";
  64. }
  65. functionggcsclass.prototype.pzq()
  66. {
  67. vard=jcsl.endDate();
  68. this.pjys+=d/1000;
  69. this.zq++;
  70. this.gx();
  71. k_jg.innerText="正确!用时"+Math.round(d/10)/100+"秒!";
  72. }
  73. window.onload=function()
  74. {
  75. ggcs=newggcsclass();
  76. }
  77. ///////////////////////////////////////////////////////////////
  78. varjcsl=null;
  79. functionjclass()
  80. {
  81. this.xpa=[];
  82. this.ssjg="";
  83. this.wx=1E-10;
  84. this.date=null;
  85. }
  86. functionjclass.prototype.rnd()
  87. {
  88. for(varii=0;ii<4;ii++)
  89. this.xpa[ii]=Math.floor(Math.random()*10)+1;
  90. }
  91. functionjclass.prototype.fapai()
  92. {
  93. for(varii=0;ii<4;ii++)
  94. document.getElementById("pk"+ii).innerText=this.xpa[ii];
  95. this.date=newDate();
  96. }
  97. functionjclass.prototype.endDate()
  98. {
  99. returnnewDate()-this.date;
  100. }
  101. functionjclass.prototype.jw()
  102. {
  103. vara,b,c,d;
  104. this.ssjg="";
  105. for(vari=0;i<gt.length;i++)
  106. {
  107. a=this.xpa[gt[i][0]]-0;
  108. b=this.xpa[gt[i][1]]-0;
  109. c=this.xpa[gt[i][2]]-0;
  110. d=this.xpa[gt[i][3]]-0;
  111. for(varh=0;h<ot.length;h++)
  112. if(Math.abs(eval(ot[h])-24)<=this.wx)
  113. this.jcf(ot[h].replace("a",a).replace("b",b).replace("c",c).replace("d",d));
  114. }
  115. }
  116. functionjclass.prototype.jcf(t)
  117. {
  118. varstr=t;
  119. varzz1=t.replace(/[/(/)]/g,"");
  120. varzz2=t.replace(/[/(/)]/g,"");
  121. varzz3=t.replace(/[/(/)](?!)/g,"");
  122. if(Math.abs(eval(zz1)-24)<=this.wx)
  123. str=zz1;
  124. elseif(Math.abs(eval(zz2)-24)<=this.wx)
  125. str=zz2;
  126. elseif(Math.abs(eval(zz3)-24)<=this.wx)
  127. str=zz3;
  128. varres=str.replace(//g,"")+"=24/n";
  129. if(this.ssjg.indexOf(res)==-1)
  130. this.ssjg+=res;
  131. }
  132. functionjclass.prototype.scda()
  133. {
  134. sskgxx.innerText="全部答案:/n"+this.ssjg;
  135. }
  136. functionjclass.prototype.gx(ss)
  137. {
  138. varsw1=ss.match(//(/g),sw2=ss.match(//)/g);
  139. sw1=(sw1==null)?0:sw1.length;
  140. sw2=(sw2==null)?0:sw2.length;
  141. if(sw1!=sw2)
  142. return"左右括号个数不一样";
  143. if(!/^/(*(/d+)/)*[/+/-/*//]/(*(/d+)/)*[/+/-/*//]/(*(/d+)/)*[/+/-/*//]/(*(/d+)/)*$/.test(ss))
  144. return"算术表达式格式不正确";
  145. varstr="#"+RegExp.$1+"|#"+RegExp.$2+"|#"+RegExp.$3+"|#"+RegExp.$4+"|";
  146. for(varii=0;ii<4;ii++)
  147. {
  148. varlok="#"+this.xpa[ii]+"|";
  149. if(str.indexOf(lok)!=-1)
  150. str=str.replace(lok,"");
  151. else
  152. return"算术表达式中数字不对";
  153. }
  154. return"yes";
  155. }
  156. //////////////////////////////////////////////////////////////
  157. functionfpaaSystem()
  158. {
  159. if(jcsl!=null)
  160. ggcs.phl();
  161. jcsl=newjclass();
  162. do{
  163. jcsl.rnd();
  164. jcsl.jw();
  165. }while(jcsl.ssjg=="");
  166. k_jg.innerText="";
  167. sskgxx.innerText="";
  168. gstext.value="";
  169. jcsl.fapai();
  170. }
  171. functionfpaaInput()
  172. {
  173. varins=prompt("请输入四个数字(如:5,4,7,10)","");
  174. if(ins==null)return;
  175. if(!/^/d{1,2},/d{1,2},/d{1,2},/d{1,2}$/.test(ins)){alert("输入的内容不正确!");return;}
  176. varvf=jcsl!=null;
  177. jcsl=newjclass();
  178. jcsl.xpa=ins.split(",");
  179. jcsl.jw();
  180. if(jcsl.ssjg==""){alert("此题无解!!!");return;}
  181. if(vf)
  182. ggcs.phl();
  183. k_jg.innerText="";
  184. sskgxx.innerText="";
  185. gstext.value="";
  186. jcsl.fapai();
  187. }
  188. functionckda()
  189. {
  190. if(jcsl==null)return;
  191. ggcs.phl();
  192. jcsl.scda();
  193. jcsl=null;
  194. }
  195. functionokaa()
  196. {
  197. if(jcsl==null)return;
  198. vargs=gstext.value;
  199. varstr=jcsl.gx(gs);
  200. if(str!="yes")
  201. {
  202. alert("算式错误:"+str+"!");
  203. return;
  204. }
  205. if(Math.abs(eval(gs)-24)<=jcsl.wx)
  206. ggcs.pzq();
  207. else
  208. ggcs.pcw();
  209. jcsl.scda();
  210. jcsl=null;
  211. }
  212. functiontocs(n)
  213. {
  214. if(jcsl==null)return;
  215. gstext.value+=jcsl.xpa[n];
  216. }
  217. </script>

谁能翻译下呢?

翻译出来的发邮件给我哦:hm.y@live.cn

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics