Тёмный

Конем ходи. JavaScript задача на собеседовании 

WebDev с нуля. Канал Алекса Лущенко
Просмотров 51 тыс.
50% 1

Помоги каналу! donatepay.ru/d...
Курс JS: js.itgid.info
Скачать код: chess.itgid.info
Интернет магазин на Node: node.itgid.info
Плейлист: goo.gl/63osiv
Телеграм: t.me/jsrules
Мои курсы: itgid.info
Решаем задачу на JavaScript шахматы - определить ходы коня на доске.

Опубликовано:

 

8 сен 2024

Поделиться:

Ссылка:

Скачать:

Готовим ссылку...

Добавить в:

Мой плейлист
Посмотреть позже
Комментарии : 158   
@mistertroll0000
@mistertroll0000 5 лет назад
Ну, как задача для очень новичков - прикольно. Случайно наткнулся, искал стажёрам всякие задачки. Если собеседование не на джуна, то уже не так интересно. Немного критики вашего решения: Во-первых, как-то странно, на собеседовании писать вручную двумерный массив, из 64 элементов. Можно же let a=Array(8).fill(Array(8).fill(0)); Это работает везде где работают шаблонные строки, которые вы используете. Раз уж обозначили что будете использовать es6 - прекрасно. Но, собственно, не понятно зачем этот массив вообще нужен? Во-вторых. Селект по атрибутам тегов (по data-атрибутам) - очень очень плохая идея, это медленно. Фулскан всего дерева документа. На пустой страничке, по клику - может и ок, но на собеседовании это вызовет сразу много вопросов. Задайте классы. Ещё лучше конечно сверстать это таблицей. Потому что это таблица. Вы сразу и расцветку сделаете через css в два селектора, а не яваскриптами. 3) Можно конечно и в вашей вёрстке задать через css, просто селектор будет немного громоздкий: .chess-block:nth-child(16n-1),.chess-block:nth-child(16n-3),[...всего 8 элементов] {background:gray;} Это избавит вас от лишнего класса .bg-black 4) Ну, и подчищание конечно лучше сделать только нужное, в две строки. Зачем все элементы трогать? document.querySelectorAll('.chess-block.green').forEach(e=>e.classList.remove('green')); document.querySelectorAll('.chess-block.active').forEach(e=>e.classList.remove('active')); 5) Циклы for(let i =0;i{ if(xx>=0 && xx=0 && yy
@simplewebdev1098
@simplewebdev1098 4 года назад
Ну да, я тоже улыбнулся, создаём двумерный массив, заполняем его нулями, а потом используем только arr.length. Человек, который придумал двумерные массивы, тут бы сказал: "да, отличное использование, именно для такого я их и придумал". Я то думал там хотя бы будут нули и единицы, нули чёрные, единицы белые, тоже не очень, но хоть так. А там вообще, как способ написать восьмёрку самым сложным образом.
@alekssjeva951
@alekssjeva951 4 года назад
"6) Навешивание 64 обработчиков клика - тоже не клёво, я бы непременно спросил как сделать чтобы обработчик был один?" - как лучше сделать, с помощью e.target.className = "chess-block" или есть более красивый способ?
@mistertroll0000
@mistertroll0000 4 года назад
@@alekssjeva951 неа. если у вас конкретная задача то других нет. чуть "красивее" можно сделать если писать функцию навешивания на любой селектор а не только по классу тогда уже будет e.target.matches(elementSelector), но в целом принцип тот же.
@sergei-sabitov
@sergei-sabitov 4 года назад
@@alekssjeva951 можешь почитать про "делегирование событий", там объясняется нужный подход
@vladimirsmoktiy2040
@vladimirsmoktiy2040 3 года назад
шикарный коммент, особенно п. 8. спасибо, дружище!
@turalperfectworld1065
@turalperfectworld1065 5 лет назад
Спасибо Александр, таких как вы на ютубе не хватает. Подача информации на высоте.
@michaeldevichenskiy4588
@michaeldevichenskiy4588 5 лет назад
Я качаю эти видосы и консервирую в zip , как что то ценное храню на сервере . Александр , спасибо вам , думаю не грех задонатить на поддержку такого канала !
@olnimus
@olnimus 5 лет назад
ну и как компрессия? ))
@michaeldevichenskiy4588
@michaeldevichenskiy4588 5 лет назад
Отлично!
@AKmetik
@AKmetik 5 лет назад
плохой код, не надо его качать.
@infirmuxx
@infirmuxx 5 лет назад
@@AKmetik Код не просто плохой - омерзительный.
@user-kg1bo9ec1m
@user-kg1bo9ec1m 5 лет назад
@@infirmuxx Как новичок, хочу поинтересоваться какие были допущены ошибки и что не стоит делать ?
@user-vo7sm5sz7p
@user-vo7sm5sz7p 5 лет назад
Топовый учитель, однозначный лайк! По оптимизации: вместо грядки из if'ов сделал бы цикл, который перебирает х и у от -2 до 2 (исключая ноль), собираем координаты ячеек в массив, и для всех ячеек, не равных null присваиваем класс с конем. Первый массив с нулями не совсем понял. Точнее логика ясна, но непонятно почему вместо массива не использовать просто х-max и у-max. Я всегда так делаю, если нужно раздать координаты для ячеек, вроде работает. И в случае масштабирования поля нужно поменять всего два значения. upd. Кстати упустил один момент, если просто крутить цикл от -2 до 2, то в массив попадут нежелательные ячейки с координатами (1; 1), (2;2) и т.д. Избавиться от них можно с помощью условия, которое проверяет на четность сумму х и у. Если сумма нечётная - записываем ячейку в массив.
@evgenkaban6018
@evgenkaban6018 5 лет назад
укажите время на видео, пожалуйста, к которому относится комментарий
@evgenkaban6018
@evgenkaban6018 5 лет назад
понял, не нужно)
@user-vo7sm5sz7p
@user-vo7sm5sz7p 5 лет назад
@@evgenkaban6018 массив задаётся на 2:00, а условия на 18:00
@evgenkaban6018
@evgenkaban6018 5 лет назад
@@user-vo7sm5sz7p спасибо!
@user-dn2dm6tr7o
@user-dn2dm6tr7o 5 лет назад
Евгений тоже самое хотел написать
@infirmuxx
@infirmuxx 5 лет назад
Вот таким мог бы быть более или менее приличный код: function draw() { for (let i = 0; i < 8; i++) { for (let k = 0; k < 8; k++) { let out = ''; } } document.querySelectorAll('.chess-block').forEach(function (element) { element.onclick = horse; }) } function horse() { const dx = [2,1,-1,-2,-2,-1,1,2], dy = [1,2,2,1,-1,-2,-2,-1]; document.querySelectorAll('.chess-block').forEach(function (element) { element.classList.remove('active'); element.classList.remove('green'); }) let x = +this.dataset.x, y = +this.dataset.y; this.classList.add('green'); for (let i = 0; i < 8; i++) { let xx = x + dx[i], yy = y + dy[i]; if (xx >=0 && yy >=0 && xx < 8 && yy < 8) { document.querySelector('.chess-block[data-x="' + xx + '"][data-y="' + yy + '"]').classList.add('active'); } } } Просто. Коротко. Прозрачно.
@musicits_fun
@musicits_fun 5 лет назад
Извините за нескромный вопрос: Сколько зарабатываете? :)
@infirmuxx
@infirmuxx 5 лет назад
@@musicits_fun У меня нет постоянного заработка, я фрилансер.
@infirmuxx
@infirmuxx 5 лет назад
@@musicits_fun Кстати, имя horse для функции отрисовки ходов тоже не вполне удачно, я бы предпочёл имя knight :)
@infirmuxx
@infirmuxx Год назад
@@Igor_UA Верно, но не принципиально. Более того, это затемняет смысл кода. Такие непрозрачные фокусы затрудняют последующее сопровождение, не давая никакого преимущества в скорости выполнения, да и в объеме кода тоже.
@infirmuxx
@infirmuxx Год назад
@@Igor_UA Никакого изящества в этих тривиальных выкрутасах нет. Типичные извращения школьника-олимпиадника. Код, который пишет профи, должен быть: 1) простым для понимания, 2) эффективным. Формальные трюки, не улучшающие эти два важных параметра, бессмысленны на практике и употребляются школотой для производства впечатления на непрофессионалов.
@grbak
@grbak 4 года назад
Когда закрашиваем клетки можно не вводить m, а проверять, если i + k не делится нацело на два, то закрашиваем
@qwertymangames1800
@qwertymangames1800 11 дней назад
Автор просто новичок, по этому не знал этого
@user-yx4ov2xx8s
@user-yx4ov2xx8s 5 лет назад
Полезное и очень интересное видео! Благодарим!
@ptahrussia
@ptahrussia 5 лет назад
Как вариант для раскраски доски можно просто проверять на чётность сумму координат.
@12345_qwerty
@12345_qwerty 5 лет назад
AT4MAИ - agaяio да, так и нужно было сделать. Не надо использовать js там где легко можно обойтись css.
@DSDecay
@DSDecay 5 лет назад
, именно так и надо было делать, а не лепить какие-то мутные дополнительные классы. Причем в js еще и понадобились лишние проверки из-за того, что каждый ряд в отдельности рассматривался.
@sargernax
@sargernax 5 лет назад
Однозначный стопудовый лайк))) Как раз недавно решал её. Ваше решение мне нравится больше
@prometheusmusic4559
@prometheusmusic4559 5 лет назад
Классная работа! Но мне кажется, все эти условия было бы проще сделать отдельной функцией, и передавать туда "координаты" элемента. Не знаю, может, я чего-то не учёл, но это проще чем копипаст, и не так громоздко
@aleksprimetv
@aleksprimetv 5 лет назад
Можно более подробно объяснить что тут происходит: data-x="${k}" data-y="${i}, и в циклах с теми датами, @ WebDev с нуля. Канал Алекса Лущенко пожалуйста рассказывай более подробнее свои действия, а не делает "так или вот так")
@N5O1
@N5O1 4 года назад
может у верстальщиков другие собеседования, но мне кажется, что если не знать как это делать, то можно на долго зависнуть.
@evgenysumaev882
@evgenysumaev882 5 лет назад
Отличный урок, спасибо. Смотрел и делал параллельно - все получилось. Лайк.
@infirmuxx
@infirmuxx 5 лет назад
Плохой урок. Не советую. См. мой комментарий от 29.05.2019.
@rva3674
@rva3674 5 лет назад
Конем ходи, век воли не видать)))
@ok_kov
@ok_kov 5 лет назад
лошадью...))
@shmeklz
@shmeklz 4 года назад
Какой еще лошадью? Нету в шахматах лошади, есть только конь
@arcadiibabici7655
@arcadiibabici7655 3 года назад
Благадарим за вашу работу!!!
@andriisoroka5155
@andriisoroka5155 5 лет назад
урок хорош, и как всегда можна что то улучшить: 1 юзайте больше ES6, можна юзать стрелочный функцыи 2 соблюдать один стиль, скобки " " либо ' ' 3 место того чтоб каждый раз писать + можна один раз поставить в 41 и в 42 строках 4 посмотрите метод Array.from() он уменшить код спасибо за интересный урок пример как можна уменшить код Array.from(Array(8).fill(0),() => Array(8).fill(0).map(item => item + 1))
@solomkor
@solomkor 5 лет назад
вот еще один вариант по созданию массива, который мне нравится const table = Array.from({length: 8}, () => { return Array.from({length: 8}, (v,i) => { return i }) })
@andriisoroka5155
@andriisoroka5155 5 лет назад
@@solomkorто самое что и у меня)
@andoreyrich1651
@andoreyrich1651 3 года назад
а почему нельзя просто написать Array(8).fill(Array(8).fill(0)) - получится тот же двумерный массив 8х8 , разве нет?
@user-iq9ll8lz9m
@user-iq9ll8lz9m 3 года назад
уменьшил код, но сделал его ужасно нечитабельным, браво. Уменьшать код надо с умом, выбирать золотую середину, а не просто уменьшить ради уменьшить. Человек, который будет это поддерживать в дальнейшем просто плюнет тебе в лицо
@andreybalatsan9336
@andreybalatsan9336 3 года назад
С удовольствием посмотрел, спасибо большое
@dmytroholoborodko8361
@dmytroholoborodko8361 4 года назад
Мне страшно читать комменты в которых вы пишите что это очень легкая задача на 15 минут. Вы с ума сошли чтоли? Не выпендривайтесь! Задачка нетрудная, это да, но не на 15 мин.
@itgid
@itgid 4 года назад
как вам сказать. Мои студенты шлют код навороченный, а потом после исправления - ой как просто. Главное понять.
@anton_soldatov
@anton_soldatov 4 года назад
Вместо двумерного массива сделать обычный, у коня всего четыре позиции для хода, посчитать на сколько позиций надо его сдвинуть для передвижения. Доска задаётся одним контейнером и внутри 64 дива. Флексбоксом с фрапом и флексбазисом размещаем их в табличку 8х8 Вторым селектором задаём цвет через один элемент. Пишем цсс класс отрисовывающий коня, при ходе считаем сдвиг позиции коня и добавляем посчитаному диву класс коня все. Придумал с ходу, сколько времени займёт написать такой код? Первоочередная задача программиста это уметь придумывать алгоритмы решения и взаимодействия. Сделать реализацию то есть написать код зачастую всегда проще, задача всего из четырёх действий. Сделать поле, посчитать на какую позицию можно поставить фигуру, с одномерным массивом это очень просто и даже он не нужен на самом деле нам нужна просто координата для проверки дива на соответствие , изменить координаты коня, задать диву с соответствующим nth-child класс для отображения коня. Хотите сказать, что тут сложнее чем на 10-15 минут?
@user-ev1nx7kv5e
@user-ev1nx7kv5e 3 года назад
@@anton_soldatov ты писал этот коммент 15 минут, а ещё думал до этого как сделать иначе чем в видео.
@WebDev_51
@WebDev_51 3 года назад
Это интересно , хороший пример , для практики и наработки.
@arcadiibabici7655
@arcadiibabici7655 3 года назад
как всегда ВЫ СУПЕР!
@Epenckorn
@Epenckorn 4 года назад
На самом деле бОльшую сложность вызвало прописывание ходов пешки. По крайней мере у меня. Фигуры - это фигня. Наткнулся на видео вчера вечером, решил мозги размять какой-нибудь заковыристой задачкой. За пару часов накатал скриптик, который отрисовывает доску, подписывает каждую клетку (пустая или занятая, если занятая, то чьей и какой фигурой) и по клику на свою фигуру/пешку отрисовывает все её возможные маршруты с учётом всех фигур/пешек на доске и все возможные направления атаки. Без рокировки (у неё игровые условия есть, которые пока не отслеживаю). Отрисовку путей запихал в общую функцию для всех фигур, для пешек пришлось писать отдельно. Весь скрипт без комментариев и визуальных разделителей 260 строк. Прогнал по различным стоп-кадрам с игр. Полностью корректно отрабатывает, ошибок не возникает. Спустя некоторое время решил развить скриптик и теперь это полноценная игра для двух игроков за одним монитором. Спасибо за подгон идеи. Только вот задача про коня заключается не в том, чтобы отрисовать доску и подсветить клетки хода, а в том, чтобы конём обойти всю доску, не наступив на одну клетку дважды. Задача заключается в реализации алгоритма прохода доски
@alexandrtsvetkov7715
@alexandrtsvetkov7715 5 лет назад
Можно на каждую клеточку написать варианты ходов)
@v.v.p.3234
@v.v.p.3234 3 года назад
Это сразу бан))
@nexgenua
@nexgenua 5 лет назад
это для джунов такие задания дают? и сколько на это времени отводят?
@alexanderkostyuk755
@alexanderkostyuk755 4 года назад
да ну на хер
@sharover455
@sharover455 4 года назад
10-15 минут
@simplewebdev1098
@simplewebdev1098 4 года назад
@@sharover455 10-15 минут мало в любом случае. Тут пол часа минимум, если не думал до этого, что и как сделать. А на джуна час смело давать можно.
@eduardkolesnik5819
@eduardkolesnik5819 4 года назад
@@simplewebdev1098 это очень специфическая задача. Час на такое точно давать не будут, максимум минут 20 или 10 и дальнейший ход мыслей. 1-ое не на каждом собеседовании такое дадут 2-ое если и дадут то скорее всего вы на соответствующую вакансию претендовали
@simplewebdev1098
@simplewebdev1098 4 года назад
@@eduardkolesnik5819 вопрос, какой нужен результат? Если работающая программа, то за 20 минут довольно сложно сделать, если раньше над задачей не думал. Подумать нужно, как сверстать поле, таблицой, дивами. Подумать нужно , какие стили применить. Как в коде представить данные, в какой структуре. Потом написать всё это, отдебажить. Возможно, вылезут недостатки выбраной структуры. Тогда лучше всё нахрен переделать, пока не поздно, т.к. дальше плохая структура данных будет только увеличивать число проблем. Другое дело, если просто порассуждать: то сделаем так, это эдак, часто этого достаточно, ведь работающее приложение никому не нужно. Приложение писать есть смысл, если хотят посмотреть на качество кода. Но, очевидно, никто не будет час сидеть и смотреть, как сохнет краска, в смысле, как кто-то пишет код. В таком случае, просто дают тестовое задание, мол, ты там делай, а потом покажешь.
@ismalit
@ismalit 4 года назад
Спасибо! Очень понравилось!
@ErlatTV
@ErlatTV 5 лет назад
просто оставляю комент, но задачку я делал синхронно, спасибо
@itgid
@itgid 5 лет назад
спасибо!
@user-dy4dk2yf9q
@user-dy4dk2yf9q 4 года назад
Спасибо за подробное изложение! Главное - донести суть. Но про "10-15 минут" меня поразило. Тогда, наверно, на задачу "написать скрипт, обыгрывающий Каспарова" дадут минут 20?
@anton_soldatov
@anton_soldatov 4 года назад
Вместо двумерного массива сделать обычный, у коня всего четыре позиции для хода, посчитать на сколько позиций надо его сдвинуть для передвижения. Доска задаётся одним контейнером и внутри 64 дива. Флексбоксом с фрапом и флексбазисом размещаем их в табличку 8х8 Вторым селектором задаём цвет через один элемент. Пишем цсс класс отрисовывающий коня, при ходе считаем сдвиг позиции коня и добавляем посчитаному диву класс коня все. Придумал с ходу, сколько времени займёт написать такой код? Первоочередная задача программиста это уметь придумывать алгоритмы решения и взаимодействия. Сделать реализацию то есть написать код зачастую всегда проще, задача всего из четырёх действий. Сделать поле, посчитать на какую позицию можно поставить фигуру, с одномерным массивом это очень просто и даже он не нужен на самом деле, изменить координаты коня, задать диву с соответствующим nth-child класс для отображения коня. И того 10-15 минут максимум
@user-gh2ml3cf5o
@user-gh2ml3cf5o 4 года назад
Очень понравилось. Лайк и комментарий. Подписан уже )))
@Fomenko1978
@Fomenko1978 5 лет назад
Отличный пример. Спасибо.
@AlexDanilenko
@AlexDanilenko 5 лет назад
Спасибо большое за урок. Попробую повторить. Одна рекомендация, если позволите :) разберитесь, пожалуйста со словами СКОБКА и КАВЫЧКА. Это разные вещи, особенно в JS
@vozay
@vozay 2 года назад
За який час на співбесіді потрібно розв'язати цю задачу? Чи задають її на дом?
@onemasterlomaster1829
@onemasterlomaster1829 5 лет назад
отлично как всегда!
@MrColins710
@MrColins710 4 года назад
дійсно цікавий урок, дякую
@1369Samil
@1369Samil 5 лет назад
модулями можно сделать всего за 2 условия
@pavlodovbush2340
@pavlodovbush2340 5 лет назад
Делал похожую задачу только в моей алгоритм имел опридилиты куда становиться лошади 64 раза так чтобы ни разу не стать на ячейку на которой уже были. Делал через массив чисел где затем каждое число превращал в объект
@user-zk6zn7yq9v
@user-zk6zn7yq9v 3 года назад
function horse() { let x = this.dataset.x; let y = this.dataset.y; document.querySelectorAll('td').forEach(function(element) { element.classList.remove('green'); element.classList.remove('active'); if (Math.pow(element.dataset.x - x, 2) + Math.pow(element.dataset.y - y, 2) == 5) { element.classList.add('green'); } }); this.classList.add('active'); }
@stanislavverbitskiy8956
@stanislavverbitskiy8956 5 лет назад
Доброго дня, урок хороший, спасибо. Вопрос не по теме, но как у вас после сохранения в VSCode работает beautify? это плагин или что?
@popovicimihail4308
@popovicimihail4308 5 лет назад
Скажите пожалуйста , в функции horse(), на что указывает this? И почему так? Я не понимаю.
@kievlyanin
@kievlyanin 5 лет назад
зис указывает на родителя в даном случае у horse родитель drow. element.onclick = horse;
@ilya1441
@ilya1441 5 лет назад
Указывает на элемент с обработчиком событий, т. е. клетка на которую нажимаем
@TheOlius
@TheOlius 5 лет назад
Если ты знаешь как работает this в джаваскрипте то твоя зарплата как js программиста уже не меньше палтика 8)
@knifevagner
@knifevagner 4 года назад
хорошо объясняешь
@borismoskalyuk2304
@borismoskalyuk2304 3 года назад
профи
@zipponvr7043
@zipponvr7043 5 лет назад
такой цикл не требует создания никаких массивов - у нас кол-во клеток всегда фиксированное for ( let i=0; i
@Nikita-iv4jp
@Nikita-iv4jp 5 лет назад
Лучшего обьяснения не найти)
@user-mz4ee8im3o
@user-mz4ee8im3o 5 лет назад
спаибо, очень круто 😊
@somename35
@somename35 5 лет назад
*ИМХО!* Массив в начале совсем бесполезен, ф-ию draw можно вызвать сразу при инициализации, и раз уж сами создаем поле, то логичнее было бы и родительский блок тоже создать скриптом. (() => { const HEIGHT = 8, WIDTH = 8; const base = document.createElement('div'); base.classList.add('field'); document.body.appendChild(base); let out = ''; for (let y = HEIGHT-1, x; y > -1; y--) { for (x = 0; x < WIDTH; x++) { out += ` `; } } base.innerHTML = out; base.querySelectorAll('.chess-block').forEach( el => el.onclick = horse ); })();
@mctitkez
@mctitkez 5 лет назад
.chess-block:nth-child(even) {...} не проще сделать?
@lexxyar
@lexxyar 5 лет назад
Мне кажется нет - будет косяк при смене строки.
@mctitkez
@mctitkez 5 лет назад
Откуда же косяк, все div'ы в одном потоке идут, смена строки на чётное/нечётное не влияет
@mailman3083
@mailman3083 5 лет назад
@@mctitkez Будет косяк
@Nikita-hr6ss
@Nikita-hr6ss 5 лет назад
@@mctitkez В том то и дело что в каждой строке у тебя будет идти четное и нечетное без смещений. То бишь будут просто слитые черные квадраты по вертикале.
@user-ux8ch7ci5i
@user-ux8ch7ci5i 5 лет назад
а. нахрен нужен массив chess, если он нигде не используется? б. копи-паста при раскраске массива - отвратительна, правильнее будет добавлять класс bg-black интерполяцей в. вместо грядки ифов нужно создать массив дельт х и y, и бегать по массиву г. проверка на выход за границы поля вообще не нужна: querySelector просто не найдет элемент, если он не существует
@denis1987m
@denis1987m 5 лет назад
Спасибо
@liubomyr-peteliuk
@liubomyr-peteliuk 5 лет назад
Замінити всі іфи однією функцією і викликати її з різними параметрами
@vovaseagull1097
@vovaseagull1097 5 лет назад
можна код?
@liubomyr-peteliuk
@liubomyr-peteliuk 5 лет назад
@@vovaseagull1097 з часом надішлю
@shmeklz
@shmeklz 4 года назад
@@liubomyr-peteliuk надіслав
@liubomyr-peteliuk
@liubomyr-peteliuk 4 года назад
@@shmeklz дякую)
@liubomyr-peteliuk
@liubomyr-peteliuk 4 года назад
Жесть, уже рік пройшов))
@qwertymangames1800
@qwertymangames1800 11 дней назад
Ох уж эти джуны, суют свой m++ куда попало. Не умеют искать оптимальное решение без ввода новых переменных. А ведь достаточно много задач в программировании решаются без изобретения велосипеда математически. Просто взять сумму координат клетки и определить чётная она или нет этого было бы достаточно. Но джуны как добавляли лишние сущности так и добавляют. Не хотят учить математику. Найти коня можно одной проверкой прямо в главном цикле генерации поля, опять же джуны это не могут так как не знают математику. Находим положительную разницу координат: dx = abs(newX - x) dy = abs(newY - x) И создаём любую проверку по типу если сумма разниц координат 3, но при этом одна из разниц координат не нуль (в моём случае проверка на нуль это просто умножение) Вышла единая формула для всех случаев: if dx + dy == dx * dy + 1
@dmitryz7359
@dmitryz7359 5 лет назад
Хороший пример. Не могли бы разъяснить, если использовать es6 const horse = () => { // someting } - теряется контекст (this ссылается на window) не могу понять, почему. Заранее спасибо!
@Roma1995xx
@Roma1995xx 5 лет назад
Читай спецификацию, для стрелочных функций не создается объект контекста.
@dmytroholoborodko8361
@dmytroholoborodko8361 4 года назад
@@Roma1995xx немного неправильно, стрелочные функции унаследывают this от своего родителя.
@user-iq9ll8lz9m
@user-iq9ll8lz9m 3 года назад
@@dmytroholoborodko8361 и то правильно, и это, стрелочные функции не имеют своего контекста, поэтому он берется из вне
@dmytroholoborodko8361
@dmytroholoborodko8361 3 года назад
@@user-iq9ll8lz9m правильно, но я поправлю: из вне от своего родителя при инициализации функции.
@DSDecay
@DSDecay 5 лет назад
Ладно, ладно, конечно, все не так плохо, но два решения вызывают недоумение. 1) Если бы доска была 100 на 100 клеток, вы бы тоже вручную этот массив заполняли? Почему не при помощи цикла с push? 2) Добавление класса черным клеткам при помощи js - это просто дичь. Еще хуже, чем заполнение массива вручную. Почему не CSS'овские odd и even?
@Nikita-hr6ss
@Nikita-hr6ss 5 лет назад
Возможно, но в css ещё нужно будет сделать смещение в каждом новом ряду чтобы эти клетки небыли слитыми по вертикале. В этом случае добавление через js проще, да и что в этом плохого?
@Nikkvv
@Nikkvv 5 лет назад
Просто кращий)
@MrWolffierce
@MrWolffierce 5 лет назад
Спс! Для дубов самое оно!
@lycaveknife5707
@lycaveknife5707 5 лет назад
Я недопонял, зачем в функцию в foreach передавать element и что вообще такое element?
@user-vo7sm5sz7p
@user-vo7sm5sz7p 5 лет назад
Это элемент, на который мы повесили событие onclick
@lycaveknife5707
@lycaveknife5707 5 лет назад
@@JohnLee-bo9ft т.е. в foreach обязательно нужно что то передавать, и он сам не берёт элементы из массива к которому применяется?
@lycaveknife5707
@lycaveknife5707 5 лет назад
@@JohnLee-bo9ft но если он берет каждый элемент массива 'сам' и применяет к нему функцию то зачем дополнительно прописывать объект к которому он её применяет?
@lexxyar
@lexxyar 5 лет назад
А ведь я правильно понимаю, что для пущей надежности стоит дождаться полной загрузки DOM?
@TheOlius
@TheOlius 5 лет назад
нет, тег скрипта находится перед закрывающим body к тому моменту когда транслятор дойдет до тега "script" весь остальной дом уже построен. Ваш случай если скрипт положить в head... чего делать не стоит ибо тогда начнется как раз обработка джаваскрипта и пока он весь не отработает пусть это даже добавление обработчиков на событие все равно js надо прогнать через компилятор и выполнить что требует время
@metalcorewitchkhousovitch5774
@metalcorewitchkhousovitch5774 5 лет назад
Лол, недельку назад решал эту же задачку для устройства) Видимо, задачи для собеседований берут от куда-то из открытого набора в инете) Для новичков: учитесь программировать, а не решать конкретные задачи
@eXacT9090
@eXacT9090 5 лет назад
Это собес на джуна?
@itgid
@itgid 5 лет назад
Да, это легкая задача!
@borschetsky
@borschetsky 5 лет назад
Это даже еще не джун!
@user-qx9nj6jh5p
@user-qx9nj6jh5p 3 года назад
Шахматы это такая дичь . Есть всего лишь 64 ячейки. Можно даже поведение лошади реализовать на реакцию ближайших к ней фигур.
@user-ir8nd6mj2b
@user-ir8nd6mj2b 5 лет назад
Я б try catch повесил)
@borschetsky
@borschetsky 5 лет назад
Крутая задача! Смотреть не стал, самое сложное это отрисовать. Матрица, и 8 позиций коня. Простенько. Есть интересней задачка. Клацаете на клетку, там ставится еденица, на все ходы коня увеличиваете на 1, и т д.
@polrk
@polrk 5 лет назад
Ужасный код, из-за не знания замыкания. Зачем выносить функцию horse из функции draw основываясь на замыкании ?? В функции horse нету dataset, из-за замыкания, код не понятен пользователю , после такого, вас не возьмут на собеседование
@RusIvan2022
@RusIvan2022 Год назад
Думаю ему не нужно на собеседование. У человека талант преподавать. Ужасный код это твой или мой когда ты на него посмотришь через год работы!
@zzzgas989
@zzzgas989 5 лет назад
збс
@rva3674
@rva3674 5 лет назад
Лайк
@user-ly1vo1rn6p
@user-ly1vo1rn6p 4 года назад
Оставляю комент,
@user-ly1vo1rn6p
@user-ly1vo1rn6p 4 года назад
проучился у вас, очень доволен. рекомендую знакомым
@azabum12ee
@azabum12ee 5 лет назад
Какой у тебя аккаун в телеграм
@Alex-hs8xj
@Alex-hs8xj 4 года назад
спасибо
Далее
TrueJS 32. AddEventListener - события
25:37
Просмотров 36 тыс.
Bike vs Super Bike Fast Challenge
00:30
Просмотров 9 млн
БЕЛКА РОЖАЕТ?#cat
00:22
Просмотров 754 тыс.
Starman🫡
00:18
Просмотров 13 млн
Просто о promise в JavaScript
12:52
Просмотров 134 тыс.