(Trotz mehr als 60 Fragen mit dem Tag Schach haben wir keine einfache Herausforderung für N-Damen.)
Im Schach wird das N-Queens-Puzzle folgendermaßen beschrieben: Ordnen Sie die Königinnen bei gegebenem n x n
Schachbrett und n
Königinnen so auf dem Schachbrett an, dass sich keine zwei Königinnen gegenseitig bedrohen. Unten finden Sie eine Beispiellösung für n = 8
, von Wikipedia ausgeliehen.
Oder beim ASCII-Rendering:
xxxQxxxx
xxxxxxQx
xxQxxxxx
xxxxxxxQ
xQxxxxxx
xxxxQxxx
Qxxxxxxx
xxxxxQxx
Die Herausforderung hierbei wird darin bestehen, n
eine ASCII-Darstellung einer Lösung für das n
-Queens-Rätsel einzugeben und auszugeben . Da es mehr als eine mögliche Lösung gibt (z. B. mindestens eine Rotation oder Reflexion), muss Ihr Code nur eine gültige Lösung ausgeben.
Eingang
Eine einzelne positive ganze Zahl n
mit n >= 4
in jedem geeigneten Format . (n = 2 und n = 3 haben keine Lösungen, und n = 1 ist trivial, so dass diese ausgeschlossen sind)
Ausgabe
Die resultierende ASCII-Darstellung einer Lösung des oben beschriebenen N-Königinnen-Puzzles. Sie können zwei unterschiedliche ASCII-Werte auswählen, um Leerzeichen und Königinnen darzustellen. Dies kann wiederum in jedem geeigneten Format (einzelne Zeichenfolge, eine Liste von Zeichenfolgen, ein Zeichenfeld usw.) ausgegeben werden.
Regeln
- Führende oder nachfolgende Zeilenumbrüche oder Leerzeichen sind ebenso optional wie Leerzeichen zwischen Zeichen, sofern die Zeichen selbst korrekt ausgerichtet sind.
- Sie können entweder einen Algorithmus verwenden, um die möglichen Positionen zu berechnen, oder den expliziten "Treppenstufen" -Lösungsstil verwenden, je nachdem, welcher für Ihren Code Golfspieler ist.
- Es ist entweder ein vollständiges Programm oder eine Funktion zulässig. Bei einer Funktion können Sie die Ausgabe zurückgeben, anstatt sie zu drucken.
- Fügen Sie nach Möglichkeit einen Link zu einer Online-Testumgebung hinzu, damit andere Benutzer Ihren Code ausprobieren können!
- Standardlücken sind verboten.
- Dies ist Codegolf, daher gelten alle üblichen Golfregeln, und der kürzeste Code (in Byte) gewinnt.
Beispiele
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
Antworten:
MATL ,
333227 BytesProbieren Sie es online!
Semi-Brute-Force, nicht deterministischer Ansatz:
Die erhaltene Lösung ist zufällig. Wenn Sie den Code erneut ausführen, erhalten Sie möglicherweise eine andere gültige Konfiguration. Die Laufzeit ist ebenfalls zufällig, aber der längste Testfall (
n = 10
) wird in TIO die meiste Zeit in etwa 30 Sekunden beendet.quelle
C 114 Bytes
Druckt direkt eine Lösung in O (1) Zeit.
quelle
n/2
erstellen?n-=o=n%2;for(y=n+o;y--;)
stattdessen voro=n%2;n-=o;for(y=0;y<n+o;++y)
Mathematica, 103
108110117Bytes-5 Bytes für
DuplicateFreeQ
->E!=##&@@@
-7 Bytes für
ReplacePart[Array[],]
->SparseArray[]
Rückgabe eines 2D-Arrays. Die Berechnung dauert 2,76 s und die Berechnung
f[6]
135 sf[7]
. (In der aktuellen Version-
wird0
undQ
bis1
.Der Algorithmus ähnelt der MATL-Antwort, aber hier ist der Code völlig brachial.
quelle
C - 222 Bytes
Der Code ist nicht von mir, sondern vom IOCCC . Ich hoffe, ich verstoße nicht gegen Regeln. Außerdem werden hier alle Lösungen für N zwischen 4 und 99 angezeigt. Ich werde später versuchen, einen TIO-Link zu erhalten.
quelle
Jelly ,
2421 BytesProbieren Sie es online!
Angenommen, jede Dame wird in separaten Zeilen platziert, müssen wir nur die Spaltenindizes finden, in denen jede Dame platziert wird, um Konflikte zu vermeiden, die durch Generieren einer zufälligen Permutation
[1, 2, ..., n]
und Testen derselben ermittelt werden.Erläuterung
quelle
Œc€
anstelle vonœc€2
für -1 verwenden?Python 3,
204189 BytesBrute-Force-Suche durch alle Permutationen. Ich könnte das * entfernen und das Listenverständnis ausdrucken, aber sie sehen schrecklich aus.
Ausgabe:
Leicht ungolfed:
quelle
Befunge, 122 Bytes
Probieren Sie es online!
Dies basiert mehr oder weniger auf der C-Lösung von orlp .
Erläuterung
Lesen Sie die Anzahl der Damen, q , von stdin und berechnen Sie zwei Variablen für die spätere Verwendung:
n = q - q%2
undhn = n/2
Starten Sie die Hauptschleife, indem Sie r , die Zeilennummer, von q bis 0 durchlaufen und am Anfang der Schleife dekrementieren, also das erste r ist q minus 1.
Berechnen Sie den Versatz der Dame in jeder Zeile mit der folgenden Formel:
Geben Sie versetzte Leerzeichen aus, um die Position der Dame für die aktuelle Zeile einzurücken, plus ein zusätzliches Leerzeichen, nur weil dies die Ausgabeschleife vereinfacht.
Geben Sie das
Q
für die Dame aus, gefolgt von einer neuen Zeile, um zur nächsten Zeile zu gelangen.Testen Sie, ob r Null ist. In diesem Fall haben wir das Ende des Boards erreicht und können es verlassen. Andernfalls wiederholen wir die Hauptschleife erneut.
quelle
Haskell , 145 Bytes
Der offensichtliche Brute-Force-Ansatz:
Probieren Sie es online!
quelle
Netzhaut , 136 Bytes
Probieren Sie es online! Port of @ orlps ausgezeichnete C-Antwort. Erläuterung:
Mit Leerzeichen in Unary konvertieren (nach dem steht ein Leerzeichen
*
).Erstellen Sie
N
Zeilen mitN
Leerzeichen, a;
, dann0..N-1
Leerzeichen und dann aQ
. Die verbleibenden Stufen gelten für alle Zeilen.Ganzzahlige Division
N
durch 2. (Wickeln Sie das Ergebnis auch ein:;
, um das Verankern von Mustern zu vereinfachen.)Wenn der Schleifenindex gleich ist
N/2*2
, lassen Sie einfach so viele Leerzeichen.Wenn
N/2
es ein Vielfaches von 3 ist, dann nimm den doppelten Schleifenindex plus eins, ModuloN/2*2+1
.Ansonsten verdoppeln Sie den Loop-Index plus
(N/2-1)
plus 3 in der unteren Hälfte des Boards, ModuloN/2*2
.Führen Sie die Modulo-Operation tatsächlich durch.
quelle
Kohle , 44 Bytes
Probieren Sie es online! Link ist eine ausführliche Version des Codes. Ein weiterer Port von @ orlps exzellenter C-Antwort.
quelle
APL (Dyalog Unicode) , 18 Byte SBCS
Vollständige Programmabfrage
n
von stdin. Gibt eine durch Leerzeichen getrennte Lösung·
für leere Felder und⍟
für Damen aus.Probieren Sie es online!
⎕CY'dfns'
C op y die "DFNS" library⎕
Holen Sie sich die Eingabe von stdinqueens
Finde alle wirklich einzigartigen Queens-Lösungen (keine Reflexionen oder Rotationen)⊃
Wähle die erste Lösungquelle
J , 49 Bytes
Probieren Sie es online!
Brute Force durch Testen aller Permutationen der Länge n .
quelle