参考了【攻略】达纳托斯塔台(死亡之塔)流程上7楼
中间需要猜数字觉得很麻烦
所以乾脆写了一个计算机:http://rnai.000webhostapp.com/tower/
有满高的机率在5次内可以猜到
有需要的可以使用
为了避免未来网站关闭,也把原始码放在下面
把下列内容複製到纯文字文件并储存为附档名为html
就可以用浏览器开启来使用
(如果是用记事本,编码用ANSI储存,并把红字的地方改为big5)
原始码
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>RO-达纳托斯塔台猜数字计算机</title> <script type="text/javascript"> function DataTable() { this.TB; this.gaussValue; this.init(); } DataTable.prototype.init=function () { var i,j,k; //将所有可能值写入gaussValue this.gaussValue=[]; for(i=1;i<=9;++i) for(j=1;j<=9;++j) { if(j==i) continue; for(k=1;k<=9;++k) if(i!=k && j!=k) this.gaussValue.push(i*100+j*10+k); } //建立表格TB this.TB=[]; k=this.gaussValue.length; for(i=0;i<k;++i) { this.TB.push({ ans:this.gaussValue[i], data:[] }); for(j=0;j<k;++j) this.TB[i].data.push(getAB(this.TB[i].ans,this.gaussValue[j])); } function getAB(ans,gs) { var a,b; var i,j,x,y; a=b=0; for(i=1;i<=100;i*=10) { x=(ans/i|0)%10; for(j=1;j<=100;j*=10) { y=(gs/j|0)%10; if(x==y) { if(i==j) ++a; else ++b; } } } return a*10+b; } } DataTable.prototype.getGauss=function () {//回传删除个数期望值最高的猜测 var i,N,buf,t; buf={score:-1,arr:[]}; N=this.gaussValue.length; for(i=0;i<N;++i) { t=getScore(this.TB,i); if(buf.score==-1 || buf.score>t) { buf.score=t; buf.arr[0]=i; buf.arr.length=1; } else if(buf.score==t) buf.arr.push(i); } t=Math.floor(Math.random()*buf.arr.length); return this.gaussValue[buf.arr[t]]; function getScore(TB,idx) {//回传无法删除个数的期望值 var countArray=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]; var i,N,t,sum; N=TB.length; for(i=0;i<N;++i) { t=TB[i].data[idx]; t=(t/10|0)*4+t%4; ++countArray[t]; } sum=0; for(i=0;i<countArray.length;++i) sum+=countArray[i]*countArray[i]; return sum; } } DataTable.prototype.gauss=function (gauss_value,na,nb) {//删除表格中不符合条件的答案 var i,j,k,N; N=this.gaussValue.length; for(k=N-1;k>=0 && this.gaussValue[k]!=gauss_value;--k); if(k<0) { alert("0"); return false; } for(i=this.TB.length-1;i>=0;--i) if(this.TB[i].data[k]!=na*10+nb) { this.TB[i]=this.TB[this.TB.length-1]; this.TB.length=this.TB.length-1; } } DataTable.prototype.restAns=function() { var i,r=[]; for(i=0;i<this.TB.length;++i) r.push(this.TB[i].ans) return r; } var gaussNum; var currentGauss; function init() { gaussNum=new DataTable; myGauss(); } function run() { var na=document.getElementById("result_A").selectedIndex; var nb=document.getElementById("result_B").selectedIndex; gaussNum.gauss(currentGauss,na,nb); document.getElementById("log").innerHTML+=currentGauss+":"+na+" A "+nb+" B<br>"; myGauss(); } function myGauss() { var ans=gaussNum.restAns(); currentGauss=gaussNum.getGauss(); document.getElementById("gauss").innerHTML=(ans.length>1? "我猜:"+currentGauss+"(尚余 "+(ans.length<5?""+ans+"等 ":"")+ans.length+" 个可能的答案)": "答案是:"+gaussNum.TB[0].ans); } </script> </head> <body onload="init()"> <div id="gauss"></div> 结果是: <select id="result_A"> <option value="0">0</option> <option value="1">1</option> <option value="2">2</option> <option value="3">3</option> </select> A <select id="result_B"> <option value="0">0</option> <option value="1">1</option> <option value="2">2</option> <option value="3">3</option> </select> B <button onclick="run()">确认</button> <hr> <p id="log"></p> </body> </html> |