Voici comment écrire le code de la fonction guess()
qui doit deviner le nombre du jeu de classe Game
passé en paramètre, en complétant le code donné :
class Game {
private $number;
private $num_tries;
function __construct() {
$this->number = rand(0, 10000);
$this->num_tries = 0;
}
function propose($value) {
$this->num_tries++;
if ($this->num_tries > 15) {
throw new Exception("La méthode propose() a été appelée 15 fois");
}
if ($value == $this->number) {
return 0;
} elseif ($value > $this->number) {
return 1;
} else {
return -1;
}
}
}
function guess($Game) {
$result = 0;
$min = 0;
$max = 10000;
// Boucle jusqu'à ce que le nombre soit trouvé
while ($result != 0) {
// Propose un nombre au milieu de la plage
$guess = (int) (($min + $max) / 2);
$result = $Game->propose($guess);
// Si le nombre proposé est trop grand, la plage supérieure est réduite
if ($result == 1) {
$max = $guess - 1;
}
// Si le nombre proposé est trop petit, la plage inférieure est augmentée
elseif ($result == -1) {
$min = $guess + 1;
}
}
return $guess;
}
$Game = new Game();
$result = guess($Game);
La fonction guess()
utilise la méthode de division et conquête pour deviner le nombre. Elle définit une plage de valeurs (entre $min
et $max
) et propose un nombre au milieu de cette plage. Si le nombre proposé est trop grand, la plage supérieure est réduite à la valeur proposée moins 1
. Si le nombre proposé est trop petit, la plage inférieure est augmentée à la valeur proposée plus 1
. La boucle se répète jusqu’à ce que le nombre soit trouvé.
Be the first to comment