Aviso: Siguiendo la demanda popular , he relajado un poco las reglas:
- El tamaño máximo de expresión regular crece en 1 byte cada 5 respuestas . La respuesta N puede usar hasta 29 + ⌈N / 5⌉ bytes.
- El puntaje de cada respuesta será (M / (30 + N / 5)) N
En regex golf, se le dan dos conjuntos de cadenas, y se le pide que cree la expresión regular más corta que coincida con todas las cadenas en el primer conjunto, pero falla en todas las cadenas en el segundo conjunto.
Eso es lo que vamos a hacer, pero cada vez que alguien responda, su expresión regular se agregará a uno de los dos conjuntos de cadenas (de su propia elección). Por lo tanto, hay un orden estricto de respuestas en este desafío.
Veamos un ejemplo:
- Digamos que comienzo esto con
abc
(lo cual no haré), y lo pongo en el conjunto de partidos . - Entonces, una segunda respuesta válida sería
a
, ya que coincide con lo anterior (y no hay cadenas que deban fallar todavía). Digamos que esta respuesta va en el conjunto de fallas . - Ahora la tercera respuesta tiene que coincidir
abc
pero fallaa
. Una posible tercera respuesta es por lo tantob
. Pongamos esto en el conjunto de partidos . - La cuarta respuesta ahora tiene que coincidir
abc
yb
, pero fallara
. No permitiremos respuestas duplicadas, por lo que sería una expresión regular válidac|b
.
Lo importante es que su respuesta sea lo más breve posible. Esto puede ser trivial para las primeras respuestas, pero una vez que obtengamos algunas respuestas, debería ser cada vez más difícil obtener la coincidencia deseada en la menor cantidad de caracteres posible.
Para el desafío real, inicialmente el conjunto de coincidencias contiene PPCG
y el conjunto de fallas contiene [PPCG]
, y ya he proporcionado la primera respuesta.
Respondiendo
La clave para entender sobre este desafío es que solo una persona puede responder a la vez y cada respuesta depende de la anterior .
Nunca debe haber dos respuestas con lo mismo N
. Si dos personas responden simultáneamente por algunos N
, el que respondió más tarde (incluso si es una diferencia de unos segundos) debería eliminar gentilmente su respuesta.
Para que esto funcione un poco más suave, trate de seguir los siguientes pasos cuando publique su respuesta:
- Asegúrese de que alguien haya verificado independientemente la corrección de la respuesta anterior (y haya dejado un comentario correspondiente).
- Tome los dos conjuntos de prueba encontrados en la respuesta anterior y escriba una expresión regular que coincida con todas las cadenas en un conjunto y ninguna en el otro.
Publique su respuesta en el siguiente formato:
# 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]
¿Dónde
N
está el número de tu respuesta? Copie[match set]
y[fail set]
de la respuesta anterior, y agregue su expresión regular a una de ellas.¡Esto es absolutamente vital para el desafío! He proporcionado una herramienta de tablero para el desafío de ayudar con la contabilidad, y se basa en la plantilla anterior. (Ver al final de la publicación).
- Otro usuario ahora debe revisar su envío y dejar un comentario "Corrección verificada" si su respuesta sigue todas las reglas (ver más abajo). Si no es así, deben dejar un comentario señalando cualquier falla. Luego tienes 15 minutos para solucionar esos problemas. Si no lo hace, su respuesta se considerará inválida, debería eliminarse, y alguien más puede publicar una respuesta de seguimiento a la anterior. (Si esto sucede, puede enviar una nueva respuesta en cualquier momento).
Estas regulaciones pueden parecer bastante estrictas, pero son necesarias para evitar respuestas no válidas en algún lugar de la cadena.
Reglas
- Un usuario solo puede enviar una respuesta por período de 4 horas. (Esto es para evitar que los usuarios vean constantemente la pregunta y respondan tanto como sea posible).
- Un usuario no puede enviar dos respuestas seguidas. (por ejemplo, desde que envié la respuesta 1 no puedo responder 2, pero podría responder 3.)
- No edite respuestas que hayan sido verificadas. (¡Incluso si encuentras una manera de acortarlo!)
- En caso de que se descubra un error antes en la cadena (es decir, después de que se hayan publicado las respuestas de seguimiento), la respuesta ofensiva se debe eliminar y se eliminará del conjunto de cadenas en las que las nuevas presentaciones deben fallar. Sin embargo , todas las respuestas que se han publicado desde entonces no deben cambiarse para reflejar.
- Indique claramente un sabor en el que su expresión regular es válida. Puede elegir cualquier sabor que se pueda probar libremente en línea. Hay una buena lista de probadores en línea en StackOverflow . En particular, Regex101 y RegexPlanet deberían ser útiles, ya que admiten una amplia variedad de sabores. Incluya un enlace al probador que eligió en su respuesta. Al activar los modificadores
g
lobal ym
ultiline en el probador, puede probar todas las cadenas a la vez, una en cada línea (estos modificadores no se cuentan para el tamaño de su expresión regular, porque no son necesarios en ninguna cadena individual). - Su expresión regular no debe estar vacía.
- Su expresión regular para la respuesta N no debe ser mayor de 29 + ⌈N / 5⌉ bytes. Es decir, las respuestas 1 a 5 pueden usar hasta 30 bytes (inclusive), las respuestas 6 a 10 pueden usar hasta 31 bytes ... las respuestas 31 a 35 pueden usar hasta 36 bytes. Verifique el tablero para ver cuántos caracteres puede usar la siguiente respuesta.
- Su expresión regular no debe ser idéntica a ninguna cadena en ninguno de los conjuntos de prueba.
- No incluya delimitadores en su envío o recuento de bytes, incluso si los usa el idioma principal correspondiente. Si su expresión regular usa modificadores, agregue un byte por modificador al tamaño de la expresión regular. Por ejemplo
/foo/i
, serían 4 bytes.
Tanteo
El puntaje de cada respuesta se calcula como (M / (30 + N / 5)) N , donde M es el tamaño de la expresión regular en bytes, y N es su número. La puntuación de cada usuario es el producto de todas sus respuestas. El usuario con el puntaje general más bajo gana. En el caso improbable de un empate, el usuario con el último envío gana. Aceptaré la última respuesta de ese usuario.
Si prefiere sumar puntajes, puede calcular el puntaje de cada respuesta como N * (log (M) - log (30)) y sumarlos sobre todas las respuestas. Eso dará el mismo orden de clasificación.
No hay necesidad de incluir la puntuación de una respuesta en la respuesta, sólo informar M . El panel de desafío en la parte inferior de la pregunta calculará los puntajes, y en el caso de dos puntajes muy cercanos, verificaré los resultados utilizando tipos de precisión arbitraria.
Tenga en cuenta que el puntaje de cada respuesta es inferior a 1, por lo que puede mejorar su puntaje general al proporcionar una nueva respuesta. Sin embargo, cuanto más cortos sean sus envíos, más eficientemente podrá reducir su puntaje. Además, las respuestas posteriores pueden lograr una puntuación más baja aunque sean más largas, debido al exponente creciente.
Tablero
He escrito una pequeña herramienta de Panel de control , usando fragmentos de pila, basada en el trabajo de Optimizer aquí . Espero que esto nos ayude a poner orden en estos desafíos dependientes de las respuestas.
Esto mostrará el estado actual del desafío, en particular, si hay respuestas en conflicto, si es necesario verificar una respuesta o si se puede publicar la siguiente respuesta.
También produce una lista de todas las respuestas con puntajes, así como una tabla de clasificación de todos los usuarios. Siga el formato de desafío anterior para que el panel pueda leer las cadenas relevantes de sus respuestas. De lo contrario, es posible que no esté incluido en la tabla de clasificación.
Avíseme ( idealmente en el chat ) si detecta algún error o tiene alguna idea de cómo se podría mejorar la utilidad de la herramienta.
fuente
Respuestas:
42. Sabor a pitón - 38
Probado en Regex101
La falta de entropía en las últimas respuestas me estaba afectando ... (debería haberlo hecho antes)
La siguiente respuesta tiene que coincidir con las siguientes cadenas:
Y fallar en estas cadenas:
fuente
28. Sabor a pitón - 29
Probado en Regex101
Se hicieron muchos retoques: el número 4 en el conjunto de pases es probablemente el mayor dolor, ya que es una subcadena de una expresión regular en el conjunto de fallas, y también comparte un sufijo con otra expresión regular en el conjunto de fallas.
La siguiente respuesta tiene que coincidir con las siguientes cadenas:
Y fallar en estas cadenas:
fuente
24 - Sabor a pitón - 29
Probado aquí
La siguiente respuesta tiene que coincidir con las siguientes cadenas:
Y fallar en estas cadenas:
fuente
10. Sabor a pitón - 19
Probado en Regex101 .
La siguiente respuesta tiene que coincidir con las siguientes cadenas:
Y fallar en estas cadenas:
fuente
8. Sabor ECMAScript - 14 bytes
Manifestación
La siguiente respuesta tiene que coincidir con las siguientes cadenas:
Y fallar en estas cadenas:
fuente
2. Sabor ECMAScript - 6 bytes
Pruébalo aquí
La siguiente respuesta tiene que coincidir con las siguientes cadenas:
Y fallar en estas cadenas:
fuente
9. Sabor a pitón - 28
Probado en Regex101
La siguiente respuesta tiene que coincidir con las siguientes cadenas:
Y fallar en estas cadenas:
fuente
23. sabor PCRE - 28
Probado en Regex101.
La siguiente respuesta tiene que coincidir con las siguientes cadenas:
Y fallar en estas cadenas:
fuente
[^]
hacer?]
como primer elemento de una clase de caracteres (después de la negación opcional), está solo]
dentro de la clase de caracteres y no se cierra (porque las clases de caracteres vacías son un poco inútiles). Entonces[^]]
coincide con cualquier cosa menos]
. La notable excepción es ECMAScript, que permite clases de caracteres vacías. En ese caso[]
no coincide con nada, actúa como(?!)
y[^]
coincide con cualquier carácter, lo cual es conveniente, porque ECMAScript no tiene uns
modificador, y[\s\S]
es difícil escribir una lectura.11. Python - 29
► Prueba en RegexPlanet
Casi todas las respuestas inválidas tienen una longitud diferente a todas las válidas. Esta expresión regular hace uso de eso.
La siguiente respuesta tiene que coincidir con las siguientes cadenas:
Y fallar en estas cadenas:
fuente
29. Sabor PCRE - 28
Probado en Regex101
Esta respuesta aún funciona ...
La siguiente respuesta tiene que coincidir con las siguientes cadenas:
Y fallar en estas cadenas:
fuente
31. Sabor Perl - 29
[?[CP(].[-<)|w]|^P|^[^C|\\]*$
No sé cómo funciona, fue producido por mi primera incursión en algoritmos genéticos . Hay salida del programa que menciona la respuesta.
La siguiente respuesta tiene que coincidir:
y fallar:
fuente
29
? De esta manera no va a terminar pronto ... Creo que el desafío principal es encontrar la última, la última expresión regular.32. PCRE - 30 bytes
Probado en Regex101
La siguiente respuesta tiene que coincidir con las siguientes cadenas :
Y fallar en estas cadenas :
fuente
1. Sabor ECMAScript - 2 bytes
Pruébelo en Regex101.
El conjunto inicial coincidente es
PPCG
y el conjunto que falla[PPCG]
. Por lo tanto, esta expresión regular simplemente prueba que la cadena comienza conP
.La siguiente respuesta tiene que coincidir con las siguientes cadenas:
Y fallar en estas cadenas:
fuente
3. Sabor ECMAScript - 6 bytes
Pruébalo aquí
La siguiente respuesta tiene que coincidir con las siguientes cadenas:
Y fallar en estas cadenas:
fuente
7. Sabor a pitón - 16
Probado en Regex101
Tengo que agregar un \ a la lista de coincidencias :)
La siguiente respuesta tiene que coincidir con las siguientes cadenas:
Y fallar en estas cadenas:
fuente
12. Sabor ECMAScript - 17
Pruébalo aquí .
La siguiente respuesta tiene que coincidir con las siguientes cadenas:
Y fallar en estas cadenas:
fuente
22. PCRE Flavor - 29 bytes
Como el # 22 original no se modifica durante 1 hora, supongo que se ha vuelto inválido.
Manifestación
La siguiente respuesta tiene que coincidir con las siguientes cadenas:
Y fallar en estas cadenas:
fuente
26. Sabor a pitón - 28
Prueba en Regex101
La siguiente respuesta tiene que coincidir con las siguientes cadenas:
Y fallar en estas cadenas:
fuente
30. Sabor a pitón - 28
Probado en Regex101
Cuando hay un testamento ...
La siguiente respuesta tiene que coincidir con las siguientes cadenas:
Y fallar en estas cadenas:
fuente
37. Sabor Perl - 30
Presentación en Regex101 .
La solución fue producida por el mismo programa que antes. El programa también ha impreso una solución de 29 caracteres
\?[^$w]*\$|[]^C]\w)$|w.]|\w.\
, no sé por qué, ya que parece una expresión regular mal formada ...La siguiente respuesta tiene que coincidir con las siguientes cadenas:
Y fallar en estas cadenas:
fuente
40. PCRE - 33 bytes
Probado en Regex101
La siguiente respuesta tiene que coincidir con las siguientes cadenas :
Y fallar en estas cadenas :
fuente
4. Sabor ECMAScript - 5 bytes
Pruébalo aquí .
La siguiente respuesta tiene que coincidir con las siguientes cadenas:
Y fallar en estas cadenas:
fuente
5. Sabor ECMAScript - 6 bytes
Probado en Regex101 .
Es hora de darle un poco de sabor al conjunto de éxitos.
La siguiente respuesta tiene que coincidir con las siguientes cadenas:
Y fallar en estas cadenas:
fuente
6. Sabor ECMAScript - 9 bytes
Probado en Regex101 .
La siguiente respuesta tiene que coincidir con las siguientes cadenas:
Y fallar en estas cadenas:
fuente
14. sabor PCRE - 25
Probado en Regex101
Esto está empezando a ponerse bastante difícil.
La siguiente respuesta tiene que coincidir con las siguientes cadenas:
Y fallar en estas cadenas:
fuente
15. sabor PCRE - 26
Probado en Regex101
La siguiente respuesta tiene que coincidir con las siguientes cadenas:
Y fallar en estas cadenas:
fuente
16. Sabor PCRE - 21
Probado en Regex 101 .
La siguiente respuesta tiene que coincidir con las siguientes cadenas:
Y fallar en estas cadenas:
fuente
PPCG
.25. sabor PCRE - 29
Probado aquí. (La expresión regular de prueba contiene un adicional
\n
para asegurarse de que ninguna coincidencia abarque varias líneas. Esto no es necesario para coincidir con cada cadena individual).¡Esa era una fruta baja! :) Sin embargo, tengo que felicitar a plannapus, esta expresión regular es increíblemente elegante para los conjuntos de prueba actuales. Si quieres votar esta respuesta, ¡asegúrate de votar también la anterior!
La siguiente respuesta tiene que coincidir con las siguientes cadenas:
Y fallar en estas cadenas:
fuente
35. PCRE - 35 bytes
Probado en Regex101
La siguiente respuesta tiene que coincidir con las siguientes cadenas :
Y fallar en estas cadenas :
fuente
36. Sabor a pitón - 32
Probado en Regex101
Tenía tres expresiones regulares de 32 bytes listas, y por suerte una de ellas todavía funciona: D
La siguiente respuesta tiene que coincidir con las siguientes cadenas:
Y fallar en estas cadenas:
fuente