Tengo un código a continuación, pero hay un problema con la implementación actual en la función entryToDel. No siempre producirá n coordenadas distintas para dejarlas en blanco en un rompecabezas. Siempre debe producir una matriz con n elementos que consisten en matrices de dos elementos que almacenan las coordenadas de un elemento y cada elemento de la salida debe producir coordenadas distintas, pero no estoy seguro de cómo hacerlo, ya que estoy bastante nuevo en esto
// a function to randomly select n (row,column) entries of a 2d array function entriesToDel(n) { var array = []; for (var i = 0; i < n; i++) { var row = Math.round(3*Math.random()); var col = Math.round(3*Math.random()); array.push([row,col]); } return array; }Una solución simple sería usar un conjunto en lugar de una matriz y agregar números aleatorios hasta que tenga suficientes entradas únicas.
En caso de que no sepa qué es un conjunto: un conjunto funciona de manera similar a una matriz, pero no permite duplicados (se ignorarán los duplicados). (Tampoco le da a los elementos una posición fija; no puede acceder a una entrada de un conjunto con set[i] )
const size = 3 // define size of grid in variable function entriesToDel(n) { // create set of positions const positions = new Set() // create set while(positions.size < n) { // repeat until set has enough entries positions.add(Math.floor((size ** 2) * Math.random())) // add random position (duplicates will be ignored by the set) } // convert set of positions to array of coordinates const cords = [] for(const position of positions) { // iterate through positions // convert position to column and row and add to array const row = Math.floor(position / size) const column = position % size cords.push([row, column]) } return cords }Esta solución es agradable y simple. Un problema es que, si tiene mucha mala suerte, el generador de números aleatorios seguirá generando el mismo número, lo que resultará en un tiempo de cálculo posiblemente muy largo. Si desea excluir esta posibilidad (muy improbable), sería razonable utilizar la solución más compleja proporcionada por James.