Как управлять несколькими шахматными обозначениями при сохранении единого источника истины и тестирования ясности?Python

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Как управлять несколькими шахматными обозначениями при сохранении единого источника истины и тестирования ясности?

Сообщение Anonymous »

Я строю шахматный двигатель в Python. Повторяющаяся задача дизайна - это растущее количество нотаций, которые мне нужно поддерживать: < /p>

[*] LAN (длинная алгебраическая нотация), например, "e2e4" < /li>
san (стандартная алгебраическая нотация), например, "NF3" < /li>
UCI, сокращенная алгебраическая < /li>
Пользовательский внутренний формат < /li>
< /ul>
Каждое обозначение выражает различное количество информации. Например, SAN включает в себя неоднозначные индикаторы, продвижение и проверку/партнеры, которые зависят от государства Правления. Некоторые языки выражают концепции, которые другие опускают или выражают по -разному. Аналогично, каждая шахматная нотация представляет собой движение по-разному, иногда встраивая больший контекст или требует специфической для позиции интерпретации.

Я думаю, что моя проблема похожа на управление несколькими системами перевода без ухода от последовательного центрального значения. Он сознательно содержится свободным от бизнес -логики, такой как законность, чек или приятель.

Код: Выделить всё

pieceMoved
)
[*] Piece, захваченная в пункте назначения (

Код: Выделить всё

pieceCaptured< /code>) < /li>
 Необязательная часть продвижения < /li>
 Флаги для особых движений (например, Castling, En Passant) < /li>
< /ul>
a move < /code всегда строится из состояния доски и координат. во время создания (даже если пустовать). < /p>

В моей кодовой базе я различаю два режима создания: < /p>

  [b] vall move < /strong> построен из координат и базовой платы (list[list[str]]
), without checking legality.

It reflects a mechanical displacement from one square to another.

It can produce incoherent or illegal moves, but still records accurate pieceMoved and pieceCaptured from the given layout.

[*]A valid Move[/b] is created Разрешив строку локальной сети против полной игры < /code> (включая поворот, права, en passant и т. Д.).

это гарантирует законность и полноту в соответствии с правилами шахмат. />

Код: Выделить всё

LANtoRawMove(lan: str, board: list[list[str]]) -> Move
LANtoValidMove(lan: str, state: GameState) -> Move< /code> < /li>
< /ul>
Эти функции в основном используются для файлов анализа и настройки тестов, а не логики ядра двигателя.raw_fixt< /code>:

принимает список строк локальной сети и снимка платы.

использует Lantorawmove < /code> для генерации перемещения, применяет их последовательно и возвращает полученную плату и список движений. < /p>
< /li>
valid_fixt< /code>:

To Sist of Strings Lan и GameState < /code>.

использует Lantovalidmove < /code>, применяет движения последовательно и возвращает полученное состояние и список действительных движений. /> < /ul>
Я подумал о том, чтобы превратить эти приспособления в утилиты общего назначения (например, raw_generate () < /code>), чтобы использовать их внешние тесты, но это не влияет на основные проблемы. />
Например, могу ли я протестировать lantorawmove < /code>, используя RAW_FIXT < /code>, хотя RAW_FIXT < /code> называет его внутри? Настройка? Дайте мне знать, если необходимо какое -либо разъяснение.

Подробнее здесь: https://stackoverflow.com/questions/796 ... e-of-truth
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Python»