我的代码在我的计算机上,在我的所有浏览器(包括ie)上完美运行,但我无法使其在jsFiddle上运行。
问题似乎在于:
window.onload=function(){
document.body.innerHTML+=brd+log;
}
但我曾经和window.onload
一起尝试过。我完全无能为力,我开始失去所有的希望
CSS(可选):
*{margin:0;padding:0;}
#brd{margin:15px auto;}
#brd,#brd td,#log{border:1px solid #000;}
#brd td{height:47px;width:45px;text-align:center;font-size:30px;}
#brd span{font-size:12px;}
#log{margin:15px auto;padding:20px;width:385px;max-height:150px;overflow:auto;background:#F0F0F0;color:#000;}
JavaScript的:
var i,sdk,rem,log,perf,brd,bxes=[["11","12","13","21","22","23","31","32","33"],["14","15","16","24","25","26","34","35","36"],["17","18","19","27","28","29","37","38","39"],["41","42","43","51","52","53","61","62","63"],["44","45","46","54","55","56","64","65","66"],["47","48","49","57","58","59","67","68","69"],["71","72","73","81","82","83","91","92","93"],["74","75","76","84","85","86","94","95","96"],["77","78","79","87","88","89","97","98","99"]];
/*Array Find*/
function arrFind(fnd,frm,bol){
var ii,len,rtn=-1;
for(ii=0,len=frm.length;ii<len;ii++){
if(frm[ii]==fnd){
rtn=ii;
break;
}
}
return bol?rtn>-1:rtn;
}
/*To RC*/
function toRC(val){
var ii,len,aa=[];
val=val.split(",");
for(ii=0,len=val.length;ii<len;ii++){
aa.push(Math.ceil((parseInt(val[ii])+1)/9)+""+((parseInt(val[ii])%9)+1));
}
return aa.join(",");
}
/*To AV*/
function toAV(rc){
var ii,len,aa=[];
rc=rc.split(",");
for(ii=0,len=rc.length;ii<len;ii++){
aa.push((((parseInt(rc[ii].charAt(0))-1)*9)+(parseInt(rc[ii].charAt(1))-1))+"");
}
return aa.join(",");
}
/*Get Box*/
function getBox(av,bol){
var ii,jj,len,ss,zz,aa=[];
if(!bol){
av=toRC(av);
}
av=av.split(",");
for(ii=0,len=av.length;ii<len;ii++){
ss=av[ii];
for(jj=0;jj<9;jj++){
zz=window.bxes[jj];
if(arrFind(ss,zz,true)){
aa.push(zz);
break;
}
}
}
return aa.join(",");
}
/*Get Row*/
function getRow(av,bol){
var ii,len,ss,aa=[];
if(!bol){
av=toRC(av);
}
av=av.split(",");
for(ii=0,len=av.length;ii<len;ii++){
ss=av[ii].charAt(0);
aa.push(ss+"1",ss+"2",ss+"3",ss+"4",ss+"5",ss+"6",ss+"7",ss+"8",ss+"9");
}
return aa.join(",");
}
/*Get Column*/
function getCol(av,bol){
var ii,len,ss,aa=[];
if(!bol){
av=toRC(av);
}
av=av.split(",");
for(ii=0,len=av.length;ii<len;ii++){
ss=av[ii].charAt(1);
aa.push("1"+ss,"2"+ss,"3"+ss,"4"+ss,"5"+ss,"6"+ss,"7"+ss,"8"+ss,"9"+ss);
}
return aa.join(",");
}
/*Get Value*/
function getVal(av,bol){
var ii,len,ss,aa=[];
if(bol){
av=toAV(av);
}
av=av.split(",");
for(ii=0,len=av.length;ii<len;ii++){
ss=window.sdk[parseInt(av[ii])];
if(ss.length==1){
aa.push(ss);
}
}
return aa.join(",");
}
/*Get Candidates*/
function getCand(av,bol){
var ii,len,ss,zz,aa=["1","2","3","4","5","6","7","8","9"];
if(bol){
av=toAV(av);
}
if(window.sdk[parseInt(av)].length==1){
return [];
}
zz=getVal(getBox(av)+","+getRow(av)+","+getCol(av),true).split(",");
for(ii=0,len=zz.length;ii<len;ii++){
ss=arrFind(zz[ii],aa);
if(ss>-1){
aa.splice(ss,1);
}
}
return aa.join(",");
}
/*New Sudoku*/
function newSudoku(str){
var ii,len,ss;
window.perf=new Date().getTime();
window.log="";
window.sdk=[];
window.rem=[];
for(ii=0,len=str.length;ii<len;ii++){
ss=str.charAt(ii);
if(ss!="0"){
window.log+=ss+" on "+toRC(ii+"")+"<br>";
writeNumber(ss,ii+"");//wn
}else{
window.sdk[ii]=[];
window.rem.push(ii+"");
}
}
}
/*Write Number*/
function writeNumber(val,av,bol){
if(bol){
av=toAV(av);
}
window.sdk[parseInt(av)]=[val];
return delCand(val,av);
}
/*Delete Candidates*/
function delCand(val,av,bol){
var ii,jj,len,jen,ss,zz,cc,xx,xo,dd=[];
if(bol){
av=toAV(av);
}
zz=toRC(av);
xx=new RegExp(","+zz+",","g");//below bol
ss=toAV((getBox(av)+","+getRow(av)+","+getCol(av)).replace(xx,",").replace(zz+",","").replace(","+zz,"")).split(",");
for(ii=0,len=ss.length;ii<len;ii++){
cc=window.sdk[ss[ii]];
if(!cc||cc.length<2){
continue;
}
zz=arrFind(val,cc);
if(zz>-1){
window.sdk[parseInt(ss[ii])].splice(zz,1);
if(window.sdk[parseInt(ss[ii])].length==1){
window.log+=window.sdk[parseInt(ss[ii])][0]+" on "+toRC(ss[ii])+"<br>";
xo=delCand(window.sdk[parseInt(ss[ii])][0],ss[ii]);//wn
jen=xo.length;
if(jen>0){
for(jj=0;jj<jen;jj++){
dd.push(xo[jj]);
}
}
dd.push(ss[ii]);
}
}
}
return dd;
}
/*Delete Remaining*/
function delRem(arr){
var ii,len,ss;
for(ii=0,len=arr.length;ii<len;ii++){
ss=arrFind(arr[ii],window.rem);
if(ss>-1){
window.rem.splice(ss,1);
}
}
}
/*Solve Sudoku*/
function solSudoku(){
var ii,jj,ll,yy,len,jen,ss,zz,cc,dd,xo;
for(ll=0;ll<1;ll++){
dd=[];
for(ii=0,len=window.rem.length;ii<len;ii++){
zz=window.sdk[parseInt(window.rem[ii])];
if(zz.length==0){
ss=getCand(window.rem[ii]).split(",");
if(ss.length==1&&ss[0]!=""){
window.log+=ss[0]+" on "+toRC(window.rem[ii])+"<br>";
xo=writeNumber(ss[0],window.rem[ii]);//wn
jen=xo.length;
if(jen>0){
for(yy=0;yy<jen;yy++){
dd.push(xo[yy]);
}
}
dd.push(window.rem[ii]);
ll=-1;
}else{
if(ss.length>1){
window.sdk[parseInt(window.rem[ii])]=ss;
}
}
}else if(zz.length==1){
alert("solSudoku warning");
dd.push(window.rem[ii]);
}
}
delRem(dd);
}
if(window.rem.length!=0){
//failed to solve by simple solving
//start advanced solving
}
}
//============================================================================
newSudoku("032060007000008290000509000000300016800000002610002000000405000045800000700010530");
solSudoku();
//000124039007093056390000200040708000008050400000201060005000078270980300980517000
//032060007000008290000509000000300016800000002610002000000405000045800000700010530
//delCand("5","55",true);
//alert("["+sdk.join("][")+"]");
log+="--- Time: "+(new Date().getTime()-perf)+" milliseconds ---";
brd="<table id=\"brd\" cellpadding=\"0\" cellspacing=\"0\"><tbody><tr>";
for(i=0;i<sdk.length;i++){
if(i%9==0){
if(i!=0&&i!=80){
brd+="</tr><tr>";
}
}
if(sdk[i].length==0){
brd+="<td> </td>";
}
if(sdk[i].length==1){
brd+="<td>"+sdk[i]+"</td>";
}
if(sdk[i].length>1){
brd+="<td><span>"+sdk[i].join(" ")+"</span></td>";
}
}
brd+="</tr></tbody></table>";
log="<div id=\"log\">"+log+"</div>";
window.onload=function(){
document.body.innerHTML+=brd+log;
}
答案 0 :(得分:8)
一切正常,请参阅here
PS:您应该选择no wrap (head)
选项。
答案 1 :(得分:7)
如果您查看jsFiddle的来源,您会看到所有的javascript都已包含在window.onload
函数中。
在调用外部window.onload函数之后,内部函数将不会执行,因为文档已经加载:
window.onload=function(){
window.onload=function(){
// this code will never get executed.
}
}