Il est bien le dernier effet!
Pour les macros, il y a un truc important à vérifier : l'économie des caractères. Et quand on s'y attarde, c'est beaucoup plus compliqué que prévu.
Dans ce code,
...on voit qu'une macro à vide contient 18 caractères. C'est la perte de place nécessaire pour créer un simple macro vide dont le nom ne fait qu'un caractère.
Donc quand on a initialement n occurences de q caractères, on perd :
1) 18 caractères pour la macro à vide
2) q caractères pour insérer l'occurence dans la macro
3) n caractères pour remplacer chaque occurence par le nom de la macro (avec un nom d'une seule lettre)
Et on gagne n * q caractères pour toutes les occurences à remplacer.
Le bilan se calcule ainsi:
Bilan = Gain - Perte
Bilan = (n * q) - (18 + q + n)
Bilan = q * (n - 1) - n - 18
ou
Bilan = n * (q - 1) - q - 18
Si le bilan est strictement positif, la macro est valable.
S'il est nul, l'avantage est de répartir les caractères pour réussir à limiter plus facilement chaque ligne du code (une des contraintes de cette compétition), et l'inconvénient c'est d'empêcher la mise en place d'une autre macro.
Si le bilan est négatif, la macro n'est pas valable.
Exemple: Combien de boucles If...EndIf faut-il pour qu'une macro remplace chaque EndIf? q = Len("EndIf") = 5
(Rt°): Il faut: Bilan > 0
<=> n * (q - 1) - q - 18 > 0
<=> n * (5 - 1) - 5 - 18 > 0
<=> n * 4 - 23 > 0
<=> n * 4 > 23
<=> n > 23 / 4
<=> n > 5.75
Il faut donc au minimum 6 boucles If...EndIf pour qu'une macro remplaçant EndIf soit valable.