Criar um programa determinista para jogar n d tic-tac-toe com os outros concorrentes.
Seu programa deve funcionar quando n
(largura) e d
(número da dimensão) estiverem nestes intervalos:
n∈[3,∞)∩ℕ ie a natural number greater than 2
d∈[2,∞)∩ℕ ie a natural number greater than 1
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.
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, ....
Se este for o primeiro movimento, a entrada será um número seguido por 1 linha em branco.
Por consistência, a entrada sempre terminará com uma nova linha. Entrada de amostra (\ n é nova linha):
10,10\n0,0,0,0,0,0,0,0,0,0;0,2,3,4,5,6,7,8,9,0;0,1,2,3,4,5,6,7,8,9\n
Para o primeiro movimento:
10,10\n\n
onde \n
está o caractere de nova linha.
Resultado:
Envie a movimentação que você deseja fazer no mesmo formato que a entrada (uma lista separada por vírgula). Uma jogada inválida (isto é, uma que já foi realizada) resultará em uma perda para o jogo.
Nota: Você pode usar um gerador de números aleatórios, desde que o propague com um valor tal que cada execução seja idêntica, nas mesmas condições. Em outras palavras, o programa deve ser determinístico.
Nota: somente movimentos válidos são permitidos.
Jogos Vencedores (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>
Simulação e condições vencedoras:
Indique na sua resposta se está pronto para a classificação. Ou seja, indique claramente se sua resposta foi feita ou não.
Se sua resposta estiver marcada como concluída, ela não será classificada até pelo menos 24 horas após a última edição do código.
Os programas devem funcionar offline. Se um programa for trapaceado, ele receberá automaticamente uma pontuação de
-1
e não será mais pontuado. (Como alguém terminaria trapaceando com seus programas?)Se o seu programa produzir saída inválida, será imediatamente contada como uma perda para o jogo
Se você programar uma falha na produção após 1 minuto, será imediatamente contabilizado como uma perda para o jogo. Se necessário, otimize a velocidade. Não quero esperar uma hora para testar um programa fora de outro.
Cada programa será executado contra os outros programas duas vezes para cada um
n
no intervalo[3,6]
e cada umd
no intervalo[2,5]
, uma vezX
e uma vez comoO
. Esta é uma rodada.Para cada jogo que um programa vence, ele atinge
+3
sua pontuação. Se o programa empatou (1 vitória e 1 derrota em uma única rodada ou empata nos dois jogos), então+1
. Se o programa for perdido, será exibido+0
(ou seja, nenhuma alteração).O programa com a pontuação mais alta vence. Se houver empate, o programa com o menor número de jogos perdidos (fora dos competidores empatados) vence.
Nota: Dependendo do número de respostas, posso precisar de ajuda para executar os testes.
Boa sorte! E que as simulações sejam sempre a seu favor!