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 !



Cite this blog post
Arthur Charpentier (2016, January 14). Collectionner les Figurines Lego avec ses Ami(e)s. Freakonometrics. Retrieved June 15, 2024, from https://doi.org/10.58079/ov27

4 thoughts on “Collectionner les Figurines Lego avec ses Ami(e)s”

  1. Les maths ont déjà été faites :-).
    Pour trouver le nombre moyen de figurines à acheter, pour avoir $m$ jeux complets de $n$ figurines chacun, la valeur exacte et une asymptotique est donnée dans https://dx.doi.org/10.2307%2F2308930 par exemple.
    On obtient $n \log n + (m-1) n \log \log n + n ( \gamma – \log (m-1)! ) + o(1)$ figurines à acheter, en tout.
    Pour trouver une estimation des quantiles, ce sera dans http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.210.6546 (qui donne en plus une expression explicite et simple des constantes cachées dans le $O$ par l’article précédent).
    Enfin, pour une généralisation si les figurines ne sont pas équiprobables, c’est calculé dans https://dx.doi.org/10.1016%2F0166-218X%2892%2990177-C.

  2. Allez, je remets mon petit grain de sel, toujours sans aucune connaissance mathématiques : avez vous tenu compte dans les calculs du fait que toutes les figs n’apparaissent pas avec la meme fréquence dans les boites complètes ? A savoir, Lego organise la rareté pour certaines des figs, donc il n’existe pas au départ la meme chance de trouver l’une ou l’autre.

    1. non, j’avoue qu’ici tout est supposé uniforme… maintenant, c’est super facile avec ce code pour changer la distribution des figurines dans les sachets… par exemple, si on suppose que la dernière est 2 fois mois présente que les autres, on utilise dans le code précédant

      no=sample(1:16,size=1,prob=c(rep(1,15),1/2))

      Ainsi on a besoin effectivement, en moyenne de plus de sachets (58 et plus 54)

      > tirage=function(k=1){
      + test=FALSE
      + cpte=0
      + M=rep(0,16)
      + while(!test){
      + no=sample(1:16,size=1,prob=c(rep(1,15),1/2))
      + M=f(M,no)
      + cpte=cpte+1
      + if(min(M)==k) test=TRUE
      + }
      + return(list(compte=M,
      + nbre=cpte))
      + }
      >
      > N=unlist(lapply(1:10000,function(x) tirage(1)$nbre))
      > mean(N)
      [1] 58.1278

    2. c’est facile de créer la rareté, et optimiser les gains, pour Lego. Par exemple, si une figurine est 5 fois mois présente que les autres, on passe de 54 à 90 sachets à acheter, en moyenne (en jouant tout seul)

      > tirage=function(k=1,ratio=5){
      + test=FALSE
      + cpte=0
      + M=rep(0,16)
      + while(!test){
      + no=sample(1:16,size=1,prob=c(rep(1,15),1/ratio))
      + M=f(M,no)
      + cpte=cpte+1
      + if(min(M)==k) test=TRUE
      + }
      + return(list(compte=M,
      + nbre=cpte))
      + }
      >
      > N=unlist(lapply(1:10000,function(x) tirage(1,ratio=5)$nbre))
      > mean(N)
      [1] 89.8712

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.