Schreiben Sie eine Regex, die in mindestens 2 Regex-Varianten (oder -Versionen) funktioniert, und passen Sie für jede Variante (oder Version), in der sie ausgeführt wird, eine andere Zeichenfolge an.
Die Zeichenfolgen, die in dieser Challenge gefunden werden müssen, sind die ersten Wörter der Ubuntu-Codenamen, die unten aufgeführt sind. Ihr regulärer Ausdruck muss oben in der Liste stehen. Das heißt, wenn Ihre Regex Werke in 3 Geschmacksrichtungen, hat es zu passen Warty
Hoary
und Breezy
, und andere nicht.
Warty
Hoary
Breezy
Dapper
Edgy
Feisty
Gutsy
Hardy
Intrepid
Jaunty
Karmic
Lucid
Maverick
Natty
Oneiric
Precise
Quantal
Raring
Saucy
Trusty
Utopic
Vivid
Wily
Xenial
Yakkety
Zesty
17.10
18.04
18.10
19.04
19.10
...
Wenn Ihre reguläre Ausdrucksweise in mehr als 26 Varianten funktioniert, können Sie stattdessen die Ubuntu-Versionsnummern verwenden. Ändern Sie ab 17.10 für jede neue Variante die zweite Nummer in 10, wenn es 04 war, und erhöhen Sie die erste Nummer und ändern Sie die zweite in 04, wenn dies nicht der Fall ist.
In jeder Variante sollte Ihr regulärer Ausdruck nur mit der angeblichen Zeichenfolge und nichts anderem übereinstimmen (nicht auf die Codenamen beschränkt). Das Nachziehen von Zeilenumbrüchen spielt keine Rolle. Das bedeutet, dass Ihre Regex entweder nur mit der Zeichenfolge ohne nachfolgende Zeilenvorschubzeile übereinstimmen kann, nur mit der Zeichenfolge mit nachfolgender Zeilenvorschubzeile oder mit beiden. Und es muss nicht in verschiedenen Geschmacksrichtungen konsistent sein. Sie können davon ausgehen, dass die Eingabe in druckbarem ASCII-Format erfolgt (mit Ausnahme der abschließenden Newline, falls vorhanden).
Ihre Punktzahl ist (die Länge Ihres Codes + 10) / ((Anzahl der Aromen) ^ 2). Die niedrigste Punktzahl gewinnt.
quelle
Antworten:
87 Bytes, 5 Aromen, (87 + 10) / 25 = 3,88
Ich habe mich vorerst für die einfach zu testenden Geschmacksrichtungen entschieden, die:
Die allgemeine Struktur ist
^((...)y|...)$
also das Ausklammern des Trailingy
Punkte und das Hinzufügen von Ankern.Warty (PCRE)
In PCRE und Ruby gibt
[[:word:]]
es eine POSIX-Zeichenklasse, die einem Wortzeichen entspricht. In anderen Varianten erhalten Sie eine[[:word:]
Zeichenklasse als Literal&&]
, bei der die(?=W)
Zusicherung fehlschlägt . Damit Ruby fehlschlägt,&&
wird die POSIX-Klasse mit nothing geschnitten, wohingegen in PCRE&&
keine besondere Bedeutung hat.Hoary (Javascript)
Aus welchem Grund auch immer, Javascript ist die einzige Variante, bei der
\a
es sich um eine wörtliche handelta
- in anderen Varianten entspricht es dem Glockenzeichen (ASCII 7).Breezy (Python)
In Python und Javascript
\z
ist es ein Literalz
- in den anderen Varianten entspricht es dem$
Ende des String-Ankers. Um Javascript zum Scheitern zu bringen, verwenden wir die char-Klasse[]e]
, die eine leere char-Klasse ist, die[]
danne]
in Javascript wörtlich ist , und eine Zwei-Zeichen-Klasse[]e]
in Python.Dapper (.NET)
In
.NET
,[D-[E]]
ist ein Satz Unterschied, Entfernen des Satzes[E]
aus[D]
. In PCRE, Javascript und Python haben wir die Klasse[D-[E]
dann als Literal]
. Ruby ist ein bisschen anders, aber aus irgendeinem Grund wird er als eine Klasse analysiert,[D-[E]]
die nur passtE
, und ich muss noch herausfinden, warum ...Edgy (Ruby)
Ruby erlaubt Zeichenklassen innerhalb von Zeichenklassen,
[[d]]
ist also tatsächlich gleichbedeutend mit[d]
oder nurd
. In den anderen Geschmacksrichtungen haben wir[[d]
dann einen wörtlichen]
.quelle