Фон
Перейдите к «Задаче», если вы знакомы с Крестики-нолики (я думаю, что большинство из них!)
Tic-Tac-Toe - известная игра для двух игроков. Он состоит из доски 3х3, которая постепенно заполняется двумя игроками (пояснения ниже); Первый игрок использует персонажа, X
а другой использует O
. Победитель первым получает 3 последовательных и одинаковых символа ( X
или O
) по горизонтали, вертикали или диагонали. Если доска заполнена и ни одному из игроков не удалось получить трех последовательных персонажей, как описано выше, игра заканчивается ничьей. Обратите внимание, что в конце игры могут быть пустые места, если один из игроков выиграет менее чем за 9 ходов (это не может произойти в случае ничьей).
задача
По заданной доске Tic-Tac-Toe в конце игры (в виде строки, матрицы, простого списка из 9 упорядоченных значений в любом другом приличном формате) определите, кто победит в игре.
Входные данные будут состоять из отдельных и непротиворечивых значений, одного для
X
, одного дляO
и другого, которое представляет пустое место.Ваша программа должна иметь возможность выводить 3 различных, непротиворечивых и непустых значения: одно в случае
X
выигрыша, другое в случаеO
выигрыша или другое, если игроки связаны.Пожалуйста, укажите эти значения в своем ответе. Вы можете предположить, что ввод будет действительной платой Tic-Tac-Toe.
Тестовые случаи
X
, O
, _
Являются входными значениями здесь; X wins
, O wins
И Tie
предназначены для выхода.
X O X
O X _
O _ X
Выход: X wins
.
X _ O
X O _
X O X
Выход: X wins
.
X O X
_ O X
_ O _
Выход: O wins
.
X O X
O O X
X X O
Выход: Tie
.
Как обычно, применяются все наши стандартные правила. Это код-гольф , выигрывает самый короткий код в байтах на каждом языке!
источник
Ответы:
Желе ,
16 1514 байтМонадическая ссылка, принимающая список списков (строк или столбцов) со значениями:
Возвращение результатов:
Примечание: используя значение ноль для
_
, и равные, но противоположные значения дляX
иO
, это значение (здесь0.155
) может находиться в диапазоне(1/6, 1/7)
(исключая на обоих концах) - я выбрал только значение в этом диапазоне, которое дало бы точно представимый результат с плавающей запятой для выигрышных дел.Попробуйте онлайн!
Как?
источник
Javascript (ES6),
10387 байтвход
1
2
0
Выход
"111"
"000"
"T"
объяснение
Контрольные примеры
источник
Желе , 18 байт
Попробуйте онлайн!
X
=1
,O
=-1
,_
=0
X wins =
[1, 1, 1]
, O wins =[-1, -1, -1]
, Tie =0
Ввести как список из 3 списков по 3 элемента в
(1, -1, 0)
каждом.источник
X
=1
,O
=2
,_
=3
, Returns1
(X побед),2
(O побед) или3
(ничья).Python 3 , 73 байта
Попробуйте онлайн!
Python 2 ,
1009592878277 байтПопробуйте онлайн!
Принимает ввод в виде строки, разделенной новой строкой
XO_
Выходы:
{'XXX'}
дляX
,{'OOO'}
заO
{}
для галстукаРаботает, разрезая строку на строки столбцов и диагоналей:
тогда
'XXX'
и'OOO'
проверяются на ломтики.Принимает ввод в виде строки, разделенной новой строкой
XO_
Выходы:
{'XXX'}
дляX
,{'OOO'}
заO
{}
для галстукаРаботает, разрезая строку на строки столбцов и диагоналей:
Затем
'XXX'
и'OOO'
проверяются на ломтики.источник
[2::2]
ломтики3579
, в то время как[2:8:2]
дает357
R
118116115 байтСпасибо @ user2390246 за два дополнительных байта.
Слегка разгульный
Возвращает,
X
если X выигрывает,O
если O выигрывает иT
в случае ничьей.Попробуйте онлайн!
источник
M[c(3,5,7)]
короче для противоположной диагоналиPerl 5 , 58 байт
56 байт код + 2 фпр
-p0
.Попробуйте онлайн!
Выходы
X
иO
для побед, илиT
для ничьи. Включает кучу кода верхнего / нижнего колонтитула, чтобы проверить все сразу.Альтернатива, 58 байт
Попробуйте онлайн!
источник
Python 2 ,
124118117115 байтов[j*3:j*3+3]
в гольф на[j*3:][:3]
.Попробуйте онлайн!
Входные / выходные значения
X
представляется как1
O
представляется как2
_
представляется какNone
источник
[8,0,3,6,1,4,7,2,5,8,0,4,8,2,4,6]
->map(int,'8036147258048246')
map(ord,"...")
, хотяnul
байт в середине строки не[j*3:j*3+3]
есть[j*3:][:3]
. Как примечание стороны,j*3+3
то же самое-~j*3
, но это также 118 байтов.01234567
...Python 3 , 173 байта
Попробуйте онлайн!
Ввод в виде матрицы
1 == X, 0 == O, -1 == _
Вывести как одно значение:
2 == X, 1 == O, 0 == TIE
-8 байтов благодаря Эрику Аутгольферу
источник
lambda x:h(x,1)*2or+h(x,0)
на -8 байт и0 == TIE
(что лучше imo).PHP, 70 байт
Предполагается
-n
(переводчик по умолчанию). Дополнительно требует-R
(выполнить<code>
для каждой строки ввода), считается как один.Ввод выполняется в одной строке (точно так же, как в описании проблемы, за исключением удаления всех пробелов).
Вывод следующий:
1
→ X Wins,-1
→ O Wins,0
→ Tie.Попробуйте онлайн!
источник
'X Wins'
может быть изменено на'X'
(или даже целое число - скажем1
). То же самое относится'O wins'
и кTie
. При этом 109 байтов .Сетчатка , 49 байт
Попробуйте онлайн! Принимает ввод в виде 11-символьной строки из 9
X
с,O
с или-
с в трех группах по три, разделенных;
s, хотя ссылка содержит заголовок, который переводит данные тестовые примеры в этот формат. Работает путем сопоставления выигрышной линии напрямую с использованием балансировочной группы, чтобы гарантировать, что три совпадающих символа равноудалены. (Подходящие расстояния: 0 (горизонтальная линия), 4 (обратная диагональ), 5 (вертикальная линия) или 6 (диагональ); другие расстояния могут попасть;
в строку или выйти за ее пределы.)источник
Ява 8,
1121081061049010293 байта+12 байт (90 → 102) из-за исправления ошибки проверки только одной диагонали вместо обоих ..
-9 байт (102 → 93) с использованием
replaceAll
вместоmatches
.Входные данные в формате
XOX OX_ O_X
, выходX
,O
илиT
.Объяснение:
Попробуй это здесь.
Объяснение регулярное выражение:
источник
Сетчатка , 127 байт
Попробуйте онлайн!
... Я думаю, вы могли бы назвать это грубой силой ... Думаю, в этом есть какая-то заслуга ...
источник
Сетчатка , 51 байт
Порт моего Java 8 ответа . Входные данные в формате
XOX OX_ O_X
, выходX
,O
илиT
.Объяснение:
Попробуй это здесь.
источник
J, 34 байта
Ungolfed:
объяснение
Кодирование:
Наша высокоуровневая стратегия заключается в том, чтобы сначала создать матрицу, каждая строка которой является возможным выигрышем. Строка один - диагональ /, строка 2 - диагональ \, следующие три строки - строки, а последние три строки - столбцы. Эта часть завершается фразой (используя пункт Amend
}
):Наконец, мы берем GCD каждой строки:
Благодаря нашему кодированию любая строка с пробелом будет иметь GCD 1, как и любая строка, содержащая любое сочетание X и Os, потому что 2 и 3 взаимно просты. Все, что нам нужно сделать дальше, это найти максимальный элемент:
>./
Если игра ничья, то будет 1. Если игрок выигрывает, это будет номер этого игрока.
Попробуйте онлайн!
источник
JavaScript, 66 байт
Сохраняя это простым.
0
соответствующим пробелом,1
X и2
O.0
за ничью,1
за победу Х,2
за победу О.Расширено, слегка прокомментировано:
источник