Aurez-vous le dernier mot ?

Il existe un jeu intéressant appelé " les échelles de mots ". Il s'agit de passer d'un mot à un autre en utilisant des mots intermédiaires. " À chaque étape, une lettre est enlevée, ajoutée ou remplacée par une autre, les autres restant identiques et dans la même position. Toutes les formes grammaticales sont permises. " écrit P. Berloquin dans la revue Science & Vie, # 676, janvier 1974.

Par exemple, on peut passer de CHAUD à FROID de cette manière :

      CHAUD
      CHAUT
       HAUT
       FAUT
       FAIT
       LAIT
       LAID
       LAIDE
       RAIDE
       ROIDE
      FROIDE
      FROID

On trouve ici 10 intermédiaires. Pouvez-vous faire mieux ?

Exercez-vous avec les problèmes suivants en tentant de faire la liaison avec le moins d'intermédiaires possibles.

CROC - DENT
FILLE - GARÇON
AUBE-SOIR
RIEN-TOUT

Dans la même revue, P. Berloquin parle de pondérer les proverbes français en associant à chaque lettre de la phrase un nombre correspondant à sa place, ce nombre restant identique si la lettre est répétée. Il donne l'exemple suivant :

       A   B O N  C H A T   B O N   R A T

       1   2 3 4  5 6 1 7   2 3 4   8 1 7

Le total donne 54. Il obtient alors le poids du proverbe en divisant ce nombre par le nombre de lettre du proverbe. Ici : 54/14 = 3,85.

Quel est le proverbe français le plus léger ? Le plus lourd ?

[Ajout 1997: Merci à Olivier Miakinen que m'a fait parvenir ce programme C calculant le poids de mots.]

#include 
#include 

#define MAXLINE 1000

typedef struct {
        int     ordre;  /* ordre d'apparition d'une lettre */
        int     nombre; /* nombre d'apparitions de cette lettre */
} compte_t;

/*
 * Cette fonction retourne le numero d'ordre de la lettre (0 pour A ou a,
 * 1 pour B ou b, etc., jusqu'a 25 pour Z ou z) ou -1 si ce n'est pas une
 * lettre (espace, signe de ponctuation, etc.)
 */
int lettre_index(char lettre)
{
        if ((lettre >= 'A') && (lettre <= 'Z'))
                return (lettre - 'A');
        if ((lettre >= 'a') && (lettre <= 'z'))
                return (lettre - 'a');
        return -1;
}

main()
{
 while (1) {
        char    readline[MAXLINE];
        char    *cp;
        int     index;
        int     ordre = 0;      /* ordre d'apparition de la derniere lettre */
        int     nombre = 0;     /* nombre de lettres au total */
        compte_t compte[26];
        double  poids = 0;

        printf("-> ");
        if (gets(readline) == NULL) {
                printf("\nErreur %d. Bye\n", errno);
                exit(1);
        }

        /* Remise a zero du comptage */
        for (index = 0; index < 26; index++) {
                compte[index].ordre = 0;
                compte[index].nombre = 0;
        }

        /* Nouveau comptage */
        for (cp = readline; *cp != '\0'; cp++) {
                index = lettre_index(*cp);
                if (index < 0) {
                        /* Espace ou signe de ponctuation */
                        continue;
                }
                if (compte[index].nombre == 0) {
                        /* C'est la premiere fois que cette lettre apparait */
                        ordre++;
                        compte[index].ordre = ordre;
                }
                compte[index].nombre++;
                nombre++;
        }

        if (nombre == 0) {
                printf("Pas de lettre. Bye.\n");
                exit(0);
        }

        /* Calcul du poids */
        for (index = 0; index < 26; index++) {
                poids += compte[index].nombre * compte[index].ordre;
        }
        poids /= nombre;
        printf("Nombre de lettres = %d\n", nombre);
        printf("Poids = %f\n", poids);
 }
}


Ce texte est paru dans la chronique Énigmes et Jeux de l'hebdo régional Le Bulletin de Buckingham le 29 mars 1978.


Hypertextualisé en janvier 1997
Énigmes et jeux
Mathématiques