[2024/365] Liste de nombres aléatoires uniques (entre bornes)
Bonjour à tous,
Une petite fonction LAMBDA utilitaire pour générer une liste de valeurs aléatoires uniques. Puisque TABLEAU.ALEA autorise la répétition, on fait un appel récursif sur UNIQUE(TABLEAU.ALEA) pour n'en extraire qu'une liste de valeurs uniques. C'est surtout pratique quand on veut des entiers car en nombre décimaux la probabilité de répétition est quand même beaucoup plus faible.
J'ai essayé d'anticiper les erreurs de saisie potentielles mais n'hésitez pas à m'informer si vous voyez des pistes d'amélioration.
La syntaxe est la même que pour TABLEAU.ALEA (sans le nombre de colonnes ! => on fait une liste), le dernier argument sArr doit rester vide, il sert à la recursion.
Pour l'utiliser, comme tous les LAMBDA récursifs, dans le gestionnaire de noms, ajouter RANDUNIQUEλ avec la formule ci-dessous :
=LAMBDA(nbVals; vMin; vMax; [integer]; [sArr];
LET(
genArr; TABLEAU.ALEA(nbVals; ; vMin; vMax; SI(ISOMITTED(integer); FAUX; integer));
uArr; UNIQUE(SI(ISOMITTED(sArr); genArr; ASSEMB.V(sArr; genArr)));
check1; SI(ET(NON(ISOMITTED(integer)); integer); ABS(vMax - vMin) > nbVals; VRAI);
check2; ET((vMax - vMin) > 0; (vMax - vMin) < 1000000);
SI(
ET(check1; check2);
SI(
NB(uArr) < nbVals;
RANDUNIQUEλ(nbVals; vMin; vMax; SI(ISOMITTED(integer); FAUX; integer); uArr);
PRENDRE(uArr; nbVals)
);
SI.CONDITIONS(
NON(check1);
"En nombre entier, nbVals_min=" & (vMax - vMin + 1) & ". Fourni : " & nbVals;
NON(check2);
"Veuillez rester dans les bornes de calcul acceptable : 0 > " & vMax - vMin & " > 1000000";
VRAI;
"Erreur non définie"
)
)
)
)