Num_Tab=5;var DCM=window.document;function Samurai(){this.Tablero=new Array(Num_Tab);this.Tablero[0]=new Sudoku(0,0);this.Tablero[1]=new Sudoku(0,12);this.Tablero[2]=new Sudoku(6,6);this.Tablero[3]=new Sudoku(12,0);this.Tablero[4]=new Sudoku(12,12);this.Quien_Contiene=Quien_Contiene;this.Reinicia=Reinicia;this.Inicializa_Tablero=Inicializa_Tablero;this.Resolver=Resolver;this.Chequea=Chequear;this.Genera_Tablero=Genera_Tablero;this.Preparar=Preparar;this.Muestra_Ayuda=Mostrar_Ayuda;this.marca=marca;this.Guardar_Tablero=Guardar_Tablero;this.Leer_Tablero=Leer_Tablero;}function Quien_Contiene(x,y){for (var i=0;i<Num_Tab;i++) if (this.Tablero[i].Contiene(x,y)) return i;}function Inicializa_Tablero(){DCM.getElementById('buffer').innerHTML="";DCM.getElementById('buffer').style.visibility='hidden';if (eval(Vent_Sol)) Vent_Sol.close();for (var i=0;i<Num_Tab;i++) this.Tablero[i].Inicializar();DCM.getElementById('Resolver').disabled=true;DCM.getElementById("Solucion").disabled=true;Solucion="";}function Reinicia(){var i;Solucion="";for (i=0;i<Num_Tab;i++) this.Tablero[i].Reiniciar();for (i=0;i<Num_Tab;i++) if (i!=2) Interseccion(this.Tablero[i],this.Tablero[2]);Posiciona_Primero(DCM.Tablero_Juego);DCM.getElementById('Solucion').disabled=true;Solucion+="<h2>Soluci&oacute;n<\/h2>";}function Posiciona_Primero(obj){var i=0;while (i<obj.length && obj.elements[i].disabled) i++;if (i<obj.length) obj.elements[i].focus();}function Resolver(){var i,j;var tmp,Hay=0;DCM.getElementById('buffer').innerHTML="";DCM.getElementById('buffer').style.visibility='hidden';do { Hay=0; for (i=0;i<Num_Tab;i++) { tmp=this.Tablero[i].Quedan; if (tmp>0) this.Tablero[i].Resuelve(); else continue; Hay+=tmp-this.Tablero[i].Quedan; if (Hay>0) { if (i!=2) Interseccion(this.Tablero[i],this.Tablero[2]); else for (j=0;j<Num_Tab;j++) if (j!=2) Interseccion(this.Tablero[j],this.Tablero[2]); } }}while (Hay!=0);DCM.getElementById('Solucion').disabled=false;}function Interseccion(objA,objB){var i,j,a,b,c;var XA,XB,YA,YB;for (i=objA.XOrigen;i<objA.XOrigen+objA.tamano;i+=3) for (j=objA.YOrigen;j<objA.YOrigen+objA.tamano;j+=3) if (objB.Contiene(i,j)) for (a=i;a<i+3;a++) for (b=j;b<j+3;b++) { XA=a-objA.XOrigen; XB=a-objB.XOrigen; YA=b-objA.YOrigen; YB=b-objB.YOrigen; for (c=0;c<9;c++) if (objA.Posibles[XA][YA][c]!=objB.Posibles[XB][YB][c]) objA.Posibles[XA][YA][c]=objB.Posibles[XB][YB][c]=0; }}function Genera_Tablero(){var i,j;var cuadro=eval(tableros);var numeros=new Array(9);var num=new Array(1,2,3,4,5,6,7,8,9);var Long_Tab=cuadro.length;Actual=(isNaN(eval(GetCookie("NSamurai"))) ? Actual : parseInt(GetCookie("NSamurai")));this.Inicializa_Tablero();for (i=0;i<9;i++) { j=Math.floor(num.length*Math.random()); numeros[i]=num[j]; num.splice(j,1);}for (i=0;i<Num_Tab;i++) this.Tablero[i].Inicializar();switch (Math.floor(Actual/Long_Tab)) { case 0: this.Tablero[0].Genera_Cuadro(cuadro[Actual],numeros); this.Tablero[1].Genera_Cuadro(cuadro[Actual+1],numeros); this.Tablero[2].Genera_Cuadro(cuadro[Actual+2],numeros); this.Tablero[3].Genera_Cuadro(cuadro[Actual+3],numeros); this.Tablero[4].Genera_Cuadro(cuadro[Actual+4],numeros); break; case 1: this.Tablero[0].Genera_Cuadro(Ref_H(cuadro[(Actual+3)%Long_Tab]),numeros); this.Tablero[1].Genera_Cuadro(Ref_H(cuadro[(Actual+4)%Long_Tab]),numeros); this.Tablero[2].Genera_Cuadro(Ref_H(cuadro[(Actual+2)%Long_Tab]),numeros); this.Tablero[3].Genera_Cuadro(Ref_H(cuadro[Actual%Long_Tab]),numeros); this.Tablero[4].Genera_Cuadro(Ref_H(cuadro[(Actual+1)%Long_Tab]),numeros); break; case 2: this.Tablero[0].Genera_Cuadro(Ref_V(cuadro[(Actual+1)%Long_Tab]),numeros); this.Tablero[1].Genera_Cuadro(Ref_V(cuadro[Actual%Long_Tab]),numeros); this.Tablero[2].Genera_Cuadro(Ref_V(cuadro[(Actual+2)%Long_Tab]),numeros); this.Tablero[3].Genera_Cuadro(Ref_V(cuadro[(Actual+4)%Long_Tab]),numeros); this.Tablero[4].Genera_Cuadro(Ref_V(cuadro[(Actual+3)%Long_Tab]),numeros); break; default: this.Tablero[0].Genera_Cuadro(cuadro[(Actual+4)%Long_Tab].split('').reverse().join(''),numeros); this.Tablero[1].Genera_Cuadro(cuadro[(Actual+3)%Long_Tab].split('').reverse().join(''),numeros); this.Tablero[2].Genera_Cuadro(cuadro[(Actual+2)%Long_Tab].split('').reverse().join(''),numeros); this.Tablero[3].Genera_Cuadro(cuadro[(Actual+1)%Long_Tab].split('').reverse().join(''),numeros); this.Tablero[4].Genera_Cuadro(cuadro[(Actual)%Long_Tab].split('').reverse().join(''),numeros); break;}for (i=0;i<Num_Tab;i++) if (i!=2) Interseccion(this.Tablero[i],this.Tablero[2]);Posiciona_Primero(DCM.Tablero_Juego);DCM.getElementById('Resolver').disabled=false;Actual=(Actual+5)%(Long_Tab*4);Guardar_Cookie("NSamurai",Actual);Solucion+="<h2>Soluci&oacute;n<\/h2>";}function Ref_V(tab){var i,j;var resul="",cad=tab.split('');for (i=0;i<9;i++) for (j=8;j>=0;j--) resul+=cad[9*i+j];return resul;}function Ref_H(tab){var i,j;var resul="",cad=tab.split('');for (i=8;i>=0;i--) for (j=0;j<9;j++) resul+=cad[9*i+j];return resul;}function Guardar_Tablero(){var miarray=new Array();for (var i=0;i<Num_Tab;i++) { Guardar_Cookie("Samurai"+i,this.Tablero[i].Tablero); miarray=GetCookie("Samurai"+i).split(','); if (miarray.length<1) { alert("No se puede guardar el tablero. Revisa la configuración de cookies del navegador."); return; }}alert("Tablero Salvado.");}function Leer_Tablero(){var a,i,j;var miarray=new Array();Para();for (a=0;a<Num_Tab;a++) { miarray=GetCookie("Samurai"+a).split(','); if (miarray.length>1) { for (i=0;i<9;i++) for (j=0;j<9;j++) this.Tablero[a].Tablero_save[i][j]=miarray[9*i+j]; } else { alert("No hay ningún tablero guardado"); this.Inicializa_Tablero(); return; }}this.Reinicia();DCM.getElementById('Resolver').disabled=false;Arranca();}function Chequear(){var Retorno=false;for (var i=0;i<Num_Tab;i++) Retorno=Retorno || this.Tablero[i].Chequea();(Retorno==true ? alert("Los elementos en rojo no son validos.") : window.status="Todo parece ir correctamente");}function Preparar(){var i;var Salvado=this.Tablero[0].ESav;for (i=0;i<Num_Tab;i++) this.Tablero[i].Prepara();for (i=0;i<Num_Tab;i++) if (i!=2) Interseccion(this.Tablero[i],this.Tablero[2]);Posiciona_Primero(DCM.Tablero_Juego);DCM.getElementById('Resolver').disabled=false;if (Salvado==false) Solucion+="<h2>Soluci&oacute;n<\/h2>";}function Mostrar_Ayuda(x,y){var tabla=this.Tablero[this.Quien_Contiene(x,y)];return tabla.CPOS(x-tabla.XOrigen,y-tabla.YOrigen);}function marca(OBJ,x,y){var i,elementos=DCM.Tablero_Juego.length;var Estado,Terminado=true;if (DCM.formulario.Ayuda.checked==true) { var tabla=this.Tablero[this.Quien_Contiene(x,y)]; OBJ.style.color=((tabla.Posibles[(x-tabla.XOrigen)][(y-tabla.YOrigen)][parseInt(OBJ.value)-1]>0) ? '#008877' : '#FF0000');}else OBJ.style.color='#0000CC';for (i=0;i<elementos;i++) if (isNaN(parseInt(DCM.Tablero_Juego.elements[i].value))) return;for (i=0;i<Num_Tab;i++) { Estado=this.Tablero[i].ESav; this.Tablero[i].ESav=true; Terminado&= this.Tablero[i].Prepara(); this.Tablero[i].ESav=Estado;}if (Terminado) { DCM.getElementById('buffer').innerHTML=""; DCM.getElementById('buffer').style.visibility='hidden'; alert("Lo has conseguido. Tiempo empleado: "+timeNow()); Para();}else alert("Hay algunos errores");}
