Escreva um programa no idioma escolhido que jogue o jogo da velha em um tabuleiro 3 * 3 contra um jogador humano. No entanto, cada movimento deve ser um programa diferente , gerado a partir da iteração anterior.
A decisão de como e de que forma você avalia a contribuição humana depende de você, mas deve ser lida na contribuição padrão. Da mesma forma, você é livre para escolher um método para determinar qual jogador será iniciado (por exemplo, você pergunta primeiro ou permite que o ser humano insira um movimento inválido para sinalizar que o computador é iniciado ou outras idéias).
A validação de movimentos não é necessária, você pode assumir um oponente humano que joga bastante.
Basicamente, você tem um programa que corresponde a um estado do quadro. O estado é impresso de qualquer maneira reconhecível, mas pelo menos o seguinte nível de detalhe é esperado:
X..
00X
x..
Depois que o jogador humano entrou em seus movimentos, seu programa precisa gerar a próxima iteração de si mesmo como um arquivo de origem no mesmo idioma (para saída padrão ou para um arquivo) e finalizar. Você não tem permissão para armazenar informações em nenhum outro lugar fora desse arquivo de origem. (não é necessário que seu programa crie e execute o programa gerado, isso pode ser feito pelo usuário - no entanto, não é proibido). Quando o programa gerado for criado e executado, ele se comportará de maneira semelhante, exibirá o estado, aguardará a entrada do usuário etc.
No final do jogo, você deve imprimir o resultado (se ganhou ou é um empate) de qualquer maneira inequívoca.
Por jogo perfeito, quero dizer que o programa não deve perder e, se houver a possibilidade de forçar uma vitória, ele deve vencer.
O código mais curto vence , o vencedor é selecionado pelo menos 10 dias após a primeira entrada válida.
Você obtém uma redução de 10% na pontuação se o seu programa puder lidar com a criação e o lançamento de sua próxima iteração. (Eu sei, provavelmente não vale a pena) É claro que o próprio programa deve ser encerrado no momento em que a próxima iteração aceitar as mudanças do usuário.
Se você usar alguns truques estranhos e incomuns, poste uma breve explicação com seu código.