Created
February 23, 2018 21:23
-
-
Save panterozo/85052bd4e92e1cbc91459a728541f6b6 to your computer and use it in GitHub Desktop.
Ejercicios Realizados en CodeFights.com
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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