Koronkorko es la palabra finlandesa para interés compuesto . No queremos interés compuesto en nuestras cadenas, así que busquemos la expresión regular más corta posible para excluirla.
Dada una cadena que consta solo de los caracteres alfabéticos en mayúscula AZ, determine la expresión regular más corta posible que coincida con la cadena si no contiene la subcadena KORONKORKO
. Cualquier cadena que contenga KORONKORKO
como una subcadena no debe coincidir con la expresión regular.
Sólo los caracteres A
- Z
, [
, ]
, -
, ^
, ,
?
, *
, +
, |
, (
, y )
deben ser utilizados en la expresión.
Creo que esto se puede hacer con 118 caracteres en la expresión. ¿Puedes hacerlo más corto?
Nota: Este desafío es de Ohjelmointiputka (en finlandés).
code-golf
regular-expression
invitado
fuente
fuente
!
fuera un personaje permitido, podría haberlo hecho^((?!KORONKORO).)*$
por 19 bytes.!
que no está permitido .-
y^
dentro de las clases de caracteres (por^
lo que no se puede usar como un ancla), y una coincidencia solo se cuenta si la expresión regular coincide con toda la cadena (es decir, un entorno implícito^$
, como en oposición a las "expresiones regulares" normales que cuentan una cadena como coincidente si alguna parte de ella coincide con la expresión regular)Respuestas:
204 caracteres
Generado convirtiéndose
.*KORONKORKO.*
en una máquina de estados finitos, invirtiendo la máquina de estados finitos y volviéndola a una expresión regular.fuente
Python,
777997118 bytesEdición 3: reescribir. Utiliza lookaheads anidados
Regex 101
Edición 2: se agregó '$ |' a lo largo de la expresión regular. Ahora, si se ha emparejado un prefijo de KORONKORKO, el siguiente elemento que debe coincidir es el final de la cadena, un carácter que termina el prefijo o un carácter que extiende el prefijo si es seguido por algo que termina el prefijo.
Esta expresión regular funciona
re.fullmatch()
, que se agregó en Python 3.4. Para usar conre.match()
,^
y$
debe agregarse al principio y al final del patrón, respectivamente, para 2 bytes más.Enlace Regex101
Solución incorrecta anterior (ver comentarios):
Editar: Agregado solo K
fuente
K
.KKORONKORKO
^
y el final$
no son necesarios. Además,=
y$
no están permitidos.