JavaScript 5 типовых задач на собеседовании, решаем их!

Курс JS: js.itgid.info
Курс верстки: html.itgid.info
Интернет магазин на Node: node.itgid.info
Плейлист: goo.gl/63osiv
Телеграм: t.me/jsrules
Мои курсы: itgid.info

Пікірлер: 396

  • @nickolaypanasyuk9711
    @nickolaypanasyuk97115 жыл бұрын

    Спасибо большое ! Очень здорово, что рассматривается не только решение , а и варианты оптимизации кода и недостатки. С нетерпением жду следующего видео !

  • @MArt-lz9xu
    @MArt-lz9xu5 жыл бұрын

    Спасибо за решение задачи. Все по полочкам split.разложено, join.разжевано и в String положено :)

  • @user-fu9lf8mj1s
    @user-fu9lf8mj1s5 жыл бұрын

    Полностью поддерживаю Roman! Объясняет, раскладывая все по полочкам! Прохожу курс, очень довольна!

  • @user-fz7fe8cn7i
    @user-fz7fe8cn7i5 жыл бұрын

    Спасибо братка, крепкого тебе здоровья!

  • @itgid

    @itgid

    5 жыл бұрын

    Спасибо!

  • @user-yx4ov2xx8s
    @user-yx4ov2xx8s5 жыл бұрын

    Очень интересно! Ждём новой части!

  • @user-xq3hx1uz1r
    @user-xq3hx1uz1r5 жыл бұрын

    Классный канал. Я наконец понял работу с массивами.

  • @itgid

    @itgid

    5 жыл бұрын

    Супер!

  • @user-yx2tq1bh1m
    @user-yx2tq1bh1m5 жыл бұрын

    Просто лучший в мире за работой.

  • @near5090
    @near50905 жыл бұрын

    понравилось, тока могли бы разделить по частям уроки а то люди будут думать что в этом видео все 5 задач

  • @itgid

    @itgid

    5 жыл бұрын

    Ок. Добавлю части!

  • @AwesomeMrUser

    @AwesomeMrUser

    4 жыл бұрын

    ЛаверКейс ;)

  • @user-gl8qs7qj4k

    @user-gl8qs7qj4k

    2 жыл бұрын

    @@itgid не добавили....

  • @coldym

    @coldym

    2 жыл бұрын

    @@itgid все еще не добавили...

  • @user-qi7jq9so8g

    @user-qi7jq9so8g

    2 жыл бұрын

    @@itgid все еще не добавили....

  • @tivirp1997
    @tivirp19975 жыл бұрын

    Класс, продолжай, как раз буду устраиваться js js se

  • @user-mh1lt6hv8i
    @user-mh1lt6hv8i5 жыл бұрын

    Алекс очень поступков и полезно спасибо!

  • @eXacT9090
    @eXacT90905 жыл бұрын

    Канал пушка!

  • @itgid

    @itgid

    5 жыл бұрын

    Ага, спасибо!

  • @JavaScriptcher
    @JavaScriptcher3 жыл бұрын

    Отличное объяснение!!!!!!Спасибо!!

  • @Tipuchek
    @Tipuchek5 жыл бұрын

    Как обычно топчик)

  • @itgid

    @itgid

    5 жыл бұрын

    Спасибо!

  • @user-ot4zg4mv2r
    @user-ot4zg4mv2r5 жыл бұрын

    Первой строкой в функции надо проверять, что длина строки более 1 символа, иначе сразу возвращать true. Ещё передать могут что попало вместо строки, например объект. Тоже надо проверять.

  • @user-hp5hw8su8q
    @user-hp5hw8su8q5 жыл бұрын

    Круто, спасибо!

  • @user-pv6rt9xo6y
    @user-pv6rt9xo6y4 жыл бұрын

    очень понятно объясняте, спасибо

  • @abolnikov
    @abolnikov3 жыл бұрын

    Вау, круто. Видел похожую задачу, там парень так закрутил чтоб её решить, а тут всё просто, понятно. Дома попробую сделать по памяти. Спасибо большое!!

  • @stasmaksimov9531
    @stasmaksimov95315 жыл бұрын

    Отличное видео! 👍

  • @itgid

    @itgid

    5 жыл бұрын

    Спасибо!

  • @alexsoft7073
    @alexsoft70734 жыл бұрын

    очень хорошая и простая задача. особенно решение. лайк

  • @webdmitriev
    @webdmitriev5 жыл бұрын

    Классно)) мне понравилось такое решение))

  • @itgid

    @itgid

    5 жыл бұрын

    да, особенно прикольно от 3 операций к одной.

  • @FilmsMediaTV
    @FilmsMediaTV Жыл бұрын

    Этот палиндром мне теперь во сне как ужастик сниться будет 😅

  • @Max-kr4ie
    @Max-kr4ie5 жыл бұрын

    Благодарю. И жду новых. Интересно.

  • @itgid

    @itgid

    5 жыл бұрын

    Да, завтра будут новые.

  • @vovaseagull1097
    @vovaseagull10975 жыл бұрын

    Очень круто объяснили спасибо! еще наверное б добавил что просят вместо reverse() и как оказалось что еще вариант который от меня хотели услышать это обратный цыкл

  • @itgid

    @itgid

    5 жыл бұрын

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

  • @ivanvano8571
    @ivanvano85713 жыл бұрын

    супер, класно, велике дякую!

  • @idinaxuj100
    @idinaxuj1003 жыл бұрын

    Скиньте видео с остальными 4 задачами? очень тяжеловато найти :(

  • @tihon4979
    @tihon49795 жыл бұрын

    Объясняешь круто! Я вообще питон учу, но так как автор преподносит инфу, мне ничего не мешает параллельно рассматривать js. Если будет курс по питону, я б глянул.

  • @itgid

    @itgid

    5 жыл бұрын

    Спасибо!

  • @nizomiddin_shahina
    @nizomiddin_shahina3 жыл бұрын

    Спасибо большое

  • @ychetka
    @ychetka5 жыл бұрын

    написал за 2 минуты, пользуйся, по идее работает со всем в UTF-8 function test (chars) { const normalise = chars.toUpperCase() let polindrom = '' for(let i = normalise.length; i > 0; i-- ){ polindrom += normalise[i - 1] } return (polindrom == normalise) }

  • @fvckthesociety1123
    @fvckthesociety11235 жыл бұрын

    спасибо!

  • @user-tp5sw9qx2m
    @user-tp5sw9qx2m5 жыл бұрын

    будет ли продолжение? а то написано 5 задач, а разобрали одну :)

  • @rainysky84
    @rainysky845 жыл бұрын

    На видео на 4:14 -->> let str2 = str.split(''); В 2019ом году для преобразования в массив проще писать let str2 = [...str1] Итераторы и деструктуризация во всей их красе :)

  • @user-il3xh5di2i

    @user-il3xh5di2i

    4 жыл бұрын

    Да у автора проблемы с наименованием.

  • @apollon-8151

    @apollon-8151

    Жыл бұрын

    то есть с помощью оператора spread можно из строки сделать массив? Надо будет попробовать на практике:) Спасибо за информацию

  • @numbersevenunderheaven1898
    @numbersevenunderheaven18984 жыл бұрын

    7:02 Звучит так, как будто всегда чем короче, тем лучше, на деле, если такого принципа придерживаться, то дебажить становится в разы сложнее, да и на выразительности кода это сильно сказывается, особенно если описывается не самая очевидная логика, а ещё можно упомянуть, что методы массивов делятся на те, которые мутируют сам массив и те, которые этого не делают, в частности reverse его мутирует, для данного решения не очень существенно, но на практике очень важно это помнить. А за видео спасибо, хороший разбор типовой задачи.

  • @sergei-sabitov

    @sergei-sabitov

    3 жыл бұрын

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

  • @Bunny_Love
    @Bunny_Love4 жыл бұрын

    Очень круто

  • @linaKaderhc
    @linaKaderhc5 жыл бұрын

    После строки " str2 = str2.join; " "str2" необходимо преобразовать в строку, поскольку на данный момент это массив. Сделать это можно подобным образом: " str2 = " "; ". Иначе функция возвращает " false ". А второй вариант работает некорректно и всегда выводит "true".

  • @onlynowmotivation
    @onlynowmotivation2 жыл бұрын

    Спасибо;)

  • @dmitrypichugin7449
    @dmitrypichugin74495 жыл бұрын

    Можно ничего не делать с входной строкой. Имеет значение четное число символов или нет. Можно двигаться по массиву и сравнивать первый символ с последним, и сужаться до середины. В итоге сложность будет O(n), по памяти O(1). Если строка не четная, то символ в середине можно не смотреть. Почитайте книгу "Cracking coding interview".

  • @senioreasy

    @senioreasy

    5 жыл бұрын

    Я тоже сначала так подумал )) Но потом прикинул - а ведь пофиг чётное количество или нет. Делаешь цикл до "длинна строки делённая на 2" например 5/2 = 2 (остальное в остатке); а 3й символ можно не сравнивать )) Всё выше справедливо для плюсов.

  • @MrRagday

    @MrRagday

    5 жыл бұрын

    "Аргентина манит негра"

  • @simplewebdev1098

    @simplewebdev1098

    5 жыл бұрын

    @@senioreasy верно, но только в JS 5/2 = 2.5. Нужно округлять, хотя, с другой стороны, не нужно. Ибо 3 всё равно > 2.5 так что для сравнения пойдёт.

  • @zhenshuang

    @zhenshuang

    4 жыл бұрын

    Ты там что, строки в миллион символов собрался проверять на палиндром? Такой задачи не существует в природе Ещё экономить ресурсы и проверять только половину строки, жесть. Пока ты строку будешь делить на два и ставить указатели, простой скрипт в одну строку и понятнее читается и отработает быстрее.

  • @AwesomeMrUser

    @AwesomeMrUser

    4 жыл бұрын

    Mister X комментарии ты конечно мастер писать, но это классический алгоритм проверки строки на палиндром. Кроме того, задача может быть не в том, что проверять надо одну большую строку, а много маленьких и эффективность не помешает.

  • @dadtyler5702
    @dadtyler57025 жыл бұрын

    Спасибо

  • @user-nd4sl1lp9b
    @user-nd4sl1lp9b18 күн бұрын

    С латиницей всё понятно-все работает.А вот с кирилицей будет ли так же срабатывать,или нужно ещё чтото дополнительно?

  • @evgeniypp
    @evgeniypp5 жыл бұрын

    Пробелы, запятые и т.п. - куда более серьезные проблемы, чем эмодзи. Чтобы работало с предложениями, нужно ещё сделать str.replace(/\W/g, ""). Чтобы обрабатывало без ошибок числа, undefined и т.п., нужно в начале добавить str+"".

  • @burenkoigor1984
    @burenkoigor19843 жыл бұрын

    В палиндроме, я бы все же сделал const reversedString = str.split('').reverse().join('') return string === reversedString Так будет на одну строчку больше, но сразу повышается читаемость кода.

  • @fuhait

    @fuhait

    Жыл бұрын

    function palindrome(str) { return str.toLowerCase().split('').reverse().join('') == str; }

  • @user-iw3zt5sm7m
    @user-iw3zt5sm7m5 жыл бұрын

    я же правильно понимаю, что если это все вдруг понадобится в синхронном выполнении (ну мало ли - запросы к серверу), то это все дело надо обернуть в async/await или промисами?

  • @velyar
    @velyar4 жыл бұрын

    Все бы так код разбирали как вы:)

  • @baigarinovalibek4612
    @baigarinovalibek46125 жыл бұрын

    Я в JS полный ноль, но с точки зрения производительности это не очень хорошо. Гонять туда сюда стринг в массив и массив в стринг это лишние операции. Я думаю на собеседованиях больше обращают внимание на производительность кода, а не его краткость (может быть JS исключение?:) ). С таким же успехом, задание на сортировку массива можно решить готовым методом типа sort(), но в корне не понимать как эта самая сортировка работает. Может быть хотя бы так const is_polyndrom = str => { var n=str.length; str=str.toLowerCase(); for (let i=0;i

  • @artemkostylev2856

    @artemkostylev2856

    5 жыл бұрын

    А если у вас не четное количество букв? Тогда n/2 будет не целым числом и проверка сломается

  • @user-yb3vy2wx8u

    @user-yb3vy2wx8u

    5 жыл бұрын

    @@artemkostylev2856 ничего не сломается, при нечетной длине центральный символ не будет проверяться, что и не нужно для данной задачи

  • @artemkostylev2856

    @artemkostylev2856

    5 жыл бұрын

    Дмитрий Беляев понятно, спасибо

  • @Warox42

    @Warox42

    5 жыл бұрын

    Можно убрать ловер кейс, и делать ту ловер в иф конструкции для символов. Тогда на 1 проход будет меньше, что в данном случае являеться 50% сложности будет O(n) вместо O(2n)

  • @MrRagday

    @MrRagday

    5 жыл бұрын

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

  • @entity9069
    @entity90695 жыл бұрын

    спасибо

  • @Roman-vl8su
    @Roman-vl8su5 жыл бұрын

    Лучший канал про Web

  • @itgid

    @itgid

    5 жыл бұрын

    Согласен!

  • @TheWorldPeace

    @TheWorldPeace

    5 жыл бұрын

    Самокритично)

  • @nightlair1215
    @nightlair12155 жыл бұрын

    Можно написать код длиннее,но оптимальнее по времени,так как создавать вторую строку,переворачивать ее и сравнивать с другой очень долго при больших строках. function palindrom(s){ s = s.toLowerCase(); s = s.split(''); var flag = true; for(let i = 0;i

  • @lexSkiller

    @lexSkiller

    5 жыл бұрын

    Хороший пример

  • @user-yb3vy2wx8u

    @user-yb3vy2wx8u

    5 жыл бұрын

    только достаточно так проверить половину строки, да и сплитить строку не нужно

  • @Warox42

    @Warox42

    5 жыл бұрын

    Это не О(N) Ведь ту ловер кейс - полтный проход по строке потом сплит - полный проход по строке потом цикл. итого О(3n) А можно и правда за О(н)

  • @nightlair1215

    @nightlair1215

    5 жыл бұрын

    Алгоритм проходит 3 раза, но в асимптотике не записываются коэффициенты O(n/100) = O(100n) = O(n)

  • @MrRagday

    @MrRagday

    5 жыл бұрын

    В чем смысл ускорять некорректный код?

  • @simplewebdev1098
    @simplewebdev10985 жыл бұрын

    Могу предложить более оптимальный способ. Если критерий оптимальности сложность алгоритма, а не, например, количество кода. Идея в том, чтобы не сравнивать всю строку, а отлетать на первом неравном символе. Мы подготавливаем массив: преобразуем строку в массив, убираем пробелы и знаки препинания, приводим всё к нижнему регистру, и т.п. Далее let count = Math.floor(arr.length/2); for (let i = 0; i if(arr[i] != arr[arr.length-i]) return false; } return true; Логика такова: если в массиве чётное количество элементов сравниваются попарно все. Если нечётное, средний элемент всё равно как-бы не влияет. Переменная count создана чтобы каждый цикл не вызывать Math.floor().

  • @MrRagday

    @MrRagday

    5 жыл бұрын

    Почему лет каунт, а не конст?

  • @simplewebdev1098

    @simplewebdev1098

    5 жыл бұрын

    @@MrRagday да, const тут правильнее будет. Но не люблю я, почему то, этот const. Не нравится он мне, и всё ))

  • @denisstepanov3328
    @denisstepanov33285 жыл бұрын

    Есть одно но, задачу можно решить без использования массива. У меня на собеседовании была эта задача, но к ней прилагались условия память m(1), все символы в сравнении учавствуют один раз, строка может содержать пробелы и другие спец символы, не являющиеся буквами, такие символы должны быть проигнорированы, пустая строка является полиндромом.

  • @Minty290
    @Minty2903 жыл бұрын

    Еще есть такое решение: const func = str => { let string = str.toLowerCase().split('').reverse().join(''); let result = (string == str) ? true : false; return result } console.log(func('abbba'));

  • @r45her

    @r45her

    3 жыл бұрын

    return string === str

  • @user-sg6gv6jq3z
    @user-sg6gv6jq3z5 жыл бұрын

    Как массив char рассмотреть строку вариант?

  • @user-qy9to3xr1m
    @user-qy9to3xr1m Жыл бұрын

    а какой у тебя опыт програмирования?

  • @olganovak209
    @olganovak2095 жыл бұрын

    Спасибо за уроки! По поводу палиндромов - классический пример "А роза упала на лапу Азора", т.е. предложение с пробелами :) неплохо бы наверное было бы почистить строку от пробелов, или даже от всех небуквенных символов (прежде всего знаков припинания)

  • @user-dp6yt7yc9l

    @user-dp6yt7yc9l

    5 жыл бұрын

    Все эти условия (эмодзи и прочее) зависит только от твоего представления палиндрома, лично я считаю что "А роза упала на лапу Азора" не является палиндромом.

  • @MrRagday

    @MrRagday

    5 жыл бұрын

    @@user-dp6yt7yc9l А если лично я считаю, что у палиндрома длина строки не может превышать единицу, то решение const isPalindrome = (str) => str === str.charAt(0); резко станет правильным?

  • @user-dp6yt7yc9l

    @user-dp6yt7yc9l

    5 жыл бұрын

    @@MrRagday Да, для тебя станет правильным (но не истенным), ты же этого хотел добиться, 121 - это палиндром? А в двоичной системе? Можно полагаться на википедию, но там про эмоджи ничего нет. Зато там есть магический квадрат, про который никто ничего не сказал.

  • @MrRagday

    @MrRagday

    5 жыл бұрын

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

  • @user-dp6yt7yc9l

    @user-dp6yt7yc9l

    5 жыл бұрын

    MrRagday в двоичной тоже, ну ну

  • @zloy_tushkanchik
    @zloy_tushkanchik5 жыл бұрын

    Так вот где спец по js скрылся. Искал - не выходил нигде, а тут случайно наткнулся в рекомендациях. Однозначно подписка.

  • @MrRagday

    @MrRagday

    5 жыл бұрын

    Замечательного спеца нашли. Код которого не пройдет проверку первыми же примерами палиндромов из Википедии.

  • @zloy_tushkanchik

    @zloy_tushkanchik

    5 жыл бұрын

    @@MrRagday можете посоветовать что то или кого то лучше?

  • @MrRagday

    @MrRagday

    5 жыл бұрын

    @@zloy_tushkanchik learn.javascript.ru Да тот же соракс на три головы выше этого "спеца"

  • @user-fq8rb9ht5l
    @user-fq8rb9ht5l5 жыл бұрын

    А нового видоса нету или просто не найду?

  • @rmstr7
    @rmstr72 жыл бұрын

    Лайк за Олега )) olleh ))

  • @artem98723
    @artem987235 жыл бұрын

    Здравствуйте ,можете объяснить , в вашем коде мы используем множество методов ,поэтому колличесто итераций высокое , не проще ли написать так(с телефона код вставить не могу ,но попробую объяснить): переводим в нижний регистр, потом проходимся циклом for(var i = 0; i return true; Я бы хотел понять минусы (кроме смайлов) этих двух вариантов ,заранее Спасибо

  • @bloodrik

    @bloodrik

    5 жыл бұрын

    ваше решение является самым оптимальным, но на собеседованиях чаще хотят увидеть процесс именно ревёрса строки, в этом и цель. автор действительно показал не очень оптимальный вариант, ибо даже формирование новой строки по типу var res = ""; for(let j = str.length-1; j>=0;--j) { res+=str[j]; } является в 3 раза оптимальнее

  • @user-yb3vy2wx8u

    @user-yb3vy2wx8u

    5 жыл бұрын

    @@bloodrik бежать надо с таких собеседований, где "хотят неоптимально", особенно если Вы понимаете это, особенно если Вы джун (опыта набраться у Вас в такой конторке не получится)

  • @MrRagday

    @MrRagday

    5 жыл бұрын

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

  • @user-dp6yt7yc9l

    @user-dp6yt7yc9l

    5 жыл бұрын

    Ты на интуиции программируешь? jsperf.com/palindrome/3

  • @simplewebdev1098

    @simplewebdev1098

    5 жыл бұрын

    @@MrRagday я не собеседователь, но, как по мне, гораздо важнее, чтобы человек понимал как это работает, чем знал волшебные слова (reverse, split, join). Научить заклинаниям можно и обезьяну, толпы jqery програмыздов (которые не знают нативный JS) не дадут соврать.

  • @ramforinh
    @ramforinh5 жыл бұрын

    Самый классический палиндром:"А роза упала на лапу Азора". Данная функция его не определит. Необходимо перед сравнением удалать все пробелы и знаки препинания. Проблема со смайликами мне кажется гораздо менее важной, чем эта.

  • @pavelharelyshau6106

    @pavelharelyshau6106

    11 ай бұрын

    зависит этот требований. если у нас предполагается что строку будет без пробелов, то нет смысла это проверять. А если нет, то обычный str.split(' ').join('') решает проблему

  • @DJTooZoFF
    @DJTooZoFF5 жыл бұрын

    Может, стоит ещё пробелы убирать в строках при проверке палиндрома? "А роза упала на лапу Азора" - палиндром, но данный метод вернёт false, поскольку пробелы в разных местах.

  • @anastasiafanina8760

    @anastasiafanina8760

    2 жыл бұрын

    в данном примере пробелы не учитываются

  • @jankaban2871
    @jankaban28714 жыл бұрын

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

  • @Cat-zh6xx
    @Cat-zh6xx Жыл бұрын

    Эх, решил задачу в 20 строк, совсем забыл про сплит и реверс, видимо еще учиться и учиться

  • @user-sn1tz8wn5l
    @user-sn1tz8wn5l5 жыл бұрын

    так же есть вот такой варинат функции, которая определяет палиндром function isPalindrome(num) { let str = String(num), sum = 0; for (let i = 0; i let left = i; let right = str.length - 1 - i; if (str[left] == str[right]) { sum++; if (sum == str.length - 1) return true; } } return false; }

  • @MrRagday

    @MrRagday

    5 жыл бұрын

    Можно улучшить, сделав i

  • @user-wb2jc5wu7d
    @user-wb2jc5wu7d5 жыл бұрын

    Как считаете? Если объединить код в return: return str = str.toLowerCase() && str == str.split('').reverse().join(''); // плохой ли это пример кода? (будут ли бить по рукам за это?)

  • @MrRagday

    @MrRagday

    5 жыл бұрын

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

  • @azatgalyautdinov3548
    @azatgalyautdinov3548 Жыл бұрын

    Имхо, я как собеседующий ожидал бы решение с 2мя циклами. Это реально показал бы умеет ли думать Джун или нет

  • @Ekscen
    @Ekscen5 жыл бұрын

    function check (str) { let str2 = ""; for (let i = str.length - 1; i >= 0; i--){ str2 += str[i]; } console.log(str2 == str); } check ("ala");

  • @MrRagday

    @MrRagday

    5 жыл бұрын

    Не жадничай на знаки "="

  • @Marolafighter
    @Marolafighter5 жыл бұрын

    а еще можно оптимизировать этот метод проверяя на нечетность и проверяя в цикле посимвольно тип такого: const length = str.length for(let i = 0; i if (str[i] !== str[length - i - 1]) { return false } return true } return true ну это если уж совсем упарываться, если работа с малым количеством данных то и в одну строчку решение норм

  • @baigarinovalibek4612

    @baigarinovalibek4612

    5 жыл бұрын

    можно добежать до середины строки, этого будет достаточно

  • @Marolafighter

    @Marolafighter

    5 жыл бұрын

    @@baigarinovalibek4612 да, ты прав, всё-таки писать код в комментарии не очень удобно, пропустил этот момент

  • @orlem5837
    @orlem58375 жыл бұрын

    0) Где проверка входных данных? 1) Я бы возмутился именованием функции. Логичнее было бы назвать checkIsPalendrome или isPalendrome в крайнем случае. 2) Алгоритмическая сложность этого решения о(n) всегда т.к. для реверса нужно пройти весь массив, я бы посимвольно проверял символы, шагая от начала до середины массива и сравнивая их с соответствующими символами, взятыми от конца массива. В этом случае ещё бы и расход памяти уменьшился, а сложность алгоритма была бы о(n/2) в худшем случае и о(1) в лучшем случае. + такой подход позволил бы вылавливать эмодзи без лишних велокостылей.

  • @NarkotikAsd
    @NarkotikAsd3 жыл бұрын

    понравилось

  • @NeverGTI
    @NeverGTI5 жыл бұрын

    let pal = (str) => { if (typeof str != 'string') return false; let tmp = []; for(let c of str) { tmp.unshift(c); } return tmp.join('') == str; } Не лучше ли вот так написать?

  • @user-yx7in9nl1d
    @user-yx7in9nl1d4 жыл бұрын

    Я вот такое понаписывал: function palindrom() { let word = prompt("put a word").toLowerCase(); let backWords = word.split("").reverse().join(""); if (word == backWords) { return true; } else { return false; } }

  • @ArthurYelkin
    @ArthurYelkin5 жыл бұрын

    Со строкой все довольно просто, но часто встречаются задачи по типу "проверьте является ли целое число палиндромом" На такой случай я знаю красивый алгоритм: // функция, которая разворачивает число по принципу чтения числа задом наперед const reverseNumber = num => { let result = 0; for (; Math.floor(num) !== 0; num /= 10) { result *= 10; result += Math.floor(num) % 10; } return result; }; // функция, которая сопоставляет развернутое число с исходным const isPalindrom = num => reverseNumber(num) === num console.log(isPalindrom(121)) // true console.log(isPalindrom(123)) // false

  • @MrRagday

    @MrRagday

    5 жыл бұрын

    С помощью str = "" + num; задача сводится к исходной =Р

  • @ArthurYelkin

    @ArthurYelkin

    5 жыл бұрын

    @@MrRagday а при чем тут str?

  • @MrRagday

    @MrRagday

    5 жыл бұрын

    @@ArthurYelkin Если со строкой просто, а для числа нужны отдельные алгоритмы, то не проще ли превратить число в строку и воспользоваться "простым" решением?

  • @ArthurYelkin

    @ArthurYelkin

    5 жыл бұрын

    @@MrRagday ну кстати логично)

  • @MaksimGolitsyn
    @MaksimGolitsyn3 жыл бұрын

    А имя функции не должно означать действие?

  • @sergiistryzg9699
    @sergiistryzg96995 жыл бұрын

    Решил только у вас в раз 10 короче код чем у меня)) const inputText = document.querySelector(".js_input"); inputText.addEventListener("change", isPol); function isPol() { const inpValue = inputText.value.toLowerCase(); const doArray = inpValue.split(""); console.log(doArray); let count = doArray.length; // console.log(count); const doMirrou = doArray.reduce((newArr, el, idx, arr) => { count -= 1; newArr.push(arr[count]); return newArr; }, []); console.log(doMirrou); const isGood = doMirrou.map((letter, idx) => letter === doArray[idx]); console.log(isGood); const aaa = isGood.every(bul => bul); console.log(aaa); }

  • @russian2475
    @russian24753 жыл бұрын

    На прямую никто не изменяет аргументы функции..

  • @zergzerg4844
    @zergzerg48444 ай бұрын

    А если цикл выдать интервьюеру типа такого , зная кейс про эмодзи function palindromeCheck(str: string) { let left = 1; const mid = Math.round(str.length - left / 2); const end = str.length - 1; while (left if (str[left - 1] != str[str.length- (left - 1)]) return false; left++; } return true; } Нормально будет ? Или громоздко?

  • @user-ky7hj3sr5e
    @user-ky7hj3sr5e3 жыл бұрын

    лайк

  • @cikada3398
    @cikada33985 жыл бұрын

    Можно добавить метод trim()

  • @user-mh1lt6hv8i
    @user-mh1lt6hv8i5 жыл бұрын

    Алекс! А можем рассмотреть такой пример - Покупатель заходит на сайт вводит свои данные (ФИО или лучше телефон) Из базы данных подтягивается информация и выводит цены с учетом его скидки.

  • @theRusDerevnya

    @theRusDerevnya

    5 жыл бұрын

    В топ!

  • @ruslanfilyk2904

    @ruslanfilyk2904

    5 жыл бұрын

    Делаешь MySQL табличку с колонками (phone, discount), потом через какой-нибудь запрос обращаешься к этой таблице (мы учили ajax, но это старая штука насколько я знаю), пишешь SELECT discount FROM WHERE phone = ; После при прогрузке товаров из другой базы просто умножаешь price *= 1 + discount / 100 (если в процентах). Если не прав поправьте пож, не особо шарю это дело.

  • @simplewebdev1098

    @simplewebdev1098

    5 жыл бұрын

    @@ruslanfilyk2904 в целом норм.

  • @user-wl7ub4rj6m
    @user-wl7ub4rj6m2 жыл бұрын

    function palindrom(str) { let stroka=str.toLowerCase(); let strArr=stroka.split('') let revArr='' for (let i=strArr.length-1;i>=0;i--){ revArr+=strArr[i] } return stroka==revArr?true:false } console.log(palindrom('abba'))

  • @MHM-hc8or
    @MHM-hc8or5 жыл бұрын

    👍

  • @tommygun7913
    @tommygun79134 жыл бұрын

    зацените, сделал так, чтобы ответ был верным независимо от заглавных или строчных букв. Верное решение? const someName = str => { if (str.toLowerCase() == str.toLowerCase().split('').reverse().join('')) { return `${str} is palindrom`} else {return `${str} is not palindrom`}; } console.log(someName('woW'));

  • @dimanarizhnyi391
    @dimanarizhnyi3915 жыл бұрын

    Тоже изучаю JS, но мне кажется есть еще один недочет. Если попросят проверить является ли строка палиндромом, то строка может содержать пробелы. Скажем, если передать в str "а роза упала на лапу азора" (что в тоже явялется строкой), такой вариант не сработает. То есть к минусам данного метода, я бы еще добавил "работает только для слов". Ведь задание "является ли строка", а не является ли "слово". Тут нужно быть внимательным к деталям.

  • @user-tp5sw9qx2m

    @user-tp5sw9qx2m

    5 жыл бұрын

    тогда скорее всего нужно избавится для начала от пробелов через replace, а потом все как в видео, конечно если просят вывести только true / false.

  • @3dzbot

    @3dzbot

    5 жыл бұрын

    palindrom('ab ba ab ba') сработало. пробелы не проблема

  • @dimanarizhnyi391

    @dimanarizhnyi391

    5 жыл бұрын

    @@3dzbotне самый лучший пример, сейчас я вам его сломаю. Проверьте "abb aab ba", что как бы тоже палиндром. Учитывайте индексы элементов строки.

  • @3dzbot

    @3dzbot

    5 жыл бұрын

    @@dimanarizhnyi391 -> str = str.toLowerCase().replace(/\s/g, ''); где со сменой регистра так же добавляем рег.выражение .replace(/\s/g, '') которое убирает пробелы со строки. "а роза азора" решена :)

  • @dimanarizhnyi391

    @dimanarizhnyi391

    5 жыл бұрын

    @@3dzbot да, но код явно отличается от того, что представлен в видео. Про это решение я тоже знаю.

  • @user-cv5ze9wz6e
    @user-cv5ze9wz6e4 жыл бұрын

    let string = "Abba" let ans = string => { string = string.toLowerCase(); for(let i=0;i

  • @Metalscream
    @Metalscream5 жыл бұрын

    Какой то Олег получается

  • @stra1f595
    @stra1f5953 жыл бұрын

    Думаю для первой задачи такой код выглядит лутше: const palindrom = string => {return (string.toLowerCase().split("").reverse().join("") == string.toLowerCase())? true : false;} console.log(palindrom("HHHhh")); // true

  • @TheOlius
    @TheOlius5 жыл бұрын

    1. toLowerCase можно тоже в возврат =). 2. слово "abrba" тоже является полиндромом об этом ни слова 3. данная задача даже не на ДЖУНА (по сути задача решается как и звучит (если развернуть слово наоборот то они будут равны), то есть ДУМАТЬ не нужно). Правильнее сформулированная задача о которой ты говоришь будет звучать так - "Определить, можно ли по входящей строке ПОСТРОИТЬ слово полиндром? то есть "abba" , "aabb" и "abbar" должны вернуть true, само слово строить не нужно, нужно лишь определить возможность." и вот тут начинаются сложности, при входящей строке в миллион символов... попробуй найти самое БЫСТРОЕ решение (АЛГОРИТМ) с МИНИМУМОМ циклов. Именно эту задачу задают при собеседовании на ПРОГРАММИСТА, а не определить что слово полиндром изначально... Которое решается в одну строчку. 4. Лайк если хочешь знать решение реальной задачи

  • @TheOlius

    @TheOlius

    5 жыл бұрын

    в общем решил забить - правильный ответ: const isPolindromPossible = str => { let hashMap = []; str.split('').forEach(e => { let position = hashMap.indexOf(e) if (position >= 0) { hashMap.splice(position,1); } else { hashMap.push(e); } }); return hashMap.length

  • @MrRagday

    @MrRagday

    5 жыл бұрын

    Отличная задача. Я так понимаю, что нужно сначала проверить длину строки, потом проверить символы на парность. Если длина непарная - допустима одна непарная буква, если парная - все буквы должны быть в четном количестве? Ответ не смотрел, так неспортивно =Р

  • @MrRagday

    @MrRagday

    5 жыл бұрын

    ​ Андрей Галкин посмотрел твое решение... подумал... Понял, что достаточно просто проверить буквы на парность. Если останется одна непарная или ноль - годно. Нет - нет ;)

  • @MrRagday

    @MrRagday

    5 жыл бұрын

    Кстати, вместо хешМеп-массива с прогонами индексОф-ом, можно сделать объект, а цикл проверяет есть ли свойство с именем, совпадающим с текущей буквой. если есть - удаляет его и идет к следующей букве, если нет - создает и идет к следующей букве. Задача *гораздо* лучше чем в видео! Спасибо еще раз!

  • @user-or1hy4xz8u

    @user-or1hy4xz8u

    2 жыл бұрын

    @@TheOlius решальщик, пробелы и регистр у тебя учтены?

  • @user-sn1tz8wn5l
    @user-sn1tz8wn5l5 жыл бұрын

    мне кажется, надо убрать все пробелы перед сравнением, т.к. они ни на что не влияют + если мы хотим найти слова-полиндромы из текста, то нам надо сделать из текста массив, разделить его по пробелам и пройтись по этому массиву этой функцией, НО допустим у нас следующий текст: "Abba, Rolling Stone - good groups" и в нашу функцию придет строка "Abba," и функция вернет false, т.к. запятая все нарушит. получается надо убирать еще и пунктуационные знаки. нюансов много

  • @MrRagday

    @MrRagday

    5 жыл бұрын

    Сказано же, что мешают эмодзи. Автор думает про действительно тонкие вещи, а вы с пробелами и пунктуационными знаками лезете =Р

  • @AlexBell_86
    @AlexBell_863 жыл бұрын

    const palindrom = (str) => str === str.toLowerCase().split('').reverse().join('');

  • @doombeatsmusic
    @doombeatsmusic Жыл бұрын

    str = 'abba'.split('') let s = str.length for(let i = 0; i if(str[i] !== str[s - i - 1]){ console.log('Not a palindrom') return 0 } } console.log('It is a palindrom')

  • @hv4070
    @hv40702 жыл бұрын

    const isPalindrome = (str) => { for(let i = 0 ; i if(str[i] !== str[str.length-1-i]) { return false; } return true; } }

  • @raiden1860
    @raiden18605 жыл бұрын

    Собеседование? Нет, не слышал ... )

  • @CoonJS
    @CoonJS4 жыл бұрын

    Если я передам число 101, ваш код сломается. Так как метода toLowerCase у Number нет. Можно переписать еще безопаснее и в одну строку, переписав название метода на isPalindrom (правило именования по возвращаемому типу переменной) const isPalindrom = str => str == String(str).toLowerCase().split('').reverse().join('') Плюсы моего решения: 1) Строка 2) Безопасно работает со всеми типами, за счет наличия String (работает с массивами, объектами и тд и тп)

  • @neonchik6768

    @neonchik6768

    4 жыл бұрын

    Вроде написано что строку передают

  • @Mousehunter09
    @Mousehunter095 жыл бұрын

    А это популярные задачи на джуниорскую должность или в принципе? Вряд ли же на должность Senior разработчика просят решить палиндром.

  • @user-yb3vy2wx8u

    @user-yb3vy2wx8u

    5 жыл бұрын

    от собеседующих во многом зависит... сам недавно по собеседованиям бегал на сеньера, и встречал разное, от банальных задачек из гугла, которые старше 5 лет (это при том, что в резюме у меня указан опыт проведения тех. собеседований), до вполне адекватных уровню "заревьювь код джуна", "построй архитектуру системы" ну или алгоритмические по типу "найди кратчайший путь во взвешенном графе". сам никогда не даю типовые задачи, только авторские, обязательно проверю понимание промисов, а так же умение загуглить/поискать на mdn

  • @Mousehunter09

    @Mousehunter09

    5 жыл бұрын

    @@user-yb3vy2wx8u понятно, спасибо. А от джуна тоже требуете/ожидаете хорошее понимание промисов?

  • @user-lc2gd3nm9s
    @user-lc2gd3nm9s3 жыл бұрын

    Получается Олег

  • @sergekim5499
    @sergekim54995 жыл бұрын

    Можно докапаюсь?) Я бы написал строгое сравнение, чтоб в случае проблем с типами, там можно было отловить ошибку)

  • @user-sn1tz8wn5l

    @user-sn1tz8wn5l

    5 жыл бұрын

    проблем с типами?)) приведите пример) любой из типов, кроме строки выкинет исключение в консоль)) ни цифры, ни объекты, ни тем более, symbol не может быть .туЛоуверкейс().. про налы и андефайнды я вообще молчу)

  • @sergekim5499

    @sergekim5499

    5 жыл бұрын

    @@user-sn1tz8wn5l ну это в данном случае, а привыкать лучше к этой практике, потому что если мы откроем сложный проект, то там это пригодится, да и вообще это практика хорошая

  • @agentsmith9708

    @agentsmith9708

    5 жыл бұрын

    да, лучше сразу привыкать

  • @user-pq7dj1ny4h
    @user-pq7dj1ny4h5 жыл бұрын

    Я как-то решал задачу на собеседовании - создать класс расчёта з / п сотруднику, исходя из ставки, премии и стажа работы. Применять только ES6 синтаксис. Можете записать видео с решением?

  • @user-sn1tz8wn5l

    @user-sn1tz8wn5l

    5 жыл бұрын

    а в чем проблема?) вот, держите) написано на коленке за 5 минут class Salary { constructor() { this.rate = 0; // $/час this.experience = 0; // годы работы this.premium = 0; // премия this.spendHours = 0; // потрачено часов this.totalSalary = 0; // зп /*привязываем контекст (ES6 же... в es7 есть стрелочные методы, которым не надо байндить контекст: setRate = ( rate ) => { this.rate = rate; } } )*/ this.setRate = this.setRate.bind( this ); this.setExperience = this.setExperience.bind( this ); this.setPremium = this.setPremium.bind( this ); this.setSpendHours = this.setSpendHours.bind( this ); this.calcTotalSalary = this.calcTotalSalary.bind( this ); this.getTotalSalary = this.getTotalSalary.bind( this ); } setRate ( rate ) { this.rate = rate; } setExperience ( experience ) { this.experience = experience; } setPremium ( premium ) { this.premium = premium; } setSpendHours ( spendHours ) { this.spendHours = spendHours; } calcTotalSalary () { const salary = this.rate * this.spendHours + this.premium; // основная зп const factor = this.experience / 2; // множитель опыта работы (взял из головы) this.totalSalary = salary + salary * factor; // итоговая зп = основная зп + зп за стаж. } getTotalSalary () { return this.totalSalary; } } const wage = new Salary; wage.setRate( 3 ); wage.setExperience( 1 ); wage.setPremium( 250 ); wage.setSpendHours( 100 ); wage.calcTotalSalary() console.log( wage.getTotalSalary() );

  • @user-pq7dj1ny4h

    @user-pq7dj1ny4h

    5 жыл бұрын

    @@user-sn1tz8wn5l Стрелочные методы идут с ES6 и выше, а не только начиная с ES7. А так да. Спасибо!

  • @user-sn1tz8wn5l

    @user-sn1tz8wn5l

    5 жыл бұрын

    @@user-pq7dj1ny4h стрелочные функции в ES6 появились, стрелочные методы в es7 метод - это функция экземпляра класса

  • @MrRagday

    @MrRagday

    5 жыл бұрын

    На какую позицию собеседование?

  • @user-pq7dj1ny4h

    @user-pq7dj1ny4h

    5 жыл бұрын

    @@MrRagday junior front-end

  • @prsion1925
    @prsion19255 жыл бұрын

    сделайте Пожалуйста видео как настраивать гугл карты подробно

  • @itgid

    @itgid

    5 жыл бұрын

    Есть в курсе html.itgid.info

  • @jorgenUA

    @jorgenUA

    5 жыл бұрын

    www.w3schools.com/graphics/google_maps_intro.asp ... куда уж подробнее )

  • @bloodrik
    @bloodrik5 жыл бұрын

    Я сам по себе с++ разработчик, js знаю только ради того чтобы знать. Можете пожалуйста объяснить, чем ваш метод решения лучше чем обычное формирование строки (создаём новую строку и в цикле по 1 символу с конца к ней добавляем). Я не буду умничать или ещё что-то, ибо сам понимаю, что в вебе я не так уж и хорош, но если объективно смотреть со стороны, то ваше решение уступает в 3 раза по производительности. У вас в решении 3 перебора, соответственно это уже str.length*3 итераций, когда в решении формирования это просто str.length операций. Не знаю решает ли это проблему с эмодзи, но производительность явно выше, особенно если брать огромные строки. Объясните выбор именно этого решения, мне интересно почему, может я чего-то не понимаю?

  • @bloodrik

    @bloodrik

    5 жыл бұрын

    Мне кажется на собеседовании должны брать именно оптимальные решения, а не легко-читаемые.

  • @itgid

    @itgid

    5 жыл бұрын

    Все очень просто - мы можем сравнить и точно ответить. Скидывайте ваш метод решения.

  • @bloodrik

    @bloodrik

    5 жыл бұрын

    @@itgid function reverse(str) { str = str.toLowerCase(); var res=""; for(let i=str.length-1;i>=0;--i){ res+=str[i]; } return res==str; }

  • @baigarinovalibek4612

    @baigarinovalibek4612

    5 жыл бұрын

    как с++ разработчик ты должен знать, что определения полиндрома может работать за str.length/2. + не используя лишнюю память в виде нового стринга, который ты создал

  • @bloodrik

    @bloodrik

    5 жыл бұрын

    @@baigarinovalibek4612 я же не делал проверку на палиндром дефолтным способом, я показал автору его же алгоритм только в 3 раза быстрее. А алгоритм это конкретно ревёрс строки с последующим сравнением с исходной строкой.

  • @yugetio
    @yugetio5 жыл бұрын

    как лучше делать? И какая разница между spread оператором и простым методом split в данном случае? 1. [...str].reverse().join() 2. str.split('').reverse().join()

  • @Marolafighter

    @Marolafighter

    5 жыл бұрын

    конкретно в данном случае никакой, а так split() более гибкий, ты можешь пихать в него аргументы, которые будут определять как именно сплитить данные, но он медленнее чем spread, так что все зависит от контекста в котором ты пременяешь эти методы

  • @ale0x314

    @ale0x314

    5 жыл бұрын

    @@Marolafighter split быстрее спреда.

  • @Marolafighter

    @Marolafighter

    5 жыл бұрын

    @@ale0x314 хз, проверил в консоли, и спред быстрее

  • @MrRagday

    @MrRagday

    5 жыл бұрын

    Сплитом проще убрать пробелы и пунктуационные знаки.

  • @evilishant9336
    @evilishant93365 жыл бұрын

    бле капец, мы эти задачи ща проходим на первом курсе блен...

  • @TalkerTube

    @TalkerTube

    3 жыл бұрын

    @Из жизни изгоя/ Школьный Блог. судя по лексикону - детский сад

  • @transfer6557
    @transfer65575 жыл бұрын

    ну да, первая мысля показать 5 задач за 10 мин.? будет ли продолжение? и когда?

  • @MrRagday

    @MrRagday

    5 жыл бұрын

    Тебе тоже не хватило одного некорректного решения и нужно еще четыре?

Келесі