Plusieurs exemples viennent de l’intégrale des jeux mathématiques du Monde, par Élisabeth Busser et Gilles Cohen, paru aux éditions Pôle (ISBN n° 978 284 884 0741). D’autres ont été donnés au Rallye Mathématique CM2-6e de l’IREM de Paris. La possibilité de manipuler une telle calculatrice, et pas seulement de l’imaginer, aide grandement à émettre des conjectures, et donne (du moins, on l’espère) l’envie de les valider...
Note : Bien que placés dans cette rubrique, ces fichiers ne sont pas programmés en CoffeeScript (sauf le dernier). Mais directement en JavaScript, dans l’espoir de mieux les voir fonctionner sous Android... Chaque copie d’écran d’un de ces fichiers est cliquable et permet d’ouvrir le fichier dans le navigateur (par exemple, clic droit puis « ouvrir dans un nouvel onglet »).
Remarque : Pour avoir une calculatrice cassée, il suffit de prendre une calculatrice entière et de la casser (enlever, modifier ou inactiver des touches par exemple).
Sujets du Rallye
Extrait du sujet du Rallye CM2-6e de 2000, exercice « avec ma calculette » :
Ce fichier utilise une expression régulière pour voir si un calcul n’utilise que les touches de la calculatrice. Au début du source, on crée la RegExp avec
var RE = /[^47\+\-=]/g;
La lettre « g » à la fin demande que la recherche soit globale (que la RegExp cherche tous les caractères illégaux, pas seulement le premier d’entre eux). Entre crochets, figure la liste des caractères autorisés (le « + » et le « - » sont « échappés » pour être compris comme des caractères), mais précédés d’un chapeau qui demande à la RegExp, non pas de chercher ces caractères, mais de lister les autres caractères (ceux qui ne sont pas sur la calculatrice cassée).
Pour savoir si un caractère non autorisé a été utilisé dans le calcul, on récupère le calcul (non effectué) et on effectue sur celui-ci une fouille au corps exhaustive à l’aide de la RegExp. Le résultat, noté v, est la liste des caractères non autorisés :
var v = calcul.match(RE);
if (v==null){
discours = "";
} else {
discours = "Mais les éléments suivants ont été utilisés, alors qu'ils ne sont pas disponibles sur la calculatrice : {"+v+"}.";
}
La variable discours, affichée en bas du fichier en rouge, contient alors l’ensemble des caractères non autorisés (ou rien si le calcul est « légal »).
Remarque : Selon le théorème de Bachet-Bezout, tout nombre entier peut être calculé à l’aide de cette calculatrice, parce que 4 et 7 sont premiers entre eux. Il est donc possible de décliner cet exercice en de nombreuses variantes, par exemple avec 5 et 3...
Ensuite, le sujet du rallye 2012 avec « Technologie » :
Sujets des jeux mathématiques du Monde
Calculatrice bizarre : Au lieu d’opérations sur deux nombres, elle n’a que deux fonctions unaires (qui transforment un nombre en un nombre).
le bouton
implémente la fonction affine x→2x+1 ;
le bouton
implémente la fonction qui est l’identité sur les nombres pairs et x→(x+5)/2 sur les nombres impairs.
Alors, en itérant ces deux fonctions, la calculatrice est un système dynamique, l’ensemble des fonctions engendrées par A et B (par composition) étant un semi-groupe dont on s’intéresse à une orbite.
Le script suivant, testé dans alcoffeethmique, donne les premiers nombres qu’on peut obtenir avec ce système dynamique :
S = new Ensemble [0]
A = (x) -> 2*x+1
B = (x) ->
if x%2 is 0
x
else
(x+5)/2
for n in [1..9]
S.ajoute A(x) for x in S.support
S.ajoute B(x) for x in S.support
affiche S
Il donne le résultat suivant, confirmant que 100 peut être atteint et en combien d’étapes :
Question : L’ensemble des entiers ainsi obtenus est-il récursif ? Autrement dit, y a-t-il un moyen calculable de dire si un entier n’y est pas ?
encore une calculatrice bizarre : Là encore, deux fonctions A et B, mais le système dynamique semble avoir peu d’orbites :
L’ascenceur : Après tout, avec ses touches et son affichage de l’étage courant, l’ascenseur est aussi une calculatrice :
L’étage où se trouve actuellement l’ascenceur est calculé par des additions et des soustractions [1], et stocké dans la variable S. Alors pour mettre à jour la liste des étages restant à parcourir, on applique l’algorithme suivant :
On calcule la position de S dans le tableau aFaire ;
on stocke cet entier dans index ;
si index vaut -1, c’est que S n’est pas dans le tableau (étage déjà parcouru) ;
sinon, on enlève du tableau l’élément de numéro index (c’est donc S)
En JavaScript ça donne ceci :
var index = aFaire.indexOf(S);
if (index>-1) {
aFaire.splice(index,1);
}
Pour mettre à jour la liste des étages déjà parcourus c’est beaucoup plus simple, il suffit de faire fait.push(S); si le tableau des étages déjà parcourus s’appelle fait.
Voici la version Android de ce jeu (programmée avec app Inventor) :
addNimTion
Un remake de ce jeu, mais en CoffeeScript, et avec du CSS pour désactiver les boutons qu’on n’a pas le droit de jouer.
Une fonction adjacency permet de savoir qui est à côté de qui [2] :
adjacency = (a,b) ->
if a>b
adjacency b, a
else
false if a is b
switch b
when 2 then (a is 1)
when 3 then (a is 2)
when 4 then (a in [1,2])
when 5 then (a in [1..4])
when 6 then (a in [2,3,5])
when 7 then (a in [4,5])
when 8 then (a in [4..7])
when 9 then (a in [5,6,8])
else false
Ensuite, on désactive tous les boutons, puis on ne réactive que ceux qui sont à côté de celui qui vient d’être joué (et qui s’appelle riposte) :
En effet, $(this)[0].innerHTML renvoie le contenu du bouton (le nombre qui est dessus) et en le « parseIntant », on a le nombre correspondant (parseInt convertit en entier)
[1] d’ailleurs l’exercice est intéressant à programmer avec la tortue LOGO
[2] On aurait pu faire plus simple en remplaçant cette fonction par un tableau, mais il s’agissait d’une matrice booléenne 9×9...
Dans un site très personnel, Olivier Sicard nous offres quelques « délires » de mathématiques, algorithmique et programmation. Entre autres pépites, on découvrira le Rubix-Tore, la loi normale asymétrique, la théorie du choix social et le dessin à l’aide des séries de Fourier.
Après Elwyn Berlekamp l’année dernière, c’est au tour du centenaire Richard Guy et de l’immense John Conway. Ce document de Richard Guy (une mise en garde contre le raisonnement inductif) montre bien le style unique de son auteur, en plus d’être une mine de ressources pour des exercices. Conway, outre son jeu de la vie, a créé des dizaines de jeux, dont Sprouts, très populaire dès le CP.
On sait bien que Nicolas Bourbaki n’était pas le nom d’une personne mais le pseudonyme d’un groupe. L’équivalent en informatique théorique est Claude Livercy, auteur de la théorie des programmes. Roger Mohr était un des membres de Claude Livercy.
Quand les chercheurs mettent au point des modèles d’optimisation et de recherche de plus court chemin qui s’inspirent du comportement de masse de colonies de fourmis...
À écouter : Sur les Épaules de Darwin, émission diffusée sur France Inter samedi 31 août 2013.
Les RMLLd se dérouleront pour la 2e fois à Saint-Joseph du 22 au 25 août.
C’est une opportunité pour les élèves qui suivent la spécialité ISN et les passionnés d’informatique.
Commentaires