Escriba una expresión regular que funcione en al menos 2 sabores de expresiones regulares (o versiones), y combine una cadena diferente en cada sabor (o versión) en la que se está ejecutando.
Las cadenas que deben coincidir en este desafío son las primeras palabras de los nombres de código de Ubuntu, que se enumeran a continuación. Su expresión regular debe coincidir desde la parte superior de la lista. Es decir, si sus obras de expresiones regulares en 3 sabores, tiene que coincidir Warty
Hoary
y Breezy
, y no a otros.
Warty
Hoary
Breezy
Dapper
Edgy
Feisty
Gutsy
Hardy
Intrepid
Jaunty
Karmic
Lucid
Maverick
Natty
Oneiric
Precise
Quantal
Raring
Saucy
Trusty
Utopic
Vivid
Wily
Xenial
Yakkety
Zesty
17.10
18.04
18.10
19.04
19.10
...
Si su expresión regular funciona en más de 26 sabores, puede hacer coincidir los números de versión de Ubuntu. A partir de 17.10, para cada nuevo sabor, cambie el segundo número a 10 si era 04, incremente el primer número y cambie el segundo a 04 de lo contrario.
En cada sabor, su expresión regular debe coincidir solo con la cadena supuesta y nada más (no limitado a los nombres de código). Las últimas líneas no importan. Eso significa que su expresión regular podría coincidir solo con la cadena sin la nueva línea final, coincidir solo con la cadena con la nueva línea final o con ambas. Y no tiene que ser consistente en diferentes sabores. Puede suponer que la entrada está en ASCII imprimible (a excepción de la nueva línea final, si hay una).
Su puntaje es (la longitud de su código + 10) / ((número de sabores) ^ 2). La puntuación más baja gana.
fuente
Respuestas:
87 bytes, 5 sabores, (87 + 10) / 25 = 3.88
Me he ido con los sabores fáciles de probar por ahora, que son:
La estructura general es
^((...)y|...)$
, es decir, factorizar losy
s finales y agregar anclajes.Warty (PCRE)
En PCRE y Ruby,
[[:word:]]
es una clase de caracteres POSIX que coincide con un carácter de palabra; en otros sabores, obtienes una[[:word:]
clase de caracteres y luego literal&&]
, que falla la(?=W)
afirmación. Para hacer que Ruby falle,&&
se usa para intersecar la clase POSIX con nada, mientras que en PCRE&&
no tiene un significado especial.Canoso (Javascript)
Por alguna razón, Javascript es el único sabor del grupo donde
\a
es literala
: en otros sabores, coincide con el carácter de campana (ASCII 7).Poco ventoso (Python)
En Python y Javascript,
\z
es un literalz
: en los otros sabores es equivalente al$
final del anclaje de cadena. Para hacer que Javascript falle, usamos la clase char[]e]
, que es una clase char vacía y[]
luego literale]
en Javascript, y una clase de dos caracteres[]e]
en Python.Dapper (.NET)
En
.NET
,[D-[E]]
hay una diferencia de conjunto, eliminando el conjunto[E]
de[D]
. En PCRE, Javascript y Python, tenemos la clase y[D-[E]
luego un literal]
. Ruby es un poco diferente, pero por alguna razón se analiza como una clase[D-[E]]
que solo coincideE
, y todavía tengo que entender por qué ...Nervioso (rubí)
Ruby permite clases de caracteres dentro de clases de caracteres, por
[[d]]
lo que en realidad es equivalente[d]
o simplemented
. En los otros sabores, tenemos[[d]
un literal]
.fuente