Einführung
Vor einiger Zeit hat ein verlorener SO-Benutzer hier eine Frage gestellt und diese wurde nun gelöscht, aber ich denke, dass sie eine gute Herausforderung darstellen würde.
Herausforderung
Schreiben Sie ein vollständiges Programm oder eine vollständige Funktion, die zwei Zeichenfolgen verwendet und prüft, ob eine Permutation der ersten Zeichenfolge eine Unterzeichenfolge der zweiten Zeichenfolge ist.
Eingang
Zwei Zeichenfolgen, eine Zeichenfolge und eine Unterzeichenfolge zum Testen (Sie können die Reihenfolge auswählen).
Ausgabe:
Ein wahrer Wert, wenn die Zeichenfolge eine Permutation der Teilzeichenfolge enthält.
Ein Falsey-Wert, wenn die Zeichenfolge keine Permutationen der Unterzeichenfolge enthält.
Der Test unterscheidet zwischen Groß- und Kleinschreibung.
Beispiele / Testfälle
sub-string string
input d!rl Hello World!
output truthy
input Pog Programming Puzzles & Code Golf
output falsey
input ghjuyt asdfhytgju1234
output truthy
Antworten:
Brachylog , 2 Bytes
Probieren Sie es online!
Erläuterung
quelle
JavaScript (ES6), 77 Byte
Gibt 1 oder 0 zurück.
Ausschnitt
quelle
Python 2,
6766 BytesNimmt die Eingabe als zwei Zeichenfolgen, wobei die Teilzeichenfolge an erster Stelle steht.
quelle
sorted
.05AB1E , 3 Bytes
Probieren Sie es online!
-1 Byte dank Emigna .
Erläuterung:
quelle
.
Java 8,
266244 BytesErläuterung:
Probieren Sie es hier aus.
quelle
Action<params>
stattFunc<params, returnVal>
. Ich gehe davon aus, dass es ähnlich wäre.Consumer
undaccept(...)
anstelle vonFunction
und verwenden,apply(...)
wenn ich ein Lambda mit einem Parameter und keinem Rückgabetyp haben möchte. Ich lerne zur Zeit Java 8. :) Aber da werde ich ändern müssenvoid p(String p,String q)
,p("",p);
undp(p+q.ch...,q.sub...)
zup->q->
,p.apply("").accept(p);
undp.apply(p+q.ch...).accept(q.sub...)
es ist kürzer eine Kombination von Lambda für das Hauptverfahren zu verwenden, und nur ein Java 7void p(String p,String q)
Verfahren für die rekursive-Methode.Function<String, Predicate<String>>
in meinem benutzt.Gelee , 5 Bytes
Probieren Sie es online!
-1 Dank an Emigna, die mich ermutigt hat, noch einmal Golf zu spielen.
Erläuterung:
quelle
Japt,
107 BytesProbieren Sie es online aus
Erläuterung
quelle
Python , 60 Bytes
Eine veränderte Form von TFelds Antwort - geben Sie etwas Anerkennung!
Rekursive Funktion, die den Booleschen
True
Wert (truthy) oder einen leeren String (falsy) zurückgibt.Probieren Sie es online!
sortiert die Teilkette ,
u
und die gleiche Länge von der Vorderseite der Saitet
, (eine Scheibe verwendett[:len(u)]
) , wenn sie gleich sind , dannTrue
zurückgegeben, andernfalls , wennt
noch truthy (nicht leer) recurses mit einer aus der Warteschlange entferntt
(unter Verwendung eine Scheibe,t[1:]
) . Wennt
leer wird, wird dasand
nicht ausgeführt und dieses leert
wird zurückgegeben.quelle
lambda u,t,s=sorted:
Für einenPyth,
98 Bytes-1 Byte danke an @Erik_the_Outgolfer
Nimmt zwei Strings in Anführungszeichen, von denen der zweite der Teilstring ist.
Versuch es!
quelle
s
anstelle von verwenden können}1
.Mathematica,
55-50Bytes-5 Bytes von user202729
Gibt zurück,
False
ob sich eine Permutation der ersten Eingabe in der zweiten Zeichenfolge befindet. Gibt zurück,True
wenn sich eine Permutation der ersten Eingabe nicht in der zweiten Zeichenfolge befindet.Erläuterung:
quelle
True
/False
.Characters
.CJam ,
1312 BytesProbieren Sie es online!
Ich habe das Gefühl, dass CJam im Vergleich zu anderen Golfsprachen sehr eingeschränkt ist, aber vielleicht bin ich nur schlecht ...
Ich denke darüber nach, zu einem anderen zu ziehen. 05AB1E scheint Spaß zu machen.
Kleiner Fehler behoben, der Erik dem Outgolfer
zu verdanken war
Erläuterung:
quelle
a
undabc
?W>
.le!lf{\#)}:+
eine gültige Lösung? Es sollte ausgegeben werden,0
wenn die Zeichenfolge nicht gefunden wird, und ansonsten eine positive Zahl. Ist eine Zahl ungleich Null gültigtruthy
?)
anstelle vonW>
OPs Klarstellung verwenden.Java 9 JShell , 160 Byte
(Zeilenumbrüche zur besseren Lesbarkeit eingefügt)
Probieren Sie es online!
Hinweis: JShell enthält standardmäßig eine Reihe von Importen. Als Java 8- oder Java 9-Lösung müsste Folgendes importiert werden:
Für zusätzliche 45 Bytes oder 205 Bytes insgesamt. Der obige TIO-Link bezieht sich auf ein Java 9-Programm, da TIO derzeit nicht über JShell verfügt (und mir nicht klar ist, wie JShell unter TIO funktionieren würde).
quelle
C #, 320 Bytes
Ich bin sicher, dass die Berechnung der Permutationen viel kürzer sein kann, aber ich kann im Moment nicht sehen, wie.
Formatiert / Vollversion:
quelle
Ruby , 69 Bytes
Probieren Sie es online!
quelle
Perl 6 , 48 Bytes
Gibt eine Oder-Verknüpfung des Vorhandenseins jeder Permutation als Teilzeichenfolge zurück. Zum Beispiel gibt mit Argumenten
"Hello World!"
und"d!l"
Folgendes zurück:... was
True
in einem booleschen Kontext "zusammenbricht" . Das heißt, Junctions sind wahrheitsgemäße Werte.quelle
PHP> = 7.1, 91 Bytes
Testfälle
quelle
~$p
statta&$p
.,
Haskell, 54 Bytes
Nutzen Sie die Möglichkeiten von Data.List sowohl für
isInfixOf
als auch fürpermutations
.quelle
R , 103 Bytes
Probieren Sie es online!
Returns
TRUE
für truthy undNA
für Falsey.quelle
APL (Dyalog) , 18 Bytes
Probieren Sie es online!
quelle
MATL, 10 Bytes
Probieren Sie es auf MATL Online aus
quelle