Escreva uma expressão regular que corresponda a uma determinada sequência que consiste em três números inteiros não negativos e separados por espaço, se e somente se o último número inteiro for a soma dos dois anteriores. As respostas podem ser para números inteiros de qualquer sistema numérico com uma raiz entre 2 e 10.
Casos de teste
Estes devem falhar:
0 1 2
10 20 1000
Estes devem corresponder:
10 20 30
28657 46368 75025
0 0 0
Regras
Sua resposta deve consistir em um único regex, sem nenhum código adicional (exceto, opcionalmente, uma lista de modificadores de regex necessários para fazer sua solução funcionar). Você não deve usar recursos do tipo regex do seu idioma que permitam chamar código no idioma de hospedagem (por exemplo, o modificador e Perl).
Especifique o seu sabor regex na sua resposta.
Como o regex golf, ganha o menor regex em bytes. Se o seu idioma exigir delimitadores (geralmente /.../) para indicar expressões regulares, não conte os delimitadores. Se sua solução exigir modificadores, adicione um byte por modificador.
Créditos a Martin Ender e jaytea pelas regras de regex-golfe.
Tenho motivos para acreditar que isso é possível com base na solução de Martin Ender para encontrar e incrementar números inteiros com regex .
fonte
/e
modificador do Perl 5 se aplica apenas a substituições e não é a única maneira de executar código externo. Além disso, isso desqualifica Perl 6 inteiramente, pois um regex é apenas um método com sintaxe adicional. (O motivo é que isso facilita a leitura e gravação de expressões regulares) Como resultado, todos os recursos necessários nas expressões regulares arcaicas não são necessários (ou incluídos), como você inseriu no código Perl 6. (o que significa que provavelmente não é possível fazer esse desafio se você apenas limitar a regexar um código específico)/^(\d+)**3%' '$ <?{$0[2]==[+] $0[0,1]}>/
ou/^(\d+)' '(\d+)' '(\d+)$ <?{$2==$0+$1}>/
ou/^(\d+)' '(\d+){}" {$0+$1}"$/
Respostas:
Perl / PCRE: 2.685 bytes
Experimente online!
Eu estive à espreita por desafios difíceis depois de um hiato de regex, e por acaso tropeçou nesse doozy. Verificar adição (com Perl / PCRE) é algo em que pensei antes, mas prontamente descartado como impossível ou além da minha capacidade. No entanto, tomei outra rachadura agora e estou muito emocionado em dizer que realmente fiz isso!
Eu realmente não joguei isso além de considerar algoritmos curtos e técnica de correspondência geral quando escrevi. Estou muito feliz por ter feito: D
Se as pessoas estiverem interessadas, eu poderia adicionar comentários e explicar como isso funciona.
Edit: Eu fiz um post detalhado no meu blog sobre isso, com explicações e comentários :) aproveite: http://www.drregex.com/2018/09/a-regex-i-submitted-to-reddit-climbed.html
fonte
Tipo .NET,
139111106 + 1 = 107 bytesPrecisa do
RightToLeft
modificadorr
. Entrada em binário.Experimente online! (Usando Retina .)
Yay para grupos de equilíbrio. Eu vou explicar isso mais tarde ...
Versão decimal,
340243 + 1 = 244 bytesExperimente online!
fonte
.NET, 96 bytes
Bandeira:
r
Experimente online!
Versão decimal, 238 bytes
Bandeira:
r
Experimente online!
Semelhante à resposta de Martin.
fonte