To wyzwanie opiera się na grze Layerz.
Biorąc pod uwagę, jako argument stdin lub jako funkcję, prostokątny układ 2D komórek, w którym każda komórka zawiera albo puste (możesz użyć zer zamiast pustych miejsc bez kary), 1, 2, 3 lub 4 ; znaleźć sposób na podzielenie go na prawidłowe regiony (jak zdefiniowano poniżej), tak aby każda niepusta komórka była zawarta w dokładnie jednym regionie. Następnie wypisz znalezione rozwiązanie w dowolnym rozsądnym formacie. Jeśli nie ma rozwiązania, zatrzymaj się bez wytworzenia wyjścia lub wyjmij jedną wartość falsey, a następnie zatrzymaj.
Dowolne z poniższych stanowi prawidłowy region:
- Pojedyncza komórka zawierająca 1
- Komórka zawierająca 2 i dokładnie jeden z niepustych ortogonalnych sąsiadów
- Komórka zawierająca 3 i dokładnie dwa z niepustych ortogonalnych sąsiadów
- Komórka zawierająca 4 i dokładnie trzy z niepustych, ortogonalnych sąsiadów
To jest golf golfowy , więc wygrywa najkrótsza ważna odpowiedź w bajtach.
Niektóre przypadki testowe:
1. Raczej banalny:
Oto rozwiązanie, w którym każdy region ma inny kolor:
2. Bardziej interesujący
Ten ma więcej niż jedno rozwiązanie, ale oto jedno z nich:
3. Mniejszy, zawierający spacje, który nie ma żadnych rozwiązań (w zależności od tego, czy użyjesz jednej z dwójek, aby „złapać” trójkę, czy trójki, aby wziąć dwie dwójki, albo zostaniesz z para nieprzylegających [i dlatego nierozgrupowalnych] dwójek lub pojedynczych dwóch):
Ponieważ ta siatka nie ma rozwiązań, twój program powinien zatrzymać się bez generowania żadnych wyników, gdy otrzyma tę siatkę.
4. Ta (z górną 2 przesuniętą jedną komórką w lewo) ma jednak rozwiązanie:
Rozwiązanie:
(Prawy dolny 2 służy do „przechwytywania” 3)
5. Ponieważ potrzebowaliśmy skrzynki testowej z kilkoma czwórkami:
Jedno rozwiązanie:
źródło
4
s, jeśli są to prawidłowe dane wejściowe.Odpowiedzi:
Wiem, że to wyzwanie ma ponad rok, ale właśnie znalazłem to w „bez odpowiedzi” i wyglądało to dla mnie całkiem interesująco.
Zakładając, że liczba komórek „root” jest jedyną znaczącą w każdym regionie (można to wywnioskować z przykładów), oto moje rozwiązanie cofania:
Python 3 ,
355351349 bajtówWypróbuj online!
Format wejściowy to dwuwymiarowa lista liczb całkowitych, spacje zerowe, a format wyjściowy to również dwuwymiarowa lista liczb całkowitych reprezentujących jeden region na liczbę. Numer regionu zaczyna się od pierwszego; zero jest zarezerwowane dla pustych komórek (jak na wejściu). Jeśli podanego wejścia nie można rozwiązać, funkcja zwraca pojedyncze zero (wartość falsy).
Na przykład przypadek testowy 5 jest wprowadzany jako
i wynik jest
Niegolfowany, z komentarzami:
Wypróbuj online!
Uwaga: Jest to specjalny przypadek Pakowania Zestawów, który jest znany jako NP-complete. Ten konkretny problem ma ograniczony rozmiar zestawu (maks. 4) i istnieją algorytmy aproksymacyjne do znajdowania „dobrego” upakowania zestawu w czasie wielomianowym, ale nie gwarantują maksymalnego możliwego upakowania zestawu (co jest ściśle wymagane w tym problemie).
źródło