Ostatnio gram w grę o nazwie Alcazar. Jest to planszowa gra logiczna, w której Twoim celem jest wejście od jednych drzwi, przejście przez wszystkie kwadraty i wyjście przez inne drzwi. Jedyne zasady to:
- Wejdź raz, zostaw raz;
- Przejdź przez wszystkie kwadraty;
- Nie przechodź przez kwadrat więcej niż raz
Poniższy obrazek pokazuje przykład planszy Alcazar i, po prawej stronie, rozwiązaną łamigłówkę (oczywiście jest to łatwa):
Więcej zagadek można znaleźć na stronie http://www.theincrediblecompany.com/try-alcazar i pobrać grę na PlayStore (PS: To nie jest reklama).
Mój problem polega na tym, że prawie skończyłem grę, z wyjątkiem jednego poziomu. Po prostu nie mogę znaleźć rozwiązania tego problemu. Wyzwaniem, które proponuję, jest: stworzyć algorytm, który rozwiąże każdy normalny poziom 1 do rozwiązania 2 Alcazar.
Oczywiście nie proszę nikogo, aby zbudował interpreter obrazu, aby odczytał obraz i rozwiązał zagadkę (czy jestem?). Więc przerobiłem powyższą łamigłówkę, używając postaci do rysowania w polu. Układanka i jej rozwiązanie wyglądałyby tak:
╔═══════╗ ╔═══════╗
║▒ ▒ ▒ ▒║ ║┌─┐ ┌─┐║
║ ║ ║ ║│ │ │║│║
╣▒ ▒ ▒║▒╠ ╣│ └─┘║└╠
║ ══╦═╩═╣ ║│══╦═╩═╣
║▒ ▒║▒ ▒║ ║└─┐║┌─┐║
║ ║ ║ ==> ║ │║│ │║
╣▒ ▒║▒ ▒║ ╣┐ │║│ │║
║ ║ ║ ║ ║│║│║│ │║
╣▒║▒ ▒ ▒║ ╣│║└─┘ │║
║ ║ ║ ║│║ │║
║▒ ▒ ▒ ▒║ ║└─────┘║
╚═══════╝ ╚═══════╝
Na planszy powyżej ▒
znajdują się komórki do wypełnienia.
Można zaobserwować, że pomiędzy komórkami jest pionowy i poziomy szpara. Jest tak, ponieważ musiałem wstawić spację między komórkami, aby dodać ściany. Oznacza to, że jedynymi ważnymi komórkami są komórki powyżej, poniżej, po lewej i po prawej stronie każdej komórki. Przekątne można usunąć bez utraty informacji. Na przykład na poniższej planszy oba przedstawiają tę samą łamigłówkę:
╔════╩╗ ═ ═ ╩
║▒ ▒ ▒║ ║▒ ▒ ▒║
║ ═══ ║ ═
║▒ ▒ ▒║ == ║▒ ▒ ▒║
║ ║
║▒ ▒ ▒║ ║▒ ▒ ▒║
╚╦════╝ ╦═ ══
Dotyczy to również rozwiązań. Oznacza to, że nie jest wymagane łączenie komórek:
╔════╩╗ ╔════╩╗ ╔════╩╗
║▒ ▒ ▒║ ║┌───┘║ ║┌ ─ ┘║
║ ═══ ║ ║│═══ ║ ║ ═══ ║
║▒ ▒ ▒║ == ║└───┐║ => ║└ ─ ┐║
║ ║ ║ │║ ║ ║
║▒ ▒ ▒║ ║┌───┘║ ║┌ ─ ┘║
╚╦════╝ ╚╦════╝ ╚╦════╝
W powyższym przykładzie oba rozwiązania oznaczają to samo.
Tak, przypadki testowe. Tutaj są:
Łamigłówka 1
╔════╩╗ ╔════╩╗
║▒ ▒ ▒║ ║┌ ─ ┘║
║ ═══ ║ ║ ═══ ║
║▒ ▒ ▒║ => ║└ ─ ┐║
║ ║ ║ ║
║▒ ▒ ▒║ ║┌ ─ ┘║
╚╦════╝ ╚╦════╝
Puzzle 2
╔═════╗ ╔═════╗
║▒ ▒ ▒║ ║┌ ─ ┐║
║ ║ ║ ║ ║ ║
╣▒ ▒║▒║ ╣└ ┐║│║
║ ║ ║ ║ => ║ ║ ║ ║
╣▒║▒ ▒╠ ╣┐║│ │╠
║ ║ ║ ║ ║ ║
║▒ ▒ ▒║ ║└ ┘ │║
╚════╦╝ ╚════╦╝
Puzzle 3
╔════╩══╗ ╔════╩══╗
║▒ ▒ ▒ ▒║ ║┌ ┐ └ ┐║
║ ║ ║ ║ ║ ║ ║ ║
╣▒║▒ ▒║▒╠ ╣┘║└ ┐║│╠
║ ╚══ ║ ║ ║ ╚══ ║ ║
║▒ ▒ ▒ ▒╠ => ║┌ ─ ┘ │╠
║ ═══ ║ ║ ═══ ║
║▒ ▒ ▒ ▒║ ║│ ┌ ┐ │║
║ ║ ║ ║ ║ ║
║▒ ▒║▒ ▒║ ║└ ┘║└ ┘║
╚═══╩═══╝ ╚═══╩═══╝
puzzle 4
╔═══════╗ ╔═══════╗
║▒ ▒ ▒ ▒║ ║┌ ┐ ┌ ┐║
║ ║ ║ ║ ║ ║
╣▒ ▒ ▒║▒╠ ╣│ └ ┘║└╠
║ ══╦═╩═╣ ║ ══╦═╩═╣
║▒ ▒║▒ ▒║ ║└ ┐║┌ ┐║
║ ║ ║ => ║ ║ ║
╣▒ ▒║▒ ▒║ ╣┐ │║│ │║
║ ║ ║ ║ ║ ║ ║ ║
╣▒║▒ ▒ ▒║ ╣│║└ ┘ │║
║ ║ ║ ║ ║ ║
║▒ ▒ ▒ ▒║ ║└ ─ ─ ┘║
╚═══════╝ ╚═══════╝
Puzzle 5
╔══╩══════╗ ╔══╩══════╗
║▒ ▒ ▒ ▒ ▒║ ║┌ ─ ┐ ┌ ┐║
║ ║ ║ ║ ║ ║
║▒ ▒║▒ ▒ ▒╠ ║└ ┐║└ ┘ │╠
║ ╠════ ║ ║ ╠════ ║
║▒ ▒║▒ ▒ ▒║ => ║┌ ┘║┌ ─ ┘║
║ ║ ║ ║ ║ ║
║▒ ▒║▒ ▒ ▒╠ ║└ ┐║└ ─ ─╠
║ ╠═════╣ ║ ╠═════╣
║▒ ▒║▒ ▒ ▒║ ║┌ ┘║┌ ─ ┐║
║ ║ ║ ║ ║ ║
║▒ ▒ ▒ ▒ ▒║ ║└ ─ ┘ ┌ ┘║
╚══╦═══╦══╝ ╚══╦═══╦══╝
Łamigłówka 6
╔═══════════╗ ╔═══════════╗
║▒ ▒ ▒ ▒ ▒ ▒║ ║┌ ┐ ┌ ┐ ┌ ┐║
║ ║ ║ ║
║▒ ▒ ▒ ▒ ▒ ▒║ ║│ └ ┘ └ ┘ │║
║ ═══ ║ ║ ═══ ║
║▒ ▒ ▒ ▒ ▒ ▒║ ║└ ┐ ┌ ─ ─ ┘║
║ ═══ ║ ║ ═══ ║
╣▒ ▒ ▒ ▒ ▒ ▒╠ => ╣┐ │ │ ┌ ┐ ┌╠
║ ║ ║ ║
║▒ ▒ ▒ ▒ ▒ ▒║ ║│ │ │ │ │ │║
║ ║ ║ ║ ║ ║ ║ ║
║▒ ▒║▒ ▒║▒ ▒║ ║│ │║│ │║│ │║
║ ║ ║ ║ ║ ║ ║ ║
║▒ ▒ ▒ ▒ ▒ ▒║ ║└ ┘ └ ┘ └ ┘║
╚═══════════╝ ╚═══════════╝
Puzzle 7
╔════╩════════╦╩╗ ╔════╩════════╦╩╗
║▒ ▒ ▒ ▒ ▒ ▒ ▒║▒║ ║┌ ─ ─ ─ ─ ─ ┐║│║
║ ║ ║ ║ ║ ║ ║ ║ ║ ║
║▒║▒ ▒ ▒ ▒║▒ ▒ ▒║ ║│║┌ ─ ─ ┐║┌ ┘ │║
║ ║ ║ ═══ ║ ║ ║ ║ ║ ═══ ║ ║
║▒ ▒║▒ ▒ ▒ ▒ ▒ ▒╠ ║│ │║┌ ─ ┘ └ ┐ │╠
║ ║ ║ ║ ║ ║
║▒ ▒ ▒ ▒ ▒ ▒ ▒ ▒║ ║│ │ └ ┐ ┌ ┐ └ ┘║
║ ║ ║ ══╣ ║ ║ ║ ══╣
║▒ ▒ ▒║▒║▒ ▒ ▒ ▒║ ║│ └ ┐║│║│ └ ─ ┐║
║ ║ ║ ║ ║ ║ ║ ║
║▒ ▒ ▒ ▒ ▒ ▒ ▒ ▒║ ║│ ┌ ┘ │ └ ┐ ┌ ┘║
║ ║ ══╣ => ║ ║ ══╣
║▒ ▒ ▒ ▒ ▒ ▒║▒ ▒║ ║└ ┘ ┌ ┘ ┌ ┘║└ ┐║
╠══ ║ ╚══ ║ ╠══ ║ ╚══ ║
║▒ ▒ ▒ ▒ ▒║▒ ▒ ▒║ ║┌ ┐ └ ┐ │║┌ ─ ┘║
║ ║ ║ ║ ║ ║ ║ ║ ║ ║
║▒ ▒ ▒║▒║▒ ▒ ▒ ▒║ ║│ └ ┐║│║│ └ ─ ┐║
║ ║ ║ ║ ╔══ ║ ║ ║ ║ ║ ╔══ ║
║▒║▒ ▒ ▒ ▒║▒ ▒ ▒║ ║│║┌ ┘ │ │║┌ ┐ │║
║ ║ ║ ║ ║ ║ ║ ║ ║ ║
║▒ ▒ ▒ ▒║▒ ▒ ▒ ▒║ ║│ └ ─ ┘║└ ┘ │ │║
║ ╚══ ║ ║ ╚══ ║
║▒ ▒ ▒ ▒ ▒ ▒ ▒ ▒║ ║└ ─ ─ ─ ─ ─ ┘ │║
╚════╦═╦═╦═════╦╝ ╚════╦═╦═╦═════╦╝
Puzzle 8 (Przepraszam, naprawdę nie mam rozwiązania tego)
╔══╩╦══╩═══╩═╩═╩═══╩╗
║▒ ▒║▒ ▒ ▒ ▒ ▒ ▒ ▒ ▒║
║ ║ ║
╣▒ ▒║▒ ▒ ▒ ▒ ▒ ▒ ▒ ▒║
║ ╚══ ╔══ ╔═══╣
╣▒ ▒ ▒ ▒║▒ ▒ ▒ ▒║▒ ▒╠
║ ║ ╔══ ║ ║
╣▒ ▒ ▒ ▒ ▒ ▒║▒ ▒ ▒ ▒╠
║ ║ ║
║▒ ▒ ▒ ▒ ▒ ▒ ▒ ▒ ▒ ▒╠
║ ║ ║
╣▒ ▒ ▒ ▒ ▒ ▒║▒ ▒ ▒ ▒╠
║ ╔═══╗ ╚══ ║
╣▒ ▒║▒ ▒║▒ ▒ ▒ ▒ ▒ ▒║
║ ║ ║ ║
╣▒ ▒║▒ ▒║▒ ▒ ▒ ▒ ▒ ▒╠
║ ══╝ ║ ╔══ ║
║▒ ▒ ▒ ▒║▒ ▒ ▒ ▒║▒ ▒║
║ ══╗ ╚══ ╔══ ║ ║
╣▒ ▒ ▒║▒ ▒ ▒║▒ ▒ ▒ ▒╠
║ ║ ║ ║ ║
╣▒ ▒ ▒ ▒ ▒ ▒ ▒ ▒║▒ ▒║
║ ═══ ══╗ ║ ║
╣▒ ▒ ▒ ▒ ▒ ▒║▒ ▒ ▒ ▒╠
╠══ ║ ║ ╔══ ║
║▒ ▒║▒ ▒ ▒ ▒ ▒ ▒║▒ ▒╠
║ ╚══ ║ ║ ║ ║
╣▒ ▒ ▒ ▒║▒ ▒║▒ ▒ ▒ ▒╠
║ ║ ║ ║
║▒ ▒ ▒ ▒ ▒ ▒ ▒ ▒ ▒ ▒║
╚══╦═══╦═══╦═╦═╦═╦═╦╝
Wejście
Dane wejściowe kodu mogą mieć dowolną reprezentację, pod warunkiem przestrzegania następujących reguł:
Musi to być wejście graficzne. Nie można na przykład odczytać listy współrzędnych.
Poziome ściany, pionowe ściany i drzwi muszą być wyraźne i muszą być wykonane z widocznego znaku (bez pustych znaków).
▒
Można zastąpić spacjami. Po prostu użyłem innej postaci, aby je podświetlić.
Wydajność
Dane wyjściowe mogą mieć również dowolną reprezentację, pod warunkiem przestrzegania następujących reguł:
Musi to być wynik graficzny. Oznacza to, że ścieżkę można zobaczyć, patrząc na nią.
Zasada numer 1 zakłada, że znaki ścieżki są różne. Oznacza to, że będzie co najmniej 6 znaków ścieżki; poziomy, pionowy i narożniki.
Aby odpowiedź była poprawna, dane wyjściowe muszą być tej samej tablicy co dane wejściowe (oczywiście) z
▒
wypełnionymi wszystkimi komórkami (w mojej reprezentacji ). Wypełnianie luk między komórkami jest opcjonalne.
Punktacja
To jest golf golfowy , więc wygrywa najkrótszy kod w bajtach.
1 Istnieje kilka poziomów Alcazar, które mają opcjonalne komórki i tunele. Nie będą brane pod uwagę.
2 Niektóre plansze Alcazar są niemożliwe.
źródło
Odpowiedzi:
Python 3 ,
809728723714693688684663657641639627610571569 bajtówEdycja: Zapisano 55 bajtów dzięki @Felipe Nardi Batista
Nie uruchamia ostatniego przypadku testowego w ciągu 60 sekund na TIO, ale mimo to powinien działać poprawnie. Zwraca listę współrzędnych ścieżki. Około 400 bajtów jest używanych do pobierania list danych z I / O.
Wypróbuj online!
źródło
exec(...)
ciągu znajduje się pięć nowych wierszy, reprezentowanych jako\n
5 * 2 = 10 bajtów. Użycie potrójnego cudzysłowu dodałoby 4 bajty (...''...''...
), a następnie usunęło 5 bajtów, ponieważ można by użyć rzeczywistych znaków nowej linii. W sumie może to zaoszczędzić jeden bajt.APL (Dyalog Classic) , 319 bajtów
Wypróbuj online!
Wprowadzanie używa
=#F7LJ<>^v.
zamiast═║╔╗╚╝╣╠╩╦▒
, aby zmieścić się w klasycznym zestawie znaków .Wszystkie przypadki testowe z wyjątkiem ostatniego przechodzą w ciągu kilku sekund.
Ostatni test trwa 47 minut na moim komputerze i nie daje rozwiązania.
Gdy powstała ścieżka korzysta z drzwi w pobliżu rogu, może być renderowana niepoprawnie (to tak, jakby szlak rozwidla się i przechodzi przez dodatkowe wyobrażone drzwi), ale nadal jest dostrzegalny i jednoznaczny.
źródło
JavaScript (ES6), 274 bajty
Wprowadzany jako ciąg wielowierszowy, każdy wiersz zakończony znakiem nowej linii. Drzwi są oznaczone znakiem „2”
Wyjście w postaci ciągu wielowierszowego ze ścieżką oznaczoną znakiem „1”, bardzo łatwo rozpoznawalnym.
Jest to wyszukiwanie głębokie , polegające na wypróbowaniu wszystkich ścieżek i cofnięciu się, gdy utkniesz. To wcale nie jest wydajne, ale może rozwiązać zagadki 1 .. 6 w mniej niż 1 minutę.
Mniej golfa
Wewnątrz fragmentu testowego znajduje się rozwiązanie wykorzystujące DFS z pewnym ograniczeniem, które rozwiązuje zagadkę 7 w mniej niż minutę (na moim komputerze). Puzzle 8 nie ma rozwiązania. Ograniczenia:
Test
Uwaga, układanka 7 znacznie przekracza limit czasu na wykonanie javascript w dowolnej przeglądarce (przy użyciu solvera Short i Slow)
Pokaż fragment kodu
źródło