Easy As ABC, znany również jako „End View”, to układanka, w której otrzymujesz pustą siatkę z literami wokół niej; musisz częściowo wypełnić siatkę, aby dokładnie jedna litera znajdowała się w każdym wierszu i kolumnie; ponadto litery na końcu wiersza (lub kolumny) muszą być pierwszą literą widoczną w tym wierszu (lub kolumnie) z tego kierunku. Twoim celem w tym golfie kodowym będzie rozwiązanie zagadki Easy As ABC.
Na przykład, oto łamigłówka Easy As ABC z tegorocznego MIT Mystery Hunt z użyciem liter MIC:
Rozwiązaniem jest:
(Przepraszam za artefakty na Cs; Próbowałem wyedytować nieistotne informacje z reszty układanki.)
I / O
Dane wejściowe będą tablicą ciągów lub łańcuchem, ewentualnie z ogranicznikami. Rozpocznie się w lewym górnym rogu i pójdzie w prawo. Na przykład powyższą łamigłówkę można wprowadzić w następujący sposób:
".CMM.M|....IM|.....I|C.ICI."
Wyjściem powinna być rozwiązana siatka z ramką lub bez. Może być tablicą znaków, tablicą ciągów znaków lub dowolnym innym wygodnym formatem. Ten sam „pusty” znak musi zostać zaakceptowany jako wejście i wyświetlony jako wynik, ale ten pusty znak może być dowolny. Jeśli są to pojedyncze ciągi, zarówno wejście, jak i wyjście muszą mieć ten sam separator (między bokami dla danych wejściowych i wierszami dla danych wyjściowych) lub w ogóle nie mogą zawierać separatora.
W przypadku zagadek nierozwiązywalnych musisz wydać coś, co nie jest błędne dla rozwiązania. Możesz założyć, że żadna łamigłówka nie ma więcej niż jednego rozwiązania.
Musisz zezwolić na dowolną liczbę liter i dowolną wielkość siatki; wszystkie użyte litery pojawią się na granicy siatki.
To jest golf golfowy : jak zwykle najkrótszy kod wygrywa!
Przypadki testowe
"T.AA..|.T.TSS|..TST.|A...SS"
"R.RU..|B.B..B|.UR.UB|UR..B."
"N...NK|E.NK.K|..KK..|....EK"
"CA..DBD|.B..CC.|.D.DEB.|DB.A..A"
"...DDEBE|DC..EBBD|BA..ABF.|E..FECDE"
źródło
Odpowiedzi:
PHP, 1111 bajtów
minus bajty usuwające nowe linie
Wersja online działa tylko z Testcases o długości 6
krótkie obejście
dokonać wszystkich permutacji
wypełnij 2 tablice permutacjami $ x $ y
przełączaj się między dwiema funkcjami tak długo, aż istnieje tylko jedno rozwiązanie w linii foreach tablicy x
funkcja i: znajdź przecięcia w siatce i upuść permutacje
funkcja c: sprawdź kolumny w każdej tablicy unikalnych znaków i usuń permutacje w innych wierszach dla tablic $ x i $ y
źródło