Цель этой задачи состоит в том, чтобы определить, можно ли выложить мозаику из набора одномерных частей для формирования конечного непрерывного фрагмента.
Часть является непустым, конечная последовательность нулей и единиц , которые начинаются и заканчиваются в одном. Некоторые возможные куски 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
будут правдивыми, даже если их конечное число не приведет к непрерывному блоку.Ответы:
Желе , 15 байт
Принимает список индексов и возвращает положительное целое число (истина) или 0 (ложь).
Попробуйте онлайн! или проверьте большинство тестовых случаев .
источник
JavaScript (ES6),
747370 байтПринимает ввод в виде массива 32-битных целых чисел. Возвращает логическое значение.
Или 66 байтов с инвертированными значениями правда / ложь:
Контрольные примеры
Показать фрагмент кода
Как?
источник
Шелуха , 16 байт
Принимает список списков на основе 1 индексов. Попробуйте онлайн!
объяснение
источник
Желе , 16 байт
Монадическая ссылка, содержащая список списков единиц и нулей, возвращающих либо
1
(правдиво), либо0
(фалси).Попробуйте онлайн! или посмотрите набор тестов (укороченный - первые 6 ложных значений, за которыми следуют первые восемь истинных значений, поскольку длина четырех из них занимает слишком много времени из-за использования декартового произведения).
Как?
источник
Python 2 , 159 байт
Попробуйте онлайн!
источник
Желе , 16 байт
Попробуйте онлайн!
-1 байт благодаря мистеру Xcoder
Я разработал это совершенно независимо от Джонатана Аллана, но теперь смотрю на него точно так же:
источник
J , 74 байта
Я мог бы попытаться сделать это молчаливым позже, но пока это явный глагол. Я объясню неоправданную версию. Он принимает список целых чисел в штучной упаковке и возвращает
1
(правда) или0
(ложь).Попробуйте онлайн!
источник