La pile par l'exemple

Boucle d'or et les bols

Vous connaissez sans doute l'histoire de boucle d'or et les trois ours ? Cette jeune fille qui pénètre dans la maison de 3 ours, mange le gruau, casse la chaise et s'endort dans le lit. Il y a de nombreuses variantes de cette histoire, particulièrement au sujet de la fin. Dans certaines versions, boucle d'or est effrayée par les ours et s'en va. Dans d'autres, elle est tuée par les ours (sympa à raconter aux jeunes enfants qui vont s'enfdormir). Mais je vais vous dévoiler une version un peu moins classique.

Après que Boucle d'Or ait pris ses aises et se soit endormie dans la maison des ours, ceux ci constatent l'intrusion et les dégats. En trouvant Boucle d'Or, ils ne la mangent pas (ils sont civilisés), mais ils exigent réparation. Ils vont donc demander à Boucle d'Or d'effectuer de menu tâche ménagère pendant quelque temps :

  • Mettre la table
  • Laver les bols
  • ranger les bols

Les bols des ours sont quand même taillés dans des blocs de granit qui pèsent prêt de 15kg chacun. Boucle d'Or est une jeune femme pleine de ressource. Elle a conçu un robot qu'elle programme en Python. Elle se dit que ce serait bien qu'il s'occupe de ces tâches un peu lourde, un peu rébarbative, et répétitive.

Elle conçoit donc une API qui lui permet de programmer ce robot pour ses tâches quotidiennes. Le principe est qu'elle doit pouvoir empiler ces bols, que ce soit dans l'armoire où ils sont rangés, à côté de l'évier avant de les laver, à côté de l'évier une fois qu'ils sont lavés. Bien entendu, si elle peut empiler les bols, elle doit aussi pouvoir les dépiler. Par ailleurs, quand elle met la table, le nom de chaque ours (papa, maman, bébé ours) figure sur le bol.

Son API comprend quatre fonctions

creerPile() # crée un empilement pour les bols
estVide(pile) # retourne un booléen qui indique si la pile est vide
empile(pile,bol) # ajoute un bol au sommet de la pile
depile(pile) # enleve un bol du sommet de la pile et retourne le bol

Grâce à cela elle peut programmer son robot pour effectuer les tâches ménagères. Voici par exemple la procédure pour nettoyer après le petit déjeuner

# débarasser la table
# laTable est juste une liste qui contient les bols 
pileSale = creerPile()
for bol in laTable :
    empiler(pileSale,bol)

# nettoyage
pilePropre = creerPile()
while not estVide(pileSale):
    bol = depile(pileSale)
    laver(bol)
    empile(pilePropre,bol)

# rangement dans l'armoire
attendre(30) # attends 30 minutes que les bols séchent
pileArmoire = creerPile()
while not estVide(pilePropre):
    bol = depile(pilePropre)
    empile(pileArmoire,bol)

Comme vous le voyez, la connaissance de Python et des compétences en robotique ont permis à Boucle d'Or de se décharger de ces tâches ménagères.

Au bout d'un certain temps, Boucle d'Or considérait que sa dette était payée et souhaitait rentrer chez elle. Les ours, cependant, étaient trop heureux d'avoir à domicile quelqu'un qui effectuait gratuitement les tâches ménagères. Il forcérent Boucle d'Or a continuer d'assumer ses travaux. Excédée, Boucle d'or adapta la scie circulaire sur son robot et le programma pour débiter les ours. Elle se libéra de cette exploitation de façon un peu expéditive. Cette fin de l'histoire, bien que riche d'enseignement, est bien moins populaire.