Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

278
Views
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 answers
Answer question

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 Report

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!