Aurore écrit sur un tableau tous les entiers de 1 à 2019.
Puis elle en sélectionne deux au hasard (a et b), les efface et écrit à la place le nombre $\left| b - a\right|$.
Elle recommence l'opération jusqu'à n'avoir plus qu'un seul entier au tableau.
Le dernier nombre écrit au tableau est 3.
On aimerait montrer qu'Aurore s'est trompée dans ses opérations.
Écrire une fonction python prenant en entrée une liste d'entiers et renvoyant en sortie la somme des éléments de la liste.
def somme(liste):
s = 0
for x in liste:
s = s+x
return s
On vérifie que la somme 1+2+...+2019 a pour valeur 2 039 190.
Par utilisation du programme: somme([i for i in range(1,2020)])
.
Par calcul: formule usuelle de la somme de termes en progression arithmétique.
Écrire une fonction etape
python prenant en entrée une liste d'entiers.
La fonction devra simuler une étape du processus décrit en introduction:
Il existe bien des façons de répondre à la demande en Python.
En voici une:
from random import randint
def etape(liste):
# un indice au hasard:
i = randint(0, len(liste)-1)
# un second indice au hasard
j = 0
while j == i:
j = randint(0, len(liste)-1)
a = liste[i]
b = liste[j]
L = [liste[k] for k in range(len(liste)) if k!=i and k!=j]
L.append(abs(b-a))
return L
Une autre:
from random import randint
def etape(liste):
L = [x for x in liste]
a = L.pop(randint(0, len(L)-1))
b = L.pop(randint(0, len(L)-1))
L.append(abs(b-a))
return L
En déduire une fonction python qui simule plusieurs "parties" du jeu d'Aurore.
Quelle conjecture peut-on émettre sur le nombre qui reste seul au tableau en fin de processus ?
On lance des parties avec le code ci-dessous.
La cinquantaine de résultats obtenus semble suggérer qu'une fin de partie est toujours paire.
from random import randint
def etape(liste):
L = [x for x in liste]
a = L.pop(randint(0, len(L)-1))
b = L.pop(randint(0, len(L)-1))
L.append(abs(b-a))
return L
def partie(n):
liste = [k for k in range(1,n+1)]
while len(liste) > 1:
liste = etape(liste)
return liste[0]
def plusieurs_parties(n):
"""
fin de parties pour une cinquantaine de parties
"""
return [partie(n) for k in range(50)]
plusieurs_parties(2019)
Exprimer la somme S' obtenue après une étape en fonction de la somme S avant cette étape.
Pour cela, on s'interdira d'utiliser la fonction valeur absolue: on envisagera deux cas.
Pouvez vous maintenant garantir qu'Aurore a commis une erreur de calcul ?