Антон
Дима
Дима
Дима
Igor
Дима
да, понимаю, в питоне есть еще и итератор :)
Дима
И скорее всего еще что-то
Дима
Я просто хотел сказать, что это такие вещи, над которыми не стоит заморачиваться, а они сами придут
Igor
Ну те если ты не знаешь паттерны это не значит что ты их не используешь :)
Дима
полностью согласен)
Lavrentiy
Ребят а курсы на DataCamp норм? Они бесплатные?
Дима
на самом деле у меня был момент в жизни, когда мне стало итнересно и я прочел книгу по паттернам такую филетовую
Дима
не помню авторов. Но было очень интересно)
Дима
После этого мне стало куда легче их применять, писать, использовать
Igor
Так и все же интересно чем теткам не нравятся сотрудники с пакетами нивея? :) прям счастлив что работаю в мужском коллективе. Сейчас бы меня еще хейтили за то что я носки со шлепками одеваю :)
Дима
Igor
прям контейнер шейминг какой та
Антон
Что лучше интересно получать опыт на стажировках или сам например на Codewars?
Антон
Vladislav
Дима
Дима
Ну знаешь такой анекдот: шел программист по лесу, увидел стартап с новационными идеями и супер крутой командой, сел в него и сгорел)
Виталик Голоенко
Видимо Игорь ушел(
Виталик Голоенко
Антон
есть ли смысл взять за план обучения требования работодателя?
Дима
так, пишут про нивею
Дима
Всем внимание)
Дима
Дима
Он же мудак)))
Slava
Slava
Igor
Видимо Игорь ушел(
ну вообще как всегда вариантов море :) начиная от банального дерева, к более изварщенным вещам по типу Disjoint Sparse Table и заканчивая алгоримом Мо :)
Igor
Можно попробовать даже банальную корневую декомпозицию
Виталик Голоенко
Igor
ну самое банальное с деревом
представь у тебя есть массив
[1,2,3,1,2,3,4,5,1,2]
это значения в конкретной точке теперь представь массив в два раза меньше в котором будет посчитанна операция попарно допустим сумма
Igor
[3,4,5,9,3] и еще раз
[7,14] и еще
[21]
Igor
теперь из этих чисел за логарифм операций можно собрать окончательное значение для любого отрезка
Виталик Голоенко
а как разбить массив попарно?
Igor
в смысле разбить попарно ? в новом масиве значение это сумма двух значений из предыдущего массива
Igor
таких массивов логарифм
Виталик Голоенко
а если нечетное кол-во элементов?
Igor
можно представлять себе что есть еще нолик, а можно просто не добавлять, проще не добавлять вообще
Igor
как у меня получилось на втором шаге последняя тройка оказалась не парной
Виталик Голоенко
ну самое банальное с деревом
представь у тебя есть массив
[1,2,3,1,2,3,4,5,1,2]
это значения в конкретной точке теперь представь массив в два раза меньше в котором будет посчитанна операция попарно допустим сумма
так тут должно сумма выйти 24, а у вас 21
Igor
если бы операция была идемпотентной было бы проще но у нас это не гарантируется поэтому приходиться городить огород
Igor
Виталик Голоенко
ок
Igor
тебе нужно придумать как из этих кусков составлять нужный размер
Igor
Кстати алгоритм Мо не получится там нужна обратимость :(
Igor
остается дерево и disjoint sparse table
Igor
ну и можно попробовать корневую эвристику
Igor
это еще проще почти как предыдущий метод только всего с одним уровнем
Igor
отрезок разобъем на равные куски допустим по 10 элементов
Igor
и для всех отрезков длинной 10 посчитаем готовые значения
Igor
потом возьмем в нашем отрезке все отрезки по 10 которые входят а остальные куски досчитаем обычными
Igor
ну вместо 10 лучше брать что то типа корня длинны можно поиграться этим числом
Виталик Голоенко
если массив длинной в 16, то разбиваем по 4?
Виталик Голоенко
а можно через рекурсию?
Igor
т е если мы разбили по 10
то у нас посчитанны с [0..9] с [10 .. 11] и т д
когда нам нужно посчитать с 907 до 1231 мы берем 907 908 909 + [900..910]+ .. [1220..1229] + 1230 + 1231
Виталик Голоенко
ну ладно, ща буду пробовать
Igor
теоретически если прикрутить мемоизацию то первый способ можно свести к рекурсии но это из разряда извращений или лени :)
Igor
Igor
нам нужна наибольшая степень двойки которая меньше длинны массива (это первый установленный бит)
потом мы разбиваем отрезко по степени этой двойки и считаем рекурсией но мемоизация обязательна иначе будет лажа
из минусов рекурсия дорогая операция нужно сохранить в стек текущее состояние
Виталик Голоенко
а какой способ быстрей этот
let array = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]; //массив, можно использовать массив объектов
let size = 3; //размер подмассива
let subarray = []; //массив в который будет выведен результат.
for (let i = 0; i <Math.ceil(array.length/size); i++){
subarray[i] = array.slice((i*size), (i*size) + size);
}
или этот
const array = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
const array_size = 3;
const sliced_array = [];
for (let i = 0; i <array.length; i += array_size) {
sliced_array.push(array.slice(i, i + array_size));
}
Igor
думаю одинаково :) ну +- это не те оптимизации которыми стоит заниматься