(Malgré plus de 60 questions sur les échecs , nous n'avons pas de simple défi n-queens.)
Aux échecs, le puzzle N-Queens est décrit comme suit: étant donné un n x n
échiquier et des n
reines, placez les reines sur l'échiquier de sorte qu'il n'y ait pas deux reines qui se menacent. Voici un exemple de solution pour n = 8
, emprunté à Wikipedia.
Ou, en rendu ASCII:
xxxQxxxx
xxxxxxQx
xxQxxxxx
xxxxxxxQ
xQxxxxxx
xxxxQxxx
Qxxxxxxx
xxxxxQxx
Le défi ici sera de prendre en entrée n
et en sortie une représentation ASCII d'une solution au n
puzzle -Queens. Puisqu'il y a plus d'une solution possible (par exemple, au moins, une rotation ou une réflexion), votre code n'a besoin que de générer une solution valide.
Contribution
Un seul entier positif n
avecn >= 4
dans un format pratique . (n = 2 et n = 3 n'ont pas de solutions, et n = 1 est trivial, donc celles-ci sont exclues)
Production
La représentation ASCII résultante d'une solution au casse-tête des N-reines, comme indiqué ci-dessus. Vous pouvez choisir deux valeurs ASCII distinctes pour représenter les espaces vides et les reines. Encore une fois, cela peut être sorti dans n'importe quel format approprié (chaîne unique, liste de chaînes, tableau de caractères, etc.).
Règles
- Les sauts de ligne ou les espaces de début ou de fin sont tous facultatifs, ainsi que les espaces entre les caractères, tant que les caractères eux-mêmes s'alignent correctement.
- Vous pouvez soit utiliser un algorithme pour calculer les positions possibles, soit utiliser le style de solution explicite "en escalier", selon le golfeur de votre code.
- Un programme complet ou une fonction sont acceptables. S'il s'agit d'une fonction, vous pouvez renvoyer la sortie plutôt que de l'imprimer.
- Si possible, veuillez inclure un lien vers un environnement de test en ligne afin que d'autres personnes puissent essayer votre code!
- Les failles standard sont interdites.
- Il s'agit de code-golf, donc toutes les règles de golf habituelles s'appliquent et le code le plus court (en octets) l'emporte.
Exemples
n=4
xQxx
xxxQ
Qxxx
xxQx
n=7
xxQxxxx
xxxxxxQ
xQxxxxx
xxxQxxx
xxxxxQx
Qxxxxxx
xxxxQxx
n=10
xxxxQxxxxx
xxxxxxxxxQ
xxxQxxxxxx
xxxxxxxxQx
xxQxxxxxxx
xxxxxxxQxx
xQxxxxxxxx
xxxxxxQxxx
Qxxxxxxxxx
xxxxxQxxxx
Réponses:
MATL ,
333227 octetsEssayez-le en ligne!
Force semi-brute, approche non déterministe:
La solution obtenue est aléatoire. Si vous exécutez à nouveau le code, vous pouvez obtenir une configuration valide différente. Le temps d'exécution est également aléatoire, mais le cas de test le plus long (
n = 10
) se termine en environ 30 secondes dans TIO la plupart du temps.la source
C, 114 octets
Imprime directement une solution en temps O (1).
la source
n/2
?n-=o=n%2;for(y=n+o;y--;)
place deo=n%2;n-=o;for(y=0;y<n+o;++y)
Mathematica, 103
108110117octets-5 octets pour
DuplicateFreeQ
->E!=##&@@@
-7 octets pour
ReplacePart[Array[],]
->SparseArray[]
Renvoie un tableau 2D. Il faut 2,76 secondes pour calculer
f[6]
et 135 secondes pourf[7]
. (Dans la version actuelle,-
devient0
etQ
à1
.L'algorithme est similaire à la réponse MATL mais ici le code est complètement brutal.
la source
C - 222 octets
Le code n'est pas le mien, mais celui de l' IOCCC . J'espère que je n'enfreins aucune règle. En outre, cela affiche toutes les solutions pour N entre 4 et 99. J'essaierai d'obtenir un lien TIO plus tard.
la source
Gelée ,
2421 octetsEssayez-le en ligne!
En supposant que chaque reine est placée sur des rangées distinctes, il nous suffit de trouver les indices de colonne où placer chaque reine pour éviter les conflits, qui peuvent être trouvés en générant une permutation aléatoire
[1, 2, ..., n]
et en la testant.Explication
la source
Œc€
au lieu deœc€2
pour -1?Python 3,
204189 octetsRecherche de force brute à travers toutes les permutations. Je pourrais supprimer le * et imprimer la liste des compréhensions, mais elles ont l'air horribles.
Production:
Légèrement non golfé:
la source
Befunge, 122 octets
Essayez-le en ligne!
Ceci est plus ou moins basé sur la solution C par orlp .
Explication
Lisez le nombre de reines, q , à partir de stdin et calculez deux variables pour une utilisation ultérieure:,
n = q - q%2
ethn = n/2
démarrez la boucle principale, en itérant r , le numéro de ligne, de q vers le bas à 0, décrémentant au début de la boucle, donc le premier r est q moins 1.
Calculez le décalage de la reine dans chaque rangée avec la formule suivante:
Générez des caractères d'espace de décalage pour indenter la position de la reine pour la ligne actuelle, plus un espace supplémentaire simplement parce que cela facilite la boucle de sortie.
Sortez le
Q
pour la reine, suivi d'un retour à la ligne pour passer à la ligne suivante.Testez si r est zéro, auquel cas nous avons atteint la fin de la carte et pouvons quitter, sinon nous répétons la boucle principale à nouveau.
la source
Haskell , 145 octets
L'approche évidente de la force brute:
Essayez-le en ligne!
la source
Rétine , 136 octets
Essayez-le en ligne! Port de l'excellente réponse C de @ orlp. Explication:
Convertir en unaire, en utilisant des espaces (il y a un espace après le
*
).Créez des
N
lignes avec desN
espaces, a;
, puis des0..N-1
espaces, puis aQ
. Les étapes restantes s'appliquent à toutes les lignes.Entier diviser
N
par 2. (Envelopper également le résultat:;
pour faciliter l'ancrage des motifs.)Si l'index de boucle est égal
N/2*2
, laissez simplement autant d'espaces.Si
N/2
est un multiple de 3, alors prenez le double de l'index de boucle plus un, moduloN/2*2+1
.Sinon, prenez le double de l'index de boucle
(N/2-1)
plus un 3 supplémentaire dans la moitié inférieure de la planche, moduloN/2*2
.Effectuez en fait l'opération modulo.
la source
Fusain , 44 octets
Essayez-le en ligne! Le lien est vers la version détaillée du code. Un autre port de l'excellente réponse C de @ orlp.
la source
APL (Dyalog Unicode) , 18 octets SBCS
Programme complet
n
demandant de stdin. Imprime la solution séparée par des espaces vers la sortie standard en utilisant·
pour les carrés vides et⍟
pour les reines.Essayez-le en ligne!
⎕CY'dfns'
C op y la bibliothèque "DFNS"⎕
obtenir des informations de stdinqueens
trouver toutes les solutions vraiment uniques de Queens (pas de reflets ni de rotations)⊃
choisissez la première solutionla source
J , 49 octets
Essayez-le en ligne!
Force brute en testant toutes les permutations de longueur n .
la source