Golf de regex2 chasses jouables incluses

Le golf de regex de xkcd : l'énigme derrière la BD 1313

Comment la BD xkcd sur le golf de regex a lancé un genre d'énigme, comment Peter Norvig l'a résolue, et où jouer à une nouvelle partie de golf de regex chaque jour.

Logo de Regex Hunter

· 6 min de lecture · Mis à jour le

/j|bu|oo/

à attraper

  • jefferson
  • buchanan
  • hoover

à épargner

  • fremont
  • dewey
  • gore

Le golf de regex, l'énigme rendue célèbre par la BD xkcd 1313, c'est le jeu qui consiste à écrire l'expression régulière la plus courte qui correspond à tous les mots d'une liste et à aucun d'une autre. Comme au vrai golf, moins de coups, c'est mieux. Voici toute l'idée en un seul plateau, essayez :

Chasse jouablepar 4

Attrapez les mots qui finissent par -ing, épargnez les autres.

Cibles · 0/5 attrapées

  • singcible
  • ringcible
  • goingcible
  • thingcible
  • swingcible

Innocents · erreurs : 0

  • ingotinnocent
  • fringeinnocent
  • kingsinnocent
  • dingoinnocent
  • hingeinnocent

Tapez une regex — le plateau se met à jour en direct.

Essayez-le dans le bac à sable
Ça vous plaît ? Une nouvelle chasse chaque jour.Jouer la chasse du jour

C'est tout le jeu. Le plaisir, c'est de voir à quelle vitesse il cesse d'être facile.

01La BD qui lui a donné son nom

En janvier 2014, xkcd #1313, « Regex Golf » a fait découvrir le jeu à beaucoup de développeurs. Sa première case montre une regex qui correspond aux sous-titres de Star Wars mais pas à ceux de Star Trek :

Correspondances11/11 comme prévu
/M | [TN]|B/

Doit correspondre · Star Wars6/6

  • THE PHANTOM MENACE
  • ATTACK OF THE CLONES
  • REVENGE OF THE SITH
  • A NEW HOPE
  • THE EMPIRE STRIKES BACK
  • RETURN OF THE JEDI

Ne doit pas · Star Trek5/5

  • THE WRATH OF KHAN
  • THE SEARCH FOR SPOCK
  • THE VOYAGE HOME
  • THE FINAL FRONTIER
  • THE UNDISCOVERED COUNTRY
Essayez-le dans le bac à sable
La réponse de xkcd en 10 caractères. Attention aux espaces : ils font partie du motif.

Et le texte au survol de la BD fait monter les enchères : un motif de 63 caractères qui correspond au nom de famille de chaque président américain élu, mais à aucun des candidats qu'ils ont battus.

Motif63 car. · 13 fragments
/bu|[rn]t|[coy]e|[mtg]a|j|iso|n[hl]|[ae]d|lev|sh|[lnd]i|[po]o|ls/

Touchez un fragment pour le repérer

La regex des présidents de xkcd #1313 : 13 petits fragments reliés par des |.

On dirait du charabia, mais lisez-la comme une liste : chaque fragment entre deux barres | attrape quelques présidents. j à lui seul attrape Jefferson, Jackson et Johnson.

02Le bug dans la chute

Le même mois, Peter Norvig, alors directeur de la recherche chez Google et coauteur du manuel de référence en IA, a écrit un notebook pour résoudre le golf de regex automatiquement. Son premier test vérifiait la réponse de la BD. Il a échoué :

Correspondances9/10 comme prévu
/bu|[rn]t|[coy]e|[mtg]a|j|iso|n[hl]|[ae]d|lev|sh|[lnd]i|[po]o|ls/

Doit correspondre · Vainqueurs5/5

  • lincoln
  • obama
  • kennedy
  • reagan
  • washington

Ne doit pas · Perdants4/5

  • romney
  • mccain
  • dewey
  • gore
  • fremont
Essayez-le dans le bac à sable
Les vainqueurs doivent correspondre, pas les perdants. Un perdant se fait attraper.

[rn]t attrape fremont : John C. Frémont, battu à l'élection de 1856 par James Buchanan. Norvig a compris que Randall avait retenu Millard Fillmore, le candidat d'un tiers parti cette année-là, comme adversaire de Buchanan. Une réponse au golf de regex ne vaut que ce que valent ses listes de mots.

03Comment un ordinateur joue au golf de regex

Le solveur de Norvig est un joli raisonnement, et il vaut la peine d'être connu parce que c'est aussi comme ça que pensent les bons golfeurs humains :

  1. Rassembler des fragments candidats. Prenez tous les petits morceaux des noms des vainqueurs, d'un à quatre caractères, avec certaines lettres remplacées par ., comme bu, a.a ou r.e$.
  2. Ne garder que les fragments sûrs. Un fragment n'est utile que s'il correspond à au moins un vainqueur et à aucun perdant.
  3. Couvrir les vainqueurs. Choisissez ensuite des fragments jusqu'à ce que chaque vainqueur soit couvert. C'est le célèbre problème de couverture par ensembles, qui est NP-difficile : le solveur procède donc de façon gloutonne, en prenant à chaque fois le fragment qui offre le meilleur compromis entre vainqueurs couverts et caractères dépensés.
  4. Les relier avec |.

Le résultat a battu la BD de 9 caractères :

Comparaison14 % plus court

Plateaulincoln · obama · kennedy · reagan · washington vs fremont · romney · mccain · dewey · gore

  1. xkcd #13135/5 attrapées, erreurs : 163
    /bu|[rn]t|[coy]e|[mtg]a|j|iso|n[hl]|[ae]d|lev|sh|[lnd]i|[po]o|ls/
  2. solveur de norvigrésout54
    /a.a|a..i|j|li|a.t|i..n|oo|bu|ay.|n.e|r.e$|ru|ls|po|v.l/
Essayer le plus court
La regex de la BD contre le solveur de Norvig, sur un échantillon de vainqueurs et de perdants. Celle de Norvig passe aussi la liste complète de tous les présidents.

Il a aussi raboté la case Star Wars, de 10 caractères à 9 :

Comparaison10 % plus court

PlateauTHE PHANTOM MENACE · ATTACK OF THE CLONES · REVENGE OF THE SITH · A NEW HOPE · THE EMPIRE STRIKES BACK · RETURN OF THE JEDI vs THE WRATH OF KHAN · THE SEARCH FOR SPOCK · THE VOYAGE HOME · THE FINAL FRONTIER · THE UNDISCOVERED COUNTRY

  1. xkcdrésout10
    /M | [TN]|B/
  2. norvigrésout9
    / T|E.P|PE/
Essayer le plus court

04Du puzzle au rituel quotidien

Une brève histoire du golf de regex : xkcd #1313 en janvier 2014 (63 caractères), le notebook de Norvig le même mois (54), les packs de niveaux dans le navigateur, et la chasse du jour de Regex Hunter

Des jeux dans le navigateur comme regex.alf.nu ont transformé l'idée en packs de niveaux à enchaîner. Regex Hunter prend l'autre chemin, celui de Wordle :

  • Une chasse par jour

    La même pour tout le monde, avec un par à battre et une série à entretenir.

  • Packs d'entraînement

    Chacun travaille une technique, des ancres aux références arrière.

  • Chasses de la communauté et Sprees

    Des chasses écrites par les joueurs, et des courses en direct contre d'autres sur les mêmes plateaux.

  • Académie et bac à sable

    Apprenez les regex de zéro, puis testez tout ce que vous voulez.

05Un plateau tiré du notebook de Norvig

Norvig a aussi opposé les prénoms de bébés les plus populaires. Voici cinq prénoms de garçons et cinq de filles ; le par correspond à la longueur de sa réponse. Saurez-vous l'égaler, voire le battre ?

Chasse jouablepar 10

Attrapez les prénoms de garçons, épargnez les prénoms de filles.

Cibles · 0/5 attrapées

  • jacobcible
  • masoncible
  • ethancible
  • noahcible
  • aidencible

Innocents · erreurs : 0

  • madisoninnocent
  • emilyinnocent
  • abigailinnocent
  • sophiainnocent
  • oliviainnocent

Tapez une regex — le plateau se met à jour en direct.

Essayez-le dans le bac à sable
Ça vous plaît ? Une nouvelle chasse chaque jour.Jouer la chasse du jour

06Jouer au golf de regex aujourd'hui

Jouer la chasse du jour → Une nouvelle énigme de golf de regex chaque jour : attrapez les monstres, épargnez les innocents, égalez ou battez le par. Gratuit, dans votre navigateur, sans inscription.

Si vous préférez la technique à l'histoire, lisez Stratégies pour le golf de regex : comment battre le par.