In dieser Herausforderung erhalten Sie eine Zeichenfolge als Eingabe, die eine Zeichenfolge aus X, Y und Z enthält, z. "XYZZ". X, Y und Z stehen für ein bestimmtes Zeichen. Dieses Muster wird dann mit einer zweiten Zeichenfolge verglichen. Wenn das Muster in der zweiten Eingabe als Teilzeichenfolge vorhanden ist, kehren Sie zurück True
, andernfalls kehren Sie zurück False
. Sobald ein Muster im Wort gefunden wurde, stoppt das Programm die Suche und kehrt zurück True
.
Beispiele
Muster: "XXYY"
succeed ---> True (pattern found: ccee)
success ---> False (pattern not matched)
balloon ---> True (pattern found: lloo)
Muster: "XYXYZ"
bananas ---> True (pattern found: nanas)
banana ---> False (pattern not found)
- Hinweis: Dies ist nicht die tatsächliche Eingabe. Dies ist ein Beispiel dafür, wie das Programm funktionieren sollte. Ihr Programm sollte
True
oderFalse
oder andere Truthy / Falsy-Werte ausgeben.
Andere wichtige / nützliche Informationen
- Das Muster muss kein X, Y und Z enthalten, es könnte X und Y oder sogar (obwohl etwas sinnlos) nur X enthalten.
- Das Muster kann nicht leer sein, dies wird jedoch nicht als Testfall verwendet.
- Die Suchzeichenfolge ist nicht leer und wird in Kleinbuchstaben angegeben.
- Die alphabetische Reihenfolge von X, Y und Z im Muster spielt keine Rolle.
- X, Y und Z müssen eindeutige Zeichen sein.
- Sie können jede Bibliothek benutzen, die Sie wünschen.
- Die Bewertung wird durch die Codegröße in Byte bestimmt. Die niedrigste Punktzahl gewinnt.
Viel Glück!
Antworten:
Perl 5 , 85 Bytes
40 Bytes gespart dank Peter Taylors Vorschlag! (siehe meine ältere Version unten, um die Unterschiede zu sehen)
83 Byte Code +
-pl
Flag.Probieren Sie es online!
XYXYZ wird in umgewandelt
((?!\1).)((?!\1)(?!\2).)\1\2((?!\1)(?!\2)(?!\3).)
(yup, einige der Tests können nicht wahr sein, aber es ist so kürzer), und die zweite Eingabe wird dann gegen diesen regulären Ausdruck geprüft. (Weitere Informationen zur Funktionsweise finden Sie in den Erläuterungen zu meiner älteren Version.)Meine ältere Version:
Danke an Arnauld für den Hinweis auf einen Fehler, den ich in meiner ersten Version gemacht habe.
113 Byte Code +
-pl
Flags und-Mre=eval
.Probieren Sie es online!
Am Beispiel XYXYZ: (.) (.) (.) Die erste regex wird das Muster konvertieren \ 1 \ 2, und am Ende eines Test hinzufügen , wenn zu überprüfen
$1
,$2
und$3
sind unterschiedlich: wenn dem so ist ,$\
auf eins gesetzt ist. Dann wird die zweite Eingabe gegen diesen regulären Ausdruck getestet und$\
implizit am Ende gedruckt.Der für XYXYZ generierte reguläre Ausdruck ist
(.)(.)\1\2(.)(?{++$c;$\=1if!grep{$v{$c}{${$_}}++}1..3})^
.(Ich werde ein bisschen mehr Details zu den Erklärungen hinzufügen, wenn ich einen Moment Zeit habe)
quelle
(.)((?!\1).)\1\2((?!\1)(?!\2).)
?Gelee , 9 Bytes
Gibt die Häufigkeit zurück, mit der das Muster gefunden wurde, wobei Nicht-Null wahr und Null falsch ist.
Probieren Sie es online!
Wie es funktioniert
quelle
JavaScript (ES6), 94 Byte
Arbeitet, indem das Muster in einen regulären Ausdruck umgewandelt wird, der z . B.
XYXYZ
generiert wird/(.)(?!\1)(.)\1\2(?!\2)(?!\1)(.)/
.Ich bemerke einen interessanten Unterschied zwischen PCRE und JavaScript regexp: In PCRE
\<n>
schlägt fehl (und ist daher(?!\<n>)
erfolgreich), bevor die Erfassungsgruppe definiert wird, während JavaScript erfolgreich mit der leeren Zeichenfolge übereinstimmt (und daher(?!\<n>)
fehlschlägt).quelle
Python 2 , 70 Bytes
Probieren Sie es online!
Prüft anhand der in dieser Antwort beschriebenen Methode, ob eine Zeichenfolge mit einem Muster übereinstimmt . Verwendet ein Präfix der Suchzeichenfolge, deren Länge dem Muster entspricht. Schneidet das erste Zeichen der Zeichenfolge ab, bis eine Übereinstimmung gefunden wird oder
False
wenn es leer wird73 Bytes:
Probieren Sie es online aus
Prüft anhand der in dieser Antwort beschriebenen Methode, ob eine Zeichenfolge mit einem Muster übereinstimmt . Überprüft rekursiv alle Teilzeichenfolgen, indem verzweigt wird, das erste oder letzte Zeichen zu entfernen, bis die Zeichenfolge leer ist.
quelle
Python 3 , 100 Bytes
Probieren Sie es online!
quelle
05AB1E ,
1916 BytesProbieren Sie es online!
Gibt 1 zurück, wenn wahr, null, wenn nicht wahr.
Dies können 14 Bytes sein, wenn die Rückgabe der möglichen Werte von XYZ erlaubt ist:
05AB1E , 14 Bytes
Probieren Sie es online 2!
quelle
1
undTrue
(was normalerweise ein Nachteil für diese Art von Herausforderungen ist), aber wenn die Herausforderungsspezifikation so interpretiert werden kann, dass wir Wahrheit / Falschheit für die Herausforderung definieren können Die zweite Version funktioniert wie Sie sagen.Java 7,
177176173 BytesErläuterung:
Testcode:
Probieren Sie es hier aus.
Ausgabe:
quelle
PHP, 89 Bytes
Ein Geschenk von @Christoph und @Titus
PHP, 105 Bytes
Ein Geschenk von @Christoph
PHP, 167 Bytes
quelle
++$p
anstelle von verwenden($p+1)
, obwohl ich es nicht wirklich getestet habe.[,$a,$b]=$argv;foreach(str_split($a)as$k=>$v)$r.=$k==($p=strpos($a,$v))?"(.)":"\\".++$p;echo preg_match("#$r#",$b);
.[,$a,$b]=$argv;foreach(str_split($a)as$v)$r.=$x[$v]?"\\$x[$v]":'(.)'.!$x[$v]=++$y;echo preg_match("#$r#",$b);
(Beachten Sie, dass Sie Ihre alten Noten mit behalten sollten<strike>
)!
. Es ist mehr wert als die Punkte, die ich mit Ihrer netten Lösung erreichen konnte.$argv
nach$a
und kopieren$b
; -6 Bytes mitfor(;a&$v=$argv[1][$i++];)
; -1 Byte mit längeren Variablennamen ( in der Tat! : Verwenden Sie$vv
statt$v
,$ii
statt$i
,$rr
statt$r
,$yy
statt$y
und Sie können$$vv
statt$x[$v]
)C #
184165155 Bytesdanke aloisdg!
Backtracking-Lösung, als Bonus funktioniert es mit einem Muster mit beliebigen Zeichen!
quelle
var s=l==n.Length;
? Sie verwenden es nur beireturn s?!s:
(wo!s
immerfalse
), damit es geändert werden kannreturn l==n.Length?0>1:
. Auch, was das ist:(n[i]!=n[j]||n[i]!=n[j])
. Sie überprüfenn[i]!=n[j]
zweimal .. Dies wird immer seintrue or true
/false or false
..: Sint l = p.Length,i = 0, j;
i++
und Ihrj--
innerhalb der for - Schleife. Zum Beispiel:for(j=i;j>=0;)if(p[i]==p[j]==(n[i]!=n[j--]))
Ruby,
6361 BytesAnstatt nach einem Regex-Muster zu suchen, versuchen Sie einfach, 'X', 'Y' und 'Z' auf alle möglichen Arten zu ersetzen, und finden Sie eine wörtliche Übereinstimmung.
(Eigentlich das gleiche Konzept wie die 05AB1E-Antwort von carusocomputing)
quelle
JavaScript (ES6),
92898786 BytesÜbernimmt Eingaben
p
(Muster) unds
(Zeichenfolge) in der aktuellen Syntax(p)(s)
. Rückgabe0
/1
.Formatiert und kommentiert
Testfälle
quelle
Mathematica 18 Zeichen (ohne Zeichenfolge und Muster)
Beispiele:
True
True
quelle