(Существуют некоторые проблемы, которые требуют использования наилучшей стратегии, но здесь мы этого не делаем. Даже если вы можете выиграть, вам разрешается делать ничью)
Вызов
Напишите программу, которая играет в игру крестики-нолики. Он не должен проигрывать (поэтому он должен закончить игру ничьей или победой).
Разрешенные методы ввода / вывода
- На входе может быть текущая доска. Вы можете предположить, что все предыдущие ходы 2-го игрока были выполнены вашим двигателем.
- Входные данные могут быть первыми ходами игрока, а ваша функция сохраняет, какие ходы произошли в прошлом. В этом случае функция вызывается несколько раз, по одному разу для каждого хода; или ввод подсказки функции / программы несколько раз.
- Вы можете сделать дополнительный ввод, говоря, что вы первый игрок, или написать две (возможно, связанные) функции для решения проблемы первого игрока и задачи второго игрока. Если вашей программе нужно использовать метод ввода 2 (множественный вызов), вы можете решить, что будет передано в первом вызове.
- Выходом может быть доска после вашего хода.
- Выход может быть вашим ходом.
- Ход может быть представлен в виде пары чисел (может быть 0-индексирование или 1-индексирование), числа в диапазоне 0 ~ 8 или числа в диапазоне 1 ~ 9.
- Доска может быть представлена в виде массива 3 × 3 или массива длиной 9. Даже если язык имеет массив с 0 индексами, вы можете использовать 1-индексирование.
- Клетки на сетке могут использовать любые 3 различных значений , чтобы указать
X
,O
и опорожнить.
Критерии победы
Самый короткий код на каждом языке победит.
we can assume that all previous moves of the 2nd player were also played by our engine