Решение задач Codewars JS | Junior, Middle, Senior | ЧАСТЬ 5
HTML-код
- Опубликовано: 25 апр 2024
- 🎉 Скидка 50% на курсы!
Основы JavaScript: go.elbrusboot.camp/js-basics
Основы Data Science: go.elbrusboot.camp/ds-basics-
Продолжение полюбившейся многим серии видео от Александра Князева, mentor lead направления JavaScript Москва. Решаем задачи уровня 7 Kyu на CodeWars как джун, миддл и синьор разработчик!
Ещё больше полезных статей и задач в нашем телеграм-канале 👉🏻 t.me/+LUYGBz9SxjwwNzNi
Кто мы такие❓
Эльбрус Буткемп - это первая (с 2018 г) в России школа IT-профессий в формате интенсивного обучения с карьерной поддержкой при трудоустройстве. Студенты 12 недель практикуются на реальных проектах и учатся с утра до вечера, погружаясь в профессию. Обучение проходит по направлениям веб-разработка на JavaScript, Data Science и UX/UI-дизайн в онлайн и оффлайн (кампусы в Москве и Санкт-Петербурге) форматах.
Буткемп - это:
-уникальная актуальная программа и методология, преподаватели с опытом в коммерческом бизнесе
-только живые лекции, интенсивная практика на реальных проектах
-короткие сроки обучения с высокой доходимостью и эффективностью
-фокус на трудоустройстве
-сильное комьюнити преподавателей и выпускников
По окончании обучения всех ждет карьерная неделя, где карьерный эксперт помогает подготовиться к собеседованию, подтянуть софт-скиллы и собрать резюме, с которыми 86% студентов находят работу в течение трех месяцев после окончания буткемпа. Также после завершения Эльбрус Буткемп есть возможность получить диплом ДПО.
Приходите на день открытых дверей в онлайне и познакомьтесь с форматом буткемп. Это лучший способ научиться сменить работу, уйти в сферу IT и увеличить свой доход.
VK - elbrusbootcamp
FB - / elbrusbootcamp
Insta - / elbrus.bootcamp
TikTok - www.tiktok.com/@elbrusbootcam...
Сайт школы - elbrusboot.camp
Напишите или позвоните нам, чтобы узнать, как поступить в ближайшую группу:
☎️ +7 (499) 938-68-24
💬 Чат в WhatsApp api.whatsapp.com/send?phone=7...
💬 Чат в Телеграм t.me/elbrusbootcamp1
✉️ info@elbrusboot.camp
Сразу подумал решать через map, теперь я не джун без опыта а синьер без опыта😂
Решаем задачку методом мидла, определенно, что то новое и безумное)
Первое решение скорее можно приписать тем, кто только начал изучать JS и массивы. Junior - всё тот же специалист с определённым багажом знаний, но с меньшим опытом, чем Middle, и я очень сомневаюсь что те, кто дошли до уровня джуна стали бы решать такую задачу вложенным циклом.
Лично мне с ходу, так сказать "В лоб", в голову пришло такое решение
const add = (arr: number[]): number[] => {
const result: number[] = [arr[0]];
for (let i = 1; i < arr.length; i++) {
const number = result.at(-1) + arr[i];
result.push(number);
}
return result;
};
тоже с ходу это решение пришло в голову... вот бы узнать уровень такого решения!
function add(a) {
let d = []; let s = 0;
for (let i of a) {
s += i;
d.push(s);
}
return d;
}
@@user-yu4sr6fy4e вот это и есть сеньерное решение, простое, понятное и оптимальное
Задача очень простая, даже неинтересно ее разбирать. Какую шляпу выдал, зачем перебирать каждый раз все элементы, когда у нас на каждом шаге есть сумма предыдущих эл-тов? Она уже посчитана, сохрани ее в переменную и прибавь новый элемент, все. Чем плох цикл? Редус - не панацея, а просто один из инструментов, но пихать его в каждую щель - глупо. Учитывая, что миддл не додумался, что второй перебор ему не нужен, я сомневаюсь в квалификации такого специалиста. Сеньйорское решение вообще перемудреное, потом кто с этим кодом будет работать? Джуны? Они мозги сломают, что же в этой строчке происходит.
мне до джуна еще далеко. но я бы написал как то так arr1.push(arr.shift())
while (arr.length) arr1.push(arr.shift() + arr1.at(-1)); хотя решение с мапой мне очень понравилось. супер. Дополняю. Проверил по скорости. с мапой конечно в 10 раз быстрее. Ну оно и понятно. без операций удаления и всё такое. кстати я понял код с мапой за исключением одного момента. Я так понял (0) это вызов функции где ты замыкание прописал, не мог бы ты пояснить этот момент. Почему сразу за объявлением функции идет её вызов. Думаю именно этот момент и непонятный для начинающих как я. И кстати код смотрится прикольней если ты сразу присваиваешь дефолтное значение sum. Тогда в скобках ноль писать не нужно. Так код становится еще страшней и не понятней))))))) добавка. Разобрался с этим синтаксисом, во время изучения web driver. )))
Ну как решение для собеса вполне ничего вроде. Понятно, что в реальности не очень хотелось бы видеть такой код с мапом и замыканием, но так это и не реальная работа вроде.
@@user-bl3iu7ob9e скажите пожалуйста, а что произойдет с переданым массивом "arr" после исполнения вашего кода?
а как находить задачи определенного типа например я хочу по решать задачт связанные с типом словарь
На платформах LeetCode, HackerRank, и CodeSignal задачи можно фильтровать по конкретным темам и структурам данных, включая словари.
Зря вы так ((( мастерство сеньора не в том чтобы написать однострочник... Код должен быть легко поддерживаемым и читаемым. Да и не уверен что код оптимальнее чем одна итерация с push промежуточной суммой в новый массив
и тоже согласен... но думаю тут нужно дать скидку на абстрактность определения сеньора ... должен и так уметь !)
@@user-yu4sr6fy4e должен, но тогда надо понимать, что подобные видео смотрит много джунов... И у них складывается неверно впечатление к чему нужно стремится... Большинство кандидатов на собесе мне пытаются показать какие они крутые и могут пол экрана кода в односторочник запихать... А потом пол часа ищут баг))))
Тем временем Питон
import itertools as it
print(*it.accumulate([*range(10)]))
На ruby не только в одну строчку но и в 1 символ)))))
вариантов решений может быть много. только вот у меня вопрос относительно производительности каждого варианта.
без тестов, на первый взгляд, решения "Джуна" самое быстрое. или я ошибаюсь?
ошибаешься, у джуна O(n^2) сложность, у синьора O(n)
вообще думаю большинство разработчиков решат эту задачу одинаково, без замыкания и в пару строк, потому что читабильность/понимание в приоритете
let sum = 0
return arr.map(el => sum += el)
@@dadaVoloda а Вы производительность кода по читабильности кода определяете?
@@mcltdtm420 а Вы меня троллите или серьезно спрашиваете?
Первая часть сообщения про производительность, там имеется ввиду, что в примере с джуном цикл в цикле, получается квадратичная сложность, в случае с сеньором один проход по массиву - линейная сложность.
А во второй части сообщения я уже высказал свое мнение, как по-моему напишет большинство на проекте, никто не будет использовать цикл фор, когда это можно сделать с помощью метода быстрее и удобнее
@@dadaVoloda 1. где вы увидели "у джуна O(n^2)"? там менше итераций цикла.
2. почему вы считаете, что перебор по циклу и в методе масива занимают одинаковое количество времени?
@@dadaVoloda в случае с джуном код может иметь вид в один цикл как и в .map()
function add(arr) {
const sums = [];
let sum = 0;
for (let i = 0; i < arr.length; i++) {
sum += arr[i];
sums.push(sum);
}
return sums;
}
так какой код производительней? джуниор з O(n) или .map() з O(n)?
джуны не настолько тупые, чтобы в брутфорсить эту задачу...
Мое решение:
const add = arr => arr.forEach((el, i) => arr[i] += arr[i - 1] ?? 0) ?? arr
Тоже в одну строке, если автор так желает.
Просто прогоняем через через "джуновский" цикл и суммируем последовательно значения
я правильно понимаю, что этот код "arr[i] += arr[i - 1]" не должен содержать знак "="?
@@mcltdtm420 Нет, += так и должно быть. Мы делаем сложение с присваиваем. Это эквивалент такой записи "arr[i] = arr[i] + arr[i - 1]"
Сеньер решение просто ужасно, и вообще нету ни одного решения мидл+
Я не знаком с js и слаб в прогроммировании, но junior не может писат такой плохой код😢 иначе я был бы им уже
Последний вариант использует метод функционального программирования, но при этом изменяет значение переменной, что не характерно для выбранного подхода. Как по мне, выглядит это не лучшим образом. Обыкновенный цикл здесь смотрелся бы органичнее. Это решение, скорее, менее опытного кодера - банальная попытка произвести впечатление умника, записав всё одной строкой)
Это всё херня, попробуйте написать полноценный шелл на 20 команд. Копирование, перемещение, удаление файлов и папок, спеки компа, спеки сети и прочая лабуда. Дерзайте!