Вопрос по массивам Javascript

Ветеран Разработчик
Больше
6 года 2 мес. назад - 6 года 2 мес. назад #115589 от 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 года 2 мес. назад пользователем Seibur.

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Даритель Стимкея Проект месяца 2 место 1 место в Готв 3 место Готв 3 место Ветеран
Больше
6 года 2 мес. назад #115590 от MaltonTheWarrior
Я, конечно, не знаток джава скрипта, но... Не проще ли, именно проще, не говорю, что правильнее, будет конвертнуть массив в строку и просто искать нахождения в ней интересующих тебя сочетаний?

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Ветеран Разработчик
Больше
6 года 2 мес. назад #115591 от Seibur

MaltonTheWarrior пишет: Я, конечно, не знаток джава скрипта, но... Не проще ли, именно проще, не говорю, что правильнее, будет конвертнуть массив в строку и просто искать нахождения в ней интересующих тебя сочетаний?


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

Будь таким, каким хочешь казаться.

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Больше
6 года 2 мес. назад - 6 года 2 мес. назад #115592 от Sphinx

Seibur пишет: Можно и не на js - мне хотя бы понять алгоритм решения выдуманной мной задачи

Если язык не важен, а нужен именно сам алгоритм, то вот держи на Си-подобном синтаксисе:
Code:
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 используем, чтобы алгоритм отрабатывал на граничном случае, когда массив заканчивается последовательностью одинаковых чисел.
Последнее редактирование: 6 года 2 мес. назад пользователем Sphinx.
Спасибо сказали: ZX_Lost_Soul, Lekste, Seibur, Doctor_Bug

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Оратор 1 место в Готв 3 место Готв 2 место Учитель Композитор Победитель конкурса Организатор конкурсов
Больше
6 года 2 мес. назад #115597 от yuryol

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, который позволяет сравнивать соседние элементы массива. метод довольно сложный, поэтому скорее всего придется посидеть повникать

developer.mozilla.org/ru/docs/Web/JavaSc...Objects/Array/Reduce
learn.javascript.ru/array-iteration
Спасибо сказали: Seibur

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Программист Ruby Ветеран Даритель Стимкея Оратор Программист JavaScript
Больше
6 года 2 мес. назад #115600 от Lekste
reduce не для сравнения, а для получения одного значения (например, суммы) из массива
Спасибо сказали: Seibur

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Ветеран Разработчик
Больше
6 года 2 мес. назад #115602 от Seibur
Спасибо за ответы, ребята!

Будь таким, каким хочешь казаться.

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Оратор 1 место в Готв 3 место Готв 2 место Учитель Композитор Победитель конкурса Организатор конкурсов
Больше
6 года 2 мес. назад - 6 года 2 мес. назад #115603 от yuryol

Lekste пишет: reduce не для сравнения, а для получения одного значения (например, суммы) из массива


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

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

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Программист Ruby Ветеран Даритель Стимкея Оратор Программист JavaScript
Больше
6 года 2 мес. назад #115605 от Lekste
Все бы вам впихивать побочные эффекты.
Если так и делать, то через reduce получить Массив с тем, что сколько раз встречалось, а дальше по цепочке передать эту информацию куда надо, например, через foreach

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Время создания страницы: 0.106 секунд
Работает на Kunena форум