Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 14.10.2016, 23:35
Новичок на форуме
Отправить личное сообщение для drey84 Посмотреть профиль Найти все сообщения от drey84
 
Регистрация: 14.10.2016
Сообщений: 2

Как выбрать из массива рядомстоящие одинаковые числа и посчитать их?
//смысл - игра - 20 раундов, выпасть может одно из 3 значений (случайно), в итоге мне надо узнать сколько раз //выпала комбинация из максимального количества нулей, т.е. в случайном наборе например //выпадает 1,2,2,1,1,1,1,1,0,0,0,0,2,1,1,2,0,0,2,1 - результат должен быть соответственно - 4 т.к. это //максимальное количество выпавших подряд нулей, подскажите куда копать, как сделать, советовали чтото с // do...while - но тут я вообще темный)
var stavka = []; //Может быть 0, 1, 2 как ниже в переменных
var red = 0;
var black = 1;
var zero = 2;
alert(stavka);
var raunds = 20; //количество бросков 
var i = 0; // счетчик

for(i=0; i<raunds; i++) {
    stavka.push(Math.round(Math.random()*2)); //происходит случайный выбор числа (0, 1, 2) в 20 бросков 
}
var rezultat=(stavka); //Записываю массив в переменную

for (i=0; i<rezultat.length; i++) { //Получаю кол-во сколько раз выпало Красное (var red = 0;)
    if (rezultat[i] == 0 ) {
        red++;
    }
}

for(find in rezultat){ //Получаю индексы всех значений выпавших Красное (var red = 0;)
  if(rezultat[find]=="0") {
    var index=(rezultat);
    alert(find)
  }
 } 
alert("Количество выпадения red" + red);

//Как связать поиск нулей, их индексов и получить результат в виде количества нулей в максимальной последовательности?

</script>
Ответить с цитированием
  #2 (permalink)  
Старый 14.10.2016, 23:57
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,105

drey84,
var arr = [1,2,2,1,1,1,1,1,0,0,0,0,2,1,1,2,0,0,2,1];
function foo(b, c) {
    return b.reduce(function(a, b) {
        a.temp = b == c ? ++a.temp : 0;
        a.temp > a.max && (a.max = a.temp);
        return a
    }, {
        temp: 0,
        max: 0
    }).max
};
alert(foo(arr,0))
Ответить с цитированием
  #3 (permalink)  
Старый 15.10.2016, 00:23
Новичок на форуме
Отправить личное сообщение для drey84 Посмотреть профиль Найти все сообщения от drey84
 
Регистрация: 14.10.2016
Сообщений: 2

Спасибо а всетаки не так сжато это можно осуществить через циклы?
спасибо с вашим массивом работает, а вот куда мне это вставлять буду разбираться

а можно это как то не так слишком компактно - я только начал язык изучаю - в такой записи понимаю только первую и последнюю строку
Ответить с цитированием
  #4 (permalink)  
Старый 15.10.2016, 00:54
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,105

drey84,
var arr = [1,2,2,1,1,1,1,1,0,0,0,0,2,1,1,2,0,0,2,1], temp = 0, max = 0, num = 0;
for (var i=0; i<arr.length; i++)  {
if(arr[i] == num) temp++;
else temp = 0;
if(temp > max) max = temp;
}
alert(max)
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как выбрать элемент, который отправлялся ajax Nifler jQuery 5 20.08.2015 08:42
Как выбрать элемент, который отправлялся ajax Nifler jQuery 2 20.08.2015 08:25
Как сделать, чтобы при вводе числа в поле добавлялись разделители групп разрядов? Hurray Элементы интерфейса 13 18.02.2015 14:07
Как улучшить сортировку массива? Armen Общие вопросы Javascript 3 12.10.2014 20:17
Можно ли как для произвольного массива создавать вызовы функций , имеющих на входе kefi Общие вопросы Javascript 3 17.04.2009 16:53