Tag Archives: Lego

Collectionner les Figurines Lego avec ses Ami(e)s

Dans mon précédant billet, je regardais combien de figurines Lego je devais acheter pour avoir toute la série, avec ma fille. Pour la série de 16, il fallait, en moyenne, acheter 54 sachets, à 3 euros pièces. Dans les commentaires, @Guillaume et @Gaelle me faisaient noter que les échanges, ça pouvait aider.

Bon, tout d’abord j’aime pas qu’on donne des conseils à mes filles pour avoir raison contre moi ! Parce que oui, c’est sûr qu’en s’y mettant à plusieurs, le coût individuel sera plus faible… Ensuite, parce que les maths me semblent plus compliqués…. Cela dit, en simulant des parties, ça tombe assez vite…

Pour commencer, je fais une petite fonction (histoire d’alléger mes codes) pour incrémenter mes comptages de figurines, à chaque fois que j’en achète une

> f=function(mat,i){
+   mat[i]=mat[i]+1
+   return(mat)
+ }

Ensuite, on peut avoir une petite fonction, correspondant à une simulation, qui me renvoie le nombre de figurine de chaque type que j’ai du acheter pour avoir les 16 une fois. Ou plus. En fait, je veux avoir en tout k fois toutes les figurines (ce qui permet de partager parmi k ami(e)s)

> tirage=function(k=1){
+ test=FALSE
+ cpte=0
+ M=rep(0,16)
+ while(!test){
+   no=sample(1:16,size=1)
+   M=f(M,no)
+   cpte=cpte+1
+   if(min(M)==k) test=TRUE
+ }
+ return(list(compte=M,
+             nbre=cpte))
+ }

Maintenant on peut faire des simulations. Par exemple, pour retrouver le fait qu’il faut, en moyenne, acheter 54 sachet pour que ma fille (seule) ait toutes les figurines

> N=unlist(lapply(1:10000,function(x) tirage(1)$nbre))
> mean(N)
[1] 54.1854

Si maintenant on le fait avec mes deux filles,

> N=unlist(lapply(1:10000,function(x) tirage(2)$nbre))
> mean(N)
[1] 82.7961

ce qui est (beaucoup) moins que le double. Si au lieux de faire ça entre mes deux filles, mais que ma fille collectionne les figurines avec une amie à elle (et que les papas partagent les frais), on a en moyenne 41 sachets à acheter, chacun,

> mean(N)/2
[1] 41.39805

et pour trois, on passe à 36 sachets

> N=unlist(lapply(1:10000,function(x) tirage(3)$nbre))
> mean(N)/3
[1] 36.04363

etc

> V=unlist(lapply(1:10,function(k) mean(unlist(lapply(1:10000,function(x) tirage(k)$nbre)))))
> plot(1:10,V/1:10,type="b",pch=19)

On peut aller plus loin, en regardant les quantiles. Avec 4 ami(e)s, si on achète tous 45 sachets, on a 90% de chances que tout le monde ait les 16 figurines

D’ailleurs, si on regarde l’évolution du quantile (à 90%) sur la moyenne, on voit qu’il baisse vite avec la taille…. Avec 2 ami(e)s, il faut 35% de sachets en plus pour s’assurer d’avoir toutes les figurines dans 90% de cas (par rapport au nombre moyen) alors qu’il en faut juste 20% de plus avec 8 ami(e)s.

Maintenant, si quelqu’un a le courage (et le temps) de faire les maths, je suis preneur !

Collectionner les Figurines Lego

 

Tous ceux qui ont des enfants – ou qui jouent encore au Lego – le savent : régulièrement, Lego sort des séries de figurines, vendus en sachets individuels hermétiques, un peu comme les anciennes cartes à jouer. On est à la saison 15, et il y a 16 figurines par séries,

D’ordinaire, les enfants réclament un paquet, quand on va dans un magasin de jeux (genre pour acheter un cadeau pour un anniversaire) mais là, ma fille les a réclamé tous.

Bon, après le moment où je ris dans ma barbe, j’ai quand même fini par me demander combien ça pourrait coûter si on achetait des paquets, de manière à récupérer les 16 figurines.

La bonne stratégie pour faire le calcul me semble d’ordonner les personnage par ordre d’apparition,  et de modéliser le nombre de paquets achetés entre deux premières apparitions, comme indiqué sur le dessin ci-dessous

Si  désigne le nombre total de paquets à acheter, on note  le nombre de paquets à acheter, entre l’apparition de la ()ème nouvelle figurine, et la ème (avec la convention que vaut 1, i.e. à l’achat du premier paquet, on a notre première figurine), on a

On notera que, si  désigne la loi géométrique,
et à partir de là, les calculs sont simples, puisque

soit (par linéarité de l’espérance)

i.e.

ou encore

Le nombre moyen de paquets à acheter est alors
> sum(16/(1:16)) 
[1] 54.09166

Pour ceux qui ont oublié leur calculatrice, on peut se souvenir que

https://latex.codecogs.com/gif.latex?1+%20frac{1}{2}%20+%20frac{1}{3}%20+%20frac{1}{4}%20+%20...%20+%20frac{1}{n}%20sim%20ln(n)
> log(16)*16 
[1] 44.36142

qui diffère du résultat numérique car il manquait la constante d’Euler

https://latex.codecogs.com/gif.latex?gamma%20=%20lim_{n%20<br /> ightarrow%20infty%20}%20left(%201+%20frac{1}{2}%20+%20frac{1}{3}%20+%20frac{1}{4}%20+%20...%20+%20frac{1}{n}%20-%20ln(n)%20<br /> ight)

i.e.

https://latex.codecogs.com/gif.latex?1+%20frac{1}{2}%20+%20frac{1}{3}%20+%20frac{1}{4}%20+%20...%20+%20frac{1}{n}%20sim%20ln(n)+gamma

Numériquement, on obtient, en prenant pour https://latex.codecogs.com/gif.latex?gamma 0.57721 (cf Google)

> (log(16)+ 0.57721)*16 
[1] 53.59678

Mais je m’écarte du sujet… à 3€, il faut débourser, en moyenne, 162€ pour avoir les 16 personnages, soit plus de 10€ (en moyenne) par personnage !

> sum(16/(1:16))*3 
[1] 162.275

On est ici au même prix que l’hotel Lego friends (oui, c’est une demande récurrente)

Par simulation, on peut confirmer cet ordre de grandeur (avec ici un million de simulation de la variable),

> rpaquet=function(i) sum(1+rgeom(16,prob=(1:16)/16))
> S=unlist(lapply(1:1e6,rpaquet))
> mean(3*S)
[1] 162.1709

mais surtout, on peut avoir des quantiles, par exemple

> median(S)*3
[1] 150

après avoir déboursé 150 euros, il y a 50% de chances que l’on ait déjà toutes les figurines.

> quantile(S,.9)*3
90% 
237

 

Et il y a 1 chance sur 10 pour qu’on dépasse les 237€. Mine de rien, pour 16 petites figurines, on dépasse là le prix du Falcon Millenium,

Je pense que les enfants ne sont pas prêt que je leur rachète des petites figurines !