Programme hermionne_classes.py


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 ()


créé avec py2html version:0.62