contenu_case = ["poison", "vin", "reculer", "avancer"] class Case : def __init__ (self, contenu) : self.contenu = contenu_case.index (contenu) def __str__ (self) : return contenu_case [self.contenu] class Regle1 : def correcte (self, cases) : nb = [0,0,0,0] for s in cases : nb [s.contenu] += 1 if nb [0] != 3 : return False # 3 poison if nb [1] != 2 : return False # 2 vin if nb [2] != 1 : return False # 1 reculer if nb [3] != 1 : return False # 1 avancer return True class Regle2 : def correcte (self, cases) : for i in range (1,len (cases)) : if cases [i].contenu == 1 and cases [i-1].contenu != 0 : return False return True class Regle3 : def correcte (self, cases) : if cases [0].contenu == cases [6].contenu : return False if cases [0].contenu == 3 : return False if cases [6].contenu == 3 : return False return True class Regle4 : def correcte (self, cases) : if cases [2].contenu == 0 : return False if cases [5].contenu == 0 : return False return True class Regle5 : def correcte (self, cases) : if cases [1].contenu != cases [5].contenu : return False return True class Enigme : def __init__ (self) : self.regle = [ Regle1 (), Regle2 (), Regle3 (), Regle4 (), Regle5 ()] self.cases = [ Case ("poison") for i in range (0,7) ] def __str__ (self) : for s in self.cases : print s, ", ", print "" def solution_correcte (self) : for r in self.regle : if not r.correcte (self.cases) : return False return True def resoud (self) : for c in self.cases : c.contenu = 0 while self.cases [0].contenu < 4 : r = self.solution_correcte () if r : print self.__str__ () self.cases [6].contenu += 1 for i in range (len (self.cases)-1, 0, -1) : # on parcourt les indices en # allant de 6 a 1 inclus if self.cases [i].contenu >= 4 : self.cases [i].contenu = 0 self.cases [i-1].contenu += 1 e = Enigme () e.resoud ()