Решение задач Codewars JS | Junior, Middle, Senior | ЧАСТЬ 3
HTML-код
- Опубликовано: 26 фев 2024
- 🎁 Бесплатные мастер-классы 👉🏻 go.elbrusboot.camp/MkS-s
🤓 День открытых дверей в буткемпе 👉🏻 go.elbrusboot.camp/js_-dod
Как джун, миддл и синьор разработчик решают задачи на 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
senior не будет проходить весь массив абсолютно каждый раз. Он будет использовать для этой задачи обычные циклы и напишет brake, если на текущей итерации стало понятно, что массив unordered
Это хорошая оптимизация, респект! В худшем случае мы можем понять неупорядоченность массива только в самом конце, поэтому на сложность алгоритма это условие не влияет 🤓
Не хотел бы я в проекте увидеть такой сеньёрский код, и сидеть думать что происходит
да никто так не пишет, это задрота бест практис тиснули с кодварс, разобрали и выкатили) с реальными задачами не имеет ничего общего
@@suspenseorigin5542 в реализации некоторых криптографических алгоритмов так и пишут)
Это прикольный код с точки зрения оптимизации, если нужен очень-очень быстрый код и есть много времени его писать, но по факту лучший код для прода это код по принципу KISS, что больше всего подходит к решению джуна.
Моя любимая рубрика) Жду еще!
Нам очень приятно, новый выпуск уже снят, ожидайте в ближайшее время на канале :)
Большое спасибо за материал! Открыли новый взгляд на решения.
Спасибо за рубрику)
алгоритм также будет оптимизирован по памяти если использовать arr.reduce и Set как аккумулятор. Использование битовых операторов не показатель сеньора, битовые операторы тяжело читать и его используют только в местах которые редко читают - кор компоненты или команды из одного сеньора
Страшно, очень страшно, если бы мы знали, что это такое но мы не знаем, что это такое. Видео отобьёт любое желание заниматься программированием у начинающих.
Забей вообще. Даже не думай. Это приколы просто с математических кружков. Типа у кого писька длиннее, кто круче напишет. В 99% реальности такое не встречается. Последний пример реально для сениоров, сениоров извращенцев 😂
А копию массива сделать (который как говорилось в видео может миллион элементов содержать) чисто ради того, чтобы нормальный цикл не писать - это точно норм для синьора? Точно ли оптимально по памяти выйдет?
Спасибо за видео! Подскажите, пожалуйста, варианты где подобная задача может использоваться на практике?
Есть вариант с рейтингом чего либо.
Например 1го числа у штерна было 100 слушателей, 2-110, 3-120.
Берешь массив [100,110,120] - рейтинг растущий.
Это условно, в твоем проекте если это надо посчитать на миллион моргенштернов плохая затея, а если на пару сотков строк в таблице - то норм
если усложнение это то чему способствует опыт, тогда совет новичкам, не гонитесь за опытом)))
Я прям повысил свою самооценку :)) у меня опыта в программировании 3 года , но 15 лет в математике , алгоритмы оптимальные придумать не проблема, а вот перенести на код занимает больше времени. Хотя эта задача простая, попадались и такие где алогитм придумать уходила неделя, потому что бизнеспроцесс приходилось изучать подробно, а код написать уже день два. Так что все относительно.
Middle: много вычислний size + математические операции над массивом (тем более, если он будет большим) - тоже не сильно оптимальнее первого варианта джуна
Если ваше последнее решение для сеньёров, то: 1. совместимость с `Intl.Collator().compare` (в случае массива строк) и 2. предварительный выход из цикла, если обнаружено unsorted; это видимо для надмозгов, не меньше.
```javascript
function sequenceClassifier(arr) {
let flags = 0, prev = arr[0];
for (let i = 1, len = arr.length ; i < len ; i++) {
const item = arr[i];
// the [-1, 0, 1] is compatible with `new Intl.Collator().compare`
if ((flags |= ((0b011 & (
item === prev ? 0// ((0b11 & 0) + 1) === 0b001
: item > prev ? 1// ((0b11 & 1) + 1) === 0b010
: -1// ((0b11 & -1) + 1) === 0b100
)) + 1)) === 0b111) {
break;
}
prev = item;
}
if (flags >= 0b110)return 0;
if (flags === 0b001)return 5;
return flags - 1;
}
```
Сразу же поправлюсь, что в решении из видео для сеньёров есть совместимость с `Intl.Collator().compare`: с помощью функции Math.sign, так что остаётся только предварительный выход из цикла, если с массивом и так понятно, что он unsorted.
Классный, очевидный код!
Почему так мало комментариев и лайков ? Хорошая рубрика, хороший материал, хорошая подача, спасибо!.
Предполагаю, потому что действительно увлекающихся мало.
Срасибо за видео, интересно. Но пожалуйста озвучивайте задачу полностью, пришлось пересматривать что бы понять почему входные данные не проверяются))
const classifier = (numbers) => {
let first = numbers.shift();
return numbers.reduce((acc, item, index) => {
console.log(first, item);
if (item < first) {
return VALUES.decrease
}
if (item > first) {
return VALUES.increase
}
if (item === first) {
return VALUES.same
}
first = item;
}, 0);
};
вроде работает без СИНЬЕРСКОГО КОДА
это если было бы три условия было, а там пять условий в задаче, еще not increase и not decrease
Мне кажется что синьер не стал бы решать такую джунскую задачу, а поручил бы первому попавшемуся джуну 🎉😮😅
А если я просто 3 переменные создал куда просто посчитал, количество числе которые > предыдущих, < предыдущих или равны предыдущему. И по ним определил? Кто я?
P.s. риторический вопрос. Как по мне это самый лучший способ (можно конечно вообще весь массив не проходить, но для понятности решил написать так, но битовые операции это уже оверхед как по мне, не знаю, мне кажется сеньор не стал бы запариваться так).
Могу только сказать, что решение Джуна быстрее выполняется )) если возьмем допустим массив из 100.000 то Jun 0.800, а Mid 1.6! А если от 1 млн то 7.00 и 16.00 ))
Я бы сказал, что получившийся код сеньора - это код крепкого олимпиадника по программированию. Как правило, в реальной жизни не требуется настолько сильной оптимизации. Что гораздо более важно - это писать понятный, легко расширяемый и поддерживаемый код. Конечно, не стоит писать так, как было показано в первом примере, но и чрезмерно оптимизировать код в угоду читабельности в современном мире тоже вредно (за исключением задач, которые требуют таких оптимизаций)
а нельзя за 1н проход определить тип через for? просто каждый раз сравнивать элементы текущий и следующих. Все равно прийдется пройтись минимум 1 раз
У вас там копия массива и замыкание. Откуда константность по памяти?
для определения неупорядоченной последовательности необязательно проходить весь массив
первое решение (джуновское) - выполнение за 3242ms.
второе решение (миддловское) - выполнение за 6080ms (должно быть оптималеньнее, по идее).
по третьему вопросов нет.
я думал наоборот код сеньора всегда элегантен и прост для чтения
код из видео ревью не пройдет и даже не оптимален
К сожалению это не сеньорское решение, а скорее задротское. В реальности сеньор понимает, что после него код должны понимать мидлы и джуны…и по факту такой код будет плохой практикой.
очень не хорошее решение, куча масок, главное ничего не забыть захендлить, я бы сказал это код джуна ‘когда понял как работать с битами’. Проще в цикле и используя паттерн rules
Как говорят умные люди, синьёрский код это код который понятен даже джунам, я не уверен, что такой вариант оптимальный, так как код поймёт не каждый разработчки, редьюс было использовать изначально очевидно, но остальное просто выпендрёж.
Это не код джуна, а код идиота. Или джаваскиптизеров не учат все делать за один проход цикла? Да и мидл мог бы заполнять сет на том же проходе и использовать брейк. Про читабельность всех вариантов вообще молчу, такое у меня ревью бы не прошло. Руки поотрывал бы за километровые строки
да уж такую херню такими дурацкими способами решают
Ну серьезно это не сеньерское решение :))) почти все последовательности в этом мире не являются константами или строго монотонны и не строгомонотонны. А тут всгда алгоритм проходит по всему массиву. Есть более оптимальный алгоритм .