# | Название видеоурока | Видео / Тесты | Решило | Рейтинг | Доступ |
---|---|---|---|---|---|
1 |
![]() |
1 тест |
|||
Мы начинаем серию видеоуроков по созданию алгоритма решения головоломки Судоку. Ваша задача - разобраться с правилами этой игры. найти/распечатать бумажное (!) Судоку. Решить его ручкой или карандашом. Сфоткать решение и приложить к отчёту. Отчёт отправил: 7119. Новопашин Владимир Выполнено за 24 час. 00 мин. [Показать отчёт] Научился: Узнал правила игры Судоку. Научился решать судоку для самого легкого уровня. Сложности: Самым сложным было то, что когда ставишь цифры и остается две клетки и обе клетки могут содержать только скажем двойку или другую цифру - то есть игру сделал неправильно. Собственно говоря из-за этого пришлось попотеть целую неделю. Я нашел сайт sudokuprint.ru и выбрал кроссворд и напечатал его несколько экземпляров - у меня только ручка и карандашика нет. Кстати печатал сразу несколько экземпляров кроссвордов с кандидатами (то есть теми достимыми в данной клетке цифрами) , только так я смог решить. Кстати возникали неоднозначные ситуации, ну например остаются две клетки и в обоих может быть 7 или 8. Или же другой случай остаются 3 клетки в одной может быть 1 или 2, в другой 2 или 3 , в третей 1 или 3. Вот сидишь и ломаешь голову, какую цифру подставить. Когда кандидат один на одну клетку все прекрасно. Комментарии: Прекрасное начало. Пришлось изрядно попотеть , но я не жалею. Кстати сразу идея - помимо судоку можно же решать японские кроссворды. |
|||||
2 | Сетка для цифр |
1 тест |
|||
На этом уроке мы создадим класс Sudoku, опишем в нём две константы и создадим функцию для отображения сетки для цифр. Отчёт отправил: 7119. Новопашин Владимир Выполнено за 23 мин. [Показать отчёт] Научился: Научился выводить рационально сеточку судоку. Сложности: Ничего. Комментарии: Было лень в редакторе что-то рисовать. |
|||||
3 | Печать цифр в таблице |
|
|||
На этом уроке мы добавим метод для добавления цифр в наш Судоку. Также напишем функцию для отображения цифр в консольном экране. И свяжем их через использование делегата. В конце урока заполним наше поле случайнмыи цифрами. Отчёт отправил: 7119. Новопашин Владимир Выполнено за 32 мин. [Показать отчёт] Научился: Научился помещать цифры в отдельные координаты ячейки и выводить их на экран. Сложности: Собственно ничего - Витольдович все хорошо объяснил. Комментарии: Делегат - это значок такой (у меня на скрине) - шутка. Делегат - это возможность вызывать функции одного класса из другого посредством передачи некой ссылки, если бы это был бы C++ , то можно было делегат назвать указателем, а так очень удобная штука и позволяет меньше кода писать. |
|||||
4 | Проверка правил игры |
1 тест |
|||
На этом уроке мы наконец-таки начнём писать алгоритм. В метод PlaceDigit() мы запрограммируем проверку правил игры. Числа должны быть из верного диапозона, они не должны повторяться в строчке, в столбце и в квадрате. Под занавес мы сгенирируем случайную матрицу по всем правилам судоку. Не факт, что её можно будет решить, и что решение будет единственным. Отчёт отправил: 7119. Новопашин Владимир Выполнено за 20 мин. [Показать отчёт] Научился: Научился проверять интервалы судоку. Сложности: Ничего. Комментарии: Ура первые рабочие судоку распечатались. |
|||||
5 | Загрузка головоломки с интернета |
1 тест |
|||
На этом уроке мы напишем функцию для загрузки Судоку с интернет-сайта. Через буфер обмена содержимое страницы будет размещено в текстовом файле. Алгоритм будет его анализировать и добавлять в матрицу класса Sudoku. Отчёт отправил: 7119. Новопашин Владимир Выполнено за 43 мин. [Показать отчёт] Научился: Научился генерировать на сайте игру судоку и использовать в своей программе. Сложности: Я так и не смог скопировать Ctrl+A и Ctrl+C - копируется все кроме цифр - во всяком случае в FireFox и IE - других браузеров у меня не стоит. Кстати о птичках - сайт позволяет сохранять игру в виде ss- файлов (которые по факту явлюятся текстовыми). Так что я сделал свой генератор, который считывал данные именно с ss файлов. Комментарии: Вот код моего генератора: public void LoadSudoku(string filename) { string[] lines = File.ReadAllLines(filename); int y=0; for (int i = 0; i < lines.Length; i++) { string s = lines[i]; if (lines[i].Contains("---")) continue; s = s.Replace("!", ""); s = s.Replace('.', '0'); for (int x = 0; x < s.Length; x++) sudoku.PlaceDigit (x,y, int.Parse ( s.Substring (x,1))); y++; } } |
|||||
6 | Идея алгоритма - 81 цикл |
|
|||
На этом уроке мы вручную проработаем алгоритм поиска в глубь с возвращением. Твоя задача - не аналитически решить судоку, а программно, применяя описанный на уроке алгоритм. Отчёт отправил: 7119. Новопашин Владимир Выполнено за 29 мин. [Показать отчёт] Научился: Научился прорабатывать рекурсивный алгоритм поиска в глубину при решении судоку. Сложности: Ничего. Комментарии: Лучше поручать такие рекурсивные задачи компьютеру. |
|||||
7 | Рекурсивная функция поиска |
1 тест |
|||
На этом уроке мы напишем рекурсивную функцию NextDigit(), которая и будет заниматься поиском решения головоломки. Способы оптимизации алгоритма поиска решения: https://habrahabr.ru/post/173795/ Отчёт отправил: 7119. Новопашин Владимир Выполнено за 1 час. 43 мин. [Показать отчёт] Научился: Наконец-таки научился решать судоку. Сложности: Ничего. Комментарии: Следующий этап для каждой клетки брать только те цифры, которые допустимы для нее, расстановкой цифр потихоньку убирать цифры в соответствующих клетках. |
|||||
8 | Сохранение ответа |
1 тест |
|||
На этом уроке мы напишем функцию для сохранения решения головоломки в текстовый файл.
Отчёт отправил: 7119. Новопашин Владимир Выполнено за 10 мин. [Показать отчёт] Научился: Научился сохранять результат судоку в файл. Сложности: Ничего. Комментарии: ++++ |
|||||
9 | Генерация головоломок |
|
|||
На этом уроке мы напишем алгоритм для формирования Судоку-головоломок, поэкспериментируем с генератором случайных полей. Отчёт отправил: 7119. Новопашин Владимир Выполнено за 29 мин. [Показать отчёт] Научился: Научился генеровать случайные карты для судоку. Сложности: Сгенерировать карту, чтобы была решаема. Комментарии: Я прикрепил скриншот - вот попытаемся поставить двойку в место, где обозначил крестиками. В левом верхнем углу не дает та двойка, которая в в правом верхнем углу. В остальные места не дает ставить двойка, которая находится в нижнем квадрате, а это не правильно - для верхнего левого квадрата невозможно поставить двойку из-за такой наведенки. Нужна еще одна проверка, на целостность отдельного квадрата, чтобы такой ошибки не было. Да чуть не забыл следующий курс буду изучать либо asp, либо сокобан - еще не решил. |
|||||
10 | ФИНАЛЬНЫЙ УРОК |
без видео |
|||
Поздравляю с завершением этого видеокурса! Запиши и опубликуй видеообзор созданной программы. Напиши, какой курс будешь проходить следующим. Отчёт отправил: 7119. Новопашин Владимир Выполнено за 1 час. 51 мин. [Показать отчёт] Научился: Особо ничему. Сложности: Ничего. Комментарии: Видеообзор опубликовал. Видеообзор: https://youtu.be/XfISSeGhB_o |
|||||
11 | VIP. Модульное тестирование |
|
|||
На этом уроке мы познакомимся с модульным тестированием. Мы напишем небольшой калькулятор, в который добавим проект для модульного тестирования, и покажем, как это всё работает, как это нужно использовать. Отчёт отправил: 7119. Новопашин Владимир Выполнено за 10 мин. [Показать отчёт] Научился: Ничему Сложности: Ничего. Комментарии: Данный урок прошел в курсе "Новые технологии", тем кто не знакомым с ним будет очень полезным уроком. |
|||||
Итого: 11 видеоуроков |
2 час. 54 мин. 6 тестов |
15 чел. | |||
Финалисты: zhikharevav, Максим, Новопашин Владимир, Максим Лапшинов, Волнухин Владимир, Tekashnik, Александр, Николай Денисов, Иван, no name, Александр, Anatoli, Freud, Татьяна, MaxB . |