É o fim de outro jogo de xadrez bem jogado. Você é o jogador branco e ainda tem uma torre e seu rei. Seu oponente só tem o rei dele.
Desde que você é branco, é a sua vez. Crie um programa para jogar esta partida de xadrez. Sua saída pode ser uma sequência de movimentos, uma animação gif, arte ASCII ou o que você quiser.
Parece bastante óbvio, mas vou dizer explicitamente: você precisa vencer o jogo (em um número finito de jogadas). Sempre é possível ganhar desta posição. NÃO PERCA ESSE ROOK. NÃO ESTALEMOS.
Seu programa pode ou não aceitar uma entrada humana para a posição inicial e para cada movimento preto (você pode assumir com segurança que esta é uma posição legal, ou seja, os reis não estão se tocando). Caso contrário, uma posição inicial aleatória e movimentos aleatórios para o rei preto serão suficientes.
Ponto
Sua pontuação terá o comprimento em bytes do seu código + bônus. Qualquer idioma é permitido, a pontuação mais baixa vence.
Bônus
-50 se o seu programa permitir uma posição inicial definida pelo homem e uma posição aleatória. Os humanos podem acessá-lo via stdin, arquivo, GUI ...
-100 se o seu programa permitir que um jogador humano e um jogador aleatório movam o rei preto
+12345 se você contar com um solucionador de xadrez externo ou uma biblioteca de xadrez embutida
Boa sorte!
Atualizar!
Regra extra: a partida deve ser disputada até o xeque-mate. O preto não renuncia, não pula para fora do tabuleiro de xadrez e não é sequestrado por alienígenas.
Sugestão
Provavelmente você pode obter ajuda com essa pergunta no chess.se .
Respostas:
Haskell 1463-100 = 1363
Apenas obtendo uma resposta. Isso encontra a solução da maneira retrógrada, retornando do xeque-mate à posição em que estamos. Difere da descrição da análise retrógrada na programação de xadrez - em vez de começar com um conjunto inicial e expandi-lo com movimentos para trás até que nenhum quadrado movido não seja visto, ele começa com todos os quadrados não utilizados e reduz esse conjunto, tentando avançar. Isso será menos eficiente em termos de tempo do que a maneira tradicional, mas o uso de memória explodiu para mim quando eu tentei.
Compile com
ghc -O2
desempenho aceitável para o cálculo da tabela de final de jogo; o jogo é instantâneo após o primeiro movimento. Forneça rei branco, torre, quadrados pretos de rei como argumentos. Por um movimento, ele só quer um quadrado e escolherá um para você se você pressionar retornar. Sessão de exemplo:Código:
Editado: código corrigido para lembrar a tabela de final de jogo e usar argumentos, muito menos doloroso para testar repetidamente.
fonte
y
). Isso é realmente óbvio, pois o segundo passo não é rápido quando já consideramos o final do jogo. Estou indo ao pub hoje à noite, mas se tiver a chance amanhã, tornarei isso menos terrível.C, atualmente 2552 caracteres não-espaço em branco que não são comentários
A contagem indica para mim que eu poderia jogar abaixo de 2552 caracteres totais, mas, como já existe uma resposta menor (que será difícil de bater), considerarei isso cuidadosamente antes de me preocupar em fazê-lo. É verdade que existem cerca de 200 caracteres para exibir o quadro e outros 200 para verificar a entrada do usuário tanto na posição inicial quanto na movimentação (o que eu preciso para testar, mas poderia eliminar).
Nenhuma árvore de jogo aqui, apenas algoritmo codificado, então ele se move instantaneamente.
As posições iniciais são inseridas como a linha (1-8) da coluna (1-8) numerada no canto superior direito e o programa funciona no mesmo esquema. Portanto, se você girar a tela 90 graus no sentido anti-horário, seguirá a notação quadrada numérica padrão do xadrez por correspondência. Posições em que o rei preto já está sob controle são rejeitadas como ilegais.
Os movimentos pretos são inseridos como um número de 0 a 7, com 0 sendo um movimento para o norte, 1 para o nordeste e assim por diante no sentido horário.
Não segue o algoritmo comumente conhecido que usa exclusivamente a torre sob a proteção do rei branco para restringir o rei preto. A torre apenas restringe o rei preto no sentido vertical (e foge horizontalmente se for perseguida.) O rei branco restringe o rei preto em movimento horizontal. Isso significa que as duas peças brancas não se interpõem.
Eu pareço ter resolvido a maioria dos bugs e possíveis loops infinitos, está funcionando muito bem agora. Amanhã vou jogar novamente e ver se há mais alguma coisa que precise ser consertada.
Aqui está um acabamento típico (às vezes, o posicionamento pode ocorrer em qualquer lugar na borda direita ou esquerda do quadro.)
fonte
Bash, 18 (ou -32?)
Ok, esta é uma resposta de brincadeira. Como as pretas são um bom jogador de xadrez, e as pretas sabem que as brancas também são um bom jogador de xadrez, ele decide que a única coisa sensata a fazer é:
Isso resulta em vitórias em branco, que atendem às especificações.
Tecnicamente, você pode inserir as posições atuais como argumentos também, o programa as ignora, portanto, sem dúvida, isso pode se qualificar para o bônus de -50.
fonte
1-0
um pouco mais curto.