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
fonte
101101
desse tipo seriam verdadeiras, embora nenhum número finito delas resulte em um bloco contíguo.Respostas:
Gelatina , 15 bytes
Pega uma lista de índices e retorna um número inteiro positivo (verdade) ou 0 (falsidade).
Experimente online! ou verifique a maioria dos casos de teste .
fonte
JavaScript (ES6),
747370 bytesRecebe a entrada como uma matriz de números inteiros de 32 bits. Retorna um booleano.
Ou 66 bytes com valores de verdade / falsidade invertidos:
Casos de teste
Mostrar snippet de código
Quão?
fonte
Casca , 16 bytes
Leva uma lista de listas de índices baseados em 1. Experimente online!
Explicação
fonte
Gelatina , 16 bytes
Um link monádico que obtém uma lista de listas de uns e zeros retornando
1
(verdade) ou0
(falsey).Experimente online! ou veja uma suíte de testes (abreviada - seis primeiras falsas, seguidas pelas oito primeiras verdades, uma vez que o comprimento das quatro leva muito tempo para incluir devido ao uso do produto cartesiano).
Quão?
fonte
Python 2 , 159 bytes
Experimente online!
fonte
Gelatina , 16 bytes
Experimente online!
-1 byte graças ao Sr. Xcoder
Eu desenvolvi isso completamente independentemente de Jonathan Allan, mas agora olhando para ele é exatamente o mesmo:
fonte
J , 74 bytes
Posso tentar torná-lo tácito mais tarde, mas por enquanto é um verbo explícito. Vou explicar a versão não destruída. É preciso uma lista de números inteiros e retornos em caixa (verdade)
1
ou0
(falsidade).Experimente online!
fonte