Le but de ce défi est de déterminer si une collection de pièces unidimensionnelles peut être carrelée pour former un morceau continu fini.
Une pièce est une séquence finie non vide de zéros et de uns qui commence et se termine par un. Certaines pièces sont possibles 1
, 101
, 1111
, 1100101
.
Le carrelage consiste à disposer les pièces de manière à former un seul bloc contigu de pièces. Un un d'une pièce peut occuper la place d'un zéro, mais pas d'un, d'une autre pièce.
De manière équivalente, si nous considérons l'un comme étant un "matériau solide" et un zéro comme un "trou", les pièces doivent s'ajuster de manière à former un seul étirement, sans laisser de trous.
Pour former un carrelage, les pièces ne peuvent être déplacées que le long de leur espace unidimensionnel. (Ils ne peuvent pas être divisés ou réfléchis). Chaque pièce est utilisée exactement une fois.
Exemples
Les trois pièces 101
, 11
, 101
peuvent être carrelée comme indiqué ci - après, où chaque pièce est représentée par le décalage requis:
101
11
101
de sorte que le carrelage obtenu est
111111
Comme deuxième exemple, les pièces 11011
et 1001101
ne peuvent pas être carrelées. En particulier, le changement
11011
1001101
n'est pas valide car il y en a deux qui entrent en collision; et
11011
1001101
n'est pas valide car le résultat contiendrait un zéro.
Règles supplémentaires
L' entrée est une collection d'une ou plusieurs pièces. Tout format raisonnable est autorisé; par exemple:
- Une liste de chaînes, où chaque chaîne peut contenir deux caractères différents et cohérents;
- Plusieurs tableaux, où chaque tableau contient les positions de ceux d'un morceau;
- Une liste d'entiers (impairs) tels que la représentation binaire de chaque nombre définit une pièce.
La sortie doit être une valeur véridique si un pavage est possible, et une valeur fausse dans le cas contraire. Les valeurs de sortie n'ont pas besoin d'être cohérentes; c'est-à-dire qu'ils peuvent être différents pour différentes entrées.
Les programmes ou fonctions sont autorisés, dans n'importe quel langage de programmation . Les failles standard sont interdites.
Le code le plus court en octets gagne.
Cas de test
Chaque entrée est sur une ligne différente
Vérité
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
seraient véridiques, même si aucun nombre fini d'entre eux ne résulte en un bloc contigu.