# | Название видеоурока | Видео / Тесты | Решило | Рейтинг | Доступ |
---|---|---|---|---|---|
1 |
![]() |
|
|||
Мы начинаем видеокурс "Мат конём и слоном". Цель курса - создать базу решений этой задачи. То есть для любой исходной комбинации найти правильный ход, который ведёт к победе. Отчёт отправил: 18783. Andrew Выполнено за 1 день 18 час. 47 мин. [Показать отчёт] Научился: Посмотрел отчеты коллег к первому уроку. Ну вот, Евгений Витольдович так вежливо ставит задачу... а у вас одни маты...) Добавлю свой классический, если еще не было - белые начинают и ставят мат в 0.5 хода. Решение - приподнять коня. Сложности: Самое сложное было поставить мат. И не в кабинетной тиши, а в реальной партии на флажке (оставалось чуть более минуты, добавления тогда сто лет назад еще не придумали). Удалось опозориться и не поставить мат - все потому, что не тренировал алгоритм дома. Думал не потребуется практически. Это была примерно 500-я турнирная партия в жизни, вот и считай вероятность такого эндшпиля. Помнил, что конь бегает буквой М и оттесняет короля в угол цвета слона, а на практике король просачивался на свободу, руки дрожали, судья считал ходы, паника...)) Соперник вскоре стал интермастером, но это так себе отмазка. Повторись сейчас ситуация, не реализовал бы снова) Вот защиту ладьей против ладьи+слона тренировал, и тоже встретилась, спас ничью. Вывод - только тренировки, только хардкор. |
|||||
2 | Перебор всех комбинаций |
|
|||
На этом уроке мы создадим вложенные циклы для перебора всех возможных вариантов расстановки наших фигур на шахматной доске. Отчёт отправил: 18783. Andrew Выполнено за 4 дня 9 мин. [Показать отчёт] Научился: Научился перебору возможных позиций. Попробовал добавить проверку королей на соседних клетках. Получилось как-то много, без соседних королей осталось всего 6.750.748 комбинаций из 7.624.512. Проверял, 8 возможных клеток вокруг черного короля. Сложности: На мой взгляд, не учтен ряд невозможных позиций с точки зрения правил шахмат. А именно: 1. Одновременный шах от слона и коня (не вскрытый) 2. Шах от слона с краю доски, когда слон блокирован. 3. Шах от коня с краю доски, когда конь блокирован, но не был превращен из пешки.. Пример на втором скрине. Т.е. число возможных позиций должно уменьшиться. |
|||||
3 | Королевское правило |
|
|||
На этом уроке мы проверим, стоят ли короли на соседних клетках. Потом мы напишем заготовку для проверки, является ли позиция матовой. Самостоятельное задание - написать функцию onKnight(). При желании написать проверку для слона пока писать не нужно. Отчёт отправил: 18783. Andrew Выполнено за 23 час. 23 мин. [Показать отчёт] Научился: Написал методы onKing() и onKnight(), заготовку isCheckmate() Сложности: После провального предыдущего урока, на котором я ошибся просто элементарно, попробовал все же самостоятельно написать onBishop() по-своему. И тоже неудача, получается 204 мата вместо требуемых 232. Написано криво, но вроде должно работать, не могу понять, где моя ошибка. Даже проверил решение 232, но это правильный ответ. Сутки потратил, сдаюсь пока, надо двигаться все же. А пока 7*4=28 матов теряются безвозвратно. |
|||||
4 | Конь ходит буквой Гэ |
|
|||
На этом уроке мы напишем метод, который проверяет, рубит ли конь указанное поле. Алгоритм не сложный. Самостоятельное задание: почитать о Нотации Форсайта — Эдвардса на Википедии. Написать метод формирования этой нотации по имеющимся координатам четырёх фигур. Сайт для чтения FEN: http://www.apronus.com/chess/wbeditor.php Отчёт отправил: 18783. Andrew Выполнено за 6 час. 55 мин. [Показать отчёт] Научился: Повторил методы onKing() и onKnight(). Мат двумя конями - проверил количество позиций. Было бы интересно решить задачу с двумя конями против черной пешки, там патовые идеи, для каждой из восьми пешек свои условия ничьи. Ознакомился с нотацией FEN. Написал метод getFEN(). Понял, что не работало в предыдущем задании. Курс все более нравится) Сложности: Благодаря нахождению FEN удалось понять, что не работало в предыдущем уроке. Теперь подправил свой метод onBishop() и немного IsCheckmate(). Получается 232 мата, как в статье на хабре). Возможно медленнее работает чем в курсе будет далее (подсмотрел там что-то сложное:), но работает. |
|||||
5 | Нотация Форсайта - Эдвардса |
|
|||
На этом уроке мы научимся экспортировать найденные позиции в FEN код, чтобы посмотреть их в любом шахматном эмуляторе. Сайт для чтения FEN: http://www.apronus.com/chess/wbeditor.php Самостоятельное задание: Написать метод проверки для слона, бьёт ли он поле. Отчёт отправил: 18783. Andrew Выполнено за 2 час. 29 мин. [Показать отчёт] Научился: Переписал метод getFEN(), мой вариант был с заменой Replace (идея подсмотрена в отчете Yefim) Матовые комбинации конями 240 проверил еще в прошлом задании. Пока оставил свой метод проверки шаха слона onBishop(), он работает при небольшой корректировке isCheckmate() на проверку, не бьет ли черный король слона. Сложности: Не было сложного. Нотация FEN очень понравилась. Придумал две одинаковых позиции, различие лишь в управляющем параметре (третий с конца), казалось бы... B7/p4ppp/p3p2n/3pPn1b/5bN1/8/2p2K2/r1R3rk w - - 0 1 B7/p4ppp/p3p2n/3pPn1b/5bN1/8/2p2K2/r1R3rk w - d6 0 1 В первом случае белым пора сдаваться. Во втором случае белые ставят мат в один ход слоном и конем, но пешкой:) |
|||||
6 | Ворошиловский слон |
|
|||
На этом уроке мы напишем наконец-таки метод bool onBishop (byte x, byte y) и подсчитаем количество матовых позиций. А в конце урока блеснём использованием итератора :) Самостоятельное задание: придумать структуру для хранения найденных позиций и описать её в комментариях к отчёту. Отчёт отправил: 18783. Andrew Выполнено за 1 час. 5 мин. [Показать отчёт] Научился: Исправил onBishop() на вариант со смещением. Найденные позиции 232 в порядке. Заскриншотил. Сложности: IEnumerable, yirld return, вот это все. Ну и для структуры для хранения пока не хватает знаний. |
|||||
7 | Две структуры |
|
|||
На этом уроке мы подготовимся к рефакторингу нашего кода.
Отчёт отправил: 18783. Andrew Выполнено за 20 мин. [Показать отчёт] Научился: Созданы структуры Coord и Combo Сложности: Ничего |
|||||
8 | Рефакторинг кода |
|
|||
На этом уроке мы сделаем рефакторинг всего кода. В конце урока будем искать ошибку :) Отчёт отправил: 18783. Andrew Выполнено за 3 час. 23 мин. [Показать отчёт] Научился: Выполнил рефакторинг всего кода. Почему-то нет ошибки, выдает 232 комбинации Сложности: Переписать функцию getFEN() |
|||||
9 | Чистый ход |
|
|||
На этом уроке мы перенесём метод getBoard() и getFEN() в структуру Combo, найдём последнюю ошибку и порадуемся чистому коду! Отчёт отправил: 18783. Andrew Выполнено за 57 мин. [Показать отчёт] Научился: Перенес getFEN() в структуру. Порадовался коду. Сложности: Устранять предупреждение Equals. Думать об алгоритме поиска обратных ходов. |
|||||
10 | Псевдо-алгоритм перебора |
|
|||
На этом уроке мы составим псевдо-алгоритм поиска всех решений поставленной задачи. Самостоятельное задание - проработать алгоритм на шахматной доске для ферзя и короля. Отчёт отправил: 18783. Andrew Выполнено за 3 час. 52 мин. [Показать отчёт] Научился: Составлять блок-схемы Сложности: Реализовать алгоритм мата ферзём и королем. Нашел только, что существует 364 матовые позиции. |
|||||
11 | Белая и чёрная очередь |
|
|||
На этом уроке мы начнём реализацию алгоритма перебора всех позиций с правильными ходами за белых. Создадим ещё две структуры и две очереди - белую и чёрную. Отчёт отправил: 18783. Andrew Выполнено за 2 час. 9 мин. [Показать отчёт] Научился: Структуры WhitesMove и BlacksMove созданы. Создана функция FindAllSolutions() с двумя очередями blackQueue и whiteQueue Сложности: Честно пытался написать функции бэк-ходов белых фигур, но не хватает опыта пока |
|||||
12 | Генерация белых ходов |
|
|||
На этом уроке мы напишем три метода, которые возвращают все возможные ходы для каждой белой фигуры - для короля, слона и коня. В конце урока выведем все позиции, в которых белые ставят мат в один ход. Отчёт отправил: 18783. Andrew Выполнено за 13 час. 36 мин. [Показать отчёт] Научился: Создал три метода, для кажой фигуры по одному. 972 предматовых позиции. Сложности: Заработало только после отключения проверки на переполнение. Не осилил функцию print. |
|||||
13 | Белая коробка |
|
|||
На этом уроке мы создадим класс WhiteBox для хранения всех позиций, где ход белых с правильным ходом для приближения к мату. Отчёт отправил: 18783. Andrew Выполнено за 9 час. 46 мин. [Показать отчёт] Научился: Класс WhiteBox создан. Количество матов в один ход уменьшилось до 920 Сложности: При сборке была ошибка, что не все участки кода возвращают значение - добавил return true в конце public bool Put (Chess.WhitesMove white) Не удалось попробовать обратные ходы черного короля |
|||||
14 | Консольная шахматная доска |
|
|||
На этом уроке мы напишем метод print() для вывода шахматной доски в консоли. Отчёт отправил: 18783. Andrew Выполнено за 53 мин. [Показать отчёт] Научился: Написал метод print(). Сложности: Подобрать цвета и шрифт. |
|||||
15 | 156 матов в полтора хода |
|
|||
На этом уроке мы допишем алгоритм, узнаем, какая в нём есть ошибка, исправим её и найдём все позиции "мат в полтора хода", их будет 156. Отчёт отправил: 18783. Andrew Выполнено за 11 час. 54 мин. [Показать отчёт] Научился: Дописал алгоритм. Исправил ошибку. Пересмотрел матовые позиции - итого 156 матов в полтора хода. Сложности: Обернуть два цикла пока пока в один |
|||||
16 | Мат в 33 хода. |
|
|||
На этом уроке мы поместим два цикла в один общий цикл, чтобы сгенерировать решения для всех позиций, постепенно увеличивая дистанцию до матового окончания. Что ещё можно и нужно сделать. 0. Проверить, нет ли патовых ситуаций. 1. Пересмотреть все позиции, для которых нет решения. 2. Изменить массив белого ящик, координата слона от 0 до 31. 3. Модифицировать алгоритм, чтобы он работал для чернопольного слона. 4. Сделать симметрию относительно белого короля в квадрате 4х4. 5. Пересмотреть самые сложные позиции - мат в 67 полуходов. 6. Придумать эффективный способ хранения для белого ящика. 7. Решить задачу "мат двумя слонами". 8. Решить задачу "мат ладьёй". 9. Решить задачу "мат ферзём". Отчёт отправил: 18783. Andrew Выполнено за 16 час. 1 мин. [Показать отчёт] Научился: Все решения найдены. Игра с компьютером получается. Самые сложные позиции - когда черный король нападает и требуется тратить ходы, чтобы наладить взаимодействие фигур. Модифицировал алгоритм и для чернопольного слона: 464 мата и 33 хода. Сложности: Мат двумя слонами - сложно, так как непонятно, делать ли второго слона независимым и писать для него отдельные функции, как для коня, или оставить одного универсального слона. Не справился с матом ладьей и ферзем. Удалял коня, заменял алгоритмы слона на алгоритмы фигуры, количество матов находилось правильно, но на второй итерации останавливался перебор обратных кодов, так и не успел разобраться почему. |
|||||
17 | ПОЛУФИНАЛЬНЫЙ УРОК |
без видео |
|||
Поздравляю, ты прошёл ровно половину курса! Приложи фото самых интересных найденных матовых/патовых/иных комбинаций Напиши, нравится ли тебе этот курс, нашёл ли ты здесь то, что ожидал. ... Меж тем сказке далеко до развязки ... Отчёт отправил: 18783. Andrew Выполнено за 2 час. 5 мин. [Показать отчёт] Научился: Ничему новому на этом уроке. Курс великолепный, очень сложный и побуждает много работать при выполнении домашних заданий. Сложности: Пока не получается самому творить. При малейшем отклонении от генеральной линии возникают ошибки, которые тяжело понять/исправить. Это я про попытки перестроить программу на мат ферзём, ладьей, двумя слонами. Но будем продолжать пытаться. |
|||||
18 | Нано Шахматы |
|
|||
На этом уроке вам будет представлен фотокурс НаноШахматы, который необходимо пройти, для эффектного и логичного завершения этого курса. Отчёт отправил: 18783. Andrew Выполнено за 6 мин. [Показать отчёт] Научился: Сделал пункт 3. Делал, но не получилось пункты 7, 8, 9. Курс НаноШахматы выполнен полностью. Сложности: Выполнять пункты |
|||||
19 | Сериализация матрицы ходов |
|
|||
На этом уроке мы сделаем сериализацию и десериализацию массива WhiteMove[,,,]. Затем обсудим, как можно размер файла уменьшить в 100 раз. Отчёт отправил: 18783. Andrew Выполнено за 13 час. 27 мин. [Показать отчёт] Научился: Сделал функцию сериализации матрицы box. Сделал функцию десериализации матрицы из файла. Сериализовал матрицы. box время - 6 минут boxLite время - меньше минуты Всё работает так, как надо. Ну должно :) Сложности: Всё сложно. |
|||||
20 | Экономия памяти |
|
|||
На этом уроке мы переделаем класс WhiteBox, теперь для его работы потребуется в несколько раз меньше памяти. Отчёт отправил: 18783. Andrew Выполнено за 15 час. 34 мин. [Показать отчёт] Научился: Создал структуру WhitesMoveLite. Написал методы конвертации типов. Сложности: Делать конвертацию координат слона. Реализовывать методы Save() / Load(). |
|||||
21 | Шестнадцать мегабайт |
|
|||
На этом уроке мы сохраним базу ходов в 16-мегабайтный файл. Также сделаем считывание из файла и несколько раз поиграем с компьютером, пока он нас не заматует. Отчёт отправил: 18783. Andrew Выполнено за 11 час. 55 мин. [Показать отчёт] Научился: Написал методы Save() и Load(). Создал файл 16 Мб с базой всех позиций. Сделал функцию для консольной игры с управлением короля. Сложности: Вернулся на курс после долгого перерыва, вспоминал всё. Поэтому даже не пытался избавиться от матрицы box - делать считывание данных прямо из файла. |
|||||
22 | Игра без массива |
|
|||
На этом уроке мы ещё раз переделаем класс WhiteBox, теперь для работы программы НЕ НАДО будет загружать в память весь файл, нужные значения будут загружаться по ходу игры прямо из нужного места в файле. Отчёт отправил: 18783. Andrew Выполнено за 1 час. 12 мин. [Показать отчёт] Научился: Сделал считывание позиции напрямую из файла. Получил мат от компьютера. Сложности: Всё в порядке. |
|||||
23 | План визуализации |
|
|||
С этого урока мы начнём создавать визуализацию созданной базы данных. На этом уроке мы составим план действий по внедрению проекта. Мы будем работать с технологиями PHP и JavaScript. Отчёт отправил: 18783. Andrew Выполнено за 2 час. 16 мин. [Показать отчёт] Научился: Курс нано-Шахматы пройден. План по визуализации просмотрен. Сложности: Что ещё можно реализовать - для начинающих шахматистов-практиков было бы интересно тренировать собственно алгоритм мата, то есть человек делает ход белыми без подсказки, и получает информацию,сильнейший ли это был ход, сколько ходов до мата теперь. Сложное - предложить свой вариант внедрения. |
|||||
24 | Четыре фигуры на доске |
|
|||
На этом уроке мы реализуем первые три пункта нашего плана. 1. Отобразить шахматную доску с 4 фигурами. 2. Отобразить доску по заданному FEN-коду. 3. Разместить тексты для отображения информации. Отчёт отправил: 18783. Andrew Выполнено за 1 час. 21 мин. [Показать отчёт] Научился: Отобразил доску с 4 фигурами. Отобразил доску пл FEN-коду. Разместил тексты для отображения информации. Сложности: Разбираться в PHP-коде. |
|||||
25 | Создание PHP функций |
|
|||
На этом уроке мы погрузимся в РНР-программирование. Мы напишем несколько функций для считывания данных из нашей базы данных ходов и формирования их в массиве. Отчёт отправил: 18783. Andrew Выполнено за 2 дня 9 час. 43 мин. [Показать отчёт] Научился: Скопировал файл biknight.box в папку localhost-а Написал функции getWhiteBox ($combo), getWhitesMove ($combo), getBlacksMove ($combo), getInfo ($combo) Сложности: При короле черных на a1 мозилла ругается на Undefined offset При перестановке короля на h1 - тишина. |
|||||
26 | Дружба PHP с JavaScript |
|
|||
На этом уроке мы подружим PHP с JavaScript - сделаем вызов из JavaScript функции на PHP, результат которой будет возвращён назад в JavaScript. Отчёт отправил: 18783. Andrew Выполнено за 12 час. 58 мин. [Показать отчёт] Научился: Разделил функциональность на два файла. В конце chess.php сделал считывание параметров и передачу параметра назад в JS. В index.php при формировании доски - собрал координаты фигур. В конце файла вывел сформированные присвоения координат. Написал функцию phpGetInfo() и вызвал её в конце файла. Протестировал дружбу PHP с JavaScript Сложности: Убираю предупреждения браузера вот так: error_reporting(0); |
|||||
27 | Сериализация Json |
|
|||
На этом уроке мы передадим из РНР в JavaScript всю информацию о белых и чёрных хода, используя json-сериализацию. Используя полученный объект мы сформируем содержание информационной панели. Отчёт отправил: 18783. Andrew Выполнено за 1 день 3 час. 20 мин. [Показать отчёт] Научился: Сериализовал PHP массив в Json строчку, написал JavaScript для отображения информации о белом ходе. Сформировал информацию о возможных чёрных ходах, оформил содержание информационных панелей. Сложности: Всё ОК. |
|||||
28 | Чёрные ходы на доске |
|
|||
На этом коротком уроке мы отобразим все возможные ходы чёрного короля прямо на доске, используя числа - сколько ходов до мата останется при указанном ходе. Отчёт отправил: 18783. Andrew Выполнено за 40 мин. [Показать отчёт] Научился: Добавил span в каждую клетку доски, сделал вывод возможных ходов. Написал функцию clearBlackSteps() для убирания этих чисел. Сложности: Всё в порядке |
|||||
29 | Последний ход |
|
|||
На этом уроке мы закончим программирование визуального оформления мата конём и слоном с использованием технологий PHP и JavaScript. Отчёт отправил: 18783. Andrew Выполнено за 8 час. 53 мин. [Показать отчёт] Научился: Убрал кнопки и чекбоксы, в файле chess.php запретил взятие фигур. В функцию drop передал координату целевой клетки. В span-идентификатор добавил имя фигуры. Написал js функцию moveFigure (figure, index). Сделал отображение правильного хода белых. Раскрасили красным и синим. Сложности: Всё ОК. |
|||||
30 | Чёрно-белый слон |
|
|||
На этом уроке мы доведём до логического завершения функцию работы с нашей базой данных, чтобы она корректно отрабатывала позиции с чёрнопольным белым слоном. Это оказалось не так уж и сложно :) Отчёт отправил: 18783. Andrew Выполнено за 23 час. 6 мин. [Показать отчёт] Научился: Вручную проработал алгоритм расчёта симметричных координат. Внёс изменения в функцию getWhiteBox ($combo). Написал функции flipIndex() и flipCombo(). Написал функцию isBlackSquare ($index). Проработал позицию с чернопольным белым слоном. Сложности: В связи с утратой папки с файлами проекта еще раз проштудировал уроки 24-29. Опыт приобрел огромный конечно, жесть. |
|||||
31 | ФИНАЛЬНЫЙ УРОК |
без видео |
|||
Отчёт отправил: 18783. Andrew Выполнено за 1 день 12 час. 59 мин. [Показать отчёт] Научился: Всё в порядке. Спасибо за курс. Сложности: Работать с уровнем звука Видеообзор: dzsr0N-wLOM |
|||||
32 | VIP урок с ладьёй |
|
|||
На этом VIP-уроке мы решим шахматную задачу "Мат ладьёй". Для этого мы пройдёмся по всем функциям, файлам и скриптам и слегка модифицируем их для решения новой задачи. Отчёт отправил: 18783. Andrew Выполнено за 2 дня 2 мин. [Показать отчёт] Научился: Переделать проект для задачи «Мат ладьёй». Сформировал файл с базой решений. Переделал скрипт визуализации. Проделал все то же самое для мата ферзём. Проделал все то же самое для мата двумя слонами. Сложности: Всё в порядке Видеообзор: -7WudyMIRWE |
|||||
Итого: 32 видеоурока |
12 час. 27 мин. |
6 чел. | |||
Финалисты: Tekashnik, Алексей, Алексей В., Иван Воронин, Andrew, MaxB . |