Un algorithme pour plier la courbe du dragon est bien connu : en voici la page Wikipédia. Il consiste à plier une longue bandelette de papier en deux, puis en deux et encore en deux et ainsi de suite à l’infini. On déplie ensuite tous les plis à 90° comme sur la figure du processus suivante :
On obtient alors la courbe suivante :
Mais l’on divise à chaque fois la feuille en deux. On peut alors se demander ce qui se passerait si l’on divisait pas exemple la feuille en trois. Plutôt que de plier à l’infini une feuille (les plieurs les plus motivés pourront s’y attarder s’ils le souhaitent), on s’intéressera ici à la programmation d’un algorithme le faisant pour nous.
On a la feuille (pas encore pliée) suivante :
''
On veut la plier selon le procédé précédemment expliqué. On note V les plis
vallées et M les plis montagnes.
iter 1 : 'V' On ajoute un pli vallée au milieu
iter 2 : 'VVM' On plie encore : sur la couche du dessus, le pli
est en vallée. Mais sur la couche du dessous, le
pli vallée s'inverse à cause du premier pli vallée
déjà présent, et donc passe en montagne.
iter 3 : 'VVMVVMM' Même principe.
iter 4 : 'VVMVVMMVVVMMVMM' Pareil.
Voici, en Python (un langage de programmation), le code de cet algorithme :
def plier(feuille: str, iteration: int, nb_plis: int) -> str :
# Lorsque aucun pli ne doit être fait, on retourne un mot vide.
if iteration == 0 :
return ''
folded_feuille = '' # On part d'une feuille à plier, qui sera la feuille
# finale
pli = 'V' # On commence par des plis vallées (à différencier des plis
# montagnes, en crête et donc dans l'autre sens.)
# On va, pour cette itération, se baser sur l'itération précedente.
feuille = plier(feuille, iteration-1, nb_plis)
######################
# Ici commence l'algorithme de pliage
######################
# Pour chaque pli de la feuille :
for Pli in feuille :
folded_feuille += pli * nb_plis + Pli # On ajoute le nombre de plis
# entre chaque pli de l'itération
# précédente
# Puis on chage le type de pli
if pli == 'V' :
pli = 'M'
else :
pli = 'V'
folded_feuille += pli * nb_plis # On n'oublie pas d'ajouter des plis à la
# fin de la bande
return folded_feuille
Avec un code supplémentaire pour transformer notre “mot” de plis en affichage (code disponnible ici), on obtient, pour 13 itérations, la figure suivante :
On est alors en mesure de répondre à la question posée au début : que se passe-t-il si l’on plie la feuille en trois à chaque fois ? Ici avec 10 itérations :
Crédits images : Wikipédia et Paul JF
Article : Paul JF