Celem tego wyzwania jest ustalenie, czy zbiór kawałków o jednym wymiarze można kafelkować, tworząc skończoną ciągłą bryłę.
Kawałek jest niepusty, skończony ciąg zer i jedynek, które zaczyna się i kończy o jeden. Niektóre kawałki są możliwe 1
, 101
, 1111
, 1100101
.
Układanie płytek oznacza takie ułożenie elementów, aby powstał jeden ciągły blok. Jeden z jednego kawałka może zajmować miejsce zero, ale nie jednego z drugiego kawałka.
Odpowiednio, jeśli uważamy, że jeden jest „litym materiałem”, a zero jako „dziurą”, elementy powinny pasować tak, aby tworzyły pojedynczy odcinek, nie pozostawiając żadnych otworów.
Aby utworzyć płytki, elementy można przesuwać tylko wzdłuż ich jednowymiarowej przestrzeni. (Nie można ich podzielić ani odzwierciedlić). Każdy element jest używany dokładnie raz.
Przykłady
Te trzy części 101
, 11
, 101
mogą być wyłożone jak pokazano poniżej, w której każdy element jest reprezentowany wymaganym przesunięciem:
101
11
101
więc uzyskane płytki są
111111
Jako drugi przykład, kawałki 11011
i 1001101
nie można kafelkować. W szczególności przesunięcie
11011
1001101
nie jest poprawny, ponieważ zderzają się dwa; i
11011
1001101
nie jest poprawny, ponieważ wynik zawiera zero.
Dodatkowe zasady
Dane wejściowe to zbiór jednego lub więcej elementów. Dowolny rozsądny format jest dozwolony; na przykład:
- Lista ciągów, gdzie każdy ciąg może zawierać dwa różne, spójne znaki;
- Kilka tablic, gdzie każda tablica zawiera pozycje jedności dla kawałka;
- Lista (nieparzystych) liczb całkowitych, takich jak binarna reprezentacja każdej liczby, definiuje kawałek.
Dane wyjściowe powinny mieć wartość zgodną z prawdą, jeśli możliwe jest kafelkowanie, a wartość fałszowania w przeciwnym razie. Wartości wyjściowe nie muszą być spójne; oznacza to, że mogą być różne dla różnych danych wejściowych.
Programy lub funkcje są dozwolone w dowolnym języku programowania . Standardowe luki są zabronione.
Najkrótszy kod w bajtach wygrywa.
Przypadki testowe
Każde wejście jest w innej linii
Prawda
1
111
1, 1
11, 111, 1111
101, 11, 1
101, 11, 101
10001, 11001, 10001
100001, 1001, 1011
10010001, 1001, 1001, 101
10110101, 11001, 100001, 1
110111, 100001, 11, 101
1001101, 110111, 1, 11, 1
Falsy
101
101, 11
1, 1001
1011, 1011
11011, 1001101
1001, 11011, 1000001
1001, 11011, 1000001, 10101
źródło
101101
byłyby prawdziwe, nawet jeśli żadna ich skończona liczba nie powoduje ciągłego blokowania.Odpowiedzi:
Galaretka , 15 bajtów
Pobiera listę indeksów i zwraca dodatnią liczbę całkowitą (prawda) lub 0 (fałsz).
Wypróbuj online! lub zweryfikuj większość przypadków testowych .
źródło
JavaScript (ES6),
747370 bajtówPobiera dane wejściowe jako tablicę 32-bitowych liczb całkowitych. Zwraca wartość logiczną.
Lub 66 bajtów z odwróconymi wartościami prawda / fałsz:
Przypadki testowe
Pokaż fragment kodu
W jaki sposób?
źródło
Łuska , 16 bajtów
Pobiera listę indeksów opartych na 1. Wypróbuj online!
Wyjaśnienie
źródło
Galaretka , 16 bajtów
Monadyczny link zawierający listę list zer i jedynek zwracających albo
1
(prawda) albo0
(falsey).Wypróbuj online! lub zobacz zestaw testowy (skrócony - pierwsze 6 fałszywych, a następnie pierwszych ośmiu prawdziwych, ponieważ długość czterech z nich zajmuje zbyt wiele czasu ze względu na użycie produktu kartezjańskiego).
W jaki sposób?
źródło
Python 2 , 159 bajtów
Wypróbuj online!
źródło
Galaretka , 16 bajtów
Wypróbuj online!
-1 bajt dzięki Mr. Xcoder
Opracowałem to całkowicie niezależnie od Jonathana Allana, ale teraz patrzenie na jego jest dokładnie takie samo:
źródło
J , 74 bajty
Mogę spróbować zrobić to milcząco później, ale na razie jest to wyraźny czasownik. Wyjaśnię wersję bez golfa. Pobiera listę zapakowanych liczb całkowitych i zwraca
1
(prawda) lub0
(fałsz).Wypróbuj online!
źródło