Решение задач Codewars JS | Junior, Middle, Senior | | Junior, Middle, Senior

Поделиться
HTML-код
  • Опубликовано: 23 янв 2024
  • 🎁 Бесплатные мастер-классы 👉🏻 go.elbrusboot.camp/mkkks
    🤓 День открытых дверей в буткемпе 👉🏻 go.elbrusboot.camp/doddd
    Как джун, миддл и синьор разработчик решают задачи на CodeWars? Узнайте вместе с Александром Князевым, mentor lead направления JavaScript Москва, на примере 6 Kyu!
    Кто мы такие❓
    Эльбрус Буткемп - это первая и самая крупная в России школа программирования в формате интенсивного обучения. Студенты 12 недель оффлайн или 15 недель онлайн практикуются на реальных проектах и кодят с утра до вечера. Обучение проходит по направлениям JavaScript и Data Science.
    В буткемпе студенты решают задачи от реальных работодателей, что особенно важно в постоянно развивающейся сфере IT. 3 месяца оффлайн / 4 месяца онлайн обучения с 9:00 до 19:00 5 дней в неделю, ежедневная работа с кодом, плюс два проекта, командный и персональный, которые студенты защищают на второй и третьей, заключительной, фазе обучения - и вот на выходе уже есть полноценное портфолио, которое можно показать при устройстве на работу.
    По окончании обучения всех ждет карьерная неделя, где карьерный коуч помогает подготовиться к собеседованию, подтянуть софт-скиллы и собрать резюме, с которыми 93% студентов находят работу в течение трех месяцев после окончания буткемпа. Также после завершения Эльбрус Буткемп есть возможность получить диплом ДПО.
    Приходите на день открытых дверей в онлайне и познакомьтесь с форматом буткемп. Это лучший способ научиться программировать, сменить работу и увеличить свой доход.
    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
    Использовалось в видео (музыка/видео):
    Fast Forward, Pause - Rebecca Mardal

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

  • @ElbrusBootcamp
    @ElbrusBootcamp  4 месяца назад

    Всем привет! При написании кода разной сложности, у разработчиков могут быть разные подходы в зависимости от опыта и ожидаемых требований к функциональности.
    В случае с middle и senior кодом, код может представлять из себя применение разных алгоритмов для обеспечения максимальной безопасности пароля, подходящий для более критичных ситуаций.
    Но целью этого видео показать вариативность решения конкретной задачи с codewars.com. В любом случае, каждая задача требует детального изучения, для того чтобы предоставить оптимальное решение (где-то нужны спец.символы, где-то нужна функция без использования рекурсивного подхода). Спасибо за обратную связь!

  • @r00t3g
    @r00t3g 4 месяца назад +38

    Я, конечно, могу ошибаться, но, с точки зрения подкапотной алгоритмической сложности, но генерация 256-битного хеша с последующим преобразованием приведением его к base64 - это далеко не senior-ское решение, а горе от ума.

    • @whi5k3y22
      @whi5k3y22 4 месяца назад +1

      Легче взять номера символов 36-126 вместо строк с алфавитом, и работал с массивом чисел (есть разные методы для улучшения генерирования псевдослучайных чисел в заданном диапазоне) в конце переводя в строку которая является паролем

    • @florian7401
      @florian7401 4 месяца назад +7

      Чисто теоретически алгоритм с мидл и сеньер решениями могут работать бесконечность
      Хорошим решением было бы решение джуна, если в конце рандомно перемешать массив до слияния

    • @Grentanksmog
      @Grentanksmog 4 месяца назад +1

      Ахаха, дааа. Использование хэш-функции, хоть и не является алгоритмически сложным и имеет константую сложность по памяти и скорости, всё равно не самое эффективное решение. Уже после видео я понял, что лучше использовать randomBytes - встроенную функцию в модуль crypto. Она немного ускорит процесс генерации

  • @Misha9446
    @Misha9446 4 месяца назад +46

    Автор видео ничего не понимает в том что он делает, самое лучшее решение тут джуновское, реальный недостаток там только один - относительно фиксированный трехсимвольный префикс, но этот недостаток очень легко убрать, нужно просто сделать случайную перестановку строки(random shuffle). А остальное мелочи, можно причесать добавить myRandomInteger от мидла, и вот это будет настоящий сеньорский код - простой, понятный и решающий задачу.
    "Мидловское" и "сеньерское" решение просто полное дерьмо, использовать регулярку и рекурсию для такой задачи это не показать квалификации, а показатель её отсутствия.
    С уважением Михаил, программист с более чем 15 летним опытом

    • @sergeymurashov4365
      @sergeymurashov4365 4 месяца назад +3

      Регулярка еще ладно, но вот рекурсия в такой задаче прям очень не очень.

    • @Misha9446
      @Misha9446 4 месяца назад +2

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

    • @Biankouski
      @Biankouski 4 месяца назад

      Я зашёл чтобы оставить такой же комментарий. Но раз он уже есть, то спасибо @misha9446

    • @Grentanksmog
      @Grentanksmog 4 месяца назад

      Спасибо, Михаил! Очень конструктивно и по делу. Скоро выйдет ещё одно видео с тремя способами решения - буду ждать от Вас очередного фидбека! 🙌

  • @iKorewBro
    @iKorewBro 2 месяца назад

    Джуновское решение самое адекватное с точки зрения оптимизации. Просто нужно доработать.
    Идея сначала запихнуть по одному символу из каждого словаря - очень правильная. Просто в конце нужно перемешать массив и уже объединить его в пароль.

  • @user-ud4dh7sk9t
    @user-ud4dh7sk9t 4 месяца назад +6

    отличное мидловское решение с потенциально бесконечным временем выполнения :))

    • @aertyty3900
      @aertyty3900 4 месяца назад

      Ну да, на каждой итерации для 6-значного пароля шанс получить невалидный около 42.5%. Теперь посчитай с какой вероятностью ты не получишь пароль даже 100 раз подряд))

    • @iKorewBro
      @iKorewBro 2 месяца назад

      @@aertyty3900 какая разница какой шанс, тут главное что он не нулевой. А должен быть нулевой иначе твой код - говно

    • @aertyty3900
      @aertyty3900 2 месяца назад

      @@iKorewBro есть большой класс алгоритмов, называемых вероятностными. Почитай про алгоритмы Лас-Вегас, самым популярным примером которого является сортировка Хоара. Вообще-то эта сортировка при достаточном невезении работает за O(n^2), что для n > 1e6 может работать больше минуты. Почему же везде ее используют, а не ту же сортировку слиянием, которая детерминировано отрабатывает за нлог? Прежде чем писать такие комментарии пройди хотя бы базовый курс аисд..

  • @logsjomia965
    @logsjomia965 4 месяца назад +4

    Если мне понадобится генератор простых чисел, я просто буду брать рандомное целое число и проверять его на то, простое оно или нет. Если оно не простое, но буду буду вызывать эту функцию рекурсивно до тех пор, пока рандомное число не станет простым. Теперь я милд разработчик?

    • @victorrassoha8258
      @victorrassoha8258 4 месяца назад +2

      Если сможете вовремя выйти из рекурсии, то да )))

    • @Grentanksmog
      @Grentanksmog 4 месяца назад +1

      Ахаха, получается так 😂

  • @MultiFunnyJoe
    @MultiFunnyJoe 4 месяца назад +1

    Формат супер, можно записывать и другие задачи

    • @ElbrusBootcamp
      @ElbrusBootcamp  4 месяца назад

      Услышали 😄 Будем снимать дальше!

  • @david_yuzhakov
    @david_yuzhakov 4 месяца назад

    Очень полезное видео, спасибо большое за твой труд. Это мое первое видео на твоем канале

  • @xMurieLLx
    @xMurieLLx 4 месяца назад +6

    04:21 почему выбираем из lowerCase от 0 до 28, если в английском алфавите всего 26 букв ? Одинарные ковычки ( ' ' ) тоже входят в вычисление ?

    • @user-uq5bf2qe2s
      @user-uq5bf2qe2s 4 месяца назад +3

      Тоже в шоке

    • @Hell_zz
      @Hell_zz 4 месяца назад

      И как он тест прошел?

    • @user-qi8ws2se1z
      @user-qi8ws2se1z 4 месяца назад

      не входят кавычки) let str = 'abcdefghijklmnopqrstuvwxyz'; str.length; // 26

  • @Grentanksmog
    @Grentanksmog 4 месяца назад +6

    Всем привет, на связи тот самый человек из видео!
    Спасибо за конструктивный фидбек - что рекурсия может никогда не закончиться и код не является безопасным.
    Мне стало интересно, какая вероятность того, что переполнится стэк вызова из-за безвыходной рекурсии. Если интересно увидеть математическую сторону задачи, ставьте лайк под моим сообщением - выпущу видос с расчетами и объяснением

  • @konstantinriabchenko2481
    @konstantinriabchenko2481 4 месяца назад +4

    "синйорное" решение кошмар. регулярки это ту мач, это ж не читается прям совсем. я б такое на ревью не пропустил
    мидловское решение топ так как его легко отмасшабировать добавлением спец симолов. в отличии от хеша
    чтобы удостоверится что в пароле будет 1 цифра 1 заглавная и маленькая буква достаточно просто в случайный элемент сгенерированного пароля вставить случайный элемент из lowercase digits uppercase (хотя прийдется убедится что случайно не перезапишем то что уже перезаписали 🤔). и не прийдется делать рекрсивный вызов и делать функцию проверки

  • @08flashake
    @08flashake 4 месяца назад +1

    тот случай когда "сеньерское" решение выглядит больше как мидловое(выглядит как можно взять кувалду(sha256) что бы забить маленький гвоздик(пароль из 20 симоволов))

  • @mk3mk3mk
    @mk3mk3mk 3 месяца назад

    А модуль crypto это не из node js? По условиям задачи мы можем использовать модули из node js? Или только чистый js?

  • @paranoidshit
    @paranoidshit 4 месяца назад +5

    джун из 2010?

  • @user-sv8oq5wd3q
    @user-sv8oq5wd3q 3 месяца назад

    Автору спасибо! Но я полагаю, что воистину сеньорским было бы решение в стиле code golf. Предлагаю перерешать задачу. А то Эльбрус какой-то невысокий.

  • @user-jx3fp9jk9u
    @user-jx3fp9jk9u 4 месяца назад

    Кайф, было интересно посмотреть на сеньорский вариант

    • @ElbrusBootcamp
      @ElbrusBootcamp  4 месяца назад +1

      Очень рады, что вам понравилось 💜

    • @victorrassoha8258
      @victorrassoha8258 4 месяца назад

      Пожалуйста, никогда не делайте так, как тут показано )))

    • @user-je6gi5qy6m
      @user-je6gi5qy6m 4 месяца назад

      Никогда не повторяйте за этим горе сеньёром помидором…

  • @_Failure.
    @_Failure. 4 месяца назад +1

    задача решается за 4 переменных но можно и с 2 справиться

  • @ubhelbr
    @ubhelbr 4 месяца назад

    Можно же напрямую использовать base62 из библиотеки bases

  • @Grentanksmog
    @Grentanksmog 4 месяца назад +1

    Не заметил, что на последнем решении VSCode слишком мелкий. В следующий раз увеличу масштаб👌

  • @denys5049
    @denys5049 4 месяца назад

    Как так же форматировать код как на 17:58?

  • @babenoff
    @babenoff 4 месяца назад +1

    Мое личное мнение, что middle решение тут вообще выкинуть надо, а senior решение назвать middle, senior вряд ли будет делать это вот так, потому что здесь большой вопрос по скорости работы этой функции...

  • @user-es9ei5nv7e
    @user-es9ei5nv7e 4 месяца назад

    спасибо за интересный формат!

  • @panfilovandrey
    @panfilovandrey 4 месяца назад

    В мидловском решении идет выборка случайного символа из строки, но в качестве индекса берется интервал от 0 до длины строки включительно (так настроена функция), потому может выпасть рандомно ошибка, тут как повезет. Почему все напали на регулярки - непонятно, как раз проверять через нее валидность пароля вполне нормально, а вот хеш в данном случае - ну такое себе. В целом, задача слишком простая, чтобы ее разбирать.

  • @Yurec10
    @Yurec10 4 месяца назад

    регулярные выражения нечитаемые и занимают много памяти

  • @placid3495
    @placid3495 4 месяца назад

    Я бы хотел чтобы весь ваш канал был наполнен только такими видео! Я бы смотрел нонстоп тогда)

  • @Queue2121
    @Queue2121 4 месяца назад

    Это ж что ж за джун то такой? По моему навыки джунов недооценены. У меня 0 опыта работы в айти (ну тоесть я даже не джун) и как бы я решил как показано в последнем варианте)

    • @v1tal1i
      @v1tal1i 4 месяца назад

      с 0 опыта решил как показан в последнем варианте, где нужно знать библиотеку крипто и её методы? 😄 для кого эта лапша?)

  • @victorrassoha8258
    @victorrassoha8258 4 месяца назад +2

    Сеньер - это опытный разработчик. А опытный разработчик знает, что если в задаче указано - строчные, заглавные и цифры, то за час до ввода в эксплуатацию потребуется добавить и спецсимвол. Уважаемый автор, пожалуйста, добавьте в ваше "сеньерское" решение хотя бы один спецсимвол "-*$#@_"

  • @user-cn7gc2kb5y
    @user-cn7gc2kb5y 3 месяца назад

    прикольно, столько умников в комментах с имбическим стажем, что возникает вопросы, что вы забыли тут? ))) смотрите контент чисто для профиков. Душнилы

  • @iKorewBro
    @iKorewBro 2 месяца назад

    Почему мидловское решение более тупое, чем джуновское? )))

  • @kemal1910
    @kemal1910 4 месяца назад

    2:00 - 7:10 Это даже для джуна слишком позорный код, у меня студенты в Шымкенте в ЦАЭИ пишут лучше. =) А всё остальное очень хорошо.

    • @ElbrusBootcamp
      @ElbrusBootcamp  4 месяца назад

      Видимо, нашему преподавателю сложнее всего было придумать вариант джуна, и поэтому немного перестарался 😂

    • @ukranian-web-dev
      @ukranian-web-dev 4 месяца назад

      Привет, скажи чем он позорный

  • @tahrizade
    @tahrizade 4 месяца назад

    сам не мог написать как Senior, поэтому видос пауза 🤣🤣🤣🤣🤣🤣🤣🤣

    • @ElbrusBootcamp
      @ElbrusBootcamp  4 месяца назад

      Нам пришлось прервать съёмки, поэтому захотелось добавить юмора и пошутить 😄

    • @tahrizade
      @tahrizade 4 месяца назад

      @@ElbrusBootcamp сочувствую 😂

  • @user-in3gg1xp4w
    @user-in3gg1xp4w 4 месяца назад

    все гениальное просто потому сеньор лучше всех а вот решение мидла хуже чем у джуниора!!!

  • @XaJlaBa
    @XaJlaBa 4 месяца назад +1

    функции ради функций и понтов, чем более качественно пишешь говнокод тем более ты синьер.

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

    Интересное видео, и комментарии
    Вот мой вариант решения, буду рад комментариям )):
    function generator(){
    // Создаем массив с тремя обязательными символами
    let arr = [
    ((~~(Math.random() * (36 - 12))) + 11).toString(36), // случайная строчная буква
    ((~~(Math.random() * (36 - 12))) + 11).toString(36).toUpperCase(), // случайная заглавная буква
    (~~(Math.random() * 10)) // случайная цифра
    ]
    let arr2 = Array.from({ length: 3 + (~~(Math.random() * 15)) }, (_,i)=>(~~(Math.random() * 36)).toString(36)); // создаем массив - случайные буквы и цифры от 3 до 17
    arr2 = arr2.map((elm) => (~~(Math.random() * 2)) ? elm.toUpperCase() : elm) // случайно делаем некоторые буквы заглавными (не обязательно)
    let str = arr.concat(arr2).sort(() => Math.random() - 0.5).join(''); // Объединяем массивы, перемешиваем (не обязательно), объединяем в строку
    return str;
    }