Permuter, sans créer de variable temporaire

Je n’aime pas me faire coller par un (ancien) étudiant !… mais j’ai trouvé la solution très jolie, alors je vais en garder la trace dans mon “cahier de recherche” qu’est mon blog. La question était simple :

Comment permuter les valeurs de deux variables, sans créer de variable temporaire ?

On a ainsi deux variables, https://latex.codecogs.com/gif.latex?A et https://latex.codecogs.com/gif.latex?B, on veut les permuter : https://latex.codecogs.com/gif.latex?A doit prendre la valeur de https://latex.codecogs.com/gif.latex?B, et inversement….

> a=1
> b=2
> a
[1] 1
> b
[1] 2

Oui, c’est possible… en utilisant l’astuce suivante

> a=b-a
> b=b-a
> a=a+b
> a
[1] 2
> b
[1] 1

Amusant, non ?

Mais il est possible d’utiliser plein d’autres fonctions . Moyennant parfois quelques hypothèses supplémentaires. Par exemple, si les nombres sont strictement plus grands que 1,

> a=5.6
> b=4.3
> a
[1] 5.6
> b
[1] 4.3

on peut utiliser

> a=a^b
> b=a^(1/b)
> a=log(a,b)
> a
[1] 4.3
> b
[1] 5.6

Je suppose qu’on peut continuer à creuser pour en trouver d’autres. Par contre, je n’ai pas encore réussi à généraliser sur une permutation de cycle de longueur 3 (les trois permutent vraiment tous)…. je suis preneur !



Cite this blog post
Arthur Charpentier (2014, September 12). Permuter, sans créer de variable temporaire. Freakonometrics. Retrieved June 21, 2024, from https://doi.org/10.58079/ouwt

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.