Войти на сайт

Авторизация, ждите ...
×

ТЕМА: Вопрос по массивам Javascript

Вопрос по массивам Javascript 4 года 8 мес. назад #115589

  • Seibur
  • Seibur аватар
  • Вне сайта
  • Просветлённый
  • Сообщений: 371
  • Спасибо получено: 308
  • ВетеранРазработчик
Доброй ночи


Подскажите пожалуйста решение

Есть простой одномерный массив 0,1,2,3

и заполняется он рандомно числами:

1,1,1,1 2,2,2,2 3,3,3,3 4,4,4,4

Нужно сделать проверку на 1,2,3,4 случайных, одинаковых, рядом стоящих значений в массиве.

Вопрос: как это сделать?

Пример:

2,2,3,2 или 3,2,2,1 или 4,1,2,2 - пара 2 рядом стоящих, одинаковых числа

2,2,4,4 - две пары рядом стоящих, случайных значений

если 1,1 или 2,2 или 3,3 или 4,4 - стоят рядом в массиве, то происходит действие

1,1,1,4 - 3 рядом стоящих, одинаковых числа

4,4,4,4 - 4 рядом стоящих, одинаковых числа
Будь таким, каким хочешь казаться.
Последнее редактирование: 4 года 8 мес. назад от Seibur.
Администратор запретил публиковать записи гостям.

Вопрос по массивам Javascript 4 года 8 мес. назад #115590

  • MaltonTheWarrior
  • MaltonTheWarrior аватар
  • Вне сайта
  • Просветлённый
  • Любопытненький
  • Сообщений: 327
  • Спасибо получено: 340
  • 3 место Готв1 место в ГотвДаритель СтимкеяПроект месяца 2 местоВетеран3 место
Я, конечно, не знаток джава скрипта, но... Не проще ли, именно проще, не говорю, что правильнее, будет конвертнуть массив в строку и просто искать нахождения в ней интересующих тебя сочетаний?
Администратор запретил публиковать записи гостям.

Вопрос по массивам Javascript 4 года 8 мес. назад #115591

  • Seibur
  • Seibur аватар
  • Вне сайта
  • Просветлённый
  • Сообщений: 371
  • Спасибо получено: 308
  • ВетеранРазработчик
MaltonTheWarrior пишет:
Я, конечно, не знаток джава скрипта, но... Не проще ли, именно проще, не говорю, что правильнее, будет конвертнуть массив в строку и просто искать нахождения в ней интересующих тебя сочетаний?

Можно и не на js - мне хотя бы понять алгоритм решения выдуманной мной задачи
Будь таким, каким хочешь казаться.
Администратор запретил публиковать записи гостям.

Вопрос по массивам Javascript 4 года 8 мес. назад #115592

  • Sphinx
  • Sphinx аватар
  • Вне сайта
  • Оседлый
  • Сообщений: 47
  • Спасибо получено: 26
Seibur пишет:
Можно и не на js - мне хотя бы понять алгоритм решения выдуманной мной задачи
Если язык не важен, а нужен именно сам алгоритм, то вот держи на Си-подобном синтаксисе:
const int n - длина массива
int count = 0; // счетчик совпадений
//начинаем проход массива со второго элемента
for (int i = 1; i < n; i++) {
    if (arr[i] == arr[i - 1] )
	count++;//инкрементируем счетчик
    if ( (arr[i] != arr[i - 1] ) || (i == n - 1) ) { //почему if, а не else. см внизу
        switch (count) {
        case 3:
            //действия для 4-x чисел
            break;
        case 2:
            //действия для 3-x чисел
            break;
        case 1:
            //действия для 2-х чисел
            break;
	default:
            //когда одинаковых чисел нет или их больше 4-х, то ничего не делаем
	    break;
        }
        count = 0;//обнуляем счетчик
    }
}
Данный алгоритм проходит массив и выполняет заданные действия для всех последовательностей одинаковых чисел длиной от 2-х до 4-х чисел в массиве.
Второй if вместо else используем, чтобы алгоритм отрабатывал на граничном случае, когда массив заканчивается последовательностью одинаковых чисел.
Последнее редактирование: 4 года 8 мес. назад от Sphinx.
Администратор запретил публиковать записи гостям.
За этот пост поблагодарили: ZX_Lost_Soul, Lekste, Seibur, Doctor_Bug

Вопрос по массивам Javascript 4 года 8 мес. назад #115597

  • yuryol
  • yuryol аватар
  • Вне сайта
  • Архитектор Миров
  • Сообщений: 1704
  • Спасибо получено: 2731
  • ОраторОрганизатор конкурсовУчительКомпозитор1 место в ГотвПобедитель конкурса2 место 3 место Готв
Seibur пишет:
Доброй ночи


Подскажите пожалуйста решение

Есть простой одномерный массив 0,1,2,3

и заполняется он рандомно числами:

1,1,1,1 2,2,2,2 3,3,3,3 4,4,4,4

Нужно сделать проверку на 1,2,3,4 случайных, одинаковых, рядом стоящих значений в массиве.

Вопрос: как это сделать?

Пример:

2,2,3,2 или 3,2,2,1 или 4,1,2,2 - пара 2 рядом стоящих, одинаковых числа

2,2,4,4 - две пары рядом стоящих, случайных значений

если 1,1 или 2,2 или 3,3 или 4,4 - стоят рядом в массиве, то происходит действие

1,1,1,4 - 3 рядом стоящих, одинаковых числа

4,4,4,4 - 4 рядом стоящих, одинаковых числа

что за тему-то проходишь?
если про ес6, то скорее всего следует использовать метод reduce, который позволяет сравнивать соседние элементы массива. метод довольно сложный, поэтому скорее всего придется посидеть повникать

https://developer.mozilla.org/ru/docs/Web/JavaScript/Reference/Global_Objects/Array/Reduce
https://learn.javascript.ru/array-iteration
Администратор запретил публиковать записи гостям.
За этот пост поблагодарили: Seibur

Вопрос по массивам Javascript 4 года 8 мес. назад #115600

  • Lekste
  • Lekste аватар
  • Вне сайта
  • Светлый дракон
  • Сообщений: 913
  • Спасибо получено: 566
  • Даритель СтимкеяПрограммист JavaScript ВетеранПрограммист RubyОратор
reduce не для сравнения, а для получения одного значения (например, суммы) из массива
Администратор запретил публиковать записи гостям.
За этот пост поблагодарили: Seibur

Вопрос по массивам Javascript 4 года 8 мес. назад #115602

  • Seibur
  • Seibur аватар
  • Вне сайта
  • Просветлённый
  • Сообщений: 371
  • Спасибо получено: 308
  • ВетеранРазработчик
Спасибо за ответы, ребята!
Будь таким, каким хочешь казаться.
Администратор запретил публиковать записи гостям.

Вопрос по массивам Javascript 4 года 8 мес. назад #115603

  • yuryol
  • yuryol аватар
  • Вне сайта
  • Архитектор Миров
  • Сообщений: 1704
  • Спасибо получено: 2731
  • ОраторОрганизатор конкурсовУчительКомпозитор1 место в ГотвПобедитель конкурса2 место 3 место Готв
Lekste пишет:
reduce не для сравнения, а для получения одного значения (например, суммы) из массива

тонкость редюс именно в том как он получает это значение. он сравнивает промежуточное значение (например предыдущий элемент массива) с текущим элементом массивом.

например чтоб сравнить каждое число с предыдущим и вывести в консоль все одинаковые числа, стоящие друг за другом можно написать одну строчкой че-то типа
[3, 1, 1, 2].reduce((a, b) => (a === b ? console.info(`пара числа ${a}`) : null, b), null);
Последнее редактирование: 4 года 8 мес. назад от yuryol.
Администратор запретил публиковать записи гостям.

Вопрос по массивам Javascript 4 года 8 мес. назад #115605

  • Lekste
  • Lekste аватар
  • Вне сайта
  • Светлый дракон
  • Сообщений: 913
  • Спасибо получено: 566
  • Даритель СтимкеяПрограммист JavaScript ВетеранПрограммист RubyОратор
Все бы вам впихивать побочные эффекты.
Если так и делать, то через reduce получить Массив с тем, что сколько раз встречалось, а дальше по цепочке передать эту информацию куда надо, например, через foreach
Администратор запретил публиковать записи гостям.
Модераторы: NeKotZima
Время создания страницы: 0.241 секунд