Koronkorko est le mot finlandais pour les intérêts composés . Nous ne voulons pas d'intérêt composé dans nos chaînes, alors trouvons l'expression régulière la plus courte possible pour l'exclure.
Étant donné une chaîne composée uniquement des caractères alphabétiques majuscules AZ, déterminez l'expression régulière la plus courte possible qui correspond à la chaîne si elle ne contient pas la sous-chaîne KORONKORKO
. Toute chaîne qui contient KORONKORKO
comme sous-chaîne ne doit pas être mise en correspondance par l'expression régulière.
Seuls les caractères A
- Z
, [
, ]
, -
, ^
, ,
?
, *
, +
, |
, (
et )
doivent être utilisés dans l'expression.
Je pense que cela peut être fait avec 118 caractères dans l'expression. Pouvez-vous le raccourcir?
Remarque: Ce défi vient d' Ohjelmointiputka (en finnois).
la source
!
c'était un caractère autorisé, vous auriez pu le faire^((?!KORONKORO).)*$
pour 19 octets.!
n'est pas permis.-
et à l'^
intérieur de celles-ci (il^
ne peut donc pas être utilisé comme ancre), et une correspondance n'est comptée que si toute la chaîne est mise en correspondance par l'expression régulière (c'est-à-dire un entourage implicite^$
, comme par opposition aux "regexes" normales qui comptent une chaîne comme correspondant si une partie de celle-ci correspond à l'expressionRéponses:
204 caractères
Généré en se transformant
.*KORONKORKO.*
en une machine à états finis, en inversant la machine à états finis et en la transformant en regex.la source
Python,
777997118 octetsÉdition 3: réécriture. Utilise des têtes de lecture imbriquées
Regex 101
Edit 2: Ajout de '$ |' tout au long de l'expression régulière. Maintenant, si un préfixe de KORONKORKO a été mis en correspondance, l'élément suivant à mettre en correspondance est la fin de chaîne, un caractère qui termine le préfixe ou un caractère qui étend le préfixe s'il est suivi de quelque chose qui termine le préfixe.
Cette expression régulière fonctionne avec
re.fullmatch()
, qui a été ajoutée dans Python 3.4. À utiliser avecre.match()
,^
et$
doit être ajouté au début et à la fin du modèle, respectivement, pour 2 octets supplémentaires.Lien Regex101
Solution incorrecte précédente (voir commentaires):
Edit: Ajout d'un seul K
la source
K
.KKORONKORKO
^
et la fin$
ne sont pas nécessaires. En outre,=
et$
ne sont pas autorisés.