Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

285
Visualizações
quiero usar getRow dentro de allRowsValid para el solucionador de sudoku, ¿cómo puedo resolverlo?

Así que he estado tratando de escribir un solucionador de sudoku y tuve que completar métodos dentro de una clase extendida. Aquí está el encabezado del código:

 class Board extends EventEmitter { constructor(board) { super(); this.board = board || [ [0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0], ]; } getRow(index) { return this.board[index]; }

aquí tengo que verificar si todas las filas dentro de ese tablero son válidas (del 1 al 9 sin repetición):

 allrowsValid() { for (let c = 0; c < 9; ++c) { **var row = this.getRow(c)** ***//what i need to fix*** for ( let num = 1; num <= 9; ++num){ if (this.board[row][c] === num) { return false; } } } return true; }

Cómo puedo resolverlo ? Gracias !

about 4 years ago · Juan Pablo Isaza
2 Respostas
Responde à pergunta

0

Depende de si "válido" significa "full house" (todos los números en el rango [1-9]) o no válido (algunos números en el rango [1-9] sin repetición). He usado aritmética de bits para abordar específicamente esto en Sudoku en el pasado:

 // class methods... validHouse( array) { // no non zero repetitions let allowed = 0b1111111110; for( let index = 9; index--;) { if( array[index]) { let position = 1 << array[index]; if( !(allowed & position)) { return false; // repetition } allowed &= ~position; } } return true; } fullHouse(array) { // all house numbers completed let required = 0b1111111110; for( let index = 9; index--;) { if( array[index]) { let position = 1 << array[index]; required &= ~position; } } return required == 0; }

Entonces, si quisiera saber si todas las filas estaban completas o eran válidas, podría usar

 allRowsFull() { return this.board.every(row => this.fullHouse(row)); } allRowsValid() { return this.board.every(row => this.validHouse(row)); }

El punto aquí no es presionarlo para que use la aritmética binaria (es un gusto adquirido 1 ), sino señalar que una fila es solo uno de los tres tipos de casas de Sudoku (fila, columna y caja) que deben tenerse en cuenta.


1 Respuesta actualizada para usar el operador de complemento bit a bit ( ~ ) en lugar del operador lógico no ( ! ) en las operaciones de borrado de bits. No son intercambiables.

about 4 years ago · Juan Pablo Isaza Relatório

0

if (this.board[row][c] === num)

El problema está en esta línea, está tratando de obtener la fila usando la fila. La variable de row ya hace referencia a la fila.

Entonces, la solución es reemplazar this.board[row][c] con row[c]

 for ( let num = 1; num <= 9; ++num){ if (row[c] === num) { return false; } }
about 4 years ago · Juan Pablo Isaza Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda