Es gibt eine Variante des bekannten N-Königinnen-Problems, die Königinnen und Ritter betrifft und als "wesentlich schwieriger" bezeichnet wird 1 . Die Problemstellung lautet wie folgt:
Sie müssen eine gleiche Anzahl von Rittern ♞ und Königinnen ♛ auf ein Schachbrett legen, sodass keine Figur eine andere angreift. Was ist die maximale Anzahl von Stücken, die Sie so auf das Brett legen können, und wie viele verschiedene Arten können Sie es tun?
Bei dieser Code-Golf- Herausforderung erhalten Sie eine Eingabe n zwischen 3 und 32 (so, wie es für Ihre Sprache am besten geeignet ist). Für ein gegebenes n kann es keine oder mehrere Lösungen für das obige Problem geben. Falls es keine Lösung gibt, müssen Sie nichts ausgeben / zurückgeben ( null , leere Zeichenfolge , falsch , ...). Andernfalls müssen Sie zwei Ergebnisse angeben:
- Eine Lösungskarte (siehe unten) für Größe n, bei der es nicht möglich ist, eine Dame oder eine Ritterschachfigur hinzuzufügen, ohne dass eine Figur angegriffen wird. Es muss eine gleiche Anzahl von Königinnen und Rittern geben .
- Die Quelle eines auszuführenden Programms, das keine Eingabe akzeptiert und (i) eine andere Lösung (oder nichts ) für die gleiche Größe n im gleichen Format sowie (ii) ein anderes Programm für die nächste Lösung (und so weiter ) liefert ...).
Beachten Sie, dass:
- Die Programmsequenz darf niemals dieselbe Karte zweimal zurückgeben, muss alle möglichen Lösungen für das Problem der Größe n abdecken und muss schließlich enden (keine Ausgabe produzieren).
- Sie können entweder zwei Werte zurückgeben, einen zurückgeben und den anderen ausdrucken oder die beiden Rückgabewerte ausdrucken.
- Allerdings , wenn Sie sowohl drucken Sie das Brett, und das nächste Programm, muss der Vorstand nicht als Teil des nächsten Programms in Betracht gezogen werden (Ich würde empfehlen , das Brett in Kommentar Drucke oder verwenden sowohl die Standardausgabe und Fehlerströme).
- Der Rückgabewert des Programms muss eine Zeichenfolge sein, kein Abschluss.
Kartenformat
- Eine Tafel ist ein Quadrat der Größe n .
- Eine Brettzelle kann leer sein, eine Königin oder ein Ritter.
- Sie müssen unterschiedliche Werte für jede Art von Zellen auswählen (dh Sie können beim Drucken der Karte andere Symbole als Q, N verwenden).
- Wenn Sie ein Board ohne Zeichenfolge zurückgeben, muss es eine geordnete Sammlung der n 2 -Werte des Boards sein (z. B. Matrix, Vektor oder Liste in Zeilen- / Spalten-Hauptreihenfolge, ...).
Wenn Sie die Tafel drucken, können Sie sie entweder im Quadrat oder als Linie drucken. Zum Beispiel kann eine Lösungskarte der Größe 4 wie folgt gedruckt werden (Leerzeichen nicht erforderlich; Symbole nach Ihrem Ermessen):
Q - - - - - - - - - - - - - N -
Wenn Sie dies wünschen, können Sie auch Folgendes ausgeben:
♛ · · · · · · · · · · · · · ♞ ·
... aber das reicht aus:
Q-------------N-
Es spielt keine Rolle, ob Sie Zellen in einer Zeilen- oder Spaltenfolge durchlaufen, da es symmetrische Lösungen gibt. Zum Beispiel sind die Lösungen für n = 4:
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
Sie können die Lösungen für n = 5 auch als Matrizen betrachten ; die Platten enthalten #
, q
und n
Symbole, die leeren Zellen verschiedener Arten sind (siehe meine Antwort unten). Ich zähle 2836 Boards für n = 6 , wie in Sleafars Antwort (ich habe einen Fehler beim Reduzieren der Byteanzahl eingeführt, aber er ist jetzt behoben).
Vielen Dank an Sleafar, dass sie nicht nur einen, sondern zwei Fehler in meinem Code gefunden haben.
Ergebnis
Kürzester Code in Bytes gewinnen.
Wir messen die Größe des ersten Programms, das n akzeptiert .
1 . Königinnen und Ritter , von Roger KW Hui (Vorsicht! Enthält eine Lösung)
-------------------------N--------Q-
ist ungültig, weil mehr Teile hinzugefügt werden können :) Q--------N---------------N--------Q-
.