Цель этой задачи состоит в том, чтобы определить, можно ли выложить мозаику из набора одномерных частей для формирования конечного непрерывного фрагмента.
Часть является непустым, конечная последовательность нулей и единиц , которые начинаются и заканчиваются в одном. Некоторые возможные куски 1
, 101
, 1111
, 1100101
.
Черепица означает расположение кусков так, чтобы формировался один непрерывный блок из них. Один из одного куска может занимать место нуля, но не одного, из другого куска.
Эквивалентно, если мы рассматриваем единицу как «твердый материал», а ноль как «дыру», кусочки должны соответствовать так, чтобы образовать единое растяжение, не оставляя никаких отверстий.
Чтобы сформировать плитку, кусочки можно перемещать только вдоль их одномерного пространства. (Они не могут быть разделены или отражены). Каждый кусок используется ровно один раз.
Примеры
Три части 101
, 11
, 101
может быть черепичные , как показано в следующем, где каждая часть представлена с требуемым сдвигом:
101
11
101
так что полученная черепица
111111
В качестве второго примера, кусочки 11011
и 1001101
не могут быть выложены плиткой. В частности, смена
11011
1001101
недопустимо, потому что есть два, которые сталкиваются; а также
11011
1001101
недопустимо, потому что результат будет содержать ноль.
Дополнительные правила
Ввода представляет собой набор из одной или нескольких частей. Разрешен любой разумный формат; например:
- Список строк, где каждая строка может содержать два разных, согласованных символа;
- Несколько массивов, где каждый массив содержит позиции единиц для куска;
- Список (нечетных) целых чисел, таких как двоичное представление каждого числа, определяет кусок.
Выход должен быть значением truthy , если плиточные можно и falsy значение в противном случае. Выходные значения не должны быть согласованными; то есть они могут быть разными для разных входов.
Программы или функции разрешены на любом языке программирования . Стандартные лазейки запрещены.
Самый короткий код в байтах побеждает.
Контрольные примеры
Каждый вход находится на отдельной строке
Truthy
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
101101
будут правдивыми, даже если их конечное число не приведет к непрерывному блоку.