/**交互式Pi搜索。* *作者:David G.Andersen*版权所有(C)20122013 David G.Andersen。*保留所有权利。**感谢Peter M.Steven修复了本地搜索中的错误。*/“使用严格”;/*此应用程序的总体命名空间*/变量pisearch={};皮西奇。SRC=“//www.angio.net/newpi/piquery”;//皮西奇。SRC=“//cgi.angio.net/piquery/piquery”;//皮西奇。DIGITS=“//static.angio.net/pi/DIGITS/10000.txt”;皮西奇。DIGITS=“//assets.angio.net/10000.txt”;pisearch.startpos=0;pisearch.prevquery=0;$(document).ready(function()){$(“#pisearchform”).submit(pisearch.doPi);$(“#nextform”).submit(pisearch.dofindNext);$(“#qbox”).keyup(pisearch.doPi);$(“#results”).show();$(“#success”).hide();$(“#failure”).hide();$.get(pisearch.DIGITS,pisearch.gotDigits);});pisearch.gotDigits=函数(数据){var pidigits=data.substring(2);pisearch.addToPiCache(小数位,0);}pisearch.dofindNext=函数(事件){event.proventDefault();var qdat=$(文档).find('input[名称=“q”]').val();$(“#查询”).show()$.post(pisearch.SRC,{q:qdat,qs:pisearch.startpos},pisearch.gotPi,“json”);}pisearch.picache=“”;皮西奇_psc_cachemax=1000;pisearch.incache=0;pisearch.psc={};pisearch.keyarray=新数组();pisearch.addToPiCache=函数(str,startpos){pisearch.picache=str;}pisearch.checkPiCache=函数(pos,diglimit){}皮西奇_pscc_key=函数(str,startpos){return(str+“@”+startpos);}皮西奇_pscFlushIfNeeded=函数(){if(pisearch.incache>=pisearch.psc_cachemax){var k=pisearch.keyarray.pop();删除pisearch.psc[k];pisearch.incache--;}}pisearch.addToPiSearchCache=函数(str,startpos,found){皮西奇_pscFlushIfNeeded();var键=pisearch_pscc_key(str,startpos);pisearch.psc[key]=已找到;pisearch.keyarray.unshift(键);pisearch.incache++;返回true;}pisearch.checkPiSearchCache=函数(str,startpos){return pisearch.psc[pisearch._pscc_key(str,startpos)];}pisearch.localPiSearch=函数(str,startpos){//提取最大的连续组件,包括startpos//来自piCache;//搜索它。:)var pos=pisearch.picache.substring(startpos).indexOf(str);如果(pos==-1)返回-1;else pos+=起始位置;如果(pos>(pisearch.picache.length-20))返回-1;变量p={};p.p=位置+1;p.k=str;//xxx,边界条件?p.da=pisearch.picache.substring(pos+str.length,pos+str-length+20);var ndigs=数学最小值(20,位置);var digstart=pos-ndigs;p.db=pisearch.picache.substring(digstart,pos);p[“qt”]=0;返回p;}pisearch.doPi=函数(事件){event.proventDefault();var qdat=$(文档).find('input[名称=“q”]').val();if(qdat==pisearch.prevquery){返回false;}/*联系之前,此处显示本地pi搜索计算*服务器*/var startpos=0;var pir=pisearch.checkPiSearchCache(qdat,startpos);if(pir){pisearch.reallyGotPi(pir);}其他{pir=pisearch.localPiSearch(qdat,startpos);如果(pir!=-1){pisearch.reallyGotPi(pir);}其他{$(“#查询”).show()$.post(pisearch.SRC,{q:qdat},pisearch.gotPi,“json”);}}pisearch.prevquery=qdat;}pisearch.pistrtochars=函数(pistr){var a=“abcdefghijklmnopqrstuvwxyz”;var outstr=“”;对于(var i=0;i<活塞长度;i+=2){var d=活塞子串(i,i+2);var dmax=解析Int(d)%a.length;extr+=a.substring(dmax,dmax+1);outstr+=“”;}回报突出;}pisearch.piToChars=函数(之前、期间、之后){var extr=“”if(在长度%2之前){before=before.substring(1);outsr=“”;outsr+=pisearch.pistrtochars(before.substring(1));}其他{outsr=pisearch.pistrtochars(之前);}$('#piascharbefore').text(outbr);$(“#piaschar”).text(pisearch.pistrtochars(期间));$(“#piascharafter”).text(pisearch.pistrtochars(after));}pisearch.gotPi=函数(数据){var pir=数据[‘r’][0];pir['lookupTime']=数据['et'];if(!pir['错误']){pisearch.addToPiSearchCache(pir['k'],pir['',pir);}pisearch.reallyGotPi(pir);}pisearch.reallyGotPi=函数(pir){var qdat=$(文档).find('input[名称=“q”]').val();//AJAX回复可能会延迟更多的输入。如果我们没有更新//当前查询!if(pir['k']!=qdat){回报;}$(“#查询”).hide();if(pir['Error']||pir['状态']==“未找到”){$(“#success”).hide();$(“#failure”).show();}其他{$(“#success”).show();$(“#failure”).hide();pisearch.piToChars(pir['db']、pir[k']、pir['da']);}for(pir中的var i){var c=pir[i];$(“#”+i).text(c);}$(“#searchKey1”).text(pir['k']);if(pir['lookupTime']){$(“#queryTime”).text(pir['lookupTime']/1000000000.0);}if(pir['c']){//计数$(“#queryCountBox”).show()$(“#queryCount”).text(pir['c'])}其他{$(“#queryCountBox”).hide()}pir['qt']=pir['查找时间'];pisearch.startpos=1+pir['p'];//用于findNext}