O objetivo deste desafio é determinar se uma coleção de peças unidimensional pode ser lado a lado para formar um pedaço contínuo finito.
Uma peça é uma sequência finita não vazia de zeros e que começa e termina com um. Algumas peças possíveis são 1
, 101
, 1111
, 1100101
.
Lado a lado significa organizar as peças para que um único bloco contíguo de peças seja formado. Um de uma peça pode ocupar o lugar de um zero, mas não de uma, de outra peça.
De maneira equivalente, se considerarmos um como "material sólido" e um zero como "furo", as peças devem se encaixar para formar um único trecho, sem deixar nenhum furo.
Para formar um lado a lado, as peças só podem ser deslocadas ao longo do espaço unidimensional. (Eles não podem ser divididos ou refletidos). Cada peça é usada exatamente uma vez.
Exemplos
As três peças 101
, 11
, 101
podem estar lado a lado, como mostrado no que se segue, onde cada peça é representada com o deslocamento requerido:
101
11
101
então a telha obtida é
111111
Como um segundo exemplo, as peças 11011
e 1001101
não podem ser lado a lado. Em particular, a mudança
11011
1001101
não é válido porque existem dois que colidem; e
11011
1001101
não é válido porque o resultado conteria um zero.
Regras adicionais
A entrada é uma coleção de uma ou mais peças. Qualquer formato razoável é permitido; por exemplo:
- Uma lista de cadeias, em que cada cadeia pode conter dois caracteres diferentes e consistentes;
- Várias matrizes, em que cada matriz contém as posições de uma para uma peça;
- Uma lista de números inteiros (ímpares), como a representação binária de cada número, define uma parte.
A saída deve ser um valor verdadeiro, se for possível uma telha, e um valor falso, caso contrário. Os valores de saída não precisam ser consistentes; isto é, eles podem ser diferentes para diferentes entradas.
Programas ou funções são permitidos, em qualquer linguagem de programação . As brechas padrão são proibidas.
O menor código em bytes vence.
Casos de teste
Cada entrada está em uma linha diferente
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
desse tipo seriam verdadeiras, embora nenhum número finito delas resulte em um bloco contíguo.