Avis: Suite à la demande générale, j'ai légèrement assoupli les règles:
- La taille maximale des expressions rationnelles augmente d'un octet toutes les 5 réponses . La réponse N peut utiliser jusqu'à 29 + «N / 5» octets.
- Le score de chaque réponse sera (M / (30 + N / 5)) N
Dans Regex Golf, on vous donne deux jeux de chaînes et il vous est demandé de créer la regex la plus courte qui correspond à toutes les chaînes du premier ensemble, mais échoue pour toutes les chaînes du second.
C'est ce que nous allons faire, mais chaque fois que quelqu'un répond, son regex lui-même sera ajouté à l'un des deux jeux de chaînes (de son choix). Par conséquent, il y a un ordre strict pour répondre à ce défi.
Passons en exemple:
- Supposons que je commence avec
abc
(ce que je ne ferai pas) et que je le mette dans le match set. - Ensuite, une deuxième réponse valide serait
a
, car elle correspond à ce qui précède (et aucune chaîne ne doit encore échouer). Dites que cette réponse va dans le jeu d' échec . - Maintenant, la troisième réponse doit correspondre
abc
mais échouera
. Une troisième réponse possible est doncb
. Mettons cela dans le jeu d' allumettes . - La quatrième réponse doit maintenant correspondre
abc
etb
, mais échouera
. Nous interdirons les doublons de réponses, ainsi une expression rationnelle valide seraitc|b
.
L'important est que votre réponse soit aussi courte que possible. Cela peut paraître trivial pour les premières réponses, mais une fois que nous avons obtenu quelques réponses, il devrait devenir de plus en plus difficile d'obtenir la correspondance souhaitée dans le moins de caractères possible.
Pour le défi réel, le jeu de correspondance contient initialement PPCG
et le jeu d'échec contient [PPCG]
, et j'ai déjà fourni la première réponse.
Répondre
L’essentiel pour comprendre ce défi est qu’une seule personne à la fois peut répondre et que chaque réponse dépend de celle qui la précède .
Il ne devrait jamais y avoir deux réponses avec le même N
. Si deux personnes répondent simultanément pour certaines personnes N
, celle qui a répondu plus tard (même si la différence est de quelques secondes) devrait effacer gracieusement leur réponse.
Pour que cela fonctionne un peu mieux, essayez de vous en tenir aux étapes suivantes lorsque vous publiez votre réponse:
- Assurez-vous que quelqu'un a indépendamment vérifié l'exactitude de la réponse précédente (et laissé un commentaire correspondant).
- Prenez les deux ensembles de tests trouvés dans la réponse précédente et écrivez une expression régulière qui correspond à toutes les chaînes d'un ensemble et aucune à l'autre.
Postez votre réponse dans le format suivant:
# 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]
où
N
est le numéro de votre réponse. Veuillez copier[match set]
et[fail set]
de la réponse précédente, et ajouter votre regex à l' un d'eux.C'est absolument vital pour le défi! J'ai fourni un outil de tableau de bord pour le défi d'aider à la comptabilité, et il s'appuie sur le modèle ci-dessus. (Voir bas de l'article.)
- Un autre utilisateur devrait maintenant examiner votre soumission et laisser un commentaire «Correction de l'exactitude vérifiée» si votre réponse respecte toutes les règles (voir ci-dessous). Si ce n'est pas le cas, ils devraient laisser un commentaire signalant les défauts éventuels. Vous avez alors 15 minutes pour résoudre ces problèmes. Si vous ne le faites pas, votre réponse sera considérée comme non valide, devrait être supprimée et quelqu'un d'autre pourrait poster une réponse de suivi à la précédente. (Si cela se produit, vous êtes libre de soumettre une nouvelle réponse à tout moment.)
Ces réglementations peuvent sembler assez strictes, mais elles sont nécessaires pour éviter les réponses non valides quelque part dans la chaîne.
Règles
- Un utilisateur ne peut soumettre qu'une seule réponse par période de 4 heures. (Ceci afin d’empêcher les utilisateurs de regarder constamment la question et de répondre autant que possible.)
- Un utilisateur ne peut pas soumettre deux réponses consécutives. (par exemple, depuis que j'ai soumis la réponse 1, je ne peux pas répondre à la question 2, mais je pourrais en faire la réponse 3.)
- Ne modifiez pas les réponses vérifiées. (Même si vous trouvez un moyen de le raccourcir!)
- Si une erreur est découverte plus tôt dans la chaîne (c'est-à-dire après l'affichage des réponses de suivi), la réponse fautive doit être supprimée et sera supprimée de l'ensemble des chaînes sur lesquelles les nouvelles soumissions échouent. Cependant , toutes les réponses postées depuis ne doivent pas être modifiées pour refléter.
- Indiquez clairement une des saveurs dans lesquelles votre regex est valide. Vous pouvez choisir n’importe quelle saveur librement testable en ligne. Il existe une bonne liste de testeurs en ligne sur StackOverflow . En particulier, Regex101 et RegexPlanet devraient être utiles, car ils prennent en charge une grande variété de saveurs. Veuillez inclure un lien vers le testeur que vous avez choisi dans votre réponse. En activant les modificateurs lobal
g
etm
ultiline dans le testeur, vous pouvez tester toutes les chaînes en même temps, une sur chaque ligne (ces modificateurs ne sont pas pris en compte dans la taille de votre expression régulière, car ils ne sont pas nécessaires pour une chaîne individuelle). - Votre regex ne doit pas être vide.
- Votre expression régulière pour la réponse N ne doit pas dépasser 29 + «N / 5» octets. Par exemple, les réponses 1 à 5 peuvent utiliser jusqu'à 30 octets (inclus), les réponses 6 à 10 peuvent utiliser jusqu'à 31 octets ... les réponses 31 à 35 peuvent utiliser jusqu'à 36 octets. Consultez le tableau de bord pour voir combien de caractères la prochaine réponse peut utiliser.
- Votre expression rationnelle ne doit pas être identique à une chaîne dans l'un des ensembles de test.
- N'incluez pas de délimiteurs dans votre soumission ni dans le nombre d'octets, même si la langue hôte correspondante les utilise. Si votre regex utilise des modificateurs, ajoutez un octet par modificateur à la taille de la regex. Par exemple
/foo/i
serait 4 octets.
Notation
Le score de chaque réponse est calculé comme suit: (M / (30 + N / 5)) N , où M est la taille de la regex en octets et N son nombre. Le score de chaque utilisateur est le produit de toutes ses réponses. L'utilisateur avec le score global le plus bas gagne. Dans le cas improbable d'une égalité, l'utilisateur avec la dernière soumission gagne. J'accepterai la dernière réponse de cet utilisateur.
Si vous préférez faire la somme des scores, vous pouvez calculer le score de chaque réponse sous la forme N * (log (M) - log (30)) et faire la somme de ces réponses pour toutes les réponses. Cela donnera le même ordre de classement.
Il n'y a pas besoin d'inclure dans la réponse du score d'une réponse, juste rapport M . Le tableau de bord de défi au bas de la question calculera les scores, et dans le cas de deux scores très proches, je vérifierai les résultats à l'aide de types à précision arbitraire.
Notez que le score de chaque réponse est inférieur à 1, vous pouvez donc améliorer votre score global en fournissant une nouvelle réponse. Cependant, plus chacune de vos soumissions est courte, plus vous pouvez réduire votre score efficacement. En outre, les réponses ultérieures peuvent atteindre un score plus faible bien qu’elles soient plus longues en raison de l’exposant en augmentation.
Tableau de bord
J'ai écrit un petit outil de tableau de bord, utilisant Stack Snippets, basé sur le travail d'Optimizer ici . J'espère que cela nous aidera à mettre de l'ordre dans ces défis dépendant de la réponse.
Cela affichera le statut actuel du défi - en particulier, s'il y a des réponses contradictoires, si une réponse doit être vérifiée ou si la réponse suivante peut être postée.
Il produit également une liste de toutes les réponses avec les scores, ainsi qu'un classement de tous les utilisateurs. Veuillez vous en tenir au format de défi ci-dessus pour que le tableau de bord puisse lire les chaînes pertinentes dans vos réponses. Sinon, vous pourriez ne pas être inclus dans le classement.
Faites-moi savoir ( idéalement sur le chat ) si vous repérez des bugs ou si vous avez des idées pour améliorer l'utilité de l'outil.
la source
Réponses:
42. Saveur Python - 38
Testé sur Regex101
Le manque d'entropie dans les dernières réponses m'atteignait ... (j'aurais dû le faire plus tôt)
La réponse suivante doit correspondre aux chaînes suivantes:
Et échouer sur ces chaînes:
la source
28. Saveur Python - 29
Testé sur Regex101
On a beaucoup manigancé. Le n ° 4 de l'ensemble de passes est probablement la plus grande difficulté, car il s'agit d'une sous-chaîne d'une expression rationnelle de l'ensemble d'échecs et partage également un suffixe avec une autre expression régulière de l'ensemble d'échecs.
La réponse suivante doit correspondre aux chaînes suivantes:
Et échouer sur ces chaînes:
la source
24 - Saveur Python - 29
Testé ici
La réponse suivante doit correspondre aux chaînes suivantes:
Et échouer sur ces chaînes:
la source
10. Saveur Python - 19
Testé sur Regex101 .
La réponse suivante doit correspondre aux chaînes suivantes:
Et échouer sur ces chaînes:
la source
8. Saveur ECMAScript - 14 octets
Démo
La réponse suivante doit correspondre aux chaînes suivantes:
Et échouer sur ces chaînes:
la source
2. Saveur ECMAScript - 6 octets
Testez-le ici
La réponse suivante doit correspondre aux chaînes suivantes:
Et échouer sur ces chaînes:
la source
9. Saveur Python - 28
Testé sur Regex101
La réponse suivante doit correspondre aux chaînes suivantes:
Et échouer sur ces chaînes:
la source
23. Saveur PCRE - 28
Testé sur Regex101.
La réponse suivante doit correspondre aux chaînes suivantes:
Et échouer sur ces chaînes:
la source
[^]
-il?]
tant que premier élément d'une classe de caractères (après une négation facultative), est simplement une partie]
interne de la classe de caractères et ne ferme pas (car les classes de caractères vides sont un peu inutiles). Donc[^]]
correspond à tout sauf]
. L'exception notable est ECMAScript, qui autorise les classes de caractères vides. Dans ce cas ,[]
ne correspond pas à quoi que ce soit, il agit comme(?!)
et[^]
correspond à un caractère, ce qui est pratique, car ECMAScript ne dispose pas d' uns
modificateur, et[\s\S]
est une douleur à taper une lecture.11. Python - 29
► Testez chez RegexPlanet
Presque toutes les réponses non valides ont une longueur différente de toutes les réponses valides. Cette regex utilise cela.
La réponse suivante doit correspondre aux chaînes suivantes:
Et échouer sur ces chaînes:
la source
29. Saveur PCRE - 28
Testé sur Regex101
Cette réponse fonctionne toujours ...
La réponse suivante doit correspondre aux chaînes suivantes:
Et échouer sur ces chaînes:
la source
31. Saveur Perl - 29
[?[CP(].[-<)|w]|^P|^[^C|\\]*$
Je ne sais pas comment cela fonctionne, il a été produit par ma première incursion dans les algorithmes génétiques . Il y a une sortie de programme qui mentionne la réponse.
La réponse suivante doit correspondre:
et échouer:
la source
29
? De cette façon, ça ne va pas finir bientôt ... Je pense que le principal défi est de trouver le dernier, la regex ultime.32. PCRE - 30 octets
Testé sur Regex101
La réponse suivante doit correspondre aux chaînes suivantes :
Et échouer sur ces chaînes :
la source
1. Saveur ECMAScript - 2 octets
Testez-le sur Regex101.
Le jeu de correspondance initial est
PPCG
et le jeu en échec[PPCG]
. Par conséquent, cette expression rationnelle vérifie simplement que la chaîne commence parP
.La réponse suivante doit correspondre aux chaînes suivantes:
Et échouer sur ces chaînes:
la source
3. Saveur ECMAScript - 6 octets
Testez-le ici
La réponse suivante doit correspondre aux chaînes suivantes:
Et échouez sur les cordes suivantes:
la source
7. Saveur Python - 16
Testé sur Regex101
Je dois ajouter un \ à la liste des correspondances :)
La réponse suivante doit correspondre aux chaînes suivantes:
Et échouer sur ces chaînes:
la source
12. Saveur ECMAScript - 17
Testez-le ici .
La réponse suivante doit correspondre aux chaînes suivantes:
Et échouer sur ces chaînes:
la source
22. Saveur PCRE - 29 octets
Puisque le numéro 22 original n’a pas été modifié pendant une heure, je suppose qu’il est devenu invalide.
Démo
La réponse suivante doit correspondre aux chaînes suivantes:
Et échouer sur ces chaînes:
la source
26. saveur de python - 28
Test sur Regex101
La réponse suivante doit correspondre aux chaînes suivantes:
Et échouer sur ces chaînes:
la source
30. Saveur Python - 28
Testé sur Regex101
Quand il y a une volonté ...
La réponse suivante doit correspondre aux chaînes suivantes:
Et échouer sur ces chaînes:
la source
37. Saveur de Perle - 30
Soumission sur Regex101 .
La solution a été produite par le même programme que précédemment. Le programme a également imprimé une solution à 29 caractères
\?[^$w]*\$|[]^C]\w)$|w.]|\w.\
, je ne sais pas pourquoi, car cela ressemble à une regex malformée ...La réponse suivante doit correspondre aux chaînes suivantes:
Et échouer sur ces chaînes:
la source
40. PCRE - 33 octets
Testé sur Regex101
La réponse suivante doit correspondre aux chaînes suivantes :
Et échouer sur ces chaînes :
la source
4. Saveur ECMAScript - 5 octets
Testez-le ici .
La réponse suivante doit correspondre aux chaînes suivantes:
Et échouer sur ces chaînes:
la source
5. Saveur ECMAScript - 6 octets
Testé sur Regex101 .
Il est temps de pimenter un peu les choses avec le succès.
La réponse suivante doit correspondre aux chaînes suivantes:
Et échouer sur ces chaînes:
la source
6. Saveur ECMAScript - 9 octets
Testé sur Regex101 .
La réponse suivante doit correspondre aux chaînes suivantes:
Et échouer sur ces chaînes:
la source
14. Saveur PCRE - 25
Testé sur Regex101
Cela commence à devenir assez difficile.
La réponse suivante doit correspondre aux chaînes suivantes:
Et échouer sur ces chaînes:
la source
15. Saveur PCRE - 26
Testé sur Regex101
La réponse suivante doit correspondre aux chaînes suivantes:
Et échouer sur ces chaînes:
la source
16. Saveur PCRE - 21
Testé sur Regex 101 .
La réponse suivante doit correspondre aux chaînes suivantes:
Et échouer sur ces chaînes:
la source
PPCG
.25. Saveur PCRE - 29
Testé ici. (Le regex test en contient une supplémentaire
\n
pour s'assurer qu'aucune correspondance ne s'étend sur plusieurs lignes. Cela n'est pas nécessaire pour faire correspondre chaque chaîne individuelle.)C'était un fruit à portée de main! :) Je dois cependant féliciter plannapus, cette regex est incroyablement élégante pour les sets de test actuels. Si vous voulez augmenter cette réponse, assurez-vous de passer à la précédente également!
La réponse suivante doit correspondre aux chaînes suivantes:
Et échouer sur ces chaînes:
la source
35. PCRE - 35 octets
Testé sur Regex101
La réponse suivante doit correspondre aux chaînes suivantes :
Et échouer sur ces chaînes :
la source
36. Saveur Python - 32
Testé sur Regex101
J'avais trois regex de 32 octets prêts, et heureusement l'un d'eux fonctionne toujours: D
La réponse suivante doit correspondre aux chaînes suivantes:
Et échouer sur ces chaînes:
la source