Vamos jogar um pouco de código-golfe!
O desafio é encontrar o vencedor de um jogo de Tic-Tac-Toe.
Isso já foi feito muitas vezes, fornecendo um quadro com um vencedor claro, mas aqui está a diferença:
As células são numeradas assim:
1|2|3
-+-+-
4|5|6
-+-+-
7|8|9
Você obtém uma matriz de exatamente 9 movimentos assim:
{3, 5, 6, 7, 9, 8, 1, 2, 3}
Isso é analisado da seguinte maneira:
- O jogador 1 marca a célula 3
- Jogador 2 marca célula 5
- O jogador 1 marca a célula 6
- O jogador 2 marca a célula 7
- O jogador 1 marca a célula 9
- Jogador 1 ganhou
Nota: O jogo não para depois que um jogador vence, pode acontecer que o jogador perdedor consiga fazer três seguidas após o jogador vencedor, mas apenas a primeira vitória conta.
Seu trabalho agora é obter 9 números como entrada e saída do jogador vencedor e da rodada em que a vitória ocorreu. Se ninguém vencer, produza algo constante de sua escolha. Você pode receber entrada e fornecer saída por qualquer média / formato padrão.
Diverta-se!
Mais alguns exemplos, conforme solicitado:
{2,3,4,5,6,7,1,8,9} => Player 2 wins in round 6
{1,2,4,5,6,7,3,8,9} => Player 2 wins in round 8
{1,2,3,5,4,7,6,8,9} => Player 2 wins in round 8
fonte
[X, Y]
? Em caso de empate, podemos gerar outro valor consistente? Eu recomendo, porque imprimir essas cordas exatas não faz parte do golfe. Para idéias de desafios futuros, recomendo usar a sandbox . :-){3, 5, 6, 7, 9, 8, 1, 2, 3}
" - deve3
realmente aparecer duas vezes?Respostas:
Retina , 114 bytes
Experimente online! Com base na minha resposta a Tic-Tac-Toe - X ou O? . Saída
X<N>
se o primeiro jogador vencer após osN
turnos,O<N>
se o segundo jogador vencer,T
se nenhum deles vencer. Explicação:Cria um quadro interno e também marca cada jogada com o jogador de quem é a jogada.
Aplica uma jogada.
Procura uma vitória e, se houver, substitua o tabuleiro pelo vencedor e pelo número de jogadas restantes.
Se os movimentos estão esgotados e ninguém venceu, o jogo está empatado.
Calcule o número da rodada a partir do número de movimentos restantes.
fonte
MATL , 39 bytes
Saída é
1
eR
, em linhas separadas, se o usuário 1 vencer na rodada R ;0
eR
, em linhas separadas, se o usuário 2 vencer na rodada R ;Experimente online! Ou verifique todos os casos de teste .
Explicação
fonte
Javascript (ES6), 130 bytes
Explicação
fonte
Java (OpenJDK 8) , 445 bytes
Experimente online!
O valor de retorno {1,8} significa que o jogador 1 venceu na rodada 8. O valor de retorno {0,0} significa empate.
fonte
false
pode ser substituído por1<0
e o espaço após o primeiro]
pode ser removido.//Code that was submitted
e//End of code
.Kotlin , 236 bytes
Embelezado
Teste
TIO
TryItOnline
fonte
Python 2 , 170 bytes
Experimente online! ou Experimente todos os casos de teste
fonte
Gelatina , 38 bytes
Experimente online!
Vitória do Jogador 1: Vitória do
[round, 1]
Jogador 2:
[round, 2]
Gravata:
[0, 0]
fonte
Python 3.6 ou superior, 137 bytes
O formato de saída é
winner number:round
ou-1
para um empate. Jogador 2 é0
Jogador 1 é1
. Entrada na forma de uma sequência não eliminada de números quadrados indexados em 1.fonte
Geléia , 35 bytes
Um link monádico que pega uma lista dos movimentos e retorna uma lista,
[move, player]
onde os jogadores são identificados como1
(primeiro a agir) e0
(segundo a agir).Experimente online!
Quão?
fonte
Python 2, 168 bytes
Saídas (jogador, rodada) ou 0 para um empate.
Mapeia o jogo em um quadrado mágico de 3 por 3 e procura conjuntos de 3 Os ou Xs que somam 15.
fonte
Limpo ,
244... 220 bytesExperimente online!
A sequência iterada em
h
contém não-imprimíveis e é equivalente a"\003\001\000\000"
.fonte
Python 2 ,
140136134 bytesExperimente online!
EDIT: 4 bytes + 2 bytes thx para Eric, o Outgolfer.
Produz uma tupla (playerNumber, roundNumber) ou False, se não houver vencedor.
fonte