Koronkorko ist das finnische Wort für Zinseszins . Wir wollen kein Zinseszins für unsere Zeichenfolgen, also finden wir den kürzestmöglichen regulären Ausdruck, um ihn auszuschließen.
Bestimmen Sie bei einer Zeichenfolge, die nur aus den Großbuchstaben AZ besteht, den kürzestmöglichen regulären Ausdruck, der mit der Zeichenfolge übereinstimmt, wenn er die Teilzeichenfolge nicht enthält KORONKORKO
. Zeichenfolgen, die KORONKORKO
als Teilzeichenfolge enthalten sind, sollten nicht mit dem regulären Ausdruck übereinstimmen.
Nur die Zeichen A
- Z
, [
, ]
, -
, ^
, ,
?
, *
, +
, |
, (
, und )
sollen in dem Ausdruck verwendet werden.
Ich denke, dies kann mit 118 Zeichen im Ausdruck erfolgen. Kannst du es kürzer machen?
Hinweis: Diese Herausforderung stammt von Ohjelmointiputka (auf Finnisch).
!
ein erlaubtes Zeichen wäre, hätten Sie es^((?!KORONKORO).)*$
für 19 Bytes tun können .!
ist das nicht erlaubt.-
und^
innerhalb von Zeichenklassen zuzulassen (^
kann also nicht als Anker verwendet werden), und eine Übereinstimmung wird nur gezählt, wenn die gesamte Zeichenfolge mit dem regulären Ausdruck übereinstimmt (dh eine implizite Umgebung^$
, z im Gegensatz zu normalen "regulären Ausdrücken", die eine Zeichenfolge als übereinstimmend zählen, wenn ein Teil davon mit demAntworten:
204 Zeichen
Erzeugt durch Verwandeln
.*KORONKORKO.*
in eine endliche Zustandsmaschine, Invertieren der endlichen Zustandsmaschine und Zurückverwandeln in einen regulären Ausdruck.quelle
Python,
777997118 BytesEdit 3: Rewrite. Verwendet verschachtelte Lookaheads
Regex 101
Bearbeiten 2: '$ |' hinzugefügt im gesamten regulären Ausdruck. Wenn nun ein Präfix von KORONKORKO abgeglichen wurde, ist das nächste übereinstimmende Element das Ende der Zeichenfolge, ein Zeichen, das das Präfix beendet, oder ein Zeichen, das das Präfix erweitert, wenn darauf etwas folgt, das das Präfix beendet.
Dieser reguläre Ausdruck funktioniert mit
re.fullmatch()
, der in Python 3.4 hinzugefügt wurde. Zur Verwendung mitre.match()
,^
und$
Bedarf hinzugefügt werden zu Beginn und am Ende des Musters, jeweils für 2 weiteres Bytes.Regex101 Link
Vorherige falsche Lösung (siehe Kommentare):
Edit: Single K hinzugefügt
quelle
K
.KKORONKORKO
^
und das Ende$
sind nicht notwendig. Auch=
und$
sind nicht erlaubt.