Hinweis: Auf vielfachen Wunsch habe ich die Regeln etwas gelockert:
- Die maximale Regex-Größe wächst alle 5 Antworten um 1 Byte . Antwort N kann bis zu 29 + ⌈N / 5⌉ Bytes verwenden.
- Die Punktzahl jeder Antwort ist (M / (30 + N / 5)) N
Beim Regex-Golf erhalten Sie zwei Saitensätze und müssen den kürzesten Regex erstellen, der mit allen Saiten des ersten Satzes übereinstimmt, bei allen Saiten des zweiten Satzes jedoch nicht funktioniert.
Das ist, was wir tun werden, aber jedes Mal, wenn jemand antwortet, wird seine Regex selbst zu einem der beiden Sätze von Zeichenfolgen (nach eigener Wahl) hinzugefügt. Daher gibt es bei dieser Herausforderung eine strikte Reihenfolge der Antworten.
Lass uns ein Beispiel durchgehen:
- Sagen wir, ich beginne das mit
abc
(was ich nicht will) und lege es in das Matchset . - Dann wäre eine gültige zweite Antwort
a
, da sie mit der obigen übereinstimmt (und es gibt keine Zeichenfolgen, die noch fehlschlagen müssen). Sagen wir, diese Antwort geht in den Fail- Satz. - Jetzt muss die dritte Antwort passen,
abc
aber fehlschlagena
. Eine mögliche dritte Antwort ist daherb
. Lassen Sie uns dies in das Match- Set setzen. - Die vierte Antwort hat jetzt übereinstimmen
abc
undb
, aber nicht aufa
. Wir werden doppelte Antworten nicht zulassen, also wäre ein gültiger regulärer Ausdruckc|b
.
Wichtig ist, dass Ihre Antwort so kurz wie möglich ist. Dies mag für die ersten paar Antworten trivial sein, aber sobald wir einige Antworten erhalten haben, sollte es immer schwieriger werden, die gewünschte Übereinstimmung mit so wenigen Zeichen wie möglich zu erzielen.
Für die eigentliche Herausforderung enthält anfangs die Übereinstimmungsgruppe PPCG
und die Fehlergruppe [PPCG]
, und ich habe bereits die erste Antwort bereitgestellt.
Antworten
Das Entscheidende an dieser Herausforderung ist, dass immer nur eine Person antworten kann und jede Antwort von der vorherigen abhängt .
Es sollte niemals zwei Antworten mit der gleichen geben N
. Wenn zwei Personen gleichzeitig für N
einen antworten, sollte derjenige, der später geantwortet hat (auch wenn es ein paar Sekunden Unterschied sind), seine Antwort gnädig löschen.
Versuchen Sie, die folgenden Schritte einzuhalten, wenn Sie Ihre Antwort veröffentlichen, um den Vorgang etwas reibungsloser zu gestalten:
- Stellen Sie sicher, dass jemand die Richtigkeit der vorherigen Antwort unabhängig überprüft hat (und einen entsprechenden Kommentar hinterlassen hat).
- Nehmen Sie die beiden in der vorherigen Antwort gefundenen Testsätze und schreiben Sie eine Regex, die allen Zeichenfolgen in einem Satz und keiner im anderen entspricht.
Veröffentlichen Sie Ihre Antwort in folgendem Format:
# N. [regex flavour] - [regex size in bytes] [regex] [link to online regex tester] [notes, explanation, observations, whatever] ### The next answer has to match the following strings: [match set] ### And fail on these strings: [fail set]
Wo
N
ist die Nummer Ihrer Antwort? Bitte kopieren Sie[match set]
und[fail set]
aus der vorherigen Antwort und hängen Sie Ihre Regex an eine davon an.Dies ist absolut wichtig für die Herausforderung! Ich habe ein Dashboard-Tool für die Herausforderung bereitgestellt, um die Buchhaltung zu vereinfachen. Es basiert auf der obigen Vorlage. (Siehe unten im Beitrag.)
- Ein anderer Benutzer sollte nun Ihre Eingabe überprüfen und einen Kommentar "Richtigkeit überprüft" hinterlassen, wenn Ihre Antwort allen Regeln entspricht (siehe unten). Wenn dies nicht der Fall ist, sollten sie einen Kommentar hinterlassen, der auf Mängel hinweist. Sie haben dann 15 Minuten Zeit , um diese Probleme zu beheben. Wenn Sie dies nicht tun, wird Ihre Antwort als ungültig erachtet und sollte gelöscht werden. Anderenfalls kann eine Antwort auf die vorherige Antwort gesendet werden. (In diesem Fall können Sie jederzeit eine neue Antwort einreichen.)
Diese Vorschriften mögen ziemlich streng erscheinen, aber sie sind notwendig, um ungültige Antworten irgendwo in der Kette zu vermeiden.
Regeln
- Ein Benutzer kann nur eine Antwort pro 4 Stunden senden. (Dies soll verhindern, dass Benutzer die Frage ständig beobachten und so oft wie möglich beantworten.)
- Ein Benutzer darf nicht zwei Antworten hintereinander übermitteln. (zB seit ich Antwort 1 eingereicht habe, kann ich Antwort 2 nicht tun, aber ich könnte 3 tun.)
- Bearbeiten Sie keine verifizierten Antworten. (Auch wenn Sie einen Weg finden, es zu verkürzen!)
- Sollte ein Fehler zu einem früheren Zeitpunkt in der Kette entdeckt werden (dh nachdem die nachfolgenden Antworten veröffentlicht wurden), sollte die betreffende Antwort gelöscht und aus dem Satz von Zeichenfolgen entfernt werden, bei denen neue Übermittlungen fehlschlagen sollten. Allerdings sind alle Antworten , die da sollte geschrieben wurden nicht geändert werden zu reflektieren.
- Geben Sie eindeutig eine Geschmacksrichtung an, in der Ihr Regex gültig ist. Sie können jede Geschmacksrichtung auswählen, die online frei getestet werden kann. Es gibt eine gute Liste von Online-Testern bei StackOverflow . Insbesondere Regex101 und RegexPlanet sollten nützlich sein, da sie eine Vielzahl von Geschmacksrichtungen unterstützen. Bitte fügen Sie einen Link zu dem Tester bei, den Sie in Ihrer Antwort ausgewählt haben. Durch Einschalten der Modifikatoren
g
lobal undm
ultiline im Tester können Sie alle Zeichenfolgen auf einmal testen, eine in jeder Zeile (diese Modifikatoren werden nicht für Ihre Regex-Größe gezählt, da sie für keine einzelne Zeichenfolge benötigt werden). - Ihr regulärer Ausdruck darf nicht leer sein.
- Ihr regulärer Ausdruck für Antwort N darf nicht länger als 29 + ⌈N / 5⌉ Bytes sein. Dh die Antworten 1 bis 5 können bis zu 30 Byte (einschließlich) enthalten, die Antworten 6 bis 10 können bis zu 31 Byte enthalten ... die Antworten 31 bis 35 können bis zu 36 Byte enthalten. Überprüfen Sie das Dashboard, um festzustellen, wie viele Zeichen die nächste Antwort möglicherweise verwendet.
- Ihr regulärer Ausdruck darf nicht mit einer Zeichenfolge in einem der Testsätze identisch sein.
- Schließen Sie keine Trennzeichen in Ihre Übermittlung oder Bytezahl ein, auch wenn die jeweilige Hostsprache sie verwendet. Wenn Ihr Regex Modifikatoren verwendet, fügen Sie der Regex-Größe ein Byte pro Modifikator hinzu. ZB
/foo/i
wären 4 Bytes.
Wertung
Die Punktzahl jeder Antwort wird berechnet als (M / (30 + N / 5)) N , wobei M die Größe des regulären Ausdrucks in Bytes und N die Zahl ist. Die Punktzahl jedes Benutzers ist das Produkt aller Antworten. Der Benutzer mit der niedrigsten Gesamtpunktzahl gewinnt. Im unwahrscheinlichen Fall eines Unentschieden gewinnt der Benutzer mit der neuesten Einreichung. Ich akzeptiere die letzte Antwort des Benutzers.
Wenn Sie es vorziehen, die Ergebnisse zu summieren, können Sie die Ergebnisse jeder Antwort als N * (log (M) - log (30)) berechnen und über alle Antworten aufsummieren . Das gibt die gleiche Ranglistenreihenfolge.
Es ist nicht erforderlich, die Punktzahl einer Antwort in die Antwort aufzunehmen, sondern nur M zu melden . Das Herausforderungs-Dashboard unten in der Frage berechnet die Punktzahlen. Bei zwei sehr genauen Punktzahlen überprüfe ich die Ergebnisse mithilfe von Typen mit willkürlicher Genauigkeit.
Beachten Sie, dass die Punktzahl jeder Antwort unter 1 liegt. Sie können also die Gesamtpunktzahl verbessern, indem Sie eine neue Antwort eingeben. Je kürzer jedoch jede Ihrer Einsendungen ist, desto effizienter können Sie Ihre Punktzahl senken. Darüber hinaus können spätere Antworten aufgrund des zunehmenden Exponenten eine niedrigere Punktzahl erzielen, obwohl sie länger sind.
Instrumententafel
Ich habe ein kleines Dashboard-Tool geschrieben, das Stapel-Snippets verwendet und auf der Arbeit von Optimizer basiert . Ich hoffe, dies wird uns helfen, Ordnung in diese von der Antwort abhängigen Herausforderungen zu bringen.
Dies zeigt den aktuellen Status der Herausforderung an - insbesondere, wenn es widersprüchliche Antworten gibt, wenn eine Antwort überprüft werden muss oder wenn die nächste Antwort veröffentlicht werden kann.
Es wird auch eine Liste aller Antworten mit Punktzahlen sowie eine Rangliste aller Benutzer erstellt. Bitte halten Sie sich an das oben angegebene Herausforderungsformat, damit das Dashboard die relevanten Zeichenfolgen aus Ihren Antworten auslesen kann. Andernfalls werden Sie möglicherweise nicht in die Bestenliste aufgenommen.
Bitte lassen Sie mich wissen ( idealerweise im Chat ), wenn Sie Fehler entdecken oder Ideen haben, wie die Nützlichkeit des Tools verbessert werden könnte.
quelle
Antworten:
42. Pythongeschmack - 38
Getestet auf Regex101
Der Mangel an Entropie in den letzten Antworten wurde mir klar ... (hätte das früher tun sollen)
Die nächste Antwort muss mit den folgenden Zeichenfolgen übereinstimmen:
Und versage auf diesen Saiten:
quelle
28. Pythongeschmack - 29
Getestet auf Regex101
Es wurde viel herumgespielt - # 4 im Pass-Set ist wahrscheinlich der größte Schmerz, da es eine Teilzeichenfolge eines Regex im Fail-Set ist und auch ein Suffix mit einem anderen Regex im Fail-Set teilt.
Die nächste Antwort muss mit den folgenden Zeichenfolgen übereinstimmen:
Und versage auf diesen Saiten:
quelle
24 - Pythongeschmack - 29
Hier getestet
Die nächste Antwort muss mit den folgenden Zeichenfolgen übereinstimmen:
Und versage auf diesen Saiten:
quelle
10. Pythongeschmack - 19
Getestet auf Regex101 .
Die nächste Antwort muss mit den folgenden Zeichenfolgen übereinstimmen:
Und versage auf diesen Saiten:
quelle
8. ECMAScript-Variante - 14 Bytes
Demo
Die nächste Antwort muss mit den folgenden Zeichenfolgen übereinstimmen:
Und versage auf diesen Saiten:
quelle
2. ECMAScript-Variante - 6 Bytes
Teste es hier
Die nächste Antwort muss mit den folgenden Zeichenfolgen übereinstimmen:
Und versage auf diesen Saiten:
quelle
9. Python Geschmack - 28
Getestet auf Regex101
Die nächste Antwort muss mit den folgenden Zeichenfolgen übereinstimmen:
Und versage auf diesen Saiten:
quelle
23. PCRE-Geschmack - 28
Getestet auf Regex101.
Die nächste Antwort muss mit den folgenden Zeichenfolgen übereinstimmen:
Und versage auf diesen Saiten:
quelle
[^]
das?]
als erstes Element einer Zeichenklasse (nach optionaler Negation) nur ein Element]
innerhalb der Zeichenklasse und wird nicht geschlossen (da leere Zeichenklassen etwas sinnlos sind). Also[^]]
passt alles andere als]
. Die bemerkenswerte Ausnahme ist ECMAScript, das leere Zeichenklassen zulässt. In diesem Fall[]
stimmt nichts überein, es verhält sich wie(?!)
und[^]
stimmt mit jedem beliebigen Zeichen überein, was praktisch ist, da ECMAScript keinens
Modifikator hat und[\s\S]
es schwierig ist, einen Lesevorgang durchzuführen .11. Python - 29
► Testen Sie bei RegexPlanet
Fast alle ungültigen Antworten haben eine andere Länge als alle gültigen. Dieser Regex macht davon Gebrauch.
Die nächste Antwort muss mit den folgenden Zeichenfolgen übereinstimmen:
Und versage auf diesen Saiten:
quelle
29. PCRE-Geschmack - 28
Getestet auf Regex101
Diese Antwort funktioniert immer noch ...
Die nächste Antwort muss mit den folgenden Zeichenfolgen übereinstimmen:
Und versage auf diesen Saiten:
quelle
31. Perlgeschmack - 29
[?[CP(].[-<)|w]|^P|^[^C|\\]*$
Ich weiß nicht, wie es funktioniert, es wurde von meinem ersten Versuch mit genetischen Algorithmen produziert . Es gibt eine Programmausgabe , die die Antwort erwähnt.
Die nächste Antwort muss passen:
und scheitern:
quelle
29
? Auf diese Weise wird es nicht bald enden ... Ich denke, die größte Herausforderung besteht darin, den letzten, den ultimativen Regex zu finden.32. PCRE - 30 Bytes
Getestet auf Regex101
Die nächste Antwort muss mit den folgenden Zeichenfolgen übereinstimmen :
Und versage auf diesen Saiten :
quelle
1. ECMAScript-Variante - 2 Bytes
Testen Sie es auf Regex101.
Die anfängliche Übereinstimmungsmenge ist
PPCG
und die fehlerhafte Menge[PPCG]
. Deshalb testet diese Regex einfach , dass die Zeichenfolge beginnt mitP
.Die nächste Antwort muss mit den folgenden Zeichenfolgen übereinstimmen:
Und versage auf diesen Saiten:
quelle
3. ECMAScript-Variante - 6 Bytes
Teste es hier
Die nächste Antwort muss mit den folgenden Zeichenfolgen übereinstimmen:
Und scheitern Sie an diesen Saiten:
quelle
7. Python-Geschmack - 16
Getestet auf Regex101
Muss ein \ zur Trefferliste hinzufügen :)
Die nächste Antwort muss mit den folgenden Zeichenfolgen übereinstimmen:
Und versage auf diesen Saiten:
quelle
12. ECMAScript-Geschmack - 17
Teste es hier .
Die nächste Antwort muss mit den folgenden Zeichenfolgen übereinstimmen:
Und versage auf diesen Saiten:
quelle
22. PCRE-Geschmack - 29 Bytes
Da das Original # 22 1 Stunde lang nicht geändert wurde, gehe ich davon aus, dass es ungültig geworden ist.
Demo
Die nächste Antwort muss mit den folgenden Zeichenfolgen übereinstimmen:
Und versage auf diesen Saiten:
quelle
26. Pythongeschmack - 28
Test auf Regex101
Die nächste Antwort muss mit den folgenden Zeichenfolgen übereinstimmen:
Und versage auf diesen Saiten:
quelle
30. Pythongeschmack - 28
Getestet auf Regex101
Wenn es einen Willen gibt ...
Die nächste Antwort muss mit den folgenden Zeichenfolgen übereinstimmen:
Und versage auf diesen Saiten:
quelle
37. Perlgeschmack - 30
Einreichung auf Regex101 .
Die Lösung wurde mit demselben Programm wie zuvor erstellt. Das Programm hat auch 29-Zeichen-Lösung gedruckt
\?[^$w]*\$|[]^C]\w)$|w.]|\w.\
, ich weiß nicht warum, wie es aussieht, als wäre es ein Regex ...Die nächste Antwort muss mit den folgenden Zeichenfolgen übereinstimmen:
Und versage auf diesen Saiten:
quelle
40. PCRE - 33 Bytes
Getestet auf Regex101
Die nächste Antwort muss mit den folgenden Zeichenfolgen übereinstimmen :
Und versage auf diesen Saiten :
quelle
4. ECMAScript-Variante - 5 Bytes
Teste es hier .
Die nächste Antwort muss mit den folgenden Zeichenfolgen übereinstimmen:
Und versage auf diesen Saiten:
quelle
5. ECMAScript-Variante - 6 Bytes
Getestet auf Regex101 .
Zeit, die Dinge mit dem Erfolgsset ein wenig aufzupeppen.
Die nächste Antwort muss mit den folgenden Zeichenfolgen übereinstimmen:
Und versage auf diesen Saiten:
quelle
6. ECMAScript-Variante - 9 Bytes
Getestet auf Regex101 .
Die nächste Antwort muss mit den folgenden Zeichenfolgen übereinstimmen:
Und versage auf diesen Saiten:
quelle
14. PCRE-Geschmack - 25
Getestet auf Regex101
Das wird langsam ziemlich schwierig.
Die nächste Antwort muss mit den folgenden Zeichenfolgen übereinstimmen:
Und versage auf diesen Saiten:
quelle
15. PCRE-Geschmack - 26
Getestet auf Regex101
Die nächste Antwort muss mit den folgenden Zeichenfolgen übereinstimmen:
Und versage auf diesen Saiten:
quelle
16. PCRE-Geschmack - 21
Getestet mit Regex 101 .
Die nächste Antwort muss mit den folgenden Zeichenfolgen übereinstimmen:
Und versage auf diesen Saiten:
quelle
PPCG
.25. PCRE-Geschmack - 29
Hier getestet. (Der reguläre Ausdruck "test" enthält einen zusätzlichen Code
\n
, um sicherzustellen, dass keine Übereinstimmung mehrere Zeilen umfasst. Dies ist nicht erforderlich, um jede einzelne Zeichenfolge zuzuordnen.)Das war eine tief hängende Frucht! :) Ich muss allerdings Plannapus gratulieren, dieser Regex ist für die aktuellen Testsätze erstaunlich elegant. Wenn Sie diese Antwort positiv bewerten möchten, stellen Sie sicher, dass Sie auch die vorherige positiv bewerten!
Die nächste Antwort muss mit den folgenden Zeichenfolgen übereinstimmen:
Und versage auf diesen Saiten:
quelle
35. PCRE - 35 Bytes
Getestet auf Regex101
Die nächste Antwort muss mit den folgenden Zeichenfolgen übereinstimmen :
Und versage auf diesen Saiten :
quelle
36. Pythongeschmack - 32
Getestet auf Regex101
Ich hatte drei 32-Byte-reguläre Ausdrücke parat und zum Glück funktioniert einer davon noch: D
Die nächste Antwort muss mit den folgenden Zeichenfolgen übereinstimmen:
Und versage auf diesen Saiten:
quelle