# | Название видеоурока | Видео / Тесты | Решило | Рейтинг | Доступ |
---|---|---|---|---|---|
1 |
![]() |
1 тест |
|||
Мы начинаем серию видеоуроков по созданию алгоритма решения головоломки Судоку. Ваша задача - разобраться с правилами этой игры. найти/распечатать бумажное (!) Судоку. Решить его ручкой или карандашом. Сфоткать решение и приложить к отчёту. Отчёт отправил: 986. Антон Лазарец Выполнено за 44 мин. [Показать отчёт] Научился: Судоку уже давно умею решать, ооочень интересно иногда бывает, особенно если попадаются задачки на сложные схемы, на андроид даже нашел апликуху, с пошаговым решением и выбором оперделенных стратегий из множества + гайды, иногда помогает расшевелить мозги |
|||||
2 | Сетка для цифр |
1 тест |
|||
На этом уроке мы создадим класс Sudoku, опишем в нём две константы и создадим функцию для отображения сетки для цифр. Отчёт отправил: 986. Антон Лазарец Выполнено за 2 час. 34 мин. [Показать отчёт] Научился: оказалось, что в java нельзя установить курсор в нужное положение - пришел к солюшену с очисткой консоли перед отрисовкой сетки, и модифицировал square чтобы считалось относительно size - можно избежать изменения двух переменных, достаточно просто поменять size и square подстроиться, и еще добавил интерфейс Painter с целью отделить логику отрисовки, хочу дальше запилить версию с UI |
|||||
3 | Печать цифр в таблице |
|
|||
На этом уроке мы добавим метод для добавления цифр в наш Судоку. Также напишем функцию для отображения цифр в консольном экране. И свяжем их через использование делегата. В конце урока заполним наше поле случайнмыи цифрами. Отчёт отправил: 986. Антон Лазарец Выполнено за 13 час. 14 мин. [Показать отчёт] Научился: ооочень давно писал в c# поэтому не помню наверняка, но похоже, что делегат это просто ссылка на функцию, я джава такое можно лямбдами делать сейчас, и js вообще можно переменной фукнцию присвоить и делать чё хочь. но я сделал через observable - имхо так более логично, т.к. класс sudoku, который занимается логикой становиться перегруженным, если он еще и отрисовку будет дергать. и заюзал библиотеку lanterna для работы с gui console, потому что работать с координатами в виндовой - это кошмар, а тут всё просто и прикольно выглядит, правда шрифт такой себе |
|||||
4 | Проверка правил игры |
1 тест |
|||
На этом уроке мы наконец-таки начнём писать алгоритм. В метод PlaceDigit() мы запрограммируем проверку правил игры. Числа должны быть из верного диапозона, они не должны повторяться в строчке, в столбце и в квадрате. Под занавес мы сгенирируем случайную матрицу по всем правилам судоку. Не факт, что её можно будет решить, и что решение будет единственным. Отчёт отправил: 986. Антон Лазарец Выполнено за 1 час. 18 мин. [Показать отчёт] Научился: ничего нового, полистал немного документацию по lanterna - хотел поиграться со шрифтами, достаточно скудная в этом отношении либа, но то, что от неё требуется - выполняет хорошо. а есть какие то курсы на портале по работе с координатами и игровой матетатикой? хотел бы научиться на интуитивном уровне манипулировать с цифрами для геймдева ^^ |
|||||
5 | Загрузка головоломки с интернета |
1 тест |
|||
На этом уроке мы напишем функцию для загрузки Судоку с интернет-сайта. Через буфер обмена содержимое страницы будет размещено в текстовом файле. Алгоритм будет его анализировать и добавлять в матрицу класса Sudoku. Отчёт отправил: 986. Антон Лазарец Выполнено за 2 дня 20 час. 37 мин. [Показать отчёт] Научился: не стал работать с файлом, нашел сайт sudoku.becher-sundstroem.de - тоже генерирует судоку, но можно вытаскивать только строку непосредственно с самой судоку + решением при обращении на нужную урлу. не люблю ручную работу (копирование\вставка не моё) и решил полностью автоматизировать. Был интересный момент с отсутсвием session cookie - посмотрел, как сторить их в программе - всё заработало ^^ |
|||||
6 | Идея алгоритма - 81 цикл |
|
|||
На этом уроке мы вручную проработаем алгоритм поиска в глубь с возвращением. Твоя задача - не аналитически решить судоку, а программно, применяя описанный на уроке алгоритм. Отчёт отправил: 986. Антон Лазарец Выполнено за 46 мин. [Показать отчёт] Научился: алгоритм в лоб :D надеюсь, что stackoverflow не будет вылетать) кажется довольно простым |
|||||
7 | Рекурсивная функция поиска |
1 тест |
|||
На этом уроке мы напишем рекурсивную функцию NextDigit(), которая и будет заниматься поиском решения головоломки. Способы оптимизации алгоритма поиска решения: https://habrahabr.ru/post/173795/ Отчёт отправил: 986. Антон Лазарец Выполнено за 4 дня 2 час. 51 мин. [Показать отчёт] Научился: Пытался написать рекурсивную формулу сам, запилил все проверки выхода и завершения, начал писать алгоритм, но что-то сломался и посмотрел видео. буду искать курс по развитию этой стороны себя (комбинаторика много раз упоминалась в видео, наверное она будет следующей и скорее всего еще буду листать алгоритмы время от времени) Время поиска решения ооочень варьируется, сейчас вот простой ищет уже пару минут, а до этого секунд 10 заняло (с задержкой для анимации) и результат не сохранятеся) когда решение найдено - рекурсия просто разворачивается и поле девственно пусто |
|||||
8 | Сохранение ответа |
1 тест |
|||
На этом уроке мы напишем функцию для сохранения решения головоломки в текстовый файл.
Отчёт отправил: 986. Антон Лазарец Выполнено за 11 дней 17 час. 39 мин. [Показать отчёт] Научился: Переделал логику взаимодействия классов между собой, воспользовался либой quava а именно EventBus'ом. Разделил обязанности классов. Теперь SudokuSolver (он же Sudoku в видео) отвечает только за решение судоку, которая передается параметром. При изменении любого значения поле судоку (вынес в отдельный класс) генерирует event изменения клетки, который прослушивается отрисовщиком (у меня рисует только в терминал, но с таким подходом можно куда угодно вещать), и SudokuSolver в свою очередь выстреливает event окончания решения, который прослушивается экспортерами (экспортит в консоль и в файл). В итоге получились компактные слабосвязанные классы, писал взахлеб, ооочень интересно Сложности: Решиться переделать на манер, к которому душа лежала, ну и попробовать новое (на удивление guava eventbus оказался крайне простым в использовании) |
|||||
9 | Генерация головоломок |
|
|||
На этом уроке мы напишем алгоритм для формирования Судоку-головоломок, поэкспериментируем с генератором случайных полей. Отчёт отправил: 986. Антон Лазарец Выполнено за 1 день 2 час. 21 мин. [Показать отчёт] Научился: еще чуть-чуть переделал структуру. перенес вообще все манипулации с полем внутрь класса, отвечающего за поле, а solver только вызывает нужные методы класса. для рандома создал новый класс провайдера и в стартовой точке достаточно просто поменять реализацию для изменения стратегии получения судоку. но метод генерации какой то сильно в лоб и не гарантирует генерацию поля. если выставить 80 символов то можно вечность ждать, а он всё равно не придумает нужное поле. было бы прикольно, если бы мы создали какой-то универсальный метод, но это вне скоупа данного курса, насколько я понял. всё равно круто) |
|||||
10 | ФИНАЛЬНЫЙ УРОК |
без видео |
|||
Поздравляю с завершением этого видеокурса! Запиши и опубликуй видеообзор созданной программы. Напиши, какой курс будешь проходить следующим. |
|||||
11 | VIP. Модульное тестирование |
|
|||
На этом уроке мы познакомимся с модульным тестированием. Мы напишем небольшой калькулятор, в который добавим проект для модульного тестирования, и покажем, как это всё работает, как это нужно использовать. |
|||||
Итого: 11 видеоуроков |
2 час. 54 мин. 6 тестов |
15 чел. | |||
Финалисты: zhikharevav, Максим, Новопашин Владимир, Максим Лапшинов, Волнухин Владимир, Tekashnik, Александр, Николай Денисов, Иван, no name, Александр, Anatoli, Freud, Татьяна, MaxB . |