Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #11 (permalink)  
Старый 29.05.2010, 15:44
Аватар для subzey
Пионэр
Отправить личное сообщение для subzey Посмотреть профиль Найти все сообщения от subzey
 
Регистрация: 16.11.2009
Сообщений: 1,322

http://www.google.com/search?rls=ru&...t+array+unique
Ответить с цитированием
  #12 (permalink)  
Старый 29.05.2010, 15:51
Профессор
Отправить личное сообщение для exec Посмотреть профиль Найти все сообщения от exec
 
Регистрация: 21.01.2010
Сообщений: 1,022

рони, спасибо за помощь. То, что нужно.
Ответить с цитированием
  #13 (permalink)  
Старый 19.12.2015, 15:50
Аватар для Stroy
Интересующийся
Отправить личное сообщение для Stroy Посмотреть профиль Найти все сообщения от Stroy
 
Регистрация: 29.10.2014
Сообщений: 25

Здравствуйте. При использовании данной функции,взятой из этой темы(спасибо рони), очень часто выскакивает значение "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);
Ответить с цитированием
  #14 (permalink)  
Старый 19.12.2015, 16:51
без статуса
Отправить личное сообщение для Deff Посмотреть профиль Найти все сообщения от Deff
 
Регистрация: 25.05.2012
Сообщений: 8,219

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, 19.12.2015 в 23:02.
Ответить с цитированием
  #15 (permalink)  
Старый 19.12.2015, 21:30
Аватар для Stroy
Интересующийся
Отправить личное сообщение для Stroy Посмотреть профиль Найти все сообщения от Stroy
 
Регистрация: 29.10.2014
Сообщений: 25

Deff,
Есть 2-х мерный массив 9Х9. Хочу построчно заполнить его случайными числами в диапазоне 1-9. Каждая ячейка имеет свой id. Буква(a-i)+цифра от1-9.
С функцией взятой из этой темы вроде все получается. Но частенько во второй половине массива по горизонтали вместо числа, выдается значение undefied.
Ответить с цитированием
  #16 (permalink)  
Старый 19.12.2015, 21:50
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,109

Stroy,
так взяли бы код из 9 поста и запустили девять раз , а не проверочный из 10 или вам нужно чтоб кроме строк и столбцы были разными?судоку ?
Ответить с цитированием
  #17 (permalink)  
Старый 19.12.2015, 22:36
без статуса
Отправить личное сообщение для Deff Посмотреть профиль Найти все сообщения от Deff
 
Регистрация: 25.05.2012
Сообщений: 8,219

Сообщение от Stroy
Есть 2-х мерный массив 9Х9. Хочу построчно заполнить его случайными числами в диапазоне 1-9. Каждая ячейка имеет свой id.
Запустите функцию function Peremeshivalka(9) - 9 раз(можно в цикле)
При каждом запуске получите массив случайный из 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, 19.12.2015 в 22:50.
Ответить с цитированием
  #18 (permalink)  
Старый 20.12.2015, 12:17
Аватар для Stroy
Интересующийся
Отправить личное сообщение для Stroy Посмотреть профиль Найти все сообщения от Stroy
 
Регистрация: 29.10.2014
Сообщений: 25

Сообщение от рони Посмотреть сообщение
Stroy,
так взяли бы код из 9 поста и запустили девять раз , а не проверочный из 10 или вам нужно чтоб кроме строк и столбцы были разными?судоку ?
Да,судоку. Сначала идет заполнение построчно, потом будет проверка по столбцам и по матрицам 3х3.
Ответить с цитированием
  #19 (permalink)  
Старый 20.12.2015, 12:20
Аватар для Stroy
Интересующийся
Отправить личное сообщение для Stroy Посмотреть профиль Найти все сообщения от Stroy
 
Регистрация: 29.10.2014
Сообщений: 25

Deff,
Спасибо. Попробую прикрутить Вашу функцию. Или ф-цию рони из поста 9.
Ответить с цитированием
  #20 (permalink)  
Старый 20.12.2015, 13:27
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,109

судоку sudoku
Stroy,
Судоку, простая генерация в лоб ... если вы видите число 300000 значит вам не повезло.
<!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>

Последний раз редактировалось рони, 20.12.2015 в 13:43.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Сделать элементы формы недоступными Compas Общие вопросы Javascript 4 06.10.2012 21:59
Пустые элементы массива lammeR Общие вопросы Javascript 5 25.05.2010 02:59
Как удалить повторные элементы из массива? YISHIMITSY Общие вопросы Javascript 1 04.05.2010 00:04
Выбрать все элементы кроме $(this) shustrikk jQuery 2 13.03.2010 14:17
глюк форума Gvozd Сайт Javascript.ru 11 18.03.2009 14:37