Алгоритмы на JavaScript. Решение задач с CodeWars. Практика
Вставка
- Опубліковано 25 тра 2021
- Алгоритмы Javascript. Практика алгоритмов на js. Решение задач на JS c CodeWars. Алгоритмы js. Алгоритмы на js.
Экспресс справочник с более 200 вопросов к собеседованию тут - boosty.to/ulbitv
Исходный код урока - github.com/utimur/algs-codewars
Мой канал в telegram и канал для общения подписчиков - t.me/ulbi_tv
Поддержать меня и мой канал вы можете по ссылкам ниже.
Patreon/boosty (доступ к бонусам) - boosty.to/ulbitv
Qiwi кошелек - qiwi.com/n/BODYE821
Яндекс деньги - yoomoney.ru/to/4100116193037469
Таймкоды:
00:40 - Числа Фибоначчи - РЕКУРСИЯ
02:40 - Числа Фибоначчи - Итеративный способ
04:26 - Палиндром
07:25 - Задача на понимание замыканий\колбеков
11:23 - Задача с концертами
15:00 - Периметр закрашенной области
19:42 - Задачи с числами и массивом
23:48 - Обход n-го дерево
27:00 - Время ставить лайки =)
#JavaScript #CodeWars #Алгоритмы - Наука та технологія
Если будет хорошая активность, то сделаю видос с задачами посложнее :)
я мечтаю найти в сети большой практикум по функциональному программированию. Пока не нашёл. Нужны СОТНИ задач и примеров - тема специфическая и востребованная, но пока никем не покрыта
Лев
Тимур, будь добр, расскажи доступно про Symbol, пожалуйста, с примерами.
Часто спрашивают на собесах, но в реальных задачах юзкейсов у меня, например, нет за много времени и трудно въехать, что это, как и для чего оно действительно надо, в каких кейсах. Спасибо!
батя как всегда радует, спасибо за видос, можешь готовить уже посложнее ))
Хотелось бы увидеть сложные алгоритмы по типу шашек или авто выстраивания пазла по алгоритму дэйкстры)
Супер!
Красавец!
О, долгожданный видос, лайк перед просмотром
Благодарочка ;)
Тимур, я не знаю помнишь ты или нет, но я с тобой с 200-300 подписчиков, и хочу сказать, что качество контента заметно выросло, даже не в плане звука или видео, а в целом, раскрываемые темы, подача, обложки роликов, твой контент приятно смотреть, даже если тема, которую ты просвещаешь уже знакома, открывая каждый ролик я всегда знаю, что будет полезно. Думаю со мной многие согласятся, соотношение лайков/дизлайков на видео об этом говорит
Я всех «старичков» помню) тех, кто оставляет комментарии не так уж и много осталось :) спасибо! Стараюсь улучшать контент, рад, что замечаете)
Улыбка на лице возникает моментально , когда вы выкладываете новый видос!
А у меня улыбка от ваших комментариев ;)
Топово
Задачки с codewars - это куруто ! )
Согласен))
Спасибо за такие полезные видео. Хочется увидеть, что же там в задачах посложнее.
Развернутое объяснение каждой задачи, интересно слушать , вникать. Будет здорово увидеть продолжение 🔥
Только сегодня задумался о CW, как там что и чего. Годный контент. Не глядя - жирный лайк !!!
Спасибо друг:)
Спасибо огромное! Жду продолжение!
Огонь! Спасибо за видео!
Благодарю!
Это самое крутое ) спасибо
✊🏻✊🏻
Ай как нужно такое! Плиз еще подобные видео! Автор - молодец!
Спасибо :)
Супер. Давай больше подобных!
Супер)))))))))) еще давай))))))
Очень интересно, продолжай!
это лайк!
Ролик хороший, жду продолжения! задачи это всегда круто, интересно смотреть как их решает кто то еще
Ничего не понял НО очень интересно!
как всегда на высоте
Like! Больше инфы о алгоритмах и расчета их сложности пожалуйста)
Спасибо!
Очень интересный формат ! Спасибо ! JavaScript,CodeWars.
Благодарю
Круто,лайк и комент!!
function fibonachi(n) {
let resultArr = [0, 1];
let first = 0, second = 1;
for (let i = 0; i < n; i++) {
let next = first + second;
first = second;
second = next;
resultArr.push(next)
}
console.log(resultArr); // [0, 1, 1, 2, 3, 5, 8, 13]
}
fibonachi(6)
Завтра у меня собес в Яндексе на джуна, этап алгоритмы. Очень вовремя ты снял это видео!
Серьезное дело) успехов!
++активность для задач посложнее)
Всегда интересно посмотреть на решение задачи со стороны
Спасибо за такие видосы! Очень полезно в обучении и закреплении!
Стараюсь )
Круто
Как всегда качественно и без воды, спасибо
Спасибо!)
Огонь 🔥. Так держать.
Очень круто! Давай еще роликов по алгоритмам и задачкам с кодеворс
не перестаю восхищаться твоими роликами! Подача просто Идеальная! для меня как минимум!
Стараюсь друг! Спасибо! Рад слышать!
отличный формат
Спасибо тебе, дальнейших успехов!
Спасибо большое! Очень интересно 😌
Спасибо за видос! пили ещё видео, очень полезно!
Супер, больше таких разборов. На отметке 11 мин там где минус необходимо тоже поменять местами( b - a) как и в делении.
Офигеть, такого материала почти не встретишь в ютубе :)
Спасибо за видео и проделанную работу!
Побольше таких видео с задачками делай, они полезны каждому программисту, как новичку так и нет для практики я считаю.
Мое решение задачи на уникальные элементы массива. Причем оно ещё учитывает типы, то есть "5" и 5 - разные элементы
const uniqArr = arr =>{
const hash = arr.reduce((acc, cur) => {
acc.set(cur, (acc.get(cur) || 0) + 1)
return acc
}, new Map())
return Array.from(hash.keys()).filter(el => hash.get(el) == 1)
}
Проявляю активность)
Спасибо за все , что вы делаете для своих преданных зрителей !
Спасибо!)
Отличный видос, ждем еще
Отличный формат) я только за ✊✊✊
Учту!)
Очень круто!
Спасибо!
Спасибо огромное за контент👍
Держите итеративный метод для Фибоначи без хардкода на первые значения:
function fibonachi (n) {
let prev = 1
let res = 0
for (let i = 0; i < n; i++) {
let r = prev + res
prev = res
res = r
}
return res
}
люблю задачки )
Спасибо, очень круто объясняешь, понял все сказанное. Ещё раз огромное спасибо, был бы рад подобным видео у тебя на канале
Спасибо друг:)
Спасибо дружище! Хороший ролик, что бы понимать как решать задачи на codewаrs!!! Успехов!!!
Предельно полезное видео, из одной только задачи про замыкания узнал уйму полезной инфы, спасибо!!!
Формат отличный!
davai!
Спасибо! Подача - кайф! Продолжай!
Тимур, продолжай!! Любая практика поможет мне в трудоустройстве, я стараюсь каждый день по задаче решать
как успехи?)
Спасибо, очень полезно
Задача с деревом через reduce и рекурсию)
function treeSum(tree) {
return tree.reduce((acc, node) => acc += node.c ? node.v + treeSum(node.c) : node.v, 0);
}
Решил почти аналогично)✌️
function treeSum(tree) {
return tree.reduce((sum, { v, c }) => sum + v + (c ? treeSum(c) : 0), 0);
}
Как всегда топовые видосы!!! Респект
Благодарю;)
Хочу продолжение
офигеть совпадение, как раз на codewars решаю задачку 4kyu
успехов!
Очень понравился, спасибо мужик!
Благодарю;)
Спасибо тебе за такой видос брат, нужно выводить в топ твои видосы✊🏽✊🏽
✊🏻✊🏻✊🏻
Это верно!
Спасибо огромное за видео. Ты очень помогаешь.
Ждем подобные видосы по алгоритмам)) спасибо
Отличный формат! Сам дальше 7kui пока не могу пробить
Интересно было бы помотреть на 1-3 kata
Хороший канал, очень помог мне! Лайк!
Спасибо!
👍🏻👍🏻💪🏻
Задачу Фибоначчи, в зависимости от ограничений, необходимо было решать с использованием мемоизации. Иначе, ваше рекурсивное решение сказало бы "пока" при N == 30+.
шикарный формат, можно ещё?)))
Топ! Ждём новые видосы с задачами!
Тема интересная!!
Ааа! Как вовремя! Я ещё не начала смотреть, но уже лайк и благодарность. Как раз готовлюсь к собеседованию. Пересмотрела раза 4 ролик по алгоритмам и структурам данных.. расстраивалась, что нет ещё на тему побольше практических. А тут такой подкат. Класс
Спасибо! Успехов!)
@@UlbiTV Спасибо тебе. (Надеюсь, это не слишком фамильярно)) Ну что ж, не без твоей помощи в том числе, я прошла все собесы и получила работу. Обсуждается дата выхода. Тем временем, открываю папочку node js на твоём канале.
Я давно не Джун, но есть темы, в которых плаваю.
Ты делаешь классное дело. Особенно для тех, кто знает зачем и что ему нужно, и ищет способ быстро начать ориентироваться в теме, чтобы понимать куда и как копать дальше.
@@djailinvasu не представляешь, насколько я радуюсь, когда получаю подобные комментарии :) очень рад, успехов на новом месте работы!
наконец то годные видео 👍👍👍
Формат видео офигенный! Продолжай подобное пилить)
P.S.: Было бы интересно услышать разбор и реализацию алгоритма Дейкстры, а также второго алгоритма для отрицательных плеч.
Очень классный ролик!
Сейчас бы Фибоначчи решать рекурсивно за 2^n, когда итеративный подход требует O(n)
Поскорее бы залететь попробовать) Постоянно смотрю твои видосы и наверное вот скоро влечу разок)
спасибо бро, как всегда великолепен!
Интересные задачки, правда не представляю где их встретить можно.
Задачи не встретятся в реальных проектах, но благодаря им (задачам), ты научишься решать быстрее реальные проблемы.
Спасибо!!
го след часть
С периметром задача интересная, пришлось даже минут 40 потратить, часть из которых думал, как вообще посчитать этот периметр, даже на листке нарисовал разные варианты :)
В решении сделал нормальную матрицу, заменив буквы O на нули для того, чтобы Boolean(0) возвращал false.
function perimeter(matrix) {
const grid = [];
for (let i = 0; i < matrix.length; i++) {
let current = [];
for (let symbol of matrix[i]) {
current.push( symbol === 'O' ? 0 : symbol );
}
grid.push(current);
}
const rows = grid.length;
const cols = grid[0].length;
let result = 0;
function getPartialPerimeter(r, c, result) {
if (grid[r][c] === 1) return 0;
grid[r][c] = 1;
result += grid[r - 1]?.[c] ? getPartialPerimeter(r - 1, c, 0) : 1;
result += grid[r + 1]?.[c] ? getPartialPerimeter(r + 1, c, 0) : 1;
result += grid[r][c - 1] ? getPartialPerimeter(r, c - 1, 0) : 1;
result += grid[r][c + 1] ? getPartialPerimeter(r, c + 1, 0) : 1;
return result;
}
for (let r = 0; r < rows; r++) {
for (let c = 0; c < cols; c++) {
if (grid[r][c] === 'X') {
result += getPartialPerimeter(r, c, 0);
}
}
}
return result;
}
P.S. Нашел эту задачу на codewars (Land perimeter), но для нее решение пришлось чуть переделать, так как codewars не воспринимает опциональную цепочку ?.
Поменял эти 3 строчки и название функции.
result += grid[r - 1] && grid[r - 1][c] ? getPartialPerimeter(r - 1, c, 0) : 1;
result += grid[r + 1] && grid[r + 1][c] ? getPartialPerimeter(r + 1, c, 0) : 1;
return "Total land perimeter: " + result; // по условию надо возвращать строку
найс
07:25 *Задача на понимание замыканий\колбеков*
Это классическая задача на понимание функциональной парадигмы программирования. А именно композиции функций.
*Решение автора видео является примером того как делать нельзя*
Тем более нельзя такой код приводить как пример для других.
*Пример решения близкий к оптимальному*
{
// _Создаем абстракцию нечто, которая знает только о себе_
const thing = ( t ) => t;
// _Создаем абстракцию Тип Нечто, которая определяет логику поведения если она задана, или возврашает абстракцию thing_
const typeThing = (
( t ) =>
( a = thing ) =>
a( t )
);
// _Определяем абстракции для примитивных значений от 0 до 9_
const [ zero, one, two, three, four, five, six, seven, eight, nine ] = (
[ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
.map(
typeThing
)
);
// _Определяем абстракцию для операции сложения_
const plus = (
( p1 ) =>
( p2 ) =>
p1 + p2
);
// _Определяем абстракцию для операции вычитания_
const minus = (
( p1 ) =>
( p2 ) =>
p1 - p2
);
// _Пример композиции абстракций_ 4 + ( 5 - ( 2 + ( 3 ) ) )
console.log(
four(
plus(
five(
minus(
two(
plus(
three( )
)
)
)
)
)
)
);
}
*Автору видео домашнее задание*
Во первых, научиться постоянно себе задавать вопрос - а правильно ли я делаю.
Во вторых модифицировать код что выше так, чтобы абстракции для plus minus, которые сейчас имеют свое уникальное определение, стали частью цепочки создания для абстракций работающих с примитивными значениями.
Аудитория этого канала в подавляющем большинстве - только начинающие изучать программирование, им до таких высоких материй пока далеко
@@leopold3146 Я абсолютно согласен с Вами в той части, где Вы ставите акцент на доступности материала для целевой группы. При этом, я хочу сделать важный акцент - я настаиваю на том, что в случае осваивания такой специальности как программирование, минимальный уровень (порог), который бы считался достаточным для программиста, был хотя-бы на том примитивном уровне, о котором заявляю я.
Иначе говоря, я настаиваю на том, что преподавание материала уровнем ниже - это не только не достаточно для специальности, но и унижение человеческого достоинства.
Такого мнения я придерживаюсь.
@@demimurych1 Не утрируйте! Большая часть кодинга вовсе не требует таких сложных логических механизмов, и изучающим любой язык надо с чего-то начинать. По-хорошему, этот пример из-за своей сложности вообще не должен был присутствовать в первом видео из серии, но автора канала, претендующего на звание образовательного для начинающих, постоянно заносит в излишне густые дебри функционального программирования.
Контент топ!
Интересно!
Вот вроде говоришь о сложности алгоритмов и забываешь упомянуть, что у такого рекуррентного нахождения числа фибоначчи оно экспоненциальное и так писать опасно для здоровья
Согласен, стоило бы сказать
Было интересно
Отличное видео. Еженедельную рубрику давай, с задачками с CodeWars. Уверен, что плейлист будет популярен для джунов(вроде меня) да и просто любителей задачек.
И вопрос по задачке, почему в 6-й не пройтись по ключам обьекта, ведь значений там будет меньше чем в проверяемом массиве?
Интересно, жду ещё! На замыкания/колбэки 7:25 была самая занимательная, подумал над ней минут 20, решил таким же способом, но у тебя намного лаконичнее вышло без TS и моего длинного нейминга переменных)
Спасибо!) да, прикольная задачка)
Спасибо!
Класс! понравились задачи с замыканием и матрицей. Аффтар давай есчо! 8)
спасибо, ты молодец!
function fib(n) {
if (n < 1) {
return 0
}
if (n
Хоть 1 задача про Фибоначчи типо простая, но если заранее не знать алгоритм действий фиг допрешь до такой рекурсии
Да, классное видео