Koronkorko é a palavra finlandesa para juros compostos . Não queremos interesse composto em nossas strings, portanto, vamos encontrar a expressão regular mais curta possível para excluí-la.
Dada uma sequência que consiste apenas nos caracteres alfabéticos maiúsculos AZ, determine a expressão regular mais curta possível que corresponda à sequência, se ela não contiver a substring KORONKORKO
. Qualquer sequência que contenha KORONKORKO
como substring não deve ser correspondida pelo regex.
Apenas os caracteres A
- Z
, [
, ]
, -
, ^
, ,
?
, *
, +
, |
, (
, e )
deve ser usado na expressão.
Eu acho que isso pode ser feito com 118 caracteres na expressão. Você pode torná-lo mais curto?
Nota: Este desafio é de Ohjelmointiputka (em finlandês).
code-golf
regular-expression
hóspede
fonte
fonte
!
fosse um caractere permitido, você poderia ter feito^((?!KORONKORO).)*$
por 19 bytes.!
não é permitido.-
e^
dentro das classes de caracteres (portanto,^
não pode ser usado como uma âncora), e uma correspondência só é contada se toda a cadeia de caracteres corresponder ao regex (ou seja, um ambiente implícito^$
, como opostos aos "regexes" normais que contam uma string como correspondente se alguma parte dela corresponder à regex)Respostas:
204 caracteres
Gerado transformando
.*KORONKORKO.*
- se em uma máquina de estados finitos, invertendo a máquina de estados finitos e transformando-a novamente em um regex.fonte
Python,
777997118 bytesEditar 3: Reescrever. Usa lookaheads aninhados
Regex 101
Edit 2: Adicionado '$ |' em todo o regex. Agora, se um prefixo do KORONKORKO tiver sido correspondido, o próximo item a ser correspondido será o final da string, um caractere que termina o prefixo ou um caractere que estenda o prefixo, se for seguido por algo que termine o prefixo.
Este regex funciona com
re.fullmatch()
, que foi adicionado no Python 3.4. Para uso comre.match()
,^
e$
necessidade de ser adicionada ao início e no final do teste padrão, respectivamente, para mais de 2 bytes.Link Regex101
Solução incorreta anterior (ver comentários):
Edit: Adicionado K único
fonte
K
.KKORONKORKO
^
e o fim$
não são necessários. Além disso,=
e$
não são permitidos.