Решение задач 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

Комментарии • 37

  • @liltousin
    @liltousin Месяц назад +2

    Сразу подумал решать через map, теперь я не джун без опыта а синьер без опыта😂

  • @clem4ik441
    @clem4ik441 Месяц назад

    Решаем задачку методом мидла, определенно, что то новое и безумное)

  • @user-bp4qw7nm8v
    @user-bp4qw7nm8v Месяц назад +3

    Первое решение скорее можно приписать тем, кто только начал изучать 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;
    };

    • @user-yu4sr6fy4e
      @user-yu4sr6fy4e Месяц назад

      тоже с ходу это решение пришло в голову... вот бы узнать уровень такого решения!

    • @gkavboy
      @gkavboy Месяц назад

      function add(a) {
      let d = []; let s = 0;
      for (let i of a) {
      s += i;
      d.push(s);
      }
      return d;
      }

    • @Misha9446
      @Misha9446 Месяц назад

      @@user-yu4sr6fy4e вот это и есть сеньерное решение, простое, понятное и оптимальное

  • @panfilovandrey
    @panfilovandrey Месяц назад +16

    Задача очень простая, даже неинтересно ее разбирать. Какую шляпу выдал, зачем перебирать каждый раз все элементы, когда у нас на каждом шаге есть сумма предыдущих эл-тов? Она уже посчитана, сохрани ее в переменную и прибавь новый элемент, все. Чем плох цикл? Редус - не панацея, а просто один из инструментов, но пихать его в каждую щель - глупо. Учитывая, что миддл не додумался, что второй перебор ему не нужен, я сомневаюсь в квалификации такого специалиста. Сеньйорское решение вообще перемудреное, потом кто с этим кодом будет работать? Джуны? Они мозги сломают, что же в этой строчке происходит.

    • @user-bl3iu7ob9e
      @user-bl3iu7ob9e Месяц назад +1

      мне до джуна еще далеко. но я бы написал как то так arr1.push(arr.shift())
      while (arr.length) arr1.push(arr.shift() + arr1.at(-1)); хотя решение с мапой мне очень понравилось. супер. Дополняю. Проверил по скорости. с мапой конечно в 10 раз быстрее. Ну оно и понятно. без операций удаления и всё такое. кстати я понял код с мапой за исключением одного момента. Я так понял (0) это вызов функции где ты замыкание прописал, не мог бы ты пояснить этот момент. Почему сразу за объявлением функции идет её вызов. Думаю именно этот момент и непонятный для начинающих как я. И кстати код смотрится прикольней если ты сразу присваиваешь дефолтное значение sum. Тогда в скобках ноль писать не нужно. Так код становится еще страшней и не понятней))))))) добавка. Разобрался с этим синтаксисом, во время изучения web driver. )))

    • @nightriver7544
      @nightriver7544 Месяц назад

      Ну как решение для собеса вполне ничего вроде. Понятно, что в реальности не очень хотелось бы видеть такой код с мапом и замыканием, но так это и не реальная работа вроде.

    • @mcltdtm420
      @mcltdtm420 Месяц назад

      @@user-bl3iu7ob9e скажите пожалуйста, а что произойдет с переданым массивом "arr" после исполнения вашего кода?

  • @user-oz3ze5eb3s
    @user-oz3ze5eb3s Месяц назад

    а как находить задачи определенного типа например я хочу по решать задачт связанные с типом словарь

    • @ElbrusBootcamp
      @ElbrusBootcamp  28 дней назад +1

      На платформах LeetCode, HackerRank, и CodeSignal задачи можно фильтровать по конкретным темам и структурам данных, включая словари.

  • @gkavboy
    @gkavboy Месяц назад +8

    Зря вы так ((( мастерство сеньора не в том чтобы написать однострочник... Код должен быть легко поддерживаемым и читаемым. Да и не уверен что код оптимальнее чем одна итерация с push промежуточной суммой в новый массив

    • @user-yu4sr6fy4e
      @user-yu4sr6fy4e Месяц назад

      и тоже согласен... но думаю тут нужно дать скидку на абстрактность определения сеньора ... должен и так уметь !)

    • @gkavboy
      @gkavboy Месяц назад

      @@user-yu4sr6fy4e должен, но тогда надо понимать, что подобные видео смотрит много джунов... И у них складывается неверно впечатление к чему нужно стремится... Большинство кандидатов на собесе мне пытаются показать какие они крутые и могут пол экрана кода в односторочник запихать... А потом пол часа ищут баг))))

  • @inzoddex8312
    @inzoddex8312 Месяц назад +2

    Тем временем Питон
    import itertools as it
    print(*it.accumulate([*range(10)]))

    • @user-bl3iu7ob9e
      @user-bl3iu7ob9e Месяц назад

      На ruby не только в одну строчку но и в 1 символ)))))

  • @mcltdtm420
    @mcltdtm420 Месяц назад

    вариантов решений может быть много. только вот у меня вопрос относительно производительности каждого варианта.
    без тестов, на первый взгляд, решения "Джуна" самое быстрое. или я ошибаюсь?

    • @dadaVoloda
      @dadaVoloda Месяц назад +1

      ошибаешься, у джуна O(n^2) сложность, у синьора O(n)
      вообще думаю большинство разработчиков решат эту задачу одинаково, без замыкания и в пару строк, потому что читабильность/понимание в приоритете
      let sum = 0
      return arr.map(el => sum += el)

    • @mcltdtm420
      @mcltdtm420 Месяц назад

      @@dadaVoloda а Вы производительность кода по читабильности кода определяете?

    • @dadaVoloda
      @dadaVoloda Месяц назад

      @@mcltdtm420 а Вы меня троллите или серьезно спрашиваете?
      Первая часть сообщения про производительность, там имеется ввиду, что в примере с джуном цикл в цикле, получается квадратичная сложность, в случае с сеньором один проход по массиву - линейная сложность.
      А во второй части сообщения я уже высказал свое мнение, как по-моему напишет большинство на проекте, никто не будет использовать цикл фор, когда это можно сделать с помощью метода быстрее и удобнее

    • @mcltdtm420
      @mcltdtm420 Месяц назад

      @@dadaVoloda 1. где вы увидели "у джуна O(n^2)"? там менше итераций цикла.
      2. почему вы считаете, что перебор по циклу и в методе масива занимают одинаковое количество времени?

    • @mcltdtm420
      @mcltdtm420 Месяц назад

      ​@@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)?

  • @user-gz1wl2rp4v
    @user-gz1wl2rp4v Месяц назад +1

    джуны не настолько тупые, чтобы в брутфорсить эту задачу...

  • @romanzenia599
    @romanzenia599 Месяц назад

    Мое решение:
    const add = arr => arr.forEach((el, i) => arr[i] += arr[i - 1] ?? 0) ?? arr
    Тоже в одну строке, если автор так желает.
    Просто прогоняем через через "джуновский" цикл и суммируем последовательно значения

    • @mcltdtm420
      @mcltdtm420 Месяц назад

      я правильно понимаю, что этот код "arr[i] += arr[i - 1]" не должен содержать знак "="?

    • @romanzenia599
      @romanzenia599 Месяц назад

      @@mcltdtm420 Нет, += так и должно быть. Мы делаем сложение с присваиваем. Это эквивалент такой записи "arr[i] = arr[i] + arr[i - 1]"

  • @militant6709
    @militant6709 Месяц назад +1

    Сеньер решение просто ужасно, и вообще нету ни одного решения мидл+

  • @there1440
    @there1440 Месяц назад

    Я не знаком с js и слаб в прогроммировании, но junior не может писат такой плохой код😢 иначе я был бы им уже

  • @minimus91
    @minimus91 Месяц назад

    Последний вариант использует метод функционального программирования, но при этом изменяет значение переменной, что не характерно для выбранного подхода. Как по мне, выглядит это не лучшим образом. Обыкновенный цикл здесь смотрелся бы органичнее. Это решение, скорее, менее опытного кодера - банальная попытка произвести впечатление умника, записав всё одной строкой)

  • @newjerseyAVGN
    @newjerseyAVGN Месяц назад

    Это всё херня, попробуйте написать полноценный шелл на 20 команд. Копирование, перемещение, удаление файлов и папок, спеки компа, спеки сети и прочая лабуда. Дерзайте!