Maxy.fr

Utiliser la programmation pour résoudre un problème mathématiques

Vous avez sûrement entendu parlé de cet exercice de mathématiques qui fait tant parler de lui depuis quelques jours sur internet.

Cet exercice a priori simple qu'un professeur Vietnamien a donné à faire à ses élèves d'une classe équivalent au CE2. Simple ? A priori seulement parce qu'ils ont tous rendu copie blanche, laissant ainsi perplexe le professeur qui a fini par publier son exercice sur internet après l'avoir présenté à plusieurs de ses proches qui n'ont eux aussi pas réussi à le résoudre.

Le but de l'exercice est simple, il suffit de résoudre l'équation ci-dessus en remplissant les cases vides avec des chiffres de 1 à 9 en utilisant chacun d'eux qu'une seule fois.

 

Et si vous utilisiez la programmation pour résoudre ce problème facilement ?

L'idée a déjà été évoquée et plusieurs personnes se sont déjà lancées le défis de créer un programme simple, plus ou moins efficace selon les cas permettant de mettre en évidence la liste des solutions possibles de l'équation. Parce que oui, il n'y a pas une, mais bien un peu plus d'une centaine de solutions possible.

Pour ma part j'ai fait un programme très basique en PHP tenant sur moins d'une quarantaine de lignes qui m'a permis d'obtenir pas moins de 128 solutions différentes :

<?php
$taille = 10;
$elements = array();
$liste = array();
$listesReponses = array();
$nbCombinaisons = 1;

function permutation($r)
{
	global $taille, $elements, $liste;

	if($r >= $taille){ verif(); }

	for ($i=1; $i < $taille; $i++) { 
		if($elements[$i]){ continue; }
		$elements[$i] = true;
		$liste[$r] = $i;

		permutation($r+1);
		$elements[$i] = false;
	}
}

permutation(1);

function verif()
{
	global $liste, $nbCombinaisons;

	$equation = $liste[1]+13*$liste[2]/$liste[3]+$liste[4]+12*$liste[5]-$liste[6]-11+$liste[7]*$liste[8]/$liste[9]-10;

	//Affiche le résultat si l'équation est bien égale à 66
	if($equation == 66){ 
		echo 'N'.$nbCombinaisons.' : '.$liste[1].'+13x'.$liste[2].':'.$liste[3].'+'.$liste[4].'+12x'.$liste[5].'-'.$liste[6].'-11+'.$liste[7].'x'.$liste[8].':'.$liste[9].'-10 = '.$equation.'<br/>';
		$nbCombinaisons++;
	}
	else{ return false; }
}
?>

Le but du programme est simple : tester toutes les possibilités jusqu'à ce que l'une d'entre elle donne le bon résultat. Si tel est le cas on affiche l'équation valable et on continue (ne pas oublier qu'il n'y a pas qu'une solution).

Cette méthode est possible sans utiliser un trop grand nombre de combinaisons, car la consigne de l'exercice indique qu'il ne faut utiliser qu'une unique fois chacun des chiffres de 1 à 9.

La première chose à faire est donc d'établir une liste possible de combinaisons grâce au principe mathématiques de permutation. C'est ce qui est réalisé par la fonction "permutation" du programme.

Intervient enfin la fonction "verif" qui permet de vérifier pour chacune des combinaisons possibles si le résultat de l'équation est bien 66. Si tel est le cas la fonction affiche l'une des équations correcte à l'écran.

Résultat :

N1 : 1+13x2:6+4+12x7-8-11+3x5:9-10 = 66
N2 : 1+13x2:6+4+12x7-8-11+5x3:9-10 = 66
N3 : 1+13x3:2+4+12x5-8-11+7x9:6-10 = 66
N4 : 1+13x3:2+4+12x5-8-11+9x7:6-10 = 66
N5 : 1+13x3:2+9+12x5-6-11+4x7:8-10 = 66
N6 : 1+13x3:2+9+12x5-6-11+7x4:8-10 = 66
[...]
N121 : 9+13x4:8+5+12x6-7-11+1x3:2-10 = 66
N122 : 9+13x4:8+5+12x6-7-11+3x1:2-10 = 66
N123 : 9+13x5:3+1+12x4-2-11+7x8:6-10 = 66
N124 : 9+13x5:3+1+12x4-2-11+8x7:6-10 = 66
N125 : 9+13x6:4+3+12x5-8-11+1x7:2-10 = 66
N126 : 9+13x6:4+3+12x5-8-11+7x1:2-10 = 66
N127 : 9+13x8:6+2+12x4-1-11+5x7:3-10 = 66
N128 : 9+13x8:6+2+12x4-1-11+7x5:3-10 = 66

(j'ai volontairement enlevé une partie des résultats pour ne pas que cela prenne trop de place)

Catégories : PHP

Par Guillaume le 24/05/2015 à 22:56

Partager l'article :

Articles similaires

Trier un tableau multidimensionnel en PHP

Il arrive parfois que l'on doivent trier un tableau contenant d'autres tableau suivant des valeurs pas directement accessibles. En soit on se retrouve bloqué car les fonctions de tries classique (asort(), ksort() ...) ne permettent pas de trier comme on le souhaite notre tableau. Sachez...

Enregistrer un tableau PHP dans un fichier

Il est parfois utile d'enregistrer dans un fichier des données en provenance d'un code PHP. Sachez qu'il est plutôt simple d'enregistrer un tableau de données dans un fichier en utilisant la fonction serialize().   Voici le code permettant d'enregistrer les données...

Lire plusieurs fois toutes les données récupérées avec fetch en PDO

Vous connaissez tous la méthode suivante pour lire une série de données enregistrées via MySQL : $listeRep = $bdd->query("SELECT * FROM registre ORDER BY id DESC"); while($listeData = $listeRep->fetch()) { echo $listeData['nom']; }   Vous...