To pytanie jest inspirowane i jest odwrotnością tego .
Dennis ( E
), Doorknob ( D
), Martin ( M
) i Chris ( C
) zamówili pizzę. Prostokątna pizza jest podzielona na kwadratowe kawałki, z których każdy jest oznaczony odpowiednim jedzeniem.
Napisz program lub funkcję, która podając prostokątną pizzę składającą się z 0 lub więcej każdej litery określa, czy:
Każdy plasterek dla każdej osoby jest powiązany ze ścieżką . Oznacza to, że wszystkie litery, które są takie same, powinny bezpośrednio przylegać do siebie (brak przekątnych połączeń).
Liczba plasterków na osobę jest taka sama dla wszystkich.
Musisz podać wartość prawda / fałsz z opcjonalnym znakiem nowej linii, który wskazuje, czy dana pizza jest uczciwa.
Prawidłowe przypadki testowe:
DDDDDDDDDDDDMCCCCCCCCCCC
DEEEEEEEEEEDMMMMMMMCCCCC
DEEEEEEEEEEDMMMCCCCCCCCC
DEEEEEEEEEEDMMMMMMMMCCCC
DDDDDDDDDDDDMMMMMMMMMMMC
DEMC
DD
EE
MC
MC
EEDDMMMCCC
EEEDDDMMCC
Nieprawidłowe przypadki testowe:
EDM
EDMCCMDE
DDDDDDDDDDDDMCCCCCCCCCCC
DEEEEEEEEEEDMMMMMMMCCCCC
DEEEEEEEEEEMDMMCCCCCCCCC
DEEEEEEEEEEDMMMMMMMMCCCC
DDDDDDDDDDDDMMMMMMMMMMMC
DDMMEECC
DMMEECCC
Najkrótszy kod w bajtach wygrywa.
DDDDDDDDDDDDD
<- uczciwa pizzaOdpowiedzi:
Pyth, 53 bajty
Demonstracja
Jest to zasadniczo wypełnienie zalewowe dla każdej litery, a następnie sprawdzenie, czy wszystkie wynikowe zestawy mają odpowiedni rozmiar.
Aby wypełnić obszar zalewowy, zaczyna się od wystąpienia lewej górnej litery każdej litery, a następnie generuje wszystkich sąsiadów znalezionych dotychczas lokalizacji, filtruje lokalizacje z właściwą literą i powtarza, aż zestaw przestanie się zmieniać.
źródło
Ślimaki , 129
Drukuje 1 za uczciwą pizzę i 0 za nieuczciwą pizzę.
Wersja rozszerzona:
&
oznacza, że wzór musi pasować do wszystkich lokalizacji na siatce. Pierwszy wiersz sprawdza równą liczbę każdego z E, D, M, C. używa instrukcji teleportacjit
, która jest doskonałym sposobem na tworzenie programów o złożoności czynnikowej. Jeśli wejście ma nierówne plasterki z kilkoma jednostkami dla każdego z 4 modów, program zawiesi się mniej więcej na zawsze. Następnie sprawdzana jest ciągła ścieżka do lewego górnego wystąpienia dowolnej litery, od której wzorzec się zaczął.źródło
CJam, 93
Wypróbuj online
Jest to absurdalnie długie, ponieważ CJam (jeszcze) nie ma wbudowanego wypełniania zalewania ani wyszukiwania związków. Zaimplementowałem program find-union .
Wyjaśnienie:
źródło
JavaScript (ES6), 153
166Używając ciągów szablonów, nowa linia jest znacząca i liczona
Przetestuj uruchomienie fragmentu kodu w FireFox.
źródło
JavaScript ES6, 360
Sprawdza równą liczbę C, D, E, M, a następnie wypełnia zalanie i sprawdza wszelkie osierocone litery. Nie jestem zwycięzcą, ale musiałem spróbować.
Skrzypce
źródło
JavaScript ES6,
328318316269178Wyjaśnienie:
źródło
l=>{...}
Jest w porządku.k=(o)=>
aby zaoszczędzić jeszcze 2 bajty. Funkcje strzałek z jednym parametrem nie wymagają nawiasów.