Terdapat tatasusunan dua dimensi, bagaimana untuk memotongnya (tidak bersebelahan dengan bahagian atas, bawah, kiri, dan kanan) untuk mendapatkan 2 atau 3 nombor rawak?
Susunan:
var a = [
[0, 1],
[2, 3],
[4, 5],
[6, 7]
];
Saya menulis seperti ini, tetapi ia terasa sangat tegar, nombor yang diperoleh tidak sekata, dan kodnya agak kembung Adakah sesiapa mempunyai penyelesaian yang lebih baik?
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()
Syaratnya bahagian atas, bawah, kiri dan kanan tidak bersebelahan. Dengan mengandaikan bahawa koordinat titik permulaan ialah (0,0), maka titik berikut (-1, 0), (0, -1), (1, 0), (0, 1) bertopeng. Ciri-ciri titik ini ialah: nilai mutlak x ditambah nilai mutlak y sama dengan 1. Nilai koordinat x dan y secara rawak dalam julat yang munasabah dan tambahkan nilai mutlak setiap satu Jika ia tidak sama dengan 1 dan koordinat ini belum diambil sebelum ini, ia adalah sah.
Berikut ialah idea penggodaman yang sangat mudah tetapi benar-benar memuaskan, iaitu dengan sengaja [mengambil nombor secara bersilang] untuk mencapai keperluan [atas, bawah, kiri dan kanan tidak bersebelahan] Ia hanya memerlukan dua baris: