Creé una aplicación web Binary Sudoku que utiliza una cadena de funciones recursivas para generar una cuadrícula aleatoria resuelta, en cuyo punto la cuadrícula se reduce, mediante algunas funciones de reducción, a unas pocas fichas iniciales para que los jugadores las vuelvan a ensamblar (resolver) . Por el bien de mi propia curiosidad, estoy tratando de construir un objeto constructor dentro de mi clase de generador principal que hará un seguimiento de cuántas veces se ejecuta cada función recursiva, cada vez que genero un nuevo tablero (no estoy interesado en conservar estos datos más allá de una sola instancia de tablero). También me gustaría registrar el tiempo de ejecución total de esta operación después de que se haya generado el tablero.
Hasta ahora, he intentado implementar este objeto dentro de mi constructor:
this.stats = { rowGenerator: 0, rowAssembler: 0, colTotalCheck: 0, colUniqueCheck: 0, runtime: 0 };Dentro de cada una de mis cuatro funciones recursivas, he colocado estos incrementos en la parte superior:
this.stats.rowGenerator++; this.stats.rowAssembler++; this.stats.colTotalCheck++; this.stats.colUniqueCheck++;Actualmente, esto devuelve un TypeError para cada referencia a los respectivos valores de 'estadísticas'.
Uncaught TypeError: Cannot read properties of undefined (reading 'colUniqueCheck')También coloqué métodos de temporización antes y después de la cadena recursiva para registrar el tiempo de ejecución, pero desafortunadamente la única respuesta de temporización que recibo es '0ms'. Los métodos de temporización se escriben así:
startTime() { // before recursive chain return performance.now(); }; endTime() { // after recursive chain return performance.now(); }; totalTime() { const end = this.endTime(); const start = this.startTime(); return `Runtime: ${end - start}ms`; };He buscado problemas similares, pero no puedo encontrar ninguna información útil que sea exclusiva de estos problemas, tal vez el seguimiento de estas pequeñas estadísticas triviales no sea realista dentro de una clase.
Cualquier idea es apreciada.
Está llamando a this.checkColumnsUnique (que accede a this.stats ) incluso antes de inicializar this.stats :
this.fillBoard = this.checkColumnsUnique(); this.stats = { rowGenerator: 0, rowAssembler: 0, colTotalCheck: 0, colUniqueCheck: 0, runtime: 0 };Si invierte el orden de estas dos declaraciones, funcionará.
(Sin embargo, hay otro problema: en checkColumnsUnique llamas a checkColumnsUnique sin this. delante).