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.