Головоломка программиста: кодирование состояния шахматной доски на протяжении всей игры - PullRequest
91 голосов
/ 02 декабря 2009

Не совсем вопрос, скорее загадка ...

На протяжении многих лет я участвовал в нескольких технических интервью с новыми сотрудниками. Кроме того, что я задавал стандартные вопросы «Знаете ли вы X технологии», я также пытался понять, как они решают проблемы. Обычно я отправляю им вопрос по электронной почте за день до собеседования и ожидаю, что они примут решение к следующему дню.

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

Так что я решил написать один из своих вопросов для аудитории Stack Overflow.

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

Код не требуется для ответа, просто описание алгоритма, который вы бы использовали.

РЕДАКТИРОВАТЬ: Как указал один из плакатов, я не учел временной интервал между ходами. Не стесняйтесь учитывать это также в качестве дополнительной опции:)

EDIT2: просто для дополнительного пояснения ... Помните, кодер / декодер осведомлен о правилах. Единственные вещи, которые действительно должны быть сохранены, - это выбор игрока - предполагается, что кодировщик / декодер может знать все остальное.

РЕДАКТИРОВАТЬ3: Будет трудно выбрать победителя здесь :) Много хороших ответов!

Ответы [ 31 ]

1 голос
/ 02 декабря 2009

cletus 'ответ хороший, но он забыл также закодировать, чья это очередь. Он является частью текущего состояния и необходим, если вы используете это состояние для управления алгоритмом поиска (например, производным альфа-бета).

Я не шахматист, но я верю, что есть еще один угловой случай: сколько ходов было повторено. Как только каждый игрок делает один и тот же ход три раза, игра становится ничьей, не так ли? Если это так, то вам нужно сохранить эту информацию в состоянии, потому что после третьего повтора состояние теперь является терминальным.

...