Golf de regex2 cazas jugables incluidas

El golf de regex de xkcd: el puzzle detrás del cómic 1313

Cómo el cómic de xkcd sobre golf de regex inició un género de puzzles, cómo lo resolvió Peter Norvig y dónde jugar un nuevo puzzle de golf de regex cada día.

Logo de Regex Hunter

· 6 min de lectura · Actualizado el

/j|bu|oo/

atrapa

  • jefferson
  • buchanan
  • hoover

deja libre

  • fremont
  • dewey
  • gore

El golf de regex, el puzzle que popularizó el cómic 1313 de xkcd, es el juego de escribir la expresión regular más corta que coincida con todas las palabras de una lista y con ninguna de otra. Como en el golf de verdad, gana quien da menos golpes. Aquí tienes la idea completa en un solo tablero; pruébalo:

Caza jugablepar 4

Atrapa las palabras que terminan en -ing y deja libres las demás.

Objetivos · 0/5 atrapados

  • singobjetivo
  • ringobjetivo
  • goingobjetivo
  • thingobjetivo
  • swingobjetivo

Inocentes · 0 errores

  • ingotinocente
  • fringeinocente
  • kingsinocente
  • dingoinocente
  • hingeinocente

Escribe una regex: el tablero se actualiza mientras escribes.

Pruébalo en la Zona de pruebas
¿Te gustó? Cada día llega una nueva.Jugar la caza de hoy

Ese es todo el juego. Lo divertido es lo rápido que deja de ser fácil.

01El cómic que le dio nombre

En enero de 2014, el xkcd #1313, “Regex Golf”, presentó el juego a muchísimos programadores. Su primera viñeta muestra una regex que coincide con los subtítulos de Star Wars pero no con los de Star Trek:

Coincidencias11/11 como se esperaba
/M | [TN]|B/

Debe coincidir · 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

No debe · Star Trek5/5

  • THE WRATH OF KHAN
  • THE SEARCH FOR SPOCK
  • THE VOYAGE HOME
  • THE FINAL FRONTIER
  • THE UNDISCOVERED COUNTRY
Pruébalo en la Zona de pruebas
La respuesta de 10 caracteres de xkcd. Fíjate en los espacios: forman parte del patrón.

Y el texto emergente del cómic sube la apuesta: un patrón de 63 caracteres que coincide con los apellidos de todos los presidentes electos de EE. UU. pero con ninguno de los candidatos a los que derrotaron.

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

Toca un fragmento para encontrarlo

La regex de los presidentes del xkcd #1313: 13 fragmentos diminutos unidos con |.

Parece un galimatías, pero léela como una lista: cada fragmento entre las barras | atrapa a unos cuantos presidentes. Solo con j caen Jefferson, Jackson y Johnson.

02El error del remate

Ese mismo mes, Peter Norvig, entonces director de investigación de Google y coautor del libro de texto de referencia sobre IA, escribió un notebook para resolver el golf de regex de forma automática. Lo primero que hizo su prueba fue comprobar la respuesta del cómic. Falló:

Coincidencias9/10 como se esperaba
/bu|[rn]t|[coy]e|[mtg]a|j|iso|n[hl]|[ae]d|lev|sh|[lnd]i|[po]o|ls/

Debe coincidir · Ganadores5/5

  • lincoln
  • obama
  • kennedy
  • reagan
  • washington

No debe · Perdedores4/5

  • romney
  • mccain
  • dewey
  • gore
  • fremont
Pruébalo en la Zona de pruebas
Los ganadores deberían coincidir y los perdedores no. Uno de los perdedores queda atrapado.

[rn]t atrapa a fremont: John C. Frémont, que perdió las elecciones de 1856 frente a James Buchanan. Norvig dedujo que Randall había tomado como rival de Buchanan a Millard Fillmore, el candidato de un tercer partido ese año. Una respuesta de golf de regex solo es tan buena como sus listas de palabras.

03Cómo juega al golf de regex una máquina

El solucionador de Norvig es un razonamiento elegante, y merece la pena conocerlo porque es también como piensan los buenos golfistas humanos:

  1. Reunir fragmentos candidatos. Toma todos los fragmentos cortos de los nombres de los ganadores, de uno a cuatro caracteres y con algunas letras cambiadas por ., como bu, a.a o r.e$.
  2. Quedarse solo con los seguros. Un fragmento solo sirve si coincide con al menos un ganador y con ningún perdedor.
  3. Cubrir a los ganadores. Ahora elige fragmentos hasta que todos los ganadores coincidan. Es el clásico problema de cobertura de conjuntos, que es NP-difícil, así que el solucionador elige de forma voraz: cada vez toma el fragmento con el mejor equilibrio entre ganadores cubiertos y caracteres gastados.
  4. Unirlos con |.

El resultado mejoró al cómic en 9 caracteres:

Comparación14 % más corto

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

  1. xkcd #13135/5 atrapados, 1 error63
    /bu|[rn]t|[coy]e|[mtg]a|j|iso|n[hl]|[ae]d|lev|sh|[lnd]i|[po]o|ls/
  2. solucionador de norviglo resuelve54
    /a.a|a..i|j|li|a.t|i..n|oo|bu|ay.|n.e|r.e$|ru|ls|po|v.l/
Probar el más corto
La regex del cómic frente al solucionador de Norvig, con una muestra de ganadores y perdedores. La de Norvig también supera la lista completa de presidentes.

También recortó la viñeta de Star Wars, de 10 caracteres a 9:

Comparación10 % más corto

TableroTHE 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. xkcdlo resuelve10
    /M | [TN]|B/
  2. norviglo resuelve9
    / T|E.P|PE/
Probar el más corto

04Del puzzle al ritual diario

Una breve historia del golf de regex: el xkcd #1313 en enero de 2014 (63 caracteres), el notebook de Norvig ese mismo mes (54), los packs de niveles en el navegador y la caza del día de Regex Hunter

Juegos de navegador como regex.alf.nu convirtieron la idea en packs de niveles para ir superando uno tras otro. Regex Hunter toma el otro camino, el de Wordle:

  • Una caza al día

    La misma para todos, con un par que superar y una racha que mantener.

  • Packs de práctica

    Cada uno entrena una técnica, de las anclas a las referencias inversas.

  • Cazas de la comunidad y Sprees

    Cazas escritas por jugadores y carreras en vivo contra otras personas en los mismos tableros.

  • Academia y Zona de pruebas

    Aprende regex desde cero y luego prueba lo que quieras.

05Un tablero del notebook de Norvig

Norvig también enfrentó entre sí los nombres de bebé más populares. Aquí tienes cinco nombres de niño y cinco de niña; el par es la longitud de su respuesta. ¿Puedes igualarlo, o superarlo?

Caza jugablepar 10

Atrapa los nombres de niño y deja libres los nombres de niña.

Objetivos · 0/5 atrapados

  • jacobobjetivo
  • masonobjetivo
  • ethanobjetivo
  • noahobjetivo
  • aidenobjetivo

Inocentes · 0 errores

  • madisoninocente
  • emilyinocente
  • abigailinocente
  • sophiainocente
  • oliviainocente

Escribe una regex: el tablero se actualiza mientras escribes.

Pruébalo en la Zona de pruebas
¿Te gustó? Cada día llega una nueva.Jugar la caza de hoy

06Juega al golf de regex hoy

Jugar la caza del día → Un nuevo puzzle de golf de regex cada día: atrapa a los monstruos, deja libres a los inocentes, iguala o mejora el par. Gratis, en tu navegador, sin registro.

Si prefieres técnica en lugar de historia, lee Estrategias de golf de regex: cómo superar el par.