Il existe un tableau bidimensionnel, comment le couper (non adjacent au haut, au bas, à gauche et à droite) pour obtenir 2 ou 3 nombres aléatoires ?
Tableau :
var a = [
[0, 1],
[2, 3],
[4, 5],
[6, 7]
];
J'en ai écrit un comme celui-ci, mais cela semble très rigide, les nombres obtenus ne sont pas égaux et le code est un peu gonflé. Quelqu'un a-t-il une meilleure solution ?
function select() {
var a = [
[0, 1],
[2, 3],
[4, 5],
[6, 7]
];
var lastSelect = -1;
for (var i = 0; i < a.length; i++) {
var index = getRandomNumber(lastSelect, a[i].length);
console.log(a[i][index]);
lastSelect = index;
}
}
function getRandomNumber(lastSelect, max) {
var random = Math.floor(Math.random() * max);
if (random == lastSelect) return getRandomNumber(lastSelect, max);
else return random;
}
select()
La condition est que le haut, le bas, la gauche et la droite ne soient pas adjacents. En supposant que la coordonnée du point de départ est (0,0), alors les points suivants (-1, 0), (0, -1), (1, 0), (0, 1) sont masqués. Les caractéristiques de ces points sont : la valeur absolue de x plus la valeur absolue de y est égale à 1. Coordonnez aléatoirement les valeurs x et y dans une plage raisonnable et ajoutez les valeurs absolues de chacune. Si elle n'est pas égale à 1 et que cette coordonnée n'a pas été prise auparavant, c'est légal.
Voici une idée de hack très simple mais tout à fait satisfaisante, qui consiste à [prendre les nombres en croix] pour atteindre l'exigence [le haut, le bas, la gauche et la droite ne sont pas adjacents] Cela ne nécessite que deux lignes :