Salut nodgim, je vois que toi non plus, tu n'as pas fini de gratouiller sur cette chose bizarre.
Ce problème-ci est bien trouvé, il a l'air simple lui aussi, mais il m'a fallu un moment avant de trouver le truc (si toutefois j'ai bien compris l'astuce).
Étant donné un mot, on assigne la valeur 0 à la première lettre, puis pour connaître la valeur de la lettre suivante :
* si c'est même, sa valeur est la même
* si c'est la lettre suivante dans l'alphabet ("a->b", "b->c" ou "c->a"), on augmente sa valeur de 1
* si c'est la lettre précédente dans l'alphabet ("b->a", "c->b" ou "a->c"), on diminue sa valeur de 1
Par exemple, pour le mot abbcacabba, cela donne 0112323443.
Le critère est alors que seule la première lettre du mot a pour valeur 0. Le mot ci-dessus est donc bien dans le dictionnaire.
En effet, étant donné un mot vérifiant ce critère, on peut décider à chaque fois de prendre la première lettre atteignant le maximum (ici, 4), et de la faire disparaitre, pour trouver un antécédent dans le dictionnaire. Ce qui donnerait sur l'exemple précédent :
0112323443 abbcacabba
011232343 abbcacaba
01123233 abbcacaa
0112233 abbccaa
011223 abbcca
01122 abbcc
0112 abbc
011 abb
01 ab
0 a
Inversement, si un mot ne vérifie pas ce critère, on remarque que chaque passage à un antécédent a pour effet de diminuer (non strictement) les valeurs des lettres suivant celle où a eu lieu la transformation, il est donc illusoire de ce débarrasser de la lettre autre que la lettre initiale dont la valeur est zéro.
Par exemple, si on passe de abbcacba=01123210 à abbacba=0110(-1)(-2)(-3), on constate que les valeurs suivant la transformation ont diminué. En général, elles restent au mieux identiques.