Skip to content

Instantly share code, notes, and snippets.

@panterozo
Created February 23, 2018 21:23
Show Gist options
  • Save panterozo/85052bd4e92e1cbc91459a728541f6b6 to your computer and use it in GitHub Desktop.
Save panterozo/85052bd4e92e1cbc91459a728541f6b6 to your computer and use it in GitHub Desktop.
Ejercicios Realizados en CodeFights.com
function checkSize(seenBlock,value){
let count = seenBlock.size;
seenBlock.add(value);
if(seenBlock.size==count && value!="."){
console.log("break bloque: "+value);
return false;
}
return true;
}
function sudoku2(grid) {
let retorno = true;
let auxBlock = 0;
/*Arrays Para Bloques de 3x3*/
let seenBlockA = new Set();
let seenBlockB = new Set();
let seenBlockC = new Set();
for(let i=0; i<9; i++){
/*Arrays para eje X e Y*/
let seenX = new Set();
let seenY = new Set();
for(let j=0; j<9; j++){
/***************************/
/* Verifico Fila y Columna */
/***************************/
/*Es mas eficiente correr esta validacion primero que la de bloque*/
/*Verifico si ya existe el valor en el eje X*/
let value0 = grid[i][j];
if(seenX.has(value0) && value0!="."){
retorno = false;
console.log("break Axis X")
break;
}
seenX.add(value0);
/*Verifico si ya existe el valor en el eje Y*/
let value1 = grid[j][i];
if(seenY.has(value1) && value1!="."){
retorno = false;
console.log("break Axis Y")
break;
}
seenY.add(value1);
/*********************/
/* Verifico el bloque*/
/*********************/
if(j%3==0 && j!=0){
/*De tres en tres*/
auxBlock++;
}
switch(auxBlock){
case 0:
retorno = checkSize(seenBlockA,grid[i][j]);
break;
case 1:
retorno = checkSize(seenBlockB,grid[i][j]);
break;
case 2:
retorno = checkSize(seenBlockC,grid[i][j]);
break;
}
if(retorno==false){
/*Existe repetido en el bloque*/
break;
}
}//fin for 1<9
if(retorno==false){
/*Rompo ciclo for*/
break;
}
auxBlock=0;
if((i+1)%3==0 && i != 0){
/*Ninguno de los tres bloques horizontales tiene errores*/
/*Se limpian objetos*/
seenBlockA = new Set();
seenBlockB = new Set();
seenBlockC = new Set();
}
}
return retorno;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment