Это конец другой хорошо сыгранной шахматной игры. Ты белый игрок, и у тебя все еще есть ладья и твой король. У вашего противника остался только его король.
Так как ты белый, твоя очередь. Создайте программу для игры в этот шахматный матч. Его вывод может быть последовательностью ходов, анимацией GIF, ASCII-изображением или чем угодно.
Это кажется вполне очевидным, но я прямо скажу: вы должны выиграть игру (за конечное число ходов). С этой позиции всегда можно выиграть. НЕ ПОТЕРЯЙТЕ ЭТУ ЛАДУ. НЕ УБИРАЙТЕ.
Ваша программа может принимать или не принимать вводимые человеком данные для начальной позиции и для каждого хода черных (вы можете смело предполагать, что это допустимая позиция, т.е. короли не соприкасаются друг с другом). Если этого не произойдет, будет достаточно случайной стартовой позиции и случайных движений для черного короля.
Гол
Ваша оценка будет длиной в байтах вашего кода + бонус. Разрешен любой язык, выигрывает самый низкий балл.
бонус
-50, если ваша программа допускает как определенную человеком начальную позицию, так и случайную. Люди могут войти в него через стандартный ввод, файл, графический интерфейс ...
-100, если ваша программа позволяет и черному, и обычному игроку перемещать черного короля
+12345, если вы полагаетесь на сторонний шахматный решатель или встроенную шахматную библиотеку
Удачи!
Обновить!
Дополнительное правило: Матч должен быть сыгран до матов. Черные не сдаются, не выпрыгивают из шахматной доски и не похищаются инопланетянами.
намек
Вы можете получить помощь по этому вопросу на chess.se .
Ответы:
Haskell 1463-100 = 1363
Просто получить ответ. Это находит решение ретроградным путем, возвращаясь из матов в положение, в котором мы находимся. Оно отличается от описания ретроградного анализа на шахматном программировании - вместо того, чтобы начинать с начального набора и расширять его с помощью обратных движений пока никакие квадраты не переместились, чтобы не быть замеченными, он начинается со всех неиспользуемых квадратов и уменьшает этот набор, пытаясь двигаться вперед. Это будет менее эффективным по сравнению с традиционным способом, но использование памяти взорвалось для меня, когда я попробовал.
Скомпилировать с
ghc -O2
для приемлемой производительности для расчета таблицы финала; игра начинается сразу после первого хода. Поставьте белый король, ладью, черные короля в качестве аргументов. Для движения он просто хочет квадрат и выберет его для вас, если вы нажмете клавишу возврата. Пример сеанса:Код:
Отредактировано: исправлен код для запоминания таблицы эндшпиля и использования аргументов, поэтому гораздо менее болезненный для повторного тестирования.
источник
y
). Это действительно очевидно в том, что второй ход не быстрый, когда мы уже рассмотрели весь эндшпиль. Этим вечером я иду в паб, но если завтра у меня будет такая возможность, я сделаю это менее ужасным.C, в настоящее время 2552 некомментированных непробельных символа
Подсчет указывает на то, что я могу сыграть в гольф ниже 2552 общих символов, но, учитывая, что уже есть ответ меньшего размера (который будет трудно победить), я тщательно обдумаю это, прежде чем потрудиться сделать это. Это правда, что есть около 200 символов для отображения доски и еще 200 символов для проверки пользовательского ввода как начальной позиции, так и движения (что мне нужно для тестирования, но можно устранить).
Здесь нет дерева игр, только жестко закодированный алгоритм, поэтому он движется мгновенно.
Начальные позиции вводятся в виде строки (1-8) столбца (1-8), пронумерованного сверху справа, и программа работает по той же схеме. Поэтому, если вы поверните экран на 90 градусов против часовой стрелки, он будет следовать стандартным обозначениям числовых квадратов «Шахматы по переписке». Позиции, где черный король уже находится под контролем, отклоняются как незаконные.
Черные ходы вводятся как числа от 0 до 7, где 0 - это движение на север, 1 на северо-восток и т. Д. По часовой стрелке.
Он не следует общеизвестному алгоритму, который использует исключительно ладью под защитой белого короля, чтобы ограничить черного короля. Ладья только ограничивает черного короля в вертикальном смысле (и убегает горизонтально, если преследуется). Белый король ограничивает черного короля в горизонтальном движении. Это означает, что две белые фигуры не мешают друг другу.
Кажется, я сгладил большинство ошибок и возможных бесконечных циклов, теперь он работает довольно хорошо. Завтра я снова поиграюсь с этим и посмотрю, есть ли что-то, что нужно исправить.
Вот типичное завершение (мат может иногда происходить в любом месте на правом или левом краю доски.)
источник
Баш, 18 (или -32?)
Хорошо, это ответ на шутку. Поскольку черные - хороший шахматист, и черные знают, что белые также являются хорошими шахматистами, он решает, что единственное разумное, что нужно сделать, это:
Это приводит к победе белых, что соответствует спецификации.
Технически вы также можете вводить текущие позиции в качестве аргументов, программа просто игнорирует их, поэтому, возможно, это может претендовать на бонус -50.
источник
1-0
немного короче.