bonbons.py

Created by schraf

Created on September 30, 2018

613 Bytes

Toutes les explications en vidéo ici

À la maternelle, l’instituteur a donné des bonbons aux enfants. Le nombre de bonbons que chaque enfant reçoit n’est pas toujours le même. Voici par exemple une distribution possible : [10,2,8,22,16,4,10,6,14,20]

L’instituteur a demandé aux enfants de faire un cercle et de jouer à un jeu : chaque enfant donne la moitié de ses bonbons à l’enfant sur sa droite (en même temps). Si le nombre de bonbons est un nombre impair, l’enseignant lui donne un bonbon supplémentaire pour que le partage tombe juste.

On répète cette procédure jusqu’à ce que les enfants aient le même nombre de bonbons.

Vous devez créer une fonction distrib qui, à partir de la distribution initiale de l’instituteur, affiche les différentes étapes jusqu’à ce que tous les enfants aient le même nombre de bonbons.

>> distrib([ 1,2,3,4,5 ])
[ 4,2,3,4,5 ]
# Le 1er enfant qui n'a qu'un bonbon reçoit de l'instit un autre bonbon qu'il donne au 2e
# Le dernier qui en a 5 reçoit de l'instit un autre bonbon et donne donc 6/2 = 3 au premier enfant
# L'enfant n°1 a donc bien 1+3 = 4 bonbons à la première étape
[ 5,3,3,4,5 ]
[ 6,5,4,4,5 ]
[ 6,6,5,4,5 ]
[ 6,6,6,5,5 ]
[ 6,6,6,6,6 ]

Dans cet exemple ont voit que tous les enfants auront 6 bonbons à la fin du jeu.


def moitie(n):
  if n%2==0: return n/2
  return (n+1)/2
# ou juste : return (n+1)//2
  

def distrib(bb):
  while not(all(b==bb[0] for b in bb)):
  # ou while len([b for b in bb if b!=bb[0]])>0:
    suiv=[0]*len(bb)
    for i,b in enumerate(bb):
      suiv[i]+=moitie(b)
      if i+1<len(bb):
        suiv[i+1]+=moitie(b)
      else:
        suiv[0]+=moitie(b)
    bb=suiv
    print(bb)
  return "FIN"
  
# Version 2 

def distrib2(bb):
  while not(all(b==bb[0] for b in bb)):
    decal = bb[-1:]+bb[:-1]
    bb = [moitie(decal[i]) + moitie(v) for i,v in enumerate(bb)]
    print(bb)
  return "FIN"

During your visit to our site, NumWorks needs to install "cookies" or use other technologies to collect data about you in order to:

With the exception of Cookies essential to the operation of the site, NumWorks leaves you the choice: you can accept Cookies for audience measurement by clicking on the "Accept and continue" button, or refuse these Cookies by clicking on the "Continue without accepting" button or by continuing your browsing. You can update your choice at any time by clicking on the link "Manage my cookies" at the bottom of the page. For more information, please consult our <a href="https://www.numworks.com/legal/cookies-policy/">cookies policy</a>.