Задать вопрос
@colorkid

Как найти последовательные совпадения в массиве?

Всем привет. Нужна помощь, подскажите пожалуйста...
Как найти последовательные совпадения в массиве? ТОЛЬКО если количество последовательных совпадений от 3?
т.е. у нас есть массив вида [3,3,3,6,4,3,1,1,1,1,5,3,1,8,2,2,3,3]
по итогу нужно найти и обозначить(например превратить в строку), "последовательно-одинаковые", элементы, количество последовательных совпадений от 3. В массиве выше должно получиться вот так
["3","3","3",6,4,3,"1","1","1","1",5,3,1,8,2,2,3,3]

Как такое реализовать?
  • Вопрос задан
  • 172 просмотра
Подписаться 1 Средний 3 комментария
Решения вопроса 1
0xD34F
@0xD34F Куратор тега JavaScript
const newArr = arr
  .reduce((acc, n, i, a) => (
    a[i - 1] !== n && acc.push([ n, 0 ]),
    acc[acc.length - 1][1]++,
    acc
  ), [])
  .reduce((acc, n) => (
    acc.push(...Array(n[1]).fill(n[1] > 2 ? `${n[0]}` : n[0])),
    acc
  ), []);

или

const newArr = arr.map((n, i, a) => (
  a[i - 1] === n && a[i - 2] === n ||
  a[i + 1] === n && a[i + 2] === n ||
  a[i - 1] === n && a[i + 1] === n
    ? `${n}`
    : n
));
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
NYMEZIDE
@NYMEZIDE
резюме - ivanfilatov.ru
Реализуй конечный автомат. Подаешь последовательность.
Читаешь, Запоминаешь первую цифру. Двигаешь автомат вправо.
Если цифра та же самая - увеличиваешь счетчик +1. Проверяешь счетчик, не равен ли он 3м. Двигаешь автомат вправо.
Если счетчик стал равен 3м - то двигаешься вправо до тех пор пока не получиться другая цифра.
Если другая цифра - то проверяешь счетчик был равен или больше 3х.
Если да - то двигаешь автомат влево ровно сколько раз, сколько равен счетчик и "красишь цифры". После двигаешь автомат вправо на сколько же позиций.

Ну осталось только это дело реализовать на предпочитаемом ЯП.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы