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.
fonte
Respostas:
42. sabor Python - 38
Testado no Regex101
A falta de entropia nas últimas respostas estava me atingindo ... (deveria ter feito isso antes)
A próxima resposta deve corresponder às seguintes seqüências de caracteres:
E falhe nessas strings:
fonte
28. sabor Python - 29
Testado no Regex101
Muitas brincadeiras foram feitas - o número 4 no conjunto de passes provavelmente é a maior dor, pois é uma subcadeia de uma regex no conjunto de falhas e também compartilha um sufixo com outro regex no conjunto de falhas.
A próxima resposta deve corresponder às seguintes seqüências de caracteres:
E falhe nessas strings:
fonte
24 - Sabor Python - 29
Testado aqui
A próxima resposta deve corresponder às seguintes seqüências de caracteres:
E falhe nessas strings:
fonte
10. sabor Python - 19
Testado no Regex101 .
A próxima resposta deve corresponder às seguintes seqüências de caracteres:
E falhe nessas strings:
fonte
8. sabor ECMAScript - 14 bytes
Demo
A próxima resposta deve corresponder às seguintes seqüências de caracteres:
E falhe nessas strings:
fonte
2. sabor ECMAScript - 6 bytes
Teste aqui
A próxima resposta deve corresponder às seguintes seqüências de caracteres:
E falhe nessas strings:
fonte
9. sabor Python - 28
Testado no Regex101
A próxima resposta deve corresponder às seguintes seqüências de caracteres:
E falhe nessas strings:
fonte
23. sabor PCRE - 28
Testado no Regex101.
A próxima resposta deve corresponder às seguintes seqüências de caracteres:
E falhe nessas strings:
fonte
[^]
faz?]
como o primeiro elemento de uma classe de personagem (após negação opcional), é apenas um elemento]
dentro da classe de personagem e não fecha (porque as classes de caracteres vazias são um pouco inúteis). Então[^]]
combina com qualquer coisa menos]
. A exceção notável é ECMAScript, que permite classes de caracteres vazias. Nesse caso[]
, não corresponde a nada, ele age como(?!)
e[^]
corresponde a qualquer caractere, o que é conveniente, porque o ECMAScript não possui ums
modificador e[\s\S]
é uma tarefa difícil digitar uma leitura.11. Python - 29
► Teste no RegexPlanet
Quase todas as respostas inválidas têm um comprimento diferente das respostas válidas. Este regex faz uso disso.
A próxima resposta deve corresponder às seguintes seqüências de caracteres:
E falhe nessas strings:
fonte
29. sabor PCRE - 28
Testado no Regex101
Esta resposta ainda funciona ...
A próxima resposta deve corresponder às seguintes seqüências de caracteres:
E falhe nessas strings:
fonte
31. sabor Perl - 29
[?[CP(].[-<)|w]|^P|^[^C|\\]*$
Não sei como funciona, foi produzido pela minha primeira incursão em algoritmos genéticos . Há saída do programa que menciona a resposta.
A próxima resposta deve corresponder:
e falhar:
fonte
29
? Dessa forma, não vai acabar tão cedo ... Eu acho que o principal desafio é encontrar o último, o melhor regex.32. PCRE - 30 bytes
Testado no Regex101
A próxima resposta deve corresponder às seguintes seqüências de caracteres :
E falhe nessas strings :
fonte
1. Tipo ECMAScript - 2 bytes
Teste-o no Regex101.
O conjunto de correspondência inicial é
PPCG
e o conjunto com falha[PPCG]
. Portanto, este regex testa simplesmente que a seqüência começa comP
.A próxima resposta deve corresponder às seguintes seqüências de caracteres:
E falhe nessas strings:
fonte
3. sabor ECMAScript - 6 bytes
Teste aqui
A próxima resposta deve corresponder às seguintes seqüências de caracteres:
E falhe nas seguintes strings:
fonte
7. sabor Python - 16
Testado no Regex101
Tem que adicionar um \ à lista de correspondências :)
A próxima resposta deve corresponder às seguintes seqüências de caracteres:
E falhe nessas strings:
fonte
12. sabor ECMAScript - 17
Teste aqui .
A próxima resposta deve corresponder às seguintes seqüências de caracteres:
E falhe nessas strings:
fonte
22. sabor PCRE - 29 bytes
Como o nº 22 original não foi modificado por 1 hora, presumo que ele se tornou inválido.
Demo
A próxima resposta deve corresponder às seguintes seqüências de caracteres:
E falhe nessas strings:
fonte
26. sabor Python - 28
Teste no Regex101
A próxima resposta deve corresponder às seguintes seqüências de caracteres:
E falhe nessas strings:
fonte
30. sabor Python - 28
Testado no Regex101
Quando há vontade ...
A próxima resposta deve corresponder às seguintes seqüências de caracteres:
E falhe nessas strings:
fonte
37. sabor Perl - 30
Submissão no Regex101 .
A solução foi produzida pelo mesmo programa de antes. O programa também imprimiu solução de 29 caracteres
\?[^$w]*\$|[]^C]\w)$|w.]|\w.\
, não sei por que, pois parece um regex malformado ...A próxima resposta deve corresponder às seguintes seqüências de caracteres:
E falhe nessas strings:
fonte
40. PCRE - 33 bytes
Testado no Regex101
A próxima resposta deve corresponder às seguintes seqüências de caracteres :
E falhe nessas strings :
fonte
4. sabor ECMAScript - 5 bytes
Teste aqui .
A próxima resposta deve corresponder às seguintes seqüências de caracteres:
E falhe nessas strings:
fonte
5. sabor ECMAScript - 6 bytes
Testado no Regex101 .
Hora de apimentar um pouco as coisas com o sucesso estabelecido.
A próxima resposta deve corresponder às seguintes seqüências de caracteres:
E falhe nessas strings:
fonte
6. sabor ECMAScript - 9 bytes
Testado no Regex101 .
A próxima resposta deve corresponder às seguintes seqüências de caracteres:
E falhe nessas strings:
fonte
14. sabor PCRE - 25
Testado no Regex101
Isso está começando a ficar bastante difícil.
A próxima resposta deve corresponder às seguintes seqüências de caracteres:
E falhe nessas strings:
fonte
15. sabor PCRE - 26
Testado no Regex101
A próxima resposta deve corresponder às seguintes seqüências de caracteres:
E falhe nessas strings:
fonte
16. sabor PCRE - 21
Testado no Regex 101 .
A próxima resposta deve corresponder às seguintes seqüências de caracteres:
E falhe nessas strings:
fonte
PPCG
.25. sabor PCRE - 29
Testado aqui. (O regex de teste contém um adicional
\n
para garantir que nenhuma correspondência abranja várias linhas. Isso não é necessário para corresponder a cada sequência individual.)Essa foi uma fruta baixa! :) Eu tenho que parabenizar o plannapus, porém, esse regex é incrivelmente elegante para os conjuntos de testes atuais. Se você deseja votar novamente esta resposta, certifique-se de votar também na anterior!
A próxima resposta deve corresponder às seguintes seqüências de caracteres:
E falhe nessas strings:
fonte
35. PCRE - 35 bytes
Testado no Regex101
A próxima resposta deve corresponder às seguintes seqüências de caracteres :
E falhe nessas strings :
fonte
36. sabor Python - 32
Testado no Regex101
Eu tinha três regexes de 32 bytes prontos e, felizmente, um deles ainda funciona: D
A próxima resposta deve corresponder às seguintes seqüências de caracteres:
E falhe nessas strings:
fonte