|
рони, спасибо за помощь. То, что нужно.
|
Здравствуйте. При использовании данной функции,взятой из этой темы(спасибо рони), очень часто выскакивает значение "undefined". Не могу понять, где я накосячил переделывая написанное рони в функцию.
function addArray(letterOfArray, arrayOfCorrelation) { function usefloor(min, max) { return Math.floor(Math.random() * (max - min + 1)) + min; } var m = [], s = [], t = []; var l = 9; //длина массива var min = 1; var max = 9; //создание массива m с неуникальными элементами for (var i = 0; i < l; i++) { m[i] = usefloor(min, max) } var test = m; //создание массива t из оставшихся элементов на случай замены for (var i = 0; i <= (max - min); i++) { s[i] = 1; } for (var i = 0; i < l; i++) { s[m[i]] = 0; } for (var i = 0; i < s.length; i++) { if (s[i] == 1) t.push(i) } test = t; //проверка m на уникальность и замена повторяющихся элементов for (var i = 0; i < l; i++) { for (var k = i + 1; k < l; k++) { if (m[k] == m[i] || m[k]=="undefined") { n = usefloor(1, (t.length - 1)); m[k] = t[n]; t.splice(n, 1); } } } for (var i = 0; i < l; i++) { var count = i + 1; document.getElementById(letterOfArray + count).value = m[i]; } var arrayOfCorrelation =this.arrayOfCorrelation= m; return arrayOfCorrelation; } var arrayA; addArray("a", arrayA); addArray("b", arrayA); addArray("c", arrayA); addArray("d", arrayA); addArray("e", arrayA); addArray("f", arrayA); addArray("g", arrayA); addArray("h", arrayA); addArray("i", arrayA); document.write(arrayA); |
Stroy,
Вы лучше описали бы, что Вы хотите получить в итоге? Случайно перемешанный массив ? function Peremeshivalka(lng){ var a = {},i,out=[],n=0; for(i=0;i<lng;i++)a[i]=i; while (n!=lng){ i = Math.floor(lng*Math.random()); if(typeof(a[i])!='undefined'){ out.push(a[i]); delete a[i]; n++; } } return out; } var arr = "abcdefghi".split(''); //Массив перемешивания; var lng = arr.length; var index = Peremeshivalka(lng); var out = []; for(var i=0;i<lng;i++)out.push(arr[index[i]]); alert(out) |
Deff,
Есть 2-х мерный массив 9Х9. Хочу построчно заполнить его случайными числами в диапазоне 1-9. Каждая ячейка имеет свой id. Буква(a-i)+цифра от1-9. С функцией взятой из этой темы вроде все получается. Но частенько во второй половине массива по горизонтали вместо числа, выдается значение undefied. |
Stroy,
так взяли бы код из 9 поста и запустили девять раз , а не проверочный из 10 или вам нужно чтоб кроме строк и столбцы были разными?судоку ? |
Цитата:
При каждом запуске получите массив случайный из 9 элементов function Peremeshivalka(lng){ var a = {},i,out=[],n=0; for(i=0;i<lng;i++)a[i]=i; while (n!=lng){ i = Math.floor(lng*Math.random()); if(typeof(a[i])!='undefined'){ out.push(a[i]+1); //Добавил 1(чтобы не от 0) delete a[i]; n++; } } return out; } var out =[]; for(var i=0;i<9;i++){ out.push(Peremeshivalka(9).join(','));} alert(out.join(',\n')) // ========================== Хотя пост 9 делает тож самое не хуже // Замерил на 10000 элементах - мой быстрее :) (наверно splice(n,1)[0]; дольше, чем delete a[i]; |
Цитата:
|
Deff,
Спасибо. Попробую прикрутить Вашу функцию. Или ф-цию рони из поста 9. |
судоку sudoku
Stroy,
Судоку, простая генерация в лоб :) ... если вы видите число 300000 значит вам не повезло. :cray: <!DOCTYPE HTML> <html> <head> <title>sudoku</title> <meta charset="utf-8"> </head> <body> <script> Array.prototype.shuffle = function() { for (var a = this.length - 1; 0 < a; a--) { var b = Math.floor(Math.random() * (a + 1)), c = this[b]; this[b] = this[a]; this[a] = c } return this }; for (var arr = [], b = [], obj = {}, column = {}, d = 0, i = 0; 9 > i; i++) b.push(i + 1), obj[i] = {}, column[i] = {}; for (var k = 0; 9 > k;) { b = b.slice().shuffle(); var a = b.every(function(c, e, f) { f = (e / 3 | 0) + 3 * (k / 3 | 0); return !obj[f][c] && !column[e][c] }); d++; if (300000 <= d) break; a && (arr.push(b), b.forEach(function(c, e, f) { obj[(e / 3 | 0) + 3 * (k / 3 | 0)][c] = column[e][c] = !0 }), k++) }; document.write(arr.join('<br>')+ '<br>'+d) </script> </body> </html> |
Часовой пояс GMT +3, время: 07:15. |