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
la source
101101
seraient véridiques, même si aucun nombre fini d'entre eux ne résulte en un bloc contigu.Réponses:
Gelée , 15 octets
Prend une liste d'indices et renvoie un entier positif (véridique) ou 0 (falsifié).
Essayez-le en ligne! ou vérifiez la plupart des cas de test .
la source
JavaScript (ES6),
747370 octetsPrend l'entrée comme un tableau d'entiers 32 bits. Retourne un booléen.
Ou 66 octets avec des valeurs de vérité / fausse inversées:
Cas de test
Afficher l'extrait de code
Comment?
la source
Husk , 16 octets
Prend une liste de listes d'indices basés sur 1. Essayez-le en ligne!
Explication
la source
Gelée , 16 octets
Un lien monadique contenant une liste de listes de uns et de zéros renvoyant soit
1
(véridique), soit0
(falsey).Essayez-le en ligne! ou voir une suite de tests (raccourci - les 6 premiers faux suivis des huit premiers véridiques car la longueur quatre est trop longue à inclure en raison de l'utilisation du produit cartésien).
Comment?
la source
Python 2 , 159 octets
Essayez-le en ligne!
la source
Gelée , 16 octets
Essayez-le en ligne!
-1 octet merci à M. Xcoder
J'ai développé cela complètement indépendamment de Jonathan Allan, mais maintenant, regarder le sien est exactement le même:
la source
J , 74 octets
Je pourrais essayer de le rendre tacite plus tard, mais pour l'instant c'est un verbe explicite. Je vais vous expliquer la version non golfée. Il prend une liste d'entiers encadrés et renvoie
1
(véridique) ou0
(falsifié).Essayez-le en ligne!
la source