Il existe une variante du problème bien connu des N-reines qui implique des reines et des chevaliers et serait "beaucoup plus difficile" 1 . L'énoncé du problème est le suivant:
Vous devez placer un nombre égal de chevaliers ♞ et de reines ♛ sur un échiquier de sorte qu'aucune pièce n'attaque aucune autre pièce. Quel est le nombre maximum de pièces que vous pouvez placer sur le plateau et combien de façons différentes pouvez-vous le faire?
Dans ce défi de code-golf , vous recevrez une entrée n comprise entre 3 et 32 (de la manière la plus adaptée à votre langue). Pour un n donné , il peut y avoir zéro ou plusieurs solutions au problème ci-dessus. Dans le cas où il n'y a pas de solution, vous ne devez rien produire / renvoyer ( nil , chaîne vide , false , ...). Sinon, vous devez donner deux résultats:
- Un plateau de solution (voir ci-dessous) pour la taille n où il n'est pas possible d'ajouter une pièce d'échecs reine ou chevalier sans qu'aucune pièce ne soit attaquée. Il doit y avoir un nombre égal de reines et de chevaliers .
- La source d'un programme à exécuter qui n'accepte aucune entrée et donne (i) une autre solution (ou rien ) pour la même taille n , dans le même format, ainsi que (ii) un autre programme pour la solution suivante (et ainsi de suite) ...).
Notez que:
- La séquence de programmes ne doit jamais renvoyer la même carte deux fois, doit couvrir toutes les solutions possibles au problème de taille n et doit finalement se terminer (ne produire aucune sortie).
- Vous pouvez soit renvoyer deux valeurs, renvoyer l'une et imprimer l'autre, soit imprimer les deux valeurs de retour.
- Cependant , si vous imprimez à la fois la carte et le programme suivant, la carte ne doit pas être considérée comme faisant partie du programme suivant (je recommanderais d'imprimer la carte en commentaire ou d'utiliser à la fois la sortie standard et les flux d'erreur).
- Le programme en tant que valeur de retour doit être une chaîne et non une fermeture.
Format du conseil
- Une planche est un carré de taille n .
- Une cellule de conseil peut être vide, une reine ou un chevalier.
- Vous devez choisir des valeurs distinctes pour chaque type de cellules (c'est-à-dire que vous pouvez utiliser d'autres symboles que Q, N lors de l'impression du tableau).
- Si vous retournez un tableau non-string, il doit s'agir d'une collection ordonnée des n 2 valeurs du tableau (par exemple, matrice, vecteur ou liste dans l'ordre principal ligne / colonne, ...).
Si vous imprimez le tableau, vous pouvez l'imprimer au carré ou en ligne. Par exemple, une carte de solution de taille 4 peut être imprimée comme suit (espaces non requis; symboles à votre discrétion):
Q - - - - - - - - - - - - - N -
Si vous le sentez, vous pouvez également générer:
♛ · · · · · · · · · · · · · ♞ ·
... mais cela suffit:
Q-------------N-
Peu importe si vous parcourez les cellules dans un ordre de ligne ou de colonne, car il existe des solutions symétriques. Par exemple, les solutions pour n = 4 sont:
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
Vous pouvez également regarder les solutions pour n = 5 sous forme de matrices ; les planches contient #
, q
et des n
symboles qui sont des cellules vides de différents types (voir ma réponse ci - dessous). Je compte 2836 cartes pour n = 6 , comme dans la réponse de Sleafar (j'ai introduit un bug lors de la réduction du nombre d'octets, mais il est maintenant corrigé).
Un grand merci à Sleafar pour avoir trouvé non pas un mais deux bugs dans mon code.
But
Le code le plus court en octets gagne.
Nous mesurons la taille du premier programme, celui qui accepte n .
1 . Queens and Knights , par Roger KW Hui (attention! Contient une solution)
-------------------------N--------Q-
n'est pas valide car plus de morceaux peuvent être ajoutés :) Q--------N---------------N--------Q-
.