class Cafe :
    """
    definition du probleme du robot Cafeself.
    Chaque etat est
    - la position du robot (piece 1, 2 ou 3)
    - la possession du cafe (0 ou 1)

    Les actions possibles sont
    - gauche : on va dans piece suivante si possible
    - droite : on va dans piece precedente si possible
    - prendre : on prend un cafe (si piece=3)
    - poser : on pose le cafe
    """


    def __init__(self):
        """
        constructeur, definit etat de depart et d'arrivee
        """
        # on commence en (piece = 1, pas de cafe = 0)
        self.depart = (1,0)
        # etat souhaite (piece = 1, cafe = 1)
        self.arrivee = (1,1)


    def actions(self):
        """
        definition des actions possibles
        """
        return(['gauche','droite','prendre','poser'])

    def transition(self,s,a):
        """
        definition des regles du monde
        - s : etat de etat (piece,cafe)
        - a : action envisagee
        - return l'etat d'arrivee
        """
        (pos,cafe)=s

        # aller a gauche
        if a == 'gauche' :
            # le numero de la piece diminue (sauf au bord)
            if  pos>1 :
                pos = pos - 1

        # aller a droite
        if a == 'droite' :
            # le numero de la piece augmente (sauf au bord)
            if pos<3 :
                pos = pos + 1

        # prendre le cafe
        if a =='prendre' :
            # ne marche que en piece 3
            if pos == 3 :
                cafe = 1

        # poser le cafe
        if a == 'poser' :
            cafe = 0

        return(pos,cafe)


    def toString(self, etat):
        """
        retourne descriptif de l'etat
        """
        res = "piece:"+str(etat[0])+" cafe:"+str(etat[1])
        return res
