Moje dzieci mają matę alfabetyczną do zabawy, coś takiego:
Po miesiącach z losowo rozmieszczonymi kafelkami maty, zmęczyłem się i umieściłem wszystkie kafelki maty pogrupowane w sekcje zgodnie z ich kolorami tła. Więc jeśli litery reprezentują kolor tła, mam matę taką:
AABBCDDDE
ABBCCCDEE
ABCCCCDDE
AACCCDDEE
AAAACCCCE
AAAAAACCC
Tak więc dla kolorów A, B, C, D i E zawsze istnieje sposób na połączenie wszystkich płytek z tym samym kolorem tła, poziomo lub pionowo, w macie. Tak nazywam matę odpowiednio pogrupowaną według kolorów . Grupy z poprzedniego przykładu możesz zobaczyć w następujących tabelach:
AA
A
A
AA
AAAA
AAAAAA
BB
BB
B
C
CCC
CCCC
CCC
CCCC
CCC
DDD
D
DD
DD
E
EE
E
EE
E
Ponadto dla każdego koloru istnieje tylko jedna grupa, więc nie będzie to poprawne:
ABA
ABA
Ponieważ kafelki w kolorze A nie są pogrupowane w jednej grupie. Nie byłoby to również ważne, ponieważ kafelki nie łączą się poziomo ani pionowo:
AB
BA
Wyzwanie
Biorąc pod uwagę dwuwymiarową tablicę znaków w zakresie do wydruku ASCII (nie musi być kwadratowy, o ile rozmiar obu wymiarów jest równy lub większy niż 1), sprawdź, czy tablica reprezentuje matę odpowiednio pogrupowaną według kolorów (każdy inny znak w tablicy reprezentuje inny kolor). Dane wejściowe mogą być w dowolnym rozsądnym formacie, o ile reprezentują dwuwymiarową tablicę znaków (tablica znaków 2D, tablica ciągów o tej samej długości itd.), A dane wyjściowe muszą być parą wartości prawdziwych i falsey (0 / 1, „t” / „f”, prawda / fałsz, niezależnie od tego, o ile coś jest zwracane, a zwracane wartości są spójne we wszystkich danych wejściowych).
To jest golf golfowy, więc może wygrać najkrótszy program / funkcja / metoda / lambda dla każdego języka!
Przykłady
A truthy
AB
AB truthy
AB
BA falsey
ABCDE truthy
ABCDC falsey
**::dd22
***:d222
*:::::22 truthy
$$$%%%&&
$$%%&&&&
&&$$$%&& falsey
AABBCDDDE
ABBCCCDEE
ABCCCCDDE
AACCCDDEE
AAAACCCCE
AAAAAACCC truthy
AABB
ABBA
AAAA truthy
AAAB
AAAA
AAAA truthy
Moja mata odpowiednio pogrupowana według kolorów
(Nadal muszę naprawić te granice ...)
Odpowiedzi:
MATL ,
1615 bajtówDane wejściowe to tablica znaków 2D (z wierszami oddzielonymi
;
). Dane wyjściowe mają miejsce,0
jeśli dane wejściowe się kwalifikują lub w1
inny sposób.Wypróbuj online! Lub sprawdź wszystkie przypadki testowe .
Wyjaśnienie
Kod zasadniczo sprawdza, czy każdy znak na wejściu ma tylko jeden podłączony komponent, biorąc pod uwagę łączność 4 (to znaczy bez przekątnych).
Powtarzane znaki są przetwarzane wielokrotnie (co jest bardziej golfowe niż deduplikacja).
źródło
Befunge-93, 317 bajtów
Edycja: Naprawiono dla właściwej liczby bajtów. Można również zagrać w golfa dalej
Drukuje 1 jako prawdę, 0 jako falsey
Wypróbuj online
Oto wizualizacja ścieżki kursora
Uwaga: dotyczy starej wersji
Jak to działa
Oto szybki i brudny pseudokod
Zasadniczo po zapisaniu danych wejściowych przechodzi przez całość, sprawdzając każdą przestrzeń. Kiedy znajdzie spację z postacią, dodaje współrzędne do stosu. Następnie sprawdza rekurencyjnie otaczające go spacje, ustawiając każdą spację na 0. Po wyczerpaniu sekcji tej postaci sprawdza, czy ta postać ma już sekcję. Jeśli tak, zwróć 0. Jeśli nie, dodaj go do tablicy znaków. Po przejściu przez całą siatkę bez duplikatów zwraca 1.
Dla osób zaznajomionych z Befunge, oto rozłożona wersja kodu
źródło
J, 66 bajtów
c
definiuje czasownik, który informuje, czy macierz zer i jedynek jest c onnected. Traktuje singletony jako szczególny przypadek prawdy. W przeciwnym razie pobierana jest liczba sąsiadów ortogonalnych każdej komórki, następnie znak tej liczby, a następnie mnoży to przez pierwotną macierz: jeśli ten produkt jest równy oryginalnej macierzy, to jest połączony.Liczbę sąsiadów uzyskuje się poprzez przesunięcie we wszystkich 4 kierunkach, a następnie zsumowanie. Przesunięcie w 4 kierunkach uzyskuje się za pomocą „
x
-arg can by table” obrotu / shift|.
Wreszcie sama odpowiedź uzyskana przez utworzenie macierzy zer / jedynek dla każdego unikalnego elementu
~.
elementu danych wejściowych, a następnie upewnienie się, że wszystkie te macierze są połączone. To jest czasownik w drugiej linii.Wypróbuj online!
źródło
JavaScript (ES6), 114 bajtów
Pobiera dane wejściowe jako tablicę ciągów. Zwraca
0
lub1
.Przypadki testowe
Pokaż fragment kodu
Sformatowane i skomentowane
źródło
Wolfram Language (Mathematica) , 96 bajtów
Wypróbuj online!
Pobiera dane wejściowe jako listę znaków 2D: na przykład
{{"A","B"},{"C","D"}}
.
Znak jest\[Transpose]
.Jak to działa
Dla każdego znaku
c
w wejściu, bierzeSubgraph
zGridGraph
tego samegoDimensions
jako wejście co odpowiada każdyPosition
, w którymc
występuje, i sprawdza, czy jest toConnectedGraphQ
.źródło
Python 2 , 247 bajtów
Wypróbuj online!
źródło
JavaScript (ES6), 181 bajtów
Za każdym razem, gdy zostanie znaleziona nowa płytka koloru, wypełnij połączone pustymi ciągami. Jeśli mata jest odpowiednio pogrupowana według kolorów, wszystkie płytki powinny być wypełnione pustymi sznurkami.
Kod testowy
Pokaż fragment kodu
źródło