Étant donné une chaîne s
et un tableau / liste l
, déterminez si vous s
pouvez ou non créer des pièces à partir de l
.
Par exemple, si la chaîne est "Hello, world!"
et la liste est [' world!', 'Hello,']
, alors le programme / fonction doit retourner une valeur véridique, car vous pouvez organiser la liste pour former la chaîne. La liste suivante redonnerait aussi une valeur truthy: ['l', 'He', 'o, wor', 'd!']
. Imaginez simplement le 'l'
remplissage là où il le faut dans la chaîne. Alors oui, vous pouvez répéter des éléments de la liste pour former la chaîne. S'il ne peut pas former la chaîne, il doit renvoyer une valeur fausse. Les méthodes standard d'E / S, les échappatoires standard s'appliquent.
Cas de test:
Input (In the form of s, l)
Output (1 if possible, 0 if impossible)
"Hello, world!", ["l", "He", "o, wor", "d!"]
1
"la lal al ", ["la", " l", "al "]
1
"this is a string", ["this should return falsy"]
0
"thi is a string", ["this", "i i", " a", " string"]
0
"aaaaa", ["aa"]
0
"foo bar foobar", ["foo", "bar", " ", "spam"]
1
"ababab", ["a","ba","ab"]
1
"", ["The string can be constructed with nothing!"]
1
code-golf
string
decision-problem
subsequence
Camarade SparklePony
la source
la source
"ababab", ["a","ba","ab"]
Réponses:
Brachylog , 8 octets
Essayez-le en ligne!
C'est vraiment lent. Il a fallu environ 37 secondes pour le "Bonjour, monde!" cas de test sur mon PC, et expiré sur TIO.
Cela prend la chaîne à travers la variable d'entrée et la liste à travers la variable de sortie
Explication
la source
["la", " l", "al "]
comme liste, elle s'est terminée sur mon ordinateur et a répondu correctementfalse.
après 6800 secondes, et "seulement" 113 milliards d'inférences.Mathematica, 29 octets
Explication:
Solution de triche limite, 21 octets
Puisque Mathematica est un langage de programmation symbolique, il n'y a pas de différence * entre les expressions
List[a,b,...]
etAlternatives[a,b,...]
autre que la façon dont elles interagissent avec les autres symboles et la façon dont elles sont affichées ({a,b,...}
eta|b|...
, respectivement). Lorsqu'il est utilisé dans le deuxième argument deStringMatchQ
, unAlternatives
expression est traitée comme un modèle de chaîne, et nous pouvons donc économiser des8
octets sur ma solution ci-dessus en prenant le deuxième argument commeAlternatives
expression.* Techniquement
List
aussiLocked
, ce qui empêche les utilisateurs deUnprotect
le modifier et de modifier son comportement.la source
{x,y,z}
est traité de la même manière quex|y|z
pour la correspondance de motifs de chaînes. Je pense que vous pouvez remplacer""|##&@@#2..
par juste#2..
.Pyth, 23 octets
Prend l'entrée comme
[['string'],['list', 'of', 'parts']]
. La sortie est soit une liste vide, soit une liste avec des valeurs à l'intérieur. En Pyth, une liste contenant n'importe quoi, même une chaîne nulle (['']
), a la valeur true.Essayez-le en ligne!
Explication:
Cette solution essaie continuellement de supprimer toutes les parties possibles depuis le début de la chaîne et garde une trace des valeurs qu'il doit encore parcourir.
Si nous regardons la valeur de
G
dans le cas de test[['ababab'],['a','ba','ab']]
après chaque itération de la boucle while, voici ce que nous obtenons:Et, dans le cas de test, voici
[['aaaaa'],['aa']]
ce que nous obtenons:J'ai créé un autre cas de test,
[['aaaaaa'],['a','aa','aaa']]
et la sortie était la suivante:La liste de sortie contient un tas de déchets à l'intérieur, mais c'est toujours une valeur vraie.
la source
Perl 5 , 39 octets
38 octets de code +
-p
indicateur.Essayez-le en ligne!
Pour l'entrée
"Hello, world!", ["l", "He", "o, wor", "d!"]
(séparée par des sauts de ligne en fait), elle construit le modèlel|He|o, wor|d!|
(avec les métacaractères échappés, grâce à\Q..\E
), puis cherche si la première chaîne correspond à ce modèle avec/^($v)*$/
.Sur TryItOnline, notez qu'il doit y avoir une nouvelle ligne de fin.
la source
undef
est la valeur de falsification renvoyée par la plupart des commandes intégrées. Et lors de l'impression, il n'imprime en fait rien. Et c'est exactement ce que je fais. L'impression "1/0" est naturelle pour les langages de type C, mais pour Perl, "1 / undef" est la méthode naturelle.PHP, 69 octets
Cas de test
la source
["", ["The string can be constructed with nothing!"]]
Python 2, 141 octets
Essayez-le en ligne!
Extrêmement inefficace. Le premier cas de test arrive à expiration sur TIO.
la source
JavaScript (ES6), 59 octets
Prend le tableau de sous
a
- chaînes et la chaînes
dans la syntaxe de curry(a)(s)
. Renvoiefalse
/true
.Commenté
Cas de test
Afficher l'extrait de code
la source
Haskell , 35 octets
#
prend aString
et une liste deString
s, et retourne aBool
.Essayez-le en ligne!
Ne vous occupez pas du cas de test que j'ai laissé de côté, car il a détruit mon maigre ordinateur portable, même avec -O2. Je soupçonne que GHC ne fusionne pas cette liste d'éléments 30517578125 intermédiaire, il a trop de partage pour être rapidement récupéré, et parce que le cas de test est faux, le programme doit générer tout cela ... n'hésitez pas à essayer si vous le pouvez gérer cela.
mapM("":)(l<$s)
est une liste de toutes les façons de créer unelength s
liste d'éléments qui sont des chaînes vides ou des chaînesl
.la source
Pyth,
17151114 octetsL'exigence pour la chaîne vide a changé, ajoutant 3 octets.
Explication
anciennes versions
Plus court et court dans la durée de vie de l'univers!
Explication
C'est horriblement lent, mais cela fonctionne pour mes cas de test (trivialement petits).
Explication
la source
Gelée ,
14128 octetsEssayez-le en ligne!
Comment ça marche
correction
"", ["The string can be constructed with nothing"]
de bug sur le cas grâce à @JonathanAllanla source
"", ["The string can be constructed with nothing!"]
;FŒṖḟ⁹$€Ạ¬
le réparerait.ḟ
, de sorte que vous ne avez pas besoin du$
ou⁹
:;FŒṖḟ€Ạ¬
.¬
par une opération qui retourne toujours vrai avec le bon argument "".R, 49 octets
Essayez-le en ligne!
la source
('x', '.')
, mais ce n'est pas le cas.Pyth, 10
8octetsSuite de tests
Cela prend la liste sur la première ligne de STDIN et la chaîne (sans guillemets) sur la seconde.
Pour commencer, la liste est stockée dans
Q
et la chaîne est stockée dansz
. Ensuite, nous formons toutes les partitions possibles dez
. Chaque partition sera filtrée (f
) pour vérifier si elle n'utilise que des morceauxQ
. Pour ce faire, on enlève tous les élémentsQ
deT
la partition que nous sommes le partitionnement, et nions logiquement le résultat avec!
, de sorte que seules les partitions où chaque élément étaitQ
sont conservés.Pour résoudre le problème qui
''
n'a pas de partitions, nous ajoutons le premier mot du dictionnaire à z, afin qu'il ne soit pas une chaîne vide.la source
""
il semble échouer dans ce cas."", [""]
et"", []
n'ont pas été couverts - ne nous yPowerShell,
615857 octetsEssayez-le en ligne!
Anciennes solutions:
la source
Python 2, 64 octets
Essayez ceci en ligne!
la source
("aaaaaaa",["aa","aaa"])
.('x', '.')
, je suppose, mais ce n'est pas le cas."Hello", ["\w"]
etc.PowerShell, 78
Approche assez simple basée sur les regex.
la source
CJam (16 octets)
Il s'agit d'un bloc (fonction) anonyme prenant la chaîne et le tableau de chaînes sur la pile. Démo en ligne .
Il utilise l'algorithme évident:
La valeur renvoyée est un tableau / chaîne vide (falsy) s'il
str
ne peut pas être créé, ou un tableau contenantstr
(véridique, même sistr
c'est lui-même la chaîne vide) s'il peut être créé.la source
C ++ (Cci), 287 octets
parce que je n'ai pas écrit ou utilisé trop de next_permutation () je ne sais pas si tout va bien. Je ne sais pas à 100% si c'est une solution aussi peut-être que c'est de mauvaise qualité ... Une liste de chaînes est ici un tableau de pointeurs vers char; NULL terminé L'algo est facile, il y a un algo que la linéarité essaie si toutes les chaînes de la liste correspondent à l'argument "une" chaîne, il y a un autre algo qui permute l'index de la liste des chaînes afin d'essayer toutes les combinaisons possibles.
dé-golfez-le, testez le code et les résultats ici
cela compilerait dans le compilateur gcc C ++
la source
Python, 66 octets
Non golfé:
la source
Serveur Microsoft SQL, 353 octets
Testez-le en ligne.
Version lisible:
la source
C, 140 octets
Je suis sûr qu'il existe un moyen plus court de le faire en C, mais je voulais créer une solution qui teste toutes les combinaisons possibles de sous-chaînes au lieu de la méthode de recherche / remplacement habituelle.
Essayez-le en ligne
Non golfé:
la source