…Многие шахматисты, в том числе гроссмейстеры, ошибочно полагали, что задание [поставить ферзём мат] невыполнимо. Математики А. Брудно и И. Ландау обратились за помощью к ЭВМ. Сто́ит отметить, что при решении этой задачи впервые был использован метод ранжирования. Разбив множество всех возможных позиций по рангам, машина установила, что мат даётся не позднее 23-го хода при любом начальном положении белого ферзя и чёрного короля, но только при неприкосновенном короле на поле c3 (ввиду симметрии годятся также поля c6, f6 и f3). Пожалуй, это был первый случай, когда ЭВМ решила шахматную задачу раньше человека. Справедливости ради надо отметить, что если квалифицированному шахматисту сообщают, что мат есть, то он его находит…
— А. Карпов, Е. Гик — «Шахматный калейдоскоп» (библиотека «Квант», выпуск 13).
Шахматный эндшпиль: ПМК, играя белым ферзём (при неприкосновенном белом короле), ставит мат чёрному королю под управлением человека.
Примечание: в файле .pmk для эмулятора регистры #0, #7…9, #a…b уже заполнены.
Переключатель Р–ГРД–Г должен стоять в положении Р.
Каждая партия начинается со следующих действий:
Установка чёрного короля на выбранное поле, а также каждый его ход осуществляется так: номер вертикали номер горизонтали (разделяющая координаты точка обязательна). ПМК отвечает двузначной координатой поля, на которое пошёл ферзь (первая цифра — вертикаль, вторая — горизонталь).
Правильность ввода человека не проверяется, поэтому он должен следить за ней сам: перемещать короля по правилам и не ставить его на поле под боем. Однако если случайно поменять местами координаты хода чёрного короля, ПМК в своём ответе также поменяет местами координаты ферзя. Следует помнить, что поскольку белый король всё время стои́т на c3 = 33, на это поле и соседние с ним клетки чёрного короля ставить нельзя.
Индикация ЗГГОГ означает, что чёрный король находится на одном из полей a1 = 11, a2 = 12 или b1 = 21 (такое может произойти только в начале партии), и ПМК объявляет мат в два хода; при появлении этого сигнала надо нажать . Обычно ферзь матует чёрного короля на полях a3 = 13 либо c1 = 31, предварительно на индикаторе появляется ЕГГОГ. Ответ на это сообщение — . ЕГГОГ также появляется при изначальной установке чёрного короля на поля a4 = 14 или d1 = 41: ПМК сообщает, что намерен дать шах на первую вертикаль.
77 (Ф g7).
Белые:
Кр c3 = 33 — координаты не задаются явно, но подразумевается, что всю партию он проведёт, стоя на месте;
Ф g7 = 77.
Чёрные:
Кр a8 = 18 — .
| № | Ход ПМК | Нажимаемые клавиши | Объяснение |
|---|---|---|---|
| 1 | 47 | Ф d7 — Кр b8 | |
| 2 | 36 | Ф c6 — Кр a7 | |
| 3 | 38 | Ф c8 — Кр b6 | |
| 4 | 47 | Ф d7 — Кр c5 | |
| 5 | 56 | Ф e6 — … |
Доработанный вариант для МК-61/МК-52:
00. В/О 01. П→X2 02. БП 03. 93 04. X→П4 05. ↔ 06. X→П2 07. КППa 08. ВП 09. 1 10. + 11. С/П 12. К[x] 13. X→П5 14. ВП 15. 1 16. П→X5 17. ↔ 18. − 19. Fx≠0 20. 26 21. Fx≥0 22. 24 23. 3 24. 0 25. X→Пa 26. 2 27. П→X5 28. FВx 29. КППa 30. X→П6 31. ↔ 32. X→П5 33. X→П3 34. В/О 35. Fx≥0 36. 58 37. − 38. Кx<07 39. П→X1 40. Fx≠0 41. 52 42. П→Xb 43. 5 44. КППb 45. ÷ 46. 2 47. FL3 48. 55 49. ВП 50. П→X4 51. КППb 52. КП→X5 53. FL1 54. 56 55. КП→X2 56. F10ˣ 57. X→П1 58. + 59. Кx≥08 60. П→X1 61. × 62. Fx≠0 63. 45 64. 9 65. X→П3 66. KП→X3 67. 5 68. П→X3 69. П→X6 70. − 71. Fx² 72. − 73. Кx≥08 74. F√ 75. П→X5 76. + 77. В↑ 78. П→X2 79. − 80. П→X4 81. П→X3 82. − 83. Кx≠09 84. Fx² 85. ↔ 86. Кx≠09 87. Fx² 88. − 89. Кx=08 90. − 91. Кx≠08 92. . 93. КППb 94. − 95. FL3 96. 53 97. 4 98. − 99. Fx=0 A0. 35 A1. П→X4 A2. Fsin A3. Кx<07 A4. 2
Пояснения:
Программа «Неприкосновенный король» стоит из следующих основных частей: блоки дебюта (00…03, 93), тактической игры́ на первой вертикали или горизонтали (94…A4, 01…03), стратегической игры́ на остальных полях (53…57, 64…96), а также подпрограмма ввода-вывода КППb (04…34), с которой целесообразно начать разбор.
На её вход поступают координаты ферзя, она записывает их в #4 и #2 (адреса́ 04…06), затем вызывает вспомогательную (но очень важную) подпрограмму КППa (07). Та существует в двух «ипостасях», в зависимости от числа в #a: если там 0, то является «пустой» 00. В/О, если же 30, то вызывается концовка КППb (23…27), «переворачивающая» координаты (попутно происходит их запись в #6, 5, #3, но это ровным счётом ничего не меняет). Затем координаты ферзя подготавливаются к индикации и происходит останов (08…11).
После ввода человеком координат чёрного короля, они членятся на вертикаль (целая часть, выделяется командой 12. К[x]) и горизонталь (команда 14. ВП отменяет операцию К[x], восстанавливая в #X исходное число и одновременно, в сочетании с командой 13. X→П5 отбрасывает её первую цифру, оставляя дробную часть, которую — в сочетании с 15. 1 умножает на 10; именно для этого и требуется ввод координат через точку). Полученный номер горизонтали вычитается из номера вертикали (12…18; горизонталь смещается в #X1) и результат сравнивается с 0 (19…22). Если король находится на диагонали a1…h8 = 11…88, число в #a, определяющее вид КППa, не меняется (это важно при переходе через поле e5 = 55). Если король ниже диагонали, туда записывается 30, если выше — 0 (23…25). Следующая команда запасает в стеке двойку для возможного использования в тактическом блоке. Координаты короля вновь вызываются в стек, подпрограмма КППa оставляет их в прежней позиции, либо «переворачивает», затем они запоминаются (27…33). В результате всех этих манипуляций меньшая по величине координата оказывается в #5 и #3, бо́льшая — в #6, и ПМК строит игру в предположении, что король находится выше диагонали, а при выводе координат ферзя располагает их нужным образом. При дальнейшем анализе будем тоже придерживаться этой точки зрения и считать, что вертикаль короля хранится в #5 (и #3), горизонталь — в #6, а ферзя — соответственно в #2 и #4.
Блок дебюта (00…03) после подаёт на вход КППb (93) две семёрки, на этом его функции исчерпываются. Ферзь независимо от вида КППa оказывается на поле g7 = 77. После ответа чёрных и возвращения из подпрограммы ввода-вывода из горизонтали короля вычитается вертикаль (94; эта разность нужна и в стратегическом, и в тактическом блоках). Затем производится проверка: не стои́т ли король на первой вертикали (95…96). Если нет, то управление передаётся в стратегический блок. Подблок коррекции (53…57) нужен для правильного прохождения через поле e5 = 55: он записывает в #1 какое-либо число от 10 до 10⁶, уничтожая тем самым условие первого хода #1 = 0. Если король располагается на поле 55, в #1 записывается единичка (на входе подблока в этом случае имеем 0). А вот если при входе в подблок содержимое регистра равно 1 (это бывает только когда король ход назад стоял на 55), команда 55. КП→X2 корректирует позицию ферзя — в противном случае подпрограмма ввода-вывода запутается с переворачиванием координат и ферзь в некоторых вариантах сделает «ход конём».
По выходе из подблока коррекции программа «вхолостую» проскакивает через один из участков тактического блока (58…63), и управление передаётся на начало основной части стратегического блока (64…93). Этот фрагмент программы перебирает поля́ справа от чёрного короля на расстоянии «хода конём», причём перебор возможных полей производится сверху вниз. Подблок проверок (77…91) пропускает ферзя на первое же такое поле, на которое он способен ступить. Нестандартная команда «точка» (92) замещает содержимое #X результатом операции 81. П→X3, а в #Y к этому моменту оказывается результат сложения по адресу 76. Это и есть новые координаты ферзя; вновь следует обращение к подпрограмме ввода-вывода.
А что будет, если король заберётся на 1-ю вертикаль? В этом случае, благополучно миновав проверку 95…96, мы оказываемся на начале тактического блока (97…A0). Номер горизонтали сравнивается с 5; в позиции Кр a5 = 15 ферзь может располагаться лишь на полях g7 = 77, b8 = 28, c8 = 38, d7 = 47 и d6 = 46. Во всех случаях, кроме последнего, программа играет обычным порядком — результатом будет Ф b7 = 27. Но в позиции Кр a5 = 15 Ф d6 = 46 нормальная процедура даст Ф c6 = 36 — пат. Чтобы этого избежать, проводится проверка горизонтали ферзя (A1…A3): синус 7 или 8 радианов положителен, и управление передаётся в стратегический блок, а вот синус 6 радианов отрицателен, и программа посылает ферзя на поле b4 = 24 с шахом (A4…A5, 01…03).
Если король не стои́т на поле a5 = 15, управление передаётся на 35…36, где производится проверка, различающая игру на полях a6…a8 = 16…28 (адреса́ 37…57) и на полях a1…a4 = 11…14 (адреса́ 58…63). В первом случае содержимое #X вычитается из запасённой ещё в КППb двойки: если получается 0 или 1 (король на поле a6 = 16 или a7 = 17), управление передаётся в стратегический блок — можно играть по обычному алгоритму. В позиции Кр a8 = 18 (угроза пата и повторения ходов) производится проверка условия первого хода (39…41): если король забрёл в угол после длительных странствий, ферзь делает шах на d5 = 45 (42…44). Если чёрные ответили Кр b8 = 28, оператор (47…48) передаёт управление на адрес 55, положение ферзя в памяти ПМК сменяется на Ф c5 = 35 (это сделано, чтобы избежать хода на d7 = 47, ведущего к повторению позиции), «вхолостую» проходится участок 58…63, и ферзь в рамках нормальной процедуры делает ход на c6 = 36. А если король после шаха уйдёт на a7 = 17, следует Ф b5 = 25 (46…51; команды 45. ÷ и 49. ВП в данном случае не несут никакой полезной нагрузки), а в ответ на вынужденное Кр a8 = 18 ПМК смещает в своей памяти короля на поле b8 = 28 (команда 52. КП→X5), «вхолостую» минует блок 58…63 и по обычному алгоритму ставит ферзя на d7 = 47. Наконец, если чёрные оказались в углу на первом ходу, управление после проверки (39…41) сразу передаётся на адрес 52 с такими же последствиями. Во всех эти вариантах условие 1-го хода уничтожается: командой 57. X→П1 в #1 записываются положительные чи́сла, не равные 0 или 1.
Осталось рассмотреть последнюю ветвь программы: тактическую игру на полях a1…a4 = 11…14. После проверки по адресу 35 управление передаётся на тот самый злополучный участок 58…63, который мы уже́ столько раз проскакивали «своим ходом», добираясь до адреса 64 без дополнительной команды безусловного перехода (для неё в программе просто не осталось ме́ста). Команда 51. + складывает входное число с запасённой в КППb двойкой: в результате при расположении короля на полях a1 = 11 или a2 = 12 содержимое #X отрицательно, на поле a4 = 14 — положительно, на a3 = 13 — равно 0. В первом случае проверка (59) переправляет управление на команду 66. КП→X3, а в #3 у нас единица, поэтому на индикатор вызывается число из #0 — ЗГГОГ, останавливающее вычисления. После исполняется уже известный фрагмент 01…03, в результате ферзь ходит на b7 = 27, если он стоял на g7 = 77 (первый ход), либо на b2 = 22 (мат!) на 2-м ходу.
Если король занимает позицию a3 = 13 или a4 = 14, проводится последняя проверка (60…63). Нормальная процедура выполняется только в ситуации Кр a4 = 14 не на первом ходу. В остальных случаях управление передаётся на адрес 45, деление на 0 даст предупредительный ЕГГОГ, а после с пульта команда 49. ВП превращает 0 в 1, и ферзь делает шах на первую вертикаль (50…51). Если король стоял на a3 = 13, дело на этом заканчивается (мат), если же в начале партии вы установили его на a4 = 14, игра продолжается.
Примечание автора инструкции: я слегка доработал программу для публикации. В моём варианте (подходящем исключительно для МК-61/МК-52) координаты вводятся одним числом, хоть и через точку, тогда как в оригинале вводились через (по одной — менее наглядно). Заодно в результате небольших реорганизаций кода удалось «освободить» #c…e. Единственная потеря — при появлении ЗГГОГ больше нельзя продолжить, просто нажав , требуются дополнительные команды (описаны выше). Но в целом это редкая ситуация и небольшая плата за удобство.
Источник: журнал «Техника — молодёжи», № 9 / 1987, стр. 54…57.
Авторы: Сергей Вагин (Челябинск) и редакция «Клуба электронных игр».
Немного доработал, перевёл в формат эмулятора и составил эту инструкцию: Адам Лаврик — 2026-05-01.