Sudoku problem (Hard) | Solve problems with Leetcode

  Рет қаралды 21,095

Front-end Science with Sergey Puzankov

Front-end Science with Sergey Puzankov

3 жыл бұрын

Ура! Начинаем год с хардовой задачи, которую вы так долго просили. В сегодняшнем ролике мы с вами разберем, как решить судоку с помощью алгоритма DFS (Depth-First-Search).
Будем идти по решению поэтапно - начнем с разбора судоку 4х4, а далее в наш алгоритм скормим судоку 9х9. И на десерт решим судоку 16х16. Уляля!
Приятного просмотра!
Код Решения Задачи: codepen.io/puzankov/pen/eYZyZ...
Задача про банкомат (Часть 2) - • Задача про банкомат. В...
Задача про лабиринт - • Решаем задачу с собесе...
Как всегда, Ваши лайки и решения ждем под видео!
И поделитесь видео с друзьями, если они еще не видели.
---
Если видео было для вас полезным, ставьте лайк и поделитесь им с друзьями.
Подписывайтесь на наш канал: bit.ly/fs-ytb
---
Присоединяйтесь к нам в соцсетях:
FB: / frontendscience
Instagram Сергея Пузанкова: / puzankovcom
Заходите на наш сайт: frontend-science.com/
Music by -
Blue Wednesday - 90s kid
Blue Wednesday - Murmuration
Blue Wednesday - Suede
#javascript #задачи #leetcode #itсобеседование

Пікірлер: 85
@user-hq9yi9ep6q
@user-hq9yi9ep6q 2 жыл бұрын
Спасибо большое за ваш труд! Простое и понятное объяснение с примерами сложной задачи. Объясняете очень интересно и доступно. Очень помогают ваши выпуски. Рубрики решения задач и интервью замечательные. Очень нравиться ваш канал.
@frontendscience
@frontendscience 2 жыл бұрын
Спасибо большое за добрые слова и поддержку! Успехов Вам!
@vangog63
@vangog63 2 жыл бұрын
Спасибо большое за оцень доходчивое пояснение алгоримта и задачи!
@andreyzhukov2821
@andreyzhukov2821 3 жыл бұрын
Привет! Какое же красивое решение! Спасибо! Теперь разгадаю недорешённые судоку, десятилетней давности!)
@frontendscience
@frontendscience 3 жыл бұрын
Благодарю! Я на самом деле очень тянул с этой задачей, так как искал вариант решения, который будет легко понять. Рад, что понравилось!
@anton-vr5xw
@anton-vr5xw 2 жыл бұрын
шикарная задача и объяснение 👍
@user-il3xh5di2i
@user-il3xh5di2i 3 жыл бұрын
Да, ты очень крут! :)
@uliakarahmazli7766
@uliakarahmazli7766 3 жыл бұрын
Спасибо вам большое за решение!
@frontendscience
@frontendscience 3 жыл бұрын
Класс! Рад, что понравилось) Спасибо, что смотрите.
@user-iz7fk4eu5t
@user-iz7fk4eu5t 3 жыл бұрын
работаю пол года на позиции junior front-end смотря такие видосы хоть и понимаю что зачем нужно но не могу даже представить что смог бы сам такое решить
@frontendscience
@frontendscience 3 жыл бұрын
Это сложная задача. Ее вряд ли будут давать на джуниор или даже миддл позицию
@user-iz7fk4eu5t
@user-iz7fk4eu5t 3 жыл бұрын
@@frontendscience можете посоветовать способ прокачки навыка для решения задач подобных этой или проще. заранее спасибо
@frontendscience
@frontendscience 3 жыл бұрын
Надо брать и решать задачи ) выбрать easy уровень на литкод и прорешать побольше. Потом перейти на медиум уровень и так далее
@Sha-Kate
@Sha-Kate 2 жыл бұрын
спасибо, что оставили свой комментарий, я бы тоже не решила, но думала, что задача простая и дело во мне)))))
@lovikuanyshev
@lovikuanyshev 2 жыл бұрын
Я в шоке, это красота
@frontendscience
@frontendscience 2 жыл бұрын
Рад, что понравилось
@mtb-love-belarus
@mtb-love-belarus 2 жыл бұрын
Спасибо большое, интересно провел вечер :) Заметил, что в методе validate, похоже что не обязательно проверять сам ли это элемент, т.к. на момент валидации мы его еще не установили и на его месте будет '.'
@samano4619
@samano4619 Жыл бұрын
ElbrusButcamp. Салам первая фаза.
@kennymccormick9103
@kennymccormick9103 6 ай бұрын
ееее)))
@xoxo2880808
@xoxo2880808 2 жыл бұрын
Спасибо, мозг кипит :) мне легче наверное на бумаге такое решить
@multiply87
@multiply87 3 жыл бұрын
высший пилотаж)
@frontendscience
@frontendscience 3 жыл бұрын
Рад, если оказалось полезно :)
@wisarty
@wisarty 2 жыл бұрын
Дякую
@yazanworck5017
@yazanworck5017 2 жыл бұрын
будь здоров 6:20
@user-fp7dd3po3s
@user-fp7dd3po3s Жыл бұрын
Блин, а это интересно. К слову время 2:38
@FanTopRU
@FanTopRU 2 жыл бұрын
15:20 можно было ифы в один фор запихать :D
@galinaturubarova33
@galinaturubarova33 3 жыл бұрын
смотрю в 01:48 :)
@user-ss7qk6bm8t
@user-ss7qk6bm8t 3 жыл бұрын
Ну, это потрясающе. Сколько времени ушло на решение?
@frontendscience
@frontendscience 3 жыл бұрын
К сожалению уже не помню сколько времени ушло на решение. Я эту задачу очень давно решал.
@frontendscience
@frontendscience 3 жыл бұрын
Рад, что понравилось!
@ded_zamay
@ded_zamay 3 жыл бұрын
а я сейчас решаю судоку в газетах ))) смотрю ролик в 1:40 ночи )) Начинал решать задачу пару лет назад, решил, но такой ужасный был код, что забросил его до лучших времен. И ВОТ увидел "Задача Судоку (Hard) | Решаем... " и решил глянуть решение, а потом спатки пойти. PS: заснул, и только сейчас отправил )))
@eugeneromanenko5960
@eugeneromanenko5960 2 жыл бұрын
size и boxSize можно не передавать, если передается board, их легко вычислить. size = board[0].length, boxSize = Math.sqrt(size)
@frontendscience
@frontendscience 2 жыл бұрын
Да можно. А можно и не вычислять, а записать как константы.
@vladislav23456
@vladislav23456 3 жыл бұрын
Объясните пожалуйста, в чем была опечатка? Что нам дало boxRow + внутри For'a (let i = boxRow; i < boxRow + boxSize; i++) ?
@frontendscience
@frontendscience 3 жыл бұрын
У нас вообще не работала проверка в секторах. Чтобы проверить сектор мы вычислили левую верхнюю ячейку сектора (boxRow, boxCell). Значит чтобы обойти все элементы этого сектора (если у нас поле 9х9 а сектор 3х3) надо сделать 2 цикла: от boxRow до boxRow + 3 и boxCell до boxCell + 3. Я опечатался и написать только boxSize - что в нашем случае только 3. Поэтому проверка сектора работала только для одного единственного верхнего левого сектора. В остальные мы даже не заходили. Например если у нас самый нижний правый сектор (его начало в (6,6)): цикл от 6 до i < 3. Мы в него даже не зайдем. В результате вышло, что у нас работали проверки на строку и столбец, но не работала проверка на сектор (кроме верхнего левого). Как-то так.
@vladislav23456
@vladislav23456 3 жыл бұрын
Front-end Science c Сергеем Пузанковым очень интересно. Спасибо вам за подробное объяснение. Научиться бы так же понимать алгоритмы)))
@frontendscience
@frontendscience 3 жыл бұрын
@@vladislav23456 Для этого и выкладываю. :) Успехов!
@murcha5899
@murcha5899 2 жыл бұрын
24 минута)))
@user-xt9nl7no8e
@user-xt9nl7no8e 2 жыл бұрын
c 3-й не получилось давайте решать с 4-й прям как с девушками))
@alicenNorwood
@alicenNorwood 2 жыл бұрын
Я кстати решаю судоку по тому же алгоритму если так подумать
@arttema950
@arttema950 3 жыл бұрын
А какая сложность алгоритма? Мне кажется что O(n6) по времени и O(n4) по памяти, если n - размер сектора (внутреннего квадрата), но это не точно
@denisoleksyuk5346
@denisoleksyuk5346 3 жыл бұрын
Посмотрел видео часто останавливался и вникал в код, старался сам забегать на перед и писать код, вроде в теории принцип как работает алгоритм понял, единственное сложные участки для меня были Check box и с рекурсией, в остальном более менее. Но вот если мне даже эту же задачу дадут на собесе я думаю вряд ли смогу даже повторить что бы всё работало. Как быть?) :(
@frontendscience
@frontendscience 3 жыл бұрын
Ну это хардовая задача. Такую могут дать например на собеседовании в Google. Чтобы такое решать быстро надо много практиковаться на разных задачках. Кстати могу порекомендовать такой подход - в течении недели каждый день пробовать решить эту же задачу. Когда сложно - подглядывать по строчке чтобы продвинуться дальше. За неделю решение должно осесть в голове - и уже без подсказок можно будет написать его.
@chess5821
@chess5821 2 жыл бұрын
Судоку Онлайн - xn--d1amlkkd.xn--80asehdb - ТРИ уровня сложности. Не каждый сможет решить !
@pavelm.2402
@pavelm.2402 3 жыл бұрын
Один человек не решет судоку в газетах)
@nazar6408
@nazar6408 3 жыл бұрын
Часа 2 писал. У меня с рекурсиями туго. Сколько времени заняло вычисление 16*16 не пустого? У меня нода в серьёз и на долго задумалась. 4*4 и 9*9 решает в целом быстро. Пустой 16*16 тоже быстро. Т.е. алгоритм рабочий, но вероятно не сильно простой. Есть что оптимизировать ))) За видео спасибо!
@frontendscience
@frontendscience 3 жыл бұрын
Ну тут много же зависит от компа - уже сейчас не помню сколько именно - но ощущениям, секунды 3. И да - оптимизировать его можно и нужно.
@EvilYou
@EvilYou 3 жыл бұрын
Задачу решил частично. Такое решение подходит для судоку, которые можно решить не используя метод подстановки (пример из видео решается, но на leetcode алгоритм не прошел): function solveSudoku(board) { let rowNum = 9; let colNum = 9; let emptyCells = 0; for (let i = 0; i < rowNum; i++) { for (let j = 0; j < colNum; j++) { if (board[i][j] === '.') emptyCells++; } } let nums = ["1", "2", "3", "4", "5", "6", "7", "8", "9"]; while (emptyCells > 0) { for (let i = 0; i < rowNum; i++) { for (let j = 0; j < colNum; j++) { if (board[i][j] !== '.') continue; let possibleNums = nums.concat(); function checkForPossibleNum(current) { if (current === '.') return; let index = possibleNums.indexOf(current); if (index === -1) return; possibleNums.splice(index, 1); } // Проверяю по горизонтали for (let k = 0; k < 9; k++) { let current = board[i][k]; checkForPossibleNum(current); } // Проверяю по вертикали for (let m = 0; m < 9; m++) { let current = board[m][j]; checkForPossibleNum(current); } // Проверяю в квадрате let squareI = Math.floor( i / 3 ) * 3; let squareJ = Math.floor( j / 3 ) * 3; for (let y = squareI; y
@frontendscience
@frontendscience 3 жыл бұрын
Круто!
@frontendscience
@frontendscience 3 жыл бұрын
Все - все задачи выполнены?
@EvilYou
@EvilYou 3 жыл бұрын
Можно сказать, что так. Посмотрел и попытался решить все, а сам решил около 25 из 29.
@EvilYou
@EvilYou 3 жыл бұрын
@@frontendscience Теперь продолжу читать "Грокаем алгоритмы" (прочитал немного и стал задачи на бинарный поиск решать, а за ними и другие), а там, возможно, снова вернусь к задачам, с которыми у меня возникали трудности здесь.
@EvilYou
@EvilYou Жыл бұрын
Моя версия решения тем способом, который разобран в видео. function solveSudoku(board) { if ( !solve() ) throw Error('invalid board'); function solve() { let [i, j] = getFirstEmpty() || []; if (i === undefined) return true; for (let k = 1; k
@user-vv3gg6xm1b
@user-vv3gg6xm1b 3 жыл бұрын
Где вы берете задачи? Очень хочется порешать)
@frontendscience
@frontendscience 3 жыл бұрын
Из разных мест беру. Что-то сам нахожу, что-то подписчики присылают. Сам обычно беру либо на leetcode либо на codewars. Рекомендую - там много всего интересного!
@mega.pe4enka147
@mega.pe4enka147 2 жыл бұрын
Жесть, я то в двух циклах начинаю теряться, а тут...
@frontendscience
@frontendscience 2 жыл бұрын
Не боись! Все приходит с практикой)
@1987Raziell
@1987Raziell 2 жыл бұрын
Интересно, а можно ли написать алгоритм, который решал бы Судоку действительно по правилам?. Ведь вызов рекурсии и откат назад - это одно и тоже, что стирать цифры "ластиком", т.е. дается бесконечное число прав на ошибку. В настоящих Судоку - ошибок быть не должно, они ведь решаются однозначно.
@fam4699
@fam4699 Жыл бұрын
да для этого нужно сделать 3 числа по 27 бит которые будут отображать соответственно по 3 строки в виде "1" - заполнено, "0" - незаполнено. 10 наборов по 3 числа отображают состояние заполненности основной матрицы и 9 матриц с числами. Вводим маски "111000000111000000111" в двоичном виде и "111111111" и *100000000010000000001" это маски заполнения чисел для столбцов, строк и квадратов в матрице числа при нахождении соотвественного числа, далее находим в числах матриц наборы строк, столбцов, квадратов 3x3 с 1 "0" заполняем их 1 во всех матрицах. Для более сложных судоку нужно вводить много масок для нахождения по 2 нуля в одном столбце внутри квадрата, по 3 нуля в соответственных матрицах. И да некоторые самые сложные судоку в середине решения решаются выбором среди 2 возможных чисел как ни ищи возможные комбинации
@JenechekDv
@JenechekDv 3 жыл бұрын
Смотрю в 6 утра
@frontendscience
@frontendscience 3 жыл бұрын
Прикольно. А это где сейчас столько? Откуда смотрите?
@JenechekDv
@JenechekDv 3 жыл бұрын
@@frontendscience Владивосток. Кстати после вашей рекомендации дочитываю Цель.
@frontendscience
@frontendscience 3 жыл бұрын
@@JenechekDv класс! Понравилась?
@JenechekDv
@JenechekDv 3 жыл бұрын
@@frontendscience ага, некоторые моменты как будто с меня писались) Жене теперь вручил.
@maxlight9258
@maxlight9258 2 жыл бұрын
В каком часу я решаю эту задачу? 4 утра хахап
@IntresNO
@IntresNO 3 жыл бұрын
20:55
@frontendscience
@frontendscience 3 жыл бұрын
Прикольно. А что там? :)
@user-gp5jm1je8f
@user-gp5jm1je8f 3 жыл бұрын
@@frontendscience вы же в начале ролика просили указать время, в какое мы решаем)
@frontendscience
@frontendscience 3 жыл бұрын
@@user-gp5jm1je8f АААА )) Благодарю! Ютюб просто сделал из него тайм метку - я открываю видео на 20:55 и не понимаю что там ))))
@danielnedefo
@danielnedefo 3 жыл бұрын
не понял за размер сектора(boxSize),подскажите плиз
@frontendscience
@frontendscience 3 жыл бұрын
в судоку 9х9 есть 9 секторов 3х3 внутри которых тоже уникальные числа. Для этого вынес boxSize в отдельную переменную, чтобы можно было решать разного размера судоку.
@danielnedefo
@danielnedefo 3 жыл бұрын
@@frontendscience понял,спасибо,не обращал раньше внимание на это)
@romanryaboshtan9270
@romanryaboshtan9270 2 жыл бұрын
Оказалось, задачка-то несложная совсем
@user-xt9nl7no8e
@user-xt9nl7no8e 2 жыл бұрын
какой вы молодец
@Ted_K.
@Ted_K. Жыл бұрын
Слишком замудрил
LeetCode task: Fill the matrix with zeros | JavaScript
13:45
Front-end Science із Сергієм Пузанковим
Рет қаралды 7 М.
How to find substring palindrome? Task from frontend job interview | LeetCode | JavaScript
14:49
Front-end Science із Сергієм Пузанковим
Рет қаралды 15 М.
Fast and Furious: New Zealand 🚗
00:29
How Ridiculous
Рет қаралды 45 МЛН
Gym belt !! 😂😂  @kauermotta
00:10
Tibo InShape
Рет қаралды 18 МЛН
路飞太过分了,自己游泳。#海贼王#路飞
00:28
路飞与唐舞桐
Рет қаралды 38 МЛН
Solving the problem from JS interview - The valid sequence of brackets | LeetCode problems
15:46
Front-end Science із Сергієм Пузанковим
Рет қаралды 38 М.
Python Sudoku Solver - Computerphile
10:53
Computerphile
Рет қаралды 1,2 МЛН
Numeric palindrome | Solve the LeetCode problem in JavaScript
11:17
Front-end Science із Сергієм Пузанковим
Рет қаралды 11 М.
Что такое Java и как ее выучить?
19:55
Sergey Nemchinskiy
Рет қаралды 135 М.
How To Learn Algorithms? Why? #codonaft
19:22
codonaft
Рет қаралды 567 М.
80 Year Olds Share Advice for Younger Self
12:22
Sprouht
Рет қаралды 1,7 МЛН
JS Tasks: How to find a prime number + How to find all prime numbers up to N | Bute-force and Sieve
18:33
Front-end Science із Сергієм Пузанковим
Рет қаралды 38 М.
Leetcode task. finding the maximum distance to the nearest neighbor in the cinema | JS
14:36
Front-end Science із Сергієм Пузанковим
Рет қаралды 9 М.
Fast and Furious: New Zealand 🚗
00:29
How Ridiculous
Рет қаралды 45 МЛН