Мат ферзём

…Многие шахматисты, в том числе гроссмейстеры, ошибочно полагали, что задание [поставить ферзём мат] невыполнимо. Математики А. Брудно и И. Ландау обратились за помощью к ЭВМ. Сто́ит отметить, что при решении этой задачи впервые был использован метод ранжирования. Разбив множество всех возможных позиций по рангам, машина установила, что мат даётся не позднее 23-го хода при любом начальном положении белого ферзя и чёрного короля, но только при неприкосновенном короле на поле c3 (ввиду симметрии годятся также поля c6, f6 и f3). Пожалуй, это был первый случай, когда ЭВМ решила шахматную задачу раньше человека. Справедливости ради надо отметить, что если квалифицированному шахматисту сообщают, что мат есть, то он его находит…

— А. Карпов, Е. Гик — «Шахматный калейдоскоп» (библиотека «Квант», выпуск 13).

Шахматный эндшпиль: Человек, играя белым ферзём (при неприкосновенном белом короле), ставит мат чёрному королю под управлением ПМК.

Распределение регистров

Данные пользователя:

Служебные (используются для нужд самой программы):

Неиспользуемые:

Примечание: в файле .pmk для эмулятора регистры #4 и #5 уже заполнены. В обычных ПМК они заполняются вручную: CX ÷ ВП ВП X→П4 X→П0 КП→X0 П→X0 X→П5.

Игровой процесс

Положение переключателя Р–ГРД–Г произвольное.

Каждая партия начинается со следующих действий:

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

Правильность ввода человека не проверяется, поэтому он должен следить за ней сам: перемещать ферзя по правилам и не ставить его на поле под боем. Следует помнить, что поскольку белый король всё время стои́т на c3 = 33, на это поле ферзя ставить нельзя.

Следующие сообщения являются признаком завершения партии:

Пример игры

25X→П0 В/О

Белые:

Кр c3 = 33 — координаты не задаются явно, но подразумевается, что всю партию он проведёт, стоя на месте;

Ф g7 = 77 (будут указаны на 1-м ходу).

Чёрные:

Кр a8 = 18 — 1X→Пc 8X→Пd.

Нажимаемые клавиши Ход ПМК Объяснение
1 77 С/П 28 Ф g7 — Кр b8
2 47 С/П 18 Ф d7 — Кр a8
3 37 С/П Г Ф с7 — пат

Исходный код

Доработанный вариант, подходящий как для Б3-34/МК-54/МК-56/МС-1104, так и для МК-61/МК-52:

00. В↑		01. X→Пa	02. ВП		03. X→Пb	04. −		05. 1		06. 0		07. ÷		08. X→Пa	09. 3
10. X→П2	11. X→П1	12. П→Xd	13. П→X2	14. +		15. 2		16. −		17. X→П9	18. П→Xc	19. П→X1
20. +		21. 2		22. −		23. X→П8	24. 3		25. −		26. Fx²		27. П→X9	28. 3		29. −
30. Fx²		31. +		32. 3		33. −		34. Fx≥0	35. 77		36. П→Xa	37. П→X8	38. −		39. В↑
40. Fx²		41. П→Xb	42. П→X9	43. −		44. Fx²		45. FВx		46. F⟳		47. −		48. ×		49. ×
50. П→X8	51. В↑		52. 9		53. −		54. FВx		55. П→X9	56. −		57. ×		58. ×		59. П→X8
60. ×		61. П→X9	62. ×		63. Fx≠0	64. 77		65. П→X8	66. П→Xc	67. −		68. Fx=0	69. 84
70. П→X9	71. П→Xd	72. −		73. Fx=0	74. 84		75. П→X4	76. X→П7	77. FL1		78. 18		79. 3
80. FL2		81. 11		82. П→X7	83. С/П		84. П→X5	85. X→П7	86. П→X9	87. X→Пd	88. П→X8	89. X→Пс
90. 1		91. 0		92. ×		93. +		94. С/П		95. FL0		96. 00		97. К−

Пояснения:

00…08 — приём хода человека, разбивка по координатам с помощью сочетания 01. X→Пa 02. ВП, отбрасывающего первую цифру числа́, и запись их в #a и #b.

09…11 — инициализация вложенных циклов (заканчиваются на 77…81) по содержимому #1 и #2. Их параметры меняются от 3 до 1; при вычитании из них двойки последовательно получаются значения 1, 0, −1, которые приплюсовываются к координатам чёрного короля, формируя координаты клетки для возможного следующего хода (12…23), которые заносятся в #8 и #9. Чёрный король по возможности стремится в угол h8 = 88 — противоположный углу a1 = 11, в котором ему ставят мат.

24…35 — проверка, не лежит ли рассматриваемая клетка в зоне белого короля. Если лежит, управление передаётся на следующую итерацию циклов проверки (77), если нет, программа идёт дальше.

Далее следует проверка, не находится ли рассматриваемая клетка под боем ферзя (36…49; если лежит на одной вертикали/горизонтали с ферзём, разность соответствующих координат будет равна 0, если на одной диагонали — разность квадратов разностей будет равна 0) или за пределами доски (50…62); если условие (63…64) не выполняется, управление передаётся на следующую итерацию цикла (77), если нет, программа идёт дальше. Надо сказать, что ПМК не «замечает» экранирования ферзя королём: например, если поставить ферзя на a1 = 11 или b2 = 22, калькулятор будет считать, что вся диагональ a1…h8 = 11…88 находится под боем, и соответственно будет её избегать. Но это в целом не мешает игре.

65…74 — проверка, не остаются ли координаты короля неизменными (когда в #1 и #2 находится 2). Если остаются, управление передаётся на следующую итерацию цикла (77), если нет, программа идёт дальше на адрес 84.

75…76: в #7 вносится сообщение о возможном пате, после чего управление передаётся на следующую итерацию цикла. Если все итерации по L1 и L2 отработали, из #7 вызывается текущее сообщение о конце партии (мат или пат), и происходит останов (82…83).

Если клетка прошла все проверки успешно, в #7 вносится сообщение о возможном мате (84…85), координаты клетки из #8 и #9 записываются в #c и #d (86…89), из них формируются двузначные координаты и происходит останов и индикация хода ПМК (90…94).

Цикл по числу оставшихся ходов (95…96) передаёт управление на начало программы; если ходы исчерпаны, управление передаётся на команду 97. К−, вызывающую аварийный останов и индикацию ЕГГОГ .

Примечание автора инструкции: я сохранил оригинальный алгоритм, однако полностью переписал и перекомпоновал программу. В результате удалось сэкономить достаточно много шагов, которые были использованы для улучшения сервисности: теперь программа выводит координаты короля и принимает координаты ферзя как двузначные чи́сла, а не по отдельности, как раньше. Также индикация конца партии изменена на более явственную (буквы и ЕГГОГ вместо цифр).

Источник: журнал «Техника — молодёжи», № 11 / 1987, стр. 52.

Автор: Владимир Рябов (Казань).

Существенно доработал, перевёл в формат эмулятора и составил эту инструкцию: Адам Лаврик — 2026-05-02.