Exercice inédit de mathématiques

Voici un énoncé vu sur Yahoo :

Une urne contient un nombre fini de boules (mais très très grand) sur lesquelles sont inscrits des nombres relatifs (allant de -n à n en passant par 0, avec n pas infini mais immensément grand donc). À chaque tirage, on tire deux boules au hasard. On en fait la somme, puis on met dans l’urne une boule m sur laquelle est inscrite cette somme, en enlevant les deux autres. Au bout d’un nombre très grand de tirages, quelle boule reste dans l’urne? 0 ? imprévisible ? Et si l’on remet à chaque fois deux boules m pour conserver le nombre total de boules dans l’urne ? ça tendrait vers 0 ou ça aurait tendance à osciller ?

 

J’ai écrit un programme en langage Perl. La solution tend vers zéro.

Dans le programme, j’avais d’abord pensé utiliser des tableaux (comme en langage C++), mais j’ai trouvé un moyen ingénieux, en utilisant bash auxiliairement avec Perl, avec certaines lignes de commande qui filtrent les données numériques.

Voici le code source :

#!/usr/bin/perl
`rm relballs.log`;
for ($l = -100000; $l <= 100000; $l++)
{
`echo $l >> relballs.log`;
}
sleep(3);
$m = 0;
for ($i = 1; $i <= 100000; $i++)
{
$q = `cat relballs.log | wc -l`;
if ($q == 1)
{
print « Fini… \n »;
goto fin;
}
$h = 1 + int(rand($q));
$a = `cat relballs.log | head -$h| tail -1`;
$h = 1 + int(rand($q));
$b = `cat relballs.log | head -$h| tail -1`;
$somme = $a + $b;
`echo $somme >> relballs.log`;
$m = $m + $somme;
`cat relballs.log | grep -v « ^$a\$ » > relballs.log`;
`cat relballs.log | grep -v « ^$b\$ » > relballs.log`;
}
fin:
print « \n »;
$moyenne = $m / 100000;
print « Moyenne = $moyenne \n »;

John Philip C. Manson