Показать сообщение отдельно
  #2 (permalink)  
Старый 29.09.2022, 13:17
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,109

поиск цепочек в массиве и фильтрация
IZUM,
задача прежняя, можно было не плодить темы, добавлена фильтрация к коду предложенному ранее, ловит и фильтрует не только пары, но и цепочки любой длины.
function repeat(arr) {
            let retry = [],
                temp;
            arr.reduce(
                function(prev, current, index, arr) {
                    if (prev === current) temp.push(index);
                    else temp = [index];
                    if (temp.length == 2) retry.push(temp);
                    return current;
                }
            );
            return retry
        }
        const ms = [2, 8, 13, 15, 19, 27, 33, 36, 43, 46],
            mo = [0, 4, 6, 11, 17, 21, 25, 31, 38, 41, 45, 48];

        function merge(a, b, l) {
            let s = [...a, ...b].sort((a, b) => a - b);
            let arr = s.map(k => a.includes(k));
            arr = repeat(arr).map(ar => ar.map(i => s[i]));
            if (l !== void(0)) {
                let i = arr.findIndex(([a, ...b]) => a > l);
                let dp = arr[i] || [],
                    dL = [];
                if (i > 0)
                    for (; i--;) {
                        let b = arr[i].at(-1);
                        if (b < l) {
                        dL = arr[i]; break;
                        }
                    }
                return [dL, dp]
            }
            return arr
        }
        console.log(merge(ms, mo));
        console.log(merge(ms, mo, 17));
        console.log(merge(ms, mo, 23));

Последний раз редактировалось рони, 29.09.2022 в 15:50.
Ответить с цитированием