Курсы для программистов

Формула программиста
основатель — Волосатов Евгений Витольдович

Решение Судоку

Серия видеоуроков по созданию алгоритма решения известной головоломки.

Мы пишем консольное приложение,
которое считывает с файла/интернета поле,
находит все возможные решения заданной головоломки
рекурсивным алгоритмом, по правилам игры Судоку.
Процесс поиска отображается визуально.

Посмотрите сайт, посвящённый этой игре: http://робомозг.рф
Автор сайта - наш формулист 3397. Сергей.


Решение головоломки Судоку.
Генерация полей.

Хочу купить!

Купить в рассрочку за мегахеши

Цена: 1000 p.


Список уроков | фото | видео

# Название видеоурока Решило Рейтинг Доступ
1 Вступление 00:05:08 21 чел. ★ 5 Done
  Мы начинаем серию видеоуроков по созданию алгоритма решения головоломки Судоку.

Ваша задача -
разобраться с правилами этой игры.
найти/распечатать бумажное (!) Судоку.
Решить его ручкой или карандашом.
Сфоткать решение и приложить к отчёту.
Отчёт отправил: 6632. Волнухин Владимир Выполнено за 20 мин. [Показать отчёт]
Научился: Решать лёгкий уровень Судоку.  
Сложности: null 
Комментарии: null 
2 Сетка для цифр 00:16:08 17 чел. ★ 4.9 Done
  На этом уроке мы создадим класс Sudoku,
опишем в нём две константы и создадим
функцию для отображения сетки для цифр.
Отчёт отправил: 6632. Волнухин Владимир Выполнено за 1 час. 00 мин. [Показать отчёт]
Научился: Написал алгоритм вывода игровой сетки.  
Сложности: Придумать алгоритм вывода сетки общего вида (иной, нежели представлялся на уроке). 
Комментарии: null 
3 Печать цифр в таблице 00:17:57 17 чел. ★ 5 Done
  На этом уроке мы добавим метод для добавления цифр в наш Судоку.
Также напишем функцию для отображения цифр в консольном экране.
И свяжем их через использование делегата.
В конце урока заполним наше поле случайнмыи цифрами.
Отчёт отправил: 6632. Волнухин Владимир Выполнено за 1 час. 30 мин. [Показать отчёт]
Научился: Вспомнил делегаты. Написал свой алгоритм отрисовки элементов.  
Сложности: Написать свой алгоритм отрисовки элементов. 
Комментарии: Делегат - объект-ссылка на метод (группу методов), позволяющая безопасно осуществлять обратный вызов нужного нам метода из зоны, где он нам не доступен. Для этого мы связываем объект делегата с нужным методом в текущем классе, а саму ссылку (делегат) передаём за пределы класса, при этом не обязательно делать нужный нам метод public static-1 (вызов: {Класс нужного нам метода (КНМ)}.{Нужный нам метод(НМ)}), 2-вызывать от имени объекта КНМ (можно передать с помощью оператора this текущий объект КНМ в другой класс и уж от его контекста вызывать НМ). 
4 Проверка правил игры 00:13:23 16 чел. ★ 5 Done
  На этом уроке мы наконец-таки начнём писать алгоритм.
В метод PlaceDigit() мы запрограммируем проверку правил игры.
Числа должны быть из верного диапозона, они не должны
повторяться в строчке, в столбце и в квадрате.
Под занавес мы сгенирируем случайную матрицу по всем правилам судоку.
Не факт, что её можно будет решить, и что решение будет единственным.
Отчёт отправил: 6632. Волнухин Владимир Выполнено за 1 час. 00 мин. [Показать отчёт]
Научился: Написал свой алгоритм проверки повторяющихся значений в пределах квадрата.  
Сложности: Написать такой алгоритм самостоятельно.  
Комментарии: --- 
5 Загрузка головоломки с интернета 00:25:44 14 чел. ★ 4.8 Done
  На этом уроке мы напишем функцию для загрузки Судоку с интернет-сайта.
Через буфер обмена содержимое страницы будет размещено в текстовом файле.
Алгоритм будет его анализировать и добавлять в матрицу класса Sudoku.

Отчёт отправил: 6632. Волнухин Владимир Выполнено за 40 мин. [Показать отчёт]
Научился: Узнал о новом для себя способе парсить web-страницы. 
Сложности: Ничего 
Комментарии: ---- 
6 Идея алгоритма - 81 цикл 00:11:48 13 чел. ★ 4.8 Done
  На этом уроке мы вручную проработаем алгоритм
поиска в глубь с возвращением.
Твоя задача - не аналитически решить судоку,
а программно, применяя описанный на уроке алгоритм.
Отчёт отправил: 6632. Волнухин Владимир Выполнено за 30 мин. [Показать отчёт]
Научился: Порешал Судоку алгоритмом со сложностью O(n*n).  
Сложности: --- 
Комментарии: Не понятно почему нельзя воспользоваться готовыми эффективными решениями, например Dancing links. Результат тот же, работает быстрее. Текущий алгоритм близок по временной сложности к перебору.  
7 Рекурсивная функция поиска 00:25:24 11 чел. ★ 5 Done
  На этом уроке мы напишем рекурсивную функцию NextDigit(),
которая и будет заниматься поиском решения головоломки.

Способы оптимизации алгоритма поиска решения:
https://habrahabr.ru/post/173795/
Отчёт отправил: 6632. Волнухин Владимир Выполнено за 1 час. 30 мин. [Показать отчёт]
Научился: Обновил понимание правил построения рекурсивных функций.  
Сложности: --- 
Комментарии: Исправленный отчёт: исправлена ошибка в функции поиска решения. Первый скрин - уровень 30, второй скрин - уровень 20.  
8 Сохранение ответа 00:07:28 11 чел. ★ 5 Done
  На этом уроке мы напишем функцию для сохранения решения головоломки в текстовый файл.
Отчёт отправил: 6632. Волнухин Владимир Выполнено за 1 час. 00 мин. [Показать отчёт]
Научился: Вспомнил работу C# с файлами.  
Сложности: Откорректировать свой алгоритм вывода для экспорта в файл.  
Комментарии: Исправленный отчёт: исправлена ошибка в функции поиска решения. -- 
9 Генерация головоломок 00:15:25 10 чел. ★ 5 Done
  На этом уроке мы напишем алгоритм для формирования
Судоку-головоломок, поэкспериментируем с генератором случайных полей.
Отчёт отправил: 6632. Волнухин Владимир Выполнено за 20 мин. [Показать отчёт]
Научился: Генерировать судоку.  
Сложности: ---- 
Комментарии: Исправленный отчёт: исправлена ошибка в функции поиска решения. В ближ. время не уверен, что буду заниматься какими-либо курсами на данном сайте, ибо учёба в разгаре. Хотелось бы увидеть здесь курс про тестирование ПО.  
10 ФИНАЛЬНЫЙ УРОК 8 чел. ★ 4.8 Done
  Поздравляю с завершением этого видеокурса!
Запиши и опубликуй видеообзор созданной программы.
Напиши, какой курс будешь проходить следующим.
Отчёт отправил: 6632. Волнухин Владимир Выполнено за 30 мин. [Показать отчёт]
Научился: null 
Сложности: null 
Комментарии: По поводу будущих курсов написал в прошлом отчёте.  
Видеообзор: https://youtu.be/8sIZMNLjXzU
11 VIP. Модульное тестирование 00:36:07 6 чел. ★ 5 Done
  На этом уроке мы познакомимся с модульным тестированием.
Мы напишем небольшой калькулятор, в который добавим
проект для модульного тестирования, и покажем,
как это всё работает, как это нужно использовать.
Отчёт отправил: 6632. Волнухин Владимир Выполнено за 50 мин. [Показать отчёт]
Научился: Работать с UnitTest-проектами в Visual Studio. Проводить базовое тестирование методов.  
Сложности: Ничего 
Комментарии: Полезный урок, хорошо бы больше на подобную тему.  
  Итого:   11 видеоуроков общей продолжительностью 2 час. 54 мин. 6 чел. ★ 4.94  
  Финалисты:   zhikharevav,   Максим,   Новопашин Владимир,   Максим Лапшинов,   Волнухин Владимир,   Tekashnik .

Начинаем практику по языку C#




Чтобы стать хорошим программистом — нужно писать программы. На нашем сайте очень много практических упражнений.

После заполнения формы ты будешь подписан на рассылку «C# Вебинары и Видеоуроки», у тебя появится доступ к видеоурокам и консольным задачам.

Несколько раз в неделю тебе будут приходить письма — приглашения на вебинары, информация об акциях и скидках, полезная информация по C#.

Ты в любой момент сможешь отписаться от рассылки.


Научился: Записывать видео обзор
Трудности: Найти время что бы никто не мешал
Ночью снилось, что я придумываю алгоритм решения судоку... Это вообще нормально? Курс хороший, рекомендую. Следующий будет шифрование, улитки вперёд!!!!


Научился: Алгоритму решения судоку
Трудности: Сложного ничего не было, но было интересно =)
Интересный получился курс. На нём вы повторите рекурсию, работу с файлами и делекаты, и что самое главное, напишете программу, которая сможет решить абсолютно любое судоку (так что теперь вы сможете скоротать зимние вечера перед камином за чем-нибудь другим). Особо ничего нового на нём вы не узнаете, но это не помешает вам с интересом его проходить. А ещё это отличная практика =) Что касается следующего курса: Это будет Сокобан, который закончит моё комбо из 6 курсов подряд. Если, конечно, не будет ещё какого-то супер предложения =) (Устал уже немного, но очень хочу его пройти)