Bonjour, je souhaite donner (sous forme de liste par exemple) l'univers d'un tirage successif avec remise d'une urne contenant les boules 1 2 et 3.
Ceci marche bien :
Univers():={
local L,L1,L2,L3,L4;
L:=[];
L2:=[];
L4:=[];
pour j de 1 jusque 3 faire
L:=append(L,j);
fpour
pour n de 0 jusque 2 faire
pour k de 1 jusque 3 faire
L1:=concat([L[n]],[k]);
L2:=append(L2,L1)
fpour
fpour
pour l de 0 jusque size(L2)-1 faire
pour m de 1 jusque 3 faire
L3:=concat(L2[l],[m]);
L4:=append(L4,L3);
fpour
fpour
L4;
}:;
mais je suis sûr qu'il y a beaucoup plus << joli >> (=simple).
Quelqu'un a-t-il une idée ?
Stéphane Lejoly
Concours d'élégance
Modérateur : xcasadmin
-
- Messages : 1139
- Inscription : dim. mai 20, 2007 7:09 am
- Localisation : Paris
- Contact :
voici ma proposition
Ensuite univers(3,3).
Explication: je convertis les entiers de 0 a k^n-1 en base k, ce qui me donne des listes de 1 a n entiers compris entre 0 et k-1, et j'ajoute [1,...,1].
Le signe =< permet de stocker le resultat en place dans res (:= convient aussi mais serait moins rapide).
Frederic, il me semble que ta solution ne convient pas a cause de la non commutativite.
Code : Tout sélectionner
univers(k,n):={ // n tirages parmi 1..k
local j,kn,res,ajout;
kn:=k^n;
res:=[0$kn];
ajout:=[1$n];
for (j:=0;j<kn;j++){
res[j] =< revlist(convert(j,base,k)+ajout);
}
return res;
}:;
Explication: je convertis les entiers de 0 a k^n-1 en base k, ce qui me donne des listes de 1 a n entiers compris entre 0 et k-1, et j'ajoute [1,...,1].
Le signe =< permet de stocker le resultat en place dans res (:= convient aussi mais serait moins rapide).
Frederic, il me semble que ta solution ne convient pas a cause de la non commutativite.
-
- Messages : 1139
- Inscription : dim. mai 20, 2007 7:09 am
- Localisation : Paris
- Contact :