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.