El propósito de este desafío es determinar si una colección de piezas unidimensionales se puede colocar en mosaico para formar un trozo continuo finito.
Una pieza es una secuencia finita no vacía de ceros y unos que comienza y termina con uno. Algunas piezas son posibles 1
, 101
, 1111
, 1100101
.
Mosaico significa organizar las piezas de manera que se forme un bloque contiguo de unidades. Un uno de una pieza puede ocupar el lugar de un cero, pero no de un uno, de otra pieza.
De manera equivalente, si consideramos que uno es "material sólido" y un cero como "agujero", las piezas deben encajar para formar un solo tramo, sin dejar ningún agujero.
Para formar un mosaico, las piezas solo se pueden desplazar a lo largo de su espacio unidimensional. (No se pueden dividir ni reflejar). Cada pieza se usa exactamente una vez.
Ejemplos
Las tres piezas 101
, 11
, 101
se pueden embaldosar como se muestra en la siguiente, donde cada pieza está representado con el cambio requerido:
101
11
101
entonces el mosaico obtenido es
111111
Como segundo ejemplo, las piezas 11011
y 1001101
no pueden ser en mosaico. En particular, el cambio
11011
1001101
no es válido porque hay dos que chocan; y
11011
1001101
no es válido porque el resultado contendría un cero.
Reglas adicionales
La entrada es una colección de una o más piezas. Se permite cualquier formato razonable; por ejemplo:
- Una lista de cadenas, donde cada cadena puede contener dos caracteres diferentes y consistentes;
- Varios conjuntos, donde cada conjunto contiene las posiciones de unos para una pieza;
- Una lista de enteros (impares) como la representación binaria de cada número define una pieza.
La salida debe ser un valor verdadero si es posible un mosaico, y un valor falso de lo contrario. Los valores de salida no necesitan ser consistentes; es decir, pueden ser diferentes para diferentes entradas.
Se permiten programas o funciones , en cualquier lenguaje de programación . Las lagunas estándar están prohibidas.
El código más corto en bytes gana.
Casos de prueba
Cada entrada está en una línea diferente
Verdad
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
Falsa
101
101, 11
1, 1001
1011, 1011
11011, 1001101
1001, 11011, 1000001
1001, 11011, 1000001, 10101
101101
serían verdaderas, aunque ningún número finito de ellas dé como resultado un bloque contiguo.