Existe uma variante do conhecido problema das rainhas N que envolve rainhas e cavaleiros e é considerado "consideravelmente mais difícil" 1 . A declaração do problema é a seguinte:
Você deve colocar um número igual de cavaleiros e rainhas em um tabuleiro de xadrez, de modo que nenhuma peça ataque outra peça. Qual é o número máximo de peças que você pode colocar no quadro e quantas maneiras diferentes você pode fazer isso?
Neste desafio do código-golfe , você receberá uma entrada n entre 3 e 32 (da maneira mais adequada para o seu idioma). Para um dado n , pode haver zero ou mais soluções para o problema acima. Caso não exista solução, você não deve produzir / devolver nada ( nulo , string vazia , false , ...). Caso contrário, você deve fornecer dois resultados:
- Uma placa de solução (veja abaixo) para o tamanho n, em que não é possível adicionar uma peça de xadrez da rainha ou do cavaleiro sem que nenhuma peça esteja sendo atacada. Deve haver um número igual de rainhas e cavaleiros .
- A fonte de um programa a ser executado que não aceita entrada e fornece (i) outra solução (ou nada ) para o mesmo tamanho n , no mesmo formato, bem como (ii) outro programa para a próxima solução (e assim por diante) ...)
Observe que:
- A sequência de programas nunca deve retornar a mesma placa duas vezes, deve cobrir todas as soluções possíveis para o problema de tamanho n e, eventualmente, deve terminar (não produzindo saída).
- Você pode retornar dois valores, retornar um e imprimir o outro ou imprimir os dois valores de retorno.
- No entanto , se você imprimir a placa e o próximo programa, a placa não deve ser considerada parte do próximo programa (eu recomendo imprimir a placa em comentário ou usar os fluxos de saída e erro padrão).
- O valor do programa como um retorno deve ser uma sequência, não um encerramento.
Formato da placa
- Uma placa é um quadrado de tamanho n .
- Uma célula do tabuleiro pode estar vazia, uma rainha ou um cavaleiro.
- Você deve escolher valores distintos para cada tipo de célula (ou seja, você pode usar outros símbolos além de Q, N ao imprimir o quadro).
- Se você retornar um quadro não-string, ele deverá ser uma coleção ordenada dos n 2 valores do quadro (por exemplo, matriz, vetor ou lista na ordem principal de linha / coluna, ...).
Se você imprimir o quadro, poderá imprimi-lo ao quadrado ou como uma linha. Por exemplo, uma placa de solução do tamanho 4 pode ser impressa da seguinte maneira (espaços não necessários; símbolos a seu critério):
Q - - - - - - - - - - - - - N -
Se você sente isso, também pode gerar:
♛ · · · · · · · · · · · · · ♞ ·
... mas isso é suficiente:
Q-------------N-
Não importa se você itera pelas células em uma ordem principal ou de coluna, porque existem soluções simétricas. Por exemplo, as soluções para n = 4 são:
Q------N-------- Q----------N---- Q------------N-- Q-------------N- -Q----------N--- -Q------------N- -Q-------------N --Q---------N--- --Q----------N-- --Q------------N ---QN----------- ---Q----N------- ---Q---------N-- ---Q----------N- ---NQ----------- ----Q------N---- ----Q----------N N------Q-------- -------QN------- -------Q----N--- ---N----Q------- -------NQ------- --------Q------N N----------Q---- ----N------Q---- -----------QN--- -N----------Q--- --N---------Q--- -------N----Q--- -----------NQ--- N------------Q-- --N----------Q-- ---N---------Q-- N-------------Q- -N------------Q- ---N----------Q- -N-------------Q --N------------Q ----N----------Q --------N------Q
Você também pode olhar para as soluções para n = 5 como matrizes ; as placas contém #
, q
e n
símbolos, que são células vazias de diferentes tipos (ver minha resposta abaixo). Eu conto 2836 placas para n = 6 , como na resposta de Sleafar (eu introduzi um bug ao reduzir a contagem de bytes, mas está corrigido agora).
Muito obrigado a Sleafar por encontrar não um, mas dois bugs no meu código.
Ponto
O código mais curto em bytes vence.
Medimos o tamanho do primeiro programa, o que aceita n .
1 . Queens and Knights , de Roger KW Hui (cuidado! Contém uma solução)
-------------------------N--------Q-
é inválida porque mais peças podem ser adicionadas :) Q--------N---------------N--------Q-
.