Aviso: Após a demanda popular, relaxei um pouco as regras:
- O tamanho máximo de regex cresce 1 byte a cada 5 respostas . A resposta N pode usar até 29 + ⌈N / 5⌉ bytes.
- A pontuação de cada resposta será (M / (30 + N / 5)) N
No regex golf, você recebe dois conjuntos de strings e é solicitado a criar o menor regex que corresponda a todas as strings no primeiro conjunto, mas que falhe em todas as strings no segundo conjunto.
É isso que vamos fazer, mas cada vez que alguém responder, a própria expressão regular será adicionada a um dos dois conjuntos de strings (de sua própria escolha). Portanto, há uma ordem estrita de respostas nesse desafio.
Vamos passar por um exemplo:
- Digamos que eu comece com isso
abc
(o que não vou) e coloque-o no conjunto de correspondências . - Em seguida, uma segunda resposta válida seria
a
, pois corresponde ao acima (e não há seqüências que precisem falhar ainda). Digamos que esta resposta esteja no conjunto de falhas . - Agora a terceira resposta precisa corresponder,
abc
mas falhaa
. Uma terceira resposta possível é, portantob
. Vamos colocar isso no conjunto de fósforos . - A quarta resposta agora precisa corresponder
abc
eb
, mas falhaa
. Não permitiremos respostas duplicadas, portanto, uma regex válida seriac|b
.
O importante é que sua resposta seja a mais curta possível. Isso pode ser trivial para as primeiras respostas, mas uma vez que recebemos algumas respostas, deve ser cada vez mais difícil obter a correspondência desejada com o menor número possível de caracteres.
Para o desafio real, inicialmente o conjunto de correspondências contém PPCG
e o conjunto de falhas contém [PPCG]
, e eu já forneci a primeira resposta.
Respondendo
O principal a entender sobre esse desafio é que apenas uma pessoa pode responder de cada vez e cada resposta depende da resposta anterior .
Nunca deve haver duas respostas com o mesmo N
. Se duas pessoas responderem simultaneamente a algumas N
, quem responder mais tarde (mesmo que seja uma diferença de alguns segundos) deve excluir graciosamente sua resposta.
Para tornar isso um pouco mais suave, tente seguir as etapas abaixo ao postar sua resposta:
- Certifique-se de que alguém tenha verificado independentemente a exatidão da resposta anterior (e deixado um comentário correspondente).
- Faça os dois conjuntos de testes encontrados na resposta anterior e escreva um regex que corresponda a todas as seqüências de caracteres em um conjunto e nenhuma no outro.
Poste sua resposta no seguinte 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]
Onde
N
está o número da sua resposta. Copie[match set]
e[fail set]
da resposta anterior e anexe seu regex a um deles.Isso é absolutamente vital para o desafio! Forneci uma ferramenta de painel para o desafio de ajudar na contabilidade e ela se baseia no modelo acima. (Veja a parte inferior da postagem.)
- Outro usuário agora deve revisar seu envio e deixar um comentário "Correção verificada" se sua resposta seguir todas as regras (veja abaixo). Caso contrário, eles devem deixar um comentário indicando falhas. Você tem 15 minutos para corrigir esses problemas. Caso contrário, sua resposta será considerada inválida, deverá ser excluída e outra pessoa poderá postar uma resposta de acompanhamento na resposta anterior. (Se isso acontecer, você poderá enviar uma nova resposta a qualquer momento.)
Esses regulamentos podem parecer bastante rígidos, mas são necessários para evitar respostas inválidas em algum lugar da cadeia.
Regras
- Um usuário pode enviar apenas uma resposta por período de 4 horas. (Isso evita que os usuários assistam constantemente à pergunta e respondam o máximo possível.)
- Um usuário não pode enviar duas respostas seguidas. (por exemplo, desde que eu enviei a resposta 1, não posso responder 2, mas poderia fazer 3.)
- Não edite respostas que foram verificadas. (Mesmo que você encontre uma maneira de reduzi-lo!)
- Se um erro for descoberto mais cedo na cadeia (ou seja, após as respostas terem sido postadas), a resposta incorreta deve ser excluída e será removida do conjunto de strings em que os novos envios devem falhar. No entanto , todas as respostas postadas desde então não devem ser alteradas para refletir.
- Indique claramente um sabor em que sua regex é válida. Você pode escolher qualquer sabor que possa ser testado on-line gratuitamente. Há uma boa lista de testadores on - line no StackOverflow . Em particular, o Regex101 e o RegexPlanet devem ser úteis, pois oferecem suporte a uma ampla variedade de sabores. Inclua um link para o testador que você escolheu na sua resposta. Ao ativar os modificadores lobal
g
em
ultilina no testador, você pode testar todas as cadeias de uma vez, uma em cada linha (esses modificadores não são contados no tamanho do seu regex, porque não são necessários em nenhuma cadeia individual). - Sua regex não deve estar vazia.
- O seu regex para a resposta N não deve exceder 29 + ⌈N / 5⌉ bytes. Ou seja, as respostas 1 a 5 podem usar até 30 bytes (inclusive), as respostas 6 a 10 podem usar até 31 bytes ... as respostas 31 a 35 podem usar até 36 bytes. Verifique o painel para ver quantos caracteres a próxima resposta pode usar.
- Sua regex não deve ser idêntica a nenhuma sequência em nenhum conjunto de testes.
- Não inclua delimitadores no seu envio ou na contagem de bytes, mesmo que o idioma do host relevante os use. Se o seu regex usa modificadores, adicione um byte por modificador ao tamanho do regex. Por exemplo,
/foo/i
seria 4 bytes.
Pontuação
A pontuação de cada resposta é calculada como (M / (30 + N / 5)) N , onde M é o tamanho da expressão regular em bytes e N é o número. A pontuação de cada usuário é o produto de todas as suas respostas. O usuário com a menor pontuação geral vence. No improvável evento de empate, o usuário com o último envio vence. Aceitarei a resposta mais recente desse usuário.
Se você preferir somar pontuações, pode calcular a pontuação de cada resposta como N * (log (M) - log (30)) e resumi-las sobre todas as respostas. Isso dará a mesma ordem de classificação.
Não há necessidade de incluir a pontuação de uma resposta na resposta, apenas relatar M . O painel de desafio na parte inferior da pergunta calculará as pontuações e, no caso de duas pontuações muito próximas, verificarei novamente os resultados usando tipos de precisão arbitrária.
Observe que a pontuação de cada resposta é menor que 1, para que você possa melhorar sua pontuação geral fornecendo uma nova resposta. No entanto, quanto mais curtos forem os envios, mais eficientemente você poderá diminuir sua pontuação. Além disso, respostas posteriores podem alcançar uma pontuação mais baixa, embora sejam mais longas, devido ao crescente expoente.
painel de controle
Escrevi uma pequena ferramenta do Dashboard, usando Stack Snippets, com base no trabalho do Optimizer aqui . Espero que isso nos ajude a obter alguma ordem para esses desafios que dependem de respostas.
Isso exibirá o status atual do desafio - em particular, se houver respostas conflitantes, se uma resposta precisar ser verificada ou se a próxima resposta puder ser publicada.
Também produz uma lista de todas as respostas com pontuações, bem como uma tabela de classificação de todos os usuários. Atenha-se ao formato do desafio acima, para que o painel possa ler as sequências relevantes de suas respostas. Caso contrário, você pode não ser incluído na tabela de classificação.
Informe-me (de preferência no bate-papo ) se você encontrar algum erro ou tiver alguma idéia de como a utilidade da ferramenta pode ser melhorada.