Istnieje wariant dobrze znanego problemu N-królowych, który dotyczy królowych i rycerzy i jest uważany za „znacznie trudniejszy” 1 . Opis problemu jest następujący:
Musisz umieścić taką samą liczbę rycerzy ♞ i królowych ♛ na szachownicy, aby żaden pionek nie atakował żadnego innego pionka. Jaką maksymalną liczbę elementów możesz umieścić na planszy i ile różnych sposobów możesz to zrobić?
W tym wyzwaniu golfowym otrzymasz n od 3 do 32 (w sposób najbardziej odpowiedni dla twojego języka). Dla danego n może istnieć zero lub więcej rozwiązań powyższego problemu. Jeśli nie ma rozwiązania, musisz nic nie wyświetlać / zwracać ( zero , pusty ciąg , fałsz , ...). W przeciwnym razie musisz podać dwa wyniki:
- Plansza rozwiązania (patrz poniżej) dla rozmiaru n, gdzie nie jest możliwe dodanie szachowej królowej lub rycerza bez atakowania żadnego pionka. Musi być równa liczba królowych i rycerzy .
- Źródło programu do uruchomienia, który nie przyjmuje danych wejściowych i daje (i) inne rozwiązanie (lub nic ) dla tego samego rozmiaru n , w tym samym formacie, a także (ii) inny program dla następnego rozwiązania (i tak dalej) ...)
Uwaga:
- Sekwencja programów nigdy nie może zwrócić tej samej płyty dwukrotnie, musi obejmować wszystkie możliwe rozwiązania problemu rozmiaru n i ostatecznie musi się zakończyć (nie generując żadnych danych wyjściowych).
- Możesz zwrócić dwie wartości, zwrócić jedną i wydrukować drugą lub wydrukować dwie zwracane wartości.
- jednak , jeśli drukować zarówno płytę i następny program, zarząd nie może być uważany za część następnego programu (polecam drukowania płytę w komentarzu, lub użyć zarówno standardowe strumienie wyjścia i błędów).
- Program jako wartość zwrotna musi być łańcuchem, a nie zamknięciem.
Format planszy
- Tablica ma kwadratowy rozmiar n .
- Komórka planszowa może być pusta, królowa lub rycerz.
- Musisz wybrać odrębne wartości dla każdego rodzaju komórek (tzn. Możesz użyć innych symboli niż Q, N podczas drukowania płytki).
- Jeśli zwrócisz tablicę niesznurkową, musi to być uporządkowany zbiór n 2 wartości planszy (np. Macierz, wektor lub lista w kolejności rzędów / kolumn, ...).
Jeśli wydrukujesz tablicę, możesz wydrukować ją w kwadracie lub w linii. Na przykład tablicę rozwiązań wielkości 4 można wydrukować w następujący sposób (spacje nie są wymagane; symbole według własnego uznania):
Q - - - - - - - - - - - - - N -
Jeśli tak uważasz, możesz także wygenerować:
♛ · · · · · · · · · · · · · ♞ ·
... ale to wystarczy:
Q-------------N-
Nie ma znaczenia, czy iterujesz przez komórki w kolejności rzędów lub kolumn, ponieważ istnieją rozwiązania symetryczne. Na przykład rozwiązania dla n = 4 to:
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
Możesz także spojrzeć na rozwiązania dla n = 5 jako macierzy ; deski zawiera #
, q
oraz n
symbole, które są puste komórki różnego rodzaju (patrz moją odpowiedź poniżej). Liczę 2836 plansz dla n = 6 , jak w odpowiedzi Sleafara (wprowadziłem błąd przy zmniejszaniu liczby bajtów, ale teraz jest naprawiony).
Wielkie podziękowania dla Sleafar za znalezienie nie jednego, ale dwóch błędów w moim kodzie.
Wynik
Najkrótszy kod w bajtach wygrywa.
Mierzymy rozmiar pierwszego programu, który akceptuje n .
1 . Queens and Knights , autor: Roger KW Hui (uwaga! Zawiera rozwiązanie)
-------------------------N--------Q-
jest nieprawidłowe, ponieważ można dodać więcej elementów :) Q--------N---------------N--------Q-
.