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.