fundo
Pule para "Tarefa" se você estiver familiarizado com o Tic-Tac-Toe (acho que a maioria está!)
Tic-Tac-Toe é um famoso jogo para dois jogadores. Consiste em um tabuleiro 3x3 que é preenchido gradualmente por dois jogadores (esclarecimentos abaixo); O primeiro jogador usa o personagem X
e o outro usa O
. O vencedor é o primeiro a obter 3 caracteres consecutivos e idênticos ( X
ou O
), na horizontal, na vertical ou na diagonal. Caso o tabuleiro esteja cheio e nenhum dos jogadores tenha conseguido três personagens consecutivos, como descrito acima, o jogo termina em empate. Observe que pode haver vagas vazias no final do jogo, caso um dos jogadores ganhe menos de 9 jogadas no total (isso não pode acontecer em caso de empate).
Tarefa
Dado um tabuleiro Tic-Tac-Toe no final de um jogo (na forma de uma string, uma matriz, uma lista simples de 9 valores ordenados, qualquer outro formato decente), determine quem vence o jogo.
A entrada consistirá em valores distintos e consistentes , um para
X
, um paraO
e outro que representa um ponto vazio.Seu programa deve ser capaz de gerar 3 valores distintos, consistentes e não vazios: um no caso de
X
vitória, outro no caso deO
vitória ou outro se os jogadores estiverem empatados.Especifique esses valores na sua resposta. Você pode assumir que a entrada será uma placa Tic-Tac-Toe válida.
Casos de teste
X
, O
, _
São os valores de entrada aqui; X wins
, O wins
E Tie
são para a saída.
X O X
O X _
O _ X
Saída: X wins
.
X _ O
X O _
X O X
Saída: X wins
.
X O X
_ O X
_ O _
Saída: O wins
.
X O X
O O X
X X O
Saída: Tie
.
Como sempre, todas as nossas regras padrão se aplicam. Este é o código-golfe , o código mais curto em bytes em todos os idiomas vence!
fonte
Respostas:
Geléia ,
16 1514 bytesUm link monádico que aceita uma lista de listas (as linhas - ou colunas) com os valores:
Retornando resultados:
Nota: usando um valor zero para
_
, e valores iguais mas opostos paraX
eO
, esse valor (aqui0.155
) pode estar no intervalo(1/6, 1/7)
(exclusivo nos dois extremos) - eu só escolhi um valor nesse intervalo que desse um resultado de ponto flutuante precisamente representável para os casos de vitória.Experimente online!
Quão?
fonte
Javascript (ES6),
10387 bytesEntrada
1
2
0
Resultado
"111"
"000"
"T"
Explicação
Casos de teste
fonte
Gelatina , 18 bytes
Experimente online!
X
=1
,O
=-1
,_
=0
X vence =
[1, 1, 1]
, O vence =[-1, -1, -1]
, Empate =0
Entrada como lista de 3 listas de 3 elementos em
(1, -1, 0)
cada.fonte
X
=1
,O
=2
,_
=3
, retorna1
(X vence),2
(O vence) ou3
(empata).Python 3 , 73 bytes
Experimente online!
Python 2 ,
1009592878277 bytesExperimente online!
Recebe a entrada como uma sequência separada por nova linha de
XO_
Saídas:
{'XXX'}
paraX
,{'OOO'}
paraO
{}
para um empateFunciona dividindo a string em linhas, colunas e diagonais:
então
'XXX'
e'OOO'
são verificados nas fatias.Recebe a entrada como uma sequência separada por nova linha de
XO_
Saídas:
{'XXX'}
paraX
,{'OOO'}
paraO
{}
para um empateFunciona dividindo a string em linhas, colunas e diagonais:
então
'XXX'
e'OOO'
são verificados nas fatias.fonte
[2::2]
corta para3579
, enquanto[2:8:2]
dá #357
R,
118116115 bytesObrigado a @ user2390246 por dois bytes extras.
Ligeiramente não destruído:
Retorna
X
se X vencer,O
se O vencer eT
em caso de empate.Experimente online!
fonte
M[c(3,5,7)]
é menor para a diagonal oposta #Perl 5 , 58 bytes
Código de 56 bytes + 2 fpr
-p0
.Experimente online!
Saídas
X
eO
vitórias ouT
empate. Inclui um monte de código de cabeçalho / rodapé para testar tudo de uma vez.Alternativa, 58 bytes
Experimente online!
fonte
Python 2 ,
124118117115 bytes[j*3:j*3+3]
para[j*3:][:3]
.Experimente online!
Valores de entrada / saída
X
é representado como1
O
é representado como2
_
é representado comoNone
fonte
[8,0,3,6,1,4,7,2,5,8,0,4,8,2,4,6]
->map(int,'8036147258048246')
map(ord,"...")
, apesar de umnul
byte no meio de uma corda não deu certo ...[j*3:j*3+3]
é[j*3:][:3]
. Como uma observação lateral,j*3+3
é o mesmo que-~j*3
, mas também são 118 bytes.01234567
...Python 3 , 173 bytes
Experimente online!
Entrada como uma matriz de
1 == X, 0 == O, -1 == _
Saída como um valor único:
2 == X, 1 == O, 0 == TIE
-8 bytes graças a Erik the Outgolfer
fonte
lambda x:h(x,1)*2or+h(x,0)
por -8 bytes e0 == TIE
(o que é mais bonito).PHP, 70 bytes
Supõe
-n
(padrão do intérprete). Adicionalmente requer-R
(executar<code>
para cada linha de entrada), contada como uma.A entrada é obtida em uma única linha (exatamente como na descrição do problema, exceto com todos os espaços em branco removidos).
A saída é a seguinte:
1
→ X vence,-1
→ O vence,0
→ Empate.Experimente online!
fonte
'X Wins'
pode ser alterado para'X'
(ou mesmo um número inteiro - digamos1
). O mesmo se aplica a'O wins'
eTie
. Dito isto, 109 bytes .Retina , 49 bytes
Experimente online!Recebe entrada como uma sequência de 11 caracteres de 9
X
s,O
s ou-
s em três grupos de três separados por;
s, embora o link inclua um cabeçalho que traduza os casos de teste fornecidos para esse formato. Funciona combinando uma linha vencedora diretamente usando um grupo de equilíbrio para garantir que os três caracteres correspondentes sejam equidistantes. (As distâncias adequadas são 0 (linha horizontal), 4 (diagonal reversa), 5 (linha vertical) ou 6 (diagonal); outras distâncias atingem um;
ou se estendem para fora da corda.)fonte
Java 8,
1121081061049010293 bytes+12 bytes (90 → 102) devido à correção de erros de verificação de apenas uma diagonal em vez de ambas.
-9 bytes (102 → 93) usando em
replaceAll
vez dematches
.Entrada no formato
XOX OX_ O_X
, saídaX
,O
ouT
.Explicação:
Experimente aqui.
Regex de explicação:
fonte
Retina , 127 bytes
Experimente online!
... Eu acho que você poderia chamar isso de força bruta ... Pensei que poderia haver algum mérito nisso ...
fonte
Retina , 51 bytes
Porta da minha resposta Java 8 . Entrada no formato
XOX OX_ O_X
, saídaX
,O
ouT
.Explicação:
Experimente aqui.
fonte
J, 34 bytes
Ungolfed:
Explicação
Codificação:
Nossa estratégia de alto nível é a primeira a criar uma matriz, cujas linhas são uma vitória possível. A linha um é diagonal /, a linha 2 é diagonal \, as três linhas seguintes são as linhas e as três linhas finais são as colunas. Esta parte é realizada pela frase (usando o Item Amend
}
):Finalmente, pegamos o GCD de cada linha:
Graças à nossa codificação, qualquer linha com um espaço em branco terá um GCD de 1, assim como qualquer linha que contenha qualquer combinação de Xs e Os, porque 2 e 3 são coprime. Então, tudo o que precisamos fazer a seguir é encontrar o elemento máximo:
>./
Se o jogo for empatado, será 1. Se um jogador vencer, será o número desse jogador.
Experimente online!
fonte
JavaScript, 66 bytes
Mantendo simples.
0
correspondente a um espaço em branco,1
um X e2
um O.0
por empate,1
por X vitória,2
por O vitória.Expandido, levemente comentado:
fonte