Bestimmen Sie anhand einer Zeichenfolge s
und eines Arrays / einer Liste l
, ob s
Teile aus erstellt werden können oder nicht l
.
Wenn die Zeichenfolge beispielsweise "Hello, world!"
und die Liste die Zeichenfolge ist [' world!', 'Hello,']
, sollte das Programm / die Funktion einen Wahrheitswert zurückgeben, da Sie die Liste so anordnen können, dass sie die Zeichenfolge bildet. Die folgende Liste würde auch einen truthy Wert zurück: ['l', 'He', 'o, wor', 'd!']
. Stellen Sie sich die 'l'
Füllung dort vor, wo sie in der Saite benötigt wird. Also ja, Sie können Elemente der Liste wiederholen, um die Zeichenfolge zu bilden. Wenn die Zeichenfolge nicht gebildet werden kann, sollte ein falscher Wert zurückgegeben werden. Standardmethoden der E / A, Standardlücken gelten.
Testfälle:
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
quelle
"ababab", ["a","ba","ab"]
Antworten:
Brachylog , 8 Bytes
Probieren Sie es online!
Das ist wirklich langsam. Dauerte etwa 37 Sekunden für die "Hallo, Welt!" Testfall auf meinem PC und Timeout auf TIO.
Dies führt die Zeichenfolge durch die Eingabevariable und die Liste durch die Ausgabevariable
Erläuterung
quelle
["la", " l", "al "]
als Liste wurde sie auf meinem Computer beendet undfalse.
nach 6800 Sekunden und "nur" 113 Milliarden Schlüssen richtig beantwortet .Mathematica, 29 Bytes
Erläuterung:
Borderline-Cheat-Lösung, 21 Bytes
Da Mathematica eine symbolische Programmiersprache ist, gibt es keine * Unterschied zwischen den Ausdrücken
List[a,b,...]
undAlternatives[a,b,...]
anders als wie sie interagieren mit anderen Symbolen und wie sie angezeigt werden ({a,b,...}
unda|b|...
sind). WennStringMatchQ
einAlternatives
Ausdruck im zweiten Argument von verwendet wird , wird er als Zeichenfolgenmuster behandelt, und daher können wir8
Bytes gegenüber der obigen Lösung sparen, indem wir das zweite Argument alsAlternatives
Ausdruck verwenden.* Technisch
List
ist es auch soLocked
, dass Benutzer daranUnprotect
gehindert werden, es zu bearbeiten und sein Verhalten zu ändern.quelle
{x,y,z}
wird genauso behandelt wiex|y|z
beim String-Pattern-Matching. Ich denke, Sie können""|##&@@#2..
mit nur ersetzen#2..
.Pyth, 23 Bytes
Nimmt Eingaben wie
[['string'],['list', 'of', 'parts']]
. Die Ausgabe ist entweder eine leere Liste oder eine Liste mit Werten darin. In Pyth wird eine Liste, die alles enthält, sogar eine Nullzeichenfolge (['']
), als wahr ausgewertet.Probieren Sie es online!
Erläuterung:
Diese Lösung versucht kontinuierlich, jeden möglichen Teil vom Anfang der Zeichenfolge zu entfernen, und verfolgt, welche Werte noch durchgesehen werden müssen.
Wenn wir uns nach jeder Iteration der while-Schleife den Wert von
G
im Testfall ansehen[['ababab'],['a','ba','ab']]
, erhalten wir Folgendes:Und im Testfall erhalten
[['aaaaa'],['aa']]
wir Folgendes:Ich habe einen weiteren Testfall erstellt
[['aaaaaa'],['a','aa','aaa']]
und folgende Ausgabe erhalten:Die Ausgabeliste enthält eine Menge Müll, aber es ist immer noch ein wahrer Wert.
quelle
Perl 5 , 39 Bytes
38 Byte Code +
-p
Flag.Probieren Sie es online!
Für die Eingabe
"Hello, world!", ["l", "He", "o, wor", "d!"]
(tatsächlich durch Zeilenumbrüche getrennt) wird das Muster erstelltl|He|o, wor|d!|
(wobei die Metazeichen dank von maskiert werden)\Q..\E
und dann geprüft, ob die erste Zeichenfolge mit diesem Muster übereinstimmt/^($v)*$/
.Beachten Sie bei TryItOnline, dass eine nachgestellte Zeile vorhanden sein muss.
quelle
undef
wird der falsche Wert von den meisten eingebauten Funktionen zurückgegeben. Und wenn es gedruckt wird, wird tatsächlich nichts gedruckt. Und genau das mache ich. Das Drucken von "1/0" ist für C-ähnliche Sprachen natürlich, für Perl jedoch "1 / undef".PHP, 69 Bytes
Testfälle
quelle
["", ["The string can be constructed with nothing!"]]
Python 2, 141 Bytes
Probieren Sie es online!
Extrem ineffizient. Der erste Testfall läuft bei TIO ab.
quelle
JavaScript (ES6), 59 Byte
Übernimmt das Array von Teilzeichenfolgen
a
und die Zeichenfolges
in der aktuellen Syntax(a)(s)
. Rückgabefalse
/true
.Kommentiert
Testfälle
Code-Snippet anzeigen
quelle
Haskell , 35 Bytes
#
Nimmt aString
und eine Liste vonString
s und gibt a zurückBool
.Probieren Sie es online!
Aber stört euch nicht an dem Testfall, den ich ausgelassen habe, weil er meinen dürftigen Laptop selbst mit -O2 kaputt gemacht hat. Ich vermute, dass GHC diese Liste der Zwischenelemente nicht verwirbelt, es hat zu viel Sharing, um schnell Müll zu sammeln, und weil der Testfall falsch ist, muss das Programm alles generieren ... Sie können es gerne versuchen, wenn Sie können Regle dies.
mapM("":)(l<$s)
ist eine Liste aller Möglichkeiten, einelength s
Liste von Elementen zu erstellen, aus denen entweder leere Zeichenfolgen oder Zeichenfolgen bestehenl
.quelle
Pyth,
17151114 BytesDie Anforderung für die leere Zeichenfolge wurde geändert und 3 Byte hinzugefügt.
Erläuterung
alte Versionen
Kürzer und läuft in der Lebensdauer des Universums!
Erläuterung
Das ist schrecklich langsam, aber es funktioniert für meine (trivial kleinen) Testfälle.
Erläuterung
quelle
Jelly ,
14128 BytesProbieren Sie es online!
Wie es funktioniert
Bugfix für den Fall
"", ["The string can be constructed with nothing"]
dank @JonathanAllanquelle
"", ["The string can be constructed with nothing!"]
;FŒṖḟ⁹$€Ạ¬
würde es aber beheben.ḟ
, sodass Sie das$
oder das⁹
: nicht benötigen;FŒṖḟ€Ạ¬
.¬
eine Operation ersetze, die immer true mit dem richtigen Argument "" zurückgibt.R, 49 Bytes
Probieren Sie es online!
quelle
('x', '.')
, tut es aber nicht.Pyth, 10
8BytesTestsuite
Dies nimmt die Liste in der ersten Zeile von STDIN und die Zeichenfolge (ohne Anführungszeichen) in der zweiten.
Zu Beginn wird die Liste in gespeichert
Q
, und die Zeichenfolge wird in gespeichertz
. Als nächstes bilden wir alle möglichen Partitionen vonz
. Jede Partition wird gefiltert (f
), um zu überprüfen, ob sie nur Teile enthältQ
. Dazu entfernen wir alle ElementeQ
ausT
, die Partition wir sind Partitionierung und negieren logisch das Ergebnis mit!
, so dass nur Partitionen , wobei jedes Element war inQ
gehalten werden.Um das Problem zu beheben,
''
das keine Partitionen enthält, fügen wir das erste Wort des Wörterbuchs zu z hinzu, damit es keine leere Zeichenfolge ist.quelle
""
es scheint, dass dieser Fall fehlschlägt."", [""]
und"", []
wurden nicht behandelt - lasst uns nicht dorthin gehen :)PowerShell,
615857 ByteProbieren Sie es online!
Alte Lösungen:
quelle
Python 2, 64 Bytes
Versuchen Sie dies online!
quelle
("aaaaaaa",["aa","aaa"])
.('x', '.')
, denke ich, tut es aber nicht."Hello", ["\w"]
etc.PowerShell, 78
Ziemlich unkomplizierter, auf Regex basierender Ansatz.
quelle
CJam (16 Bytes)
Dies ist ein anonymer Block (eine Funktion), der die Zeichenfolge und das Array von Zeichenfolgen auf dem Stapel aufnimmt. Online-Demo .
Es verwendet den offensichtlichen Algorithmus:
Der Rückgabewert ist ein leeres Array / eine leere Zeichenfolge (falsch), falls
str
dies nicht möglich ist, oder ein Array mitstr
(wahrheitsgemäß, auch wennstr
es sich um eine leere Zeichenfolge handelt), falls dies möglich ist.quelle
C ++ (Bcc), 287 Bytes
weil ich die next_permutation () nicht zu oft geschrieben oder benutzt habe, weiß ich nicht, ob alles in Ordnung ist. Ich weiß nicht zu 100%, ob es sich möglicherweise um eine zu schlechte Lösung handelt. Eine Liste mit Zeichenfolgen enthält eine Reihe von Zeigern auf Zeichen. NULL terminiert Das Algo ist einfach, es gibt ein Algo, dessen Linearität versucht wird, wenn alle Zeichenfolgen in der Liste mit dem Argument "a" übereinstimmen. Es gibt ein anderes Algo, das den Index der Liste der Zeichenfolgen durchläuft, sodass alle möglichen Kombinationen versucht werden.
ungolf it, test code und ergebnisse hier
Dies würde im GCC C ++ - Compiler kompiliert
quelle
Python, 66 Bytes
Ungolfed:
quelle
Microsoft SQL Server, 353 Bytes
Testen Sie es online.
Lesbare Version:
quelle
C 140 Bytes
Ich bin sicher, dass es einen kürzeren Weg gibt, dies in C zu tun, aber ich wollte eine Lösung erstellen, die alle möglichen Kombinationen von Teilzeichenfolgen anstelle der üblichen Find / Replace-Methode testet.
Probieren Sie es online aus
Ungolfed:
quelle