# On réutilise le code de l'exercice 4
class Pile :
    def __init__(self) :
        self.contenu = []
    
    def empile(self,element) :
        self.contenu.append(element)
    
    def pile_vide(self) :
        return len(self.contenu) == 0

    def depile(self) :
        if self.pile_vide() :
            print("la pile est vide")
        else :
            return self.contenu.pop()
            
    def lire_sommet(self) :
        if self.pile_vide() :
            print("la pile est vide")
        else :
            return self.contenu[-1]
            

#------------------ 1) ------------------

def affiche(p: Pile):
    s = ""
    while not p.pile_vide():
        s += "|" + str(p.depile()) + "|\n"
    return s

#----------------------------------------

p = Pile()
p.empile(8)
p.empile(15)
p.empile(12)
print("---- 1) :")
print(affiche(p))

#------------------ 2) ------------------

def creation_pile(a: list):
    p = Pile()
    for e in a:
        p.empile(e)
    return p

#----------------------------------------

p = creation_pile([8,1,5,9])
print("---- 2) :")
print(affiche(p))


#------------------ 3) ------------------

def taille(p : Pile):
    p_sauvegarde = Pile()
    compteur = 0
    while not p.pile_vide():
        p_sauvegarde.empile(p.depile())
        compteur += 1
    
    while not p_sauvegarde.pile_vide():
        p.empile(p_sauvegarde.depile())
    
    return compteur

#----------------------------------------

p = creation_pile([8,1,5,9])
print("---- 3) :")
print(taille(p))
print(affiche(p))

#------------------ 4) ------------------

def separation_pile(p : Pile):
    p_pair = Pile()
    p_impair = Pile()
    
    while not p.pile_vide():
        e = p.depile()
        if e%2 == 0:
            p_pair.empile(e)
        else:
            p_impair.empile(e)
    
    return (p_pair, p_impair)

#----------------------------------------

p = creation_pile([8,1,2,4,6,4,9])
(p_0,p_1) = separation_pile(p)
print(affiche(p_0))
print(affiche(p_1))