Criar o programa mais curto para verificar quem ganhou em uma n d tic tac toe game.
Seu programa deve funcionar quando n
(largura) e d
(número da dimensão) estiverem nestes intervalos:
n∈[3,6]∩ℕ ie a number from this list: 3,4,5,6
d∈[2,5]∩ℕ ie a number from this list: 2,3,4,5
n = 3; d = 2
(3 2 ou seja, 3 por 3):
[][][]
[][][]
[][][]
n = 3; d = 3
(3 3 ou seja, 3 por 3 por 3):
[][][]
[][][]
[][][]
[][][]
[][][]
[][][]
[][][]
[][][]
[][][]
n = 6; d = 2
(6 2 ou seja, 6 por 6):
[][][][][][]
[][][][][][]
[][][][][][]
[][][][][][]
[][][][][][]
[][][][][][]
E assim por diante.
Vencendo (Se você já jogou o suficiente jogo da velha multidimensional, é o mesmo.)
Para que haja uma vitória, um jogador deve ter todos os quadrados adjacentes ao longo de uma linha. Ou seja, esse jogador deve ter n
movimentos em uma linha para ser um vencedor.
Adjacente:
- cada peça é um ponto; por exemplo (0,0,0,0,0) é um ponto em
d=5
- peças adjacentes são peças tais que são os dois pontos na mesma unidade d-cubo. Em outras palavras, a distância Chebyshev entre os blocos é 1.
- em outras palavras, se um ponto
p
é adjacente a um pontoq
, então todas as coordenadas emp
s coordenadas correspondentesq
diferem dele em não mais que um. Além disso, pelo menos no par de coordenadas difere em exatamente um.
Linhas:
- As linhas são definidas por vetores e um bloco. Uma linha é cada bloco atingido pela equação:
p0 + t
<
some vector with the same number of coordinates as p0>
Entrada :
A entrada será para STDIN. A primeira linha de entrada será dois números n
e d
no formato n,d
.
Depois disso, haverá uma linha composta por coordenadas, especificando os movimentos que foram feitos. Coordenadas serão listados no formulário: 1,1;2,2;3,3
. O canto superior esquerdo é a origem (0,0 para 2D). No caso geral, essa lista será como 1,2,...,1,4;4,0,...,6,0;...
onde o primeiro número representa esquerda-direita, a segunda cima-baixo, a terceira até a terceira dimensão, etc. Observe que a primeira coordenada é X
a primeira volta, a segunda é O
a primeira vez, ....
A entrada será seguida por uma nova linha.
Saída :
A saída será para STDOUT. Basta indicar quem ganhou se alguém ganhou ou se é um empate. Se não houver empate nem vitória, não produza nada.
Além disso, indique se há um conflito de movimentação, ou seja, se houver pelo menos duas jogadas no mesmo local.
Se houve uma vitória / empate antes do término da entrada, seu programa pode fazer o que quiser.
Casos de teste (alguém quer sugerir mais?):
Entrada:
4,3
0,0,0;1,1,1;1,0,1;2,0,2;0,0,1;2,0,0;2,0,1;3,0,2;3,0,1
Saída de exemplo:
X wins
Outra saída possível (requer explicação):
1
n
movimentos em uma linha para ser um vencedor. (Desculpe por não postar estas observações na caixa de areia, mas eu nem sequer têm tempo para sequer vê-lo lá porque foi publicado logo após sandboxing.)