blob: 548af3af6bc78d827ef81927e764b3408b680cce (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
|
<?php
interface iMastermind {
public function __construct($taille=4);
public function test($code);
public function getEssais();
public function getTaille();
}
/** classe dont une instance est un jeu de mastermind */
class Mastermind implements iMastermind {
/** code à découvrir chaine de car compris entre 0 et 9 */
protected $code="";
/** liste des essais */
protected $lessai=array();
/** constructeur par défaut : génération d'un code aléatoire de taille
* chiffres différents
*/
public function __construct($taille=4){
for($i=0;$i<$taille;$i++){
$c=rand(0,9); // nouveau chiffre
$this->code.="$c";
}
}
/** teste la validité d'une chaîne code et retourne un booléen :
* - que des chiffres ;
* - de même taille que $this->code
*/
public function valide($code){
if(!is_string($code) || strlen($code)!=strlen($this->code)
|| !ctype_digit($code)){
return false;
}
return true;
}
/** teste une chaîne de caractères par rapport au code et retourne un
* tableau de 2 entiers : ( nb de chiffres bien placés, nb de chiffres mal
* placés ou false si invalide
*/
public function test($code){
if(!$this->valide($code))
return false;
$res=array("bon"=>0, "mal"=>0);
$tampon=$this->code;
for($i=0;$i<strlen($code);$i++){ // boucle des biens placés
if($tampon[$i]==$code[$i]){
$tampon[$i]='Y'; // afin de ne plus le prendre en compte
$res["bon"]++;
}
} // fin de la boucle des biens placés
for($i=0;$i<strlen($code);$i++){ // boucle des mals placés
$pos = strpos($tampon,$code[$i]);
if (!($pos === false)) {
$res["mal"]++;
$tampon[$pos]='Y';
}
} // fin de boucle des mals placés
$this->lessai[$code]=$res;
return $res;
}
/** retourne la taille du code */
public function getTaille () {
return strlen($this->code);
}
public function getEssais () {
return $this->lessai;
}
}
// $m=new Mastermind(); //pour tester
// print_r($m);
// print_r($m->test("1234"));
?>
|