Gra
Ostatnio wiele czasu spędzam na wciągającej grze na mój telefon o nazwie Logic Dots, która zainspirowała mnie do napisania tego wyzwania. Łatwiej jest wyjaśnić zasady, jeśli pokażę ci ekran gry, więc oto zrzut ekranu nierozwiązanej i rozwiązanej układanki:
Tutaj są trzy główne rzeczy do zauważenia.
- Plansza (siatka kwadratów 4x4 na środku)
- Wymagane kształty (połączone kropki na drugim pasku od góry, pod partyturą i menu itp.), Które są wszystkimi liniami lub
a
przez 1 prostokąty - Liczby nad wierszami i kolumnami, które wskazują, ile kropek musi znajdować się w kolumnie, dla rozwiązania
Celem gry jest dopasowanie wymaganych kształtów do siatki. Możesz obracać kształty, ale nie mogą one wchodzić po przekątnej.
W rozwiązaniu zauważ, że wszystkie kształty są tworzone dokładnie raz (ponieważ są tylko w wymaganych kształtach raz), aw tym przypadku wszystkie są poziome, ale mogą być również pionowe. Różowe wypełnione kwadraty oznaczają kwadraty nieużywane.
Oto większa i nieco bardziej skomplikowana siatka:
Zauważ, że w nierozwiązanej układance jest już wypełnionych kilka kwadratów. Szare kwadraty oznaczają zablokowane kwadraty, na których NIE MOŻESZ umieścić kropki. Kropki z ogonami informują, że kropka znajduje się w tym miejscu i łączy się z co najmniej jedną kropką w kierunku ogona, ale nie w żadnym innym kierunku (w tym w przeciwnym kierunku).
Notacja
W dalszej części tego posta będę odwoływał się do tablicy za pomocą następujących symboli:
- <,>, ^, v - Oznacza wcześniej umieszczoną kropkę z ogonem rozciągającym się w kierunku punktu
- * - Oznacza kropkę. Jeśli podano go na nierozwiązanej siatce (dane wejściowe), jest to indywidualny kształt. Jeśli na wyjściu, to jest podłączony do kropek wokół niego.
- # - Oznacza zablokowany kwadrat siatki (gdzie nie można umieścić kropki)
- -, | (łącznik i kreska) - oznacza kropkę z prawym i lewym ogonem oraz kropkę z odpowiednio górnym i dolnym ogonem
- ** (znak spacji) - ** Oznacza puste miejsce
Korzystając z tych symboli, ten drugi przykładowy przypadek (nierozwiązany) można przedstawić następująco:
<
#
^ #
Rozwiązanie można przedstawić jako:
*< * *
*
*
* *
* *#*
^ # *
Pamiętaj, że żadne dwa kształty nie mogą dotykać poziomo, pionowo ani po przekątnej , więc następujący przypadek jest nieprawidłowy:
***
**
**
Wyzwanie
Twoim wyzwaniem jest rozwiązanie zagadki logicznej z kropkami, od 4x4 do 9x9 włącznie. Otrzymasz cztery linie wejściowe, a następnie planszę. Linie będą następujące:
- 1. linia, Kształty - kształty do znalezienia, każdy podany w formie
sizexquantity
(np.3x2
Dla dwóch kształtów o długości trzy) i oddzielone spacją. Przykładowa linia:3x1 2x1 1x1
- Drugi wiersz, kolumny - Oddzielona spacjami lista wymaganej liczby kropek dla każdej kolumny. Przykładowa linia:
1 1 2 2
- Trzecia linia, wiersze - Oddzielona spacjami lista wymaganej liczby kropek dla każdego wiersza. Przykładowa linia:
3 0 3 0
- 4. linia, rozmiar tablicy - jedna liczba całkowita, rozmiar tablicy,
B
Tablica jest następnie podawana i jest B
liniami wejściowymi reprezentującymi tablicę przy użyciu wspomnianej wyżej notacji. Na przykład pełne dane wejściowe dla drugiego przykładu są następujące:
4x1 3x1 2x2 1x2
1 4 0 3 0 5
4 1 1 2 3 2
6
<
#
^ #
Twój program wyświetli następnie rozwiązaną tablicę w tym samym zapisie. Dopasowane dane wyjściowe dla powyższego wejścia są następujące:
** * *
*
*
* *
* *#*
* # *
Pamiętaj, że plansza może mieć wiele rozwiązań. W takim przypadku po prostu wypisz jedno prawidłowe rozwiązanie. Ponadto twój program musi wypisać prawidłowe rozwiązanie w ciągu 10 sekund na rozsądnym komputerze stacjonarnym dla skomplikowanej siatki 10x10.
To jest kod golfowy, więc wygrywa najmniej bajtów.
Przypadki testowe
Wejście 1
3x2 1x4
2 2 3 1 2
4 0 3 0 3
5
#
#
*
Wyjście 1
*** *
***#
#
* * *
Wejście 2
3x1 1x6
2 0 4 0 3
3 1 2 1 2
5
*
#
Wyjście 2
* * *
*
* *
* #
* *
Wejście 3
5x1 4x1 2x1 1x2
1 2 3 3 2 2
0 5 0 4 0 4
6
#
-
#
<
Wyjście 3
#
*****
****
#
* ** *
t no two shapes can touch horizontally, vertically or diagonally
(powinno być na początku, nie stracić prawie pod koniec, ale i tak ...)