fundo
Mu Torere é um dos dois jogos conhecidos pelo povo maori da Nova Zelândia antes da influência européia. Isso o torna um jogo muito único, pois possui um "critério de vitória objetivo" e regras de jogo diferentes da maioria dos outros jogos existentes.
Jogabilidade:
O quadro é um octógono. Existem conexões entre cada vértice adjacente e há um nó central conectado a todos os vértices. A qualquer momento, oito dos nove nós são ocupados por pedras. No início, existem quatro pedras brancas e quatro pedras negras que ocupam metade do octógono, com o nó central vazio. O preto se move primeiro.
A cada turno, um jogador pode mover uma de suas pedras ao longo de uma das 16 arestas de um nó para o nó vazio. Uma pedra só pode ser movida de um nó externo para o nó central se a pedra estiver próxima à pedra do oponente.
Um jogador perde quando é incapaz de fazer uma jogada legal, o que ocorre quando não há arestas conectando uma pedra ao nó vazio.
Aqui está um site que explica as regras (com um diagrama) e oferece algumas análises.
O desafio
Seu desafio é escrever o programa mais curto que possa jogar um jogo perfeito de Mu Torere contra um oponente humano. Seu programa deve poder exibir e atualizar o tabuleiro do jogo, fazer jogadas e receber jogadas de um oponente humano. Mais importante ainda, deve jogar um jogo perfeito.
Jogo perfeito?
Sim, jogo perfeito. Eu tenho feito algumas análises de jogos e descobri que o jogo dura uma quantidade infinita de tempo se jogado perfeitamente pelos dois lados. Isso significa que seu programa nunca deve perder. Além disso, seu programa deve ser capaz de forçar uma vitória sempre que o oponente humano cometer um erro que permita ao programa forçar uma vitória. Quanto à forma como seu programa encontra a jogada perfeita, isso depende de você.
Detalhes
Após cada jogada (e no início do jogo), seu programa deve imprimir o tabuleiro do jogo. No entanto, você escolhe exibir o quadro, ele deve mostrar todos os nós e estar totalmente conectado (todas as 16 linhas de conexão devem ser desenhadas sem linhas cruzadas). No início, o quadro deve ter a posição inicial correta. Uma maneira de conseguir isso é colocando o tabuleiro de jogo em um quadrado.
w-w-w
|\|/|
b-o-w
|/|\|
b-b-b
As duas cores são preto e branco ou escuro / claro. O tabuleiro deve mostrar quais nós estão ocupados pelas peças de cada jogador, como marcá-los com um "b" ou "w" e qual nó está vago. Os participantes são incentivados (mas não obrigatórios) a tornar o tabuleiro de jogo mais gráfico, em vez de texto simples.
Seu tabuleiro de jogo deve ter um sistema de numeração que dê a cada nó um número único. Você pode numerar o quadro da maneira que desejar, mas isso deve ser explicado na sua resposta ou no programa. O quadro quadrado pode ser numerado da seguinte maneira:
1-2-3
|\|/|
4-5-6
|/|\|
7-8-9
O humano é o primeiro a se mover. Sua entrada será um único número. Este será o número do nó em que a pedra movida está atualmente. Se eu quiser mover uma pedra do nó 4 para um nó vazio 5, digitarei a 4
. O 5 está implícito, pois é o único nó vazio.
Suponha que o humano sempre faça uma jogada legal.
Depois que o humano fizer sua jogada, um quadro atualizado deve ser impresso. Depois que seu programa decide uma mudança legal, ele deve imprimir outra placa atualizada e aguardar o humano entrar em outra mudança.
Seu programa deve terminar assim que vencer.
Notas
Aplicam-se regras de código padrão de golfe, sem acesso a arquivos externos, etc., etc. Além disso, vou impor um limite de tempo flexível de 15 segundos (em uma máquina razoável) para que seu programa faça cada uma de suas movimentações. Como afirmado, este jogo tem a possibilidade de formar loops infinitos, e eu não quero uma pesquisa profunda entrando em um loop infinito.