Diverses piles (POO)

Un exercice : deux versions

Cet exercice sur les piles est proposé en deux versions :

On s'intéresse sur cette page au type abstrait de données « Pile » que l'on représente à l'aide d'une classe Pile dont on fournit le code ci-dessous.

La classe Pile
class Pile:
    def __init__(self):
        """Initialise une pile vide"""
        self.valeurs = []

    def est_vide(self):
        """Renvoie un booléen : la pile est-elle vide ?"""
        return len(self.valeurs) == 0

    def empile(self, element):
        """Empile un élément au sommet de la pile"""
        self.valeurs.append(element)

    def depile(self):
        """
        Dépile un élément au sommet et le renvoie.
        Provoque une erreur si la pile est vide.
        """
        if self.est_vide():
            raise ValueError("Erreur, pile vide")
        else:
            return self.valeurs.pop()

    def __repr__(self):
        """Affiche la pile, en indiquant le sommet"""
        return f"| {' | '.join([str(x) for x in self.valeurs])} | <- sommet"

    def __eq__(self, autre):
        """
        Détermine si cette pile et l'autre sont égales
        (mêmes valeurs, dans le même ordre)
        """
        return self.valeurs == autre.valeurs

Cette classe possède deux méthodes spéciale __repr__ et __eq__ qui permettent :

  • d'afficher le contenu de la pile (__repr__) ;
  • de tester l'égalité entre la pile étudiée et une autre pile passée en paramètre (__eq__).

Les lignes ci-dessous présentent un exemple d'utilisation. On prendra soin, dans les différents exercices, de n'utiliser que les méthodes présentées ci-dessous.

Utilisation
>>> p = Pile()    # création d'une pile vide
>>> p.est_vide()  # la pile est-elle vide ? -> Oui
True
>>> p.empile(0)   # empile 0 dans la pile
>>> p.est_vide()  # la pile est-elle vide ? -> Non
False
>>> p.empile(1)   # empile 0 dans la pile
>>> p             # affichage du contenu de p
| 0 | 1 | <- sommet
>>> p.depile()    # dépile une valeur
1
>>> p
| 0 | <- sommet
>>> q = Pile()
>>> q.empile(1)
>>> q
| 1 | <- sommet
>>> p == q  # les piles p et q sont-elles égales ? -> Non
False

Les exercices ci-dessous sont indépendants. Ils sont néanmoins présentés dans un certain ordre permettant d'aborder successivement plusieurs techniques.

Jouons le jeu !

Ces exercices visent à utiliser certaines techniques classiques liées aux piles. Il est donc demandé de les traiter en se limitant à l'utilisation des méthodes la classe Pile.

Il est en particulier interdit d'accéder directement à l'attribut valeurs.

Accéder ou modifier cet attribut fera échouer les tests secrets.

Calculer la taille d'une pile

Écrire la fonction taille qui prend en paramètre une pile et renvoie son nombre d'éléments.

A l'issue du traitement, la pile doit avoir retrouvé son état initial.

>>> p = Pile()
>>> taille(p)
0
>>> p.empile("a")
>>> p.empile("b")
>>> taille(p)
2
Aide

On pourra utiliser une pile annexe.

Etape 1

Etape 2

Etape 3

Etape 4

###(Dés-)Active le code après la ligne # Tests (insensible à la casse)
(Ctrl+I)
Entrer ou sortir du mode "deux colonnes"
(Alt+: ; Ctrl pour inverser les colonnes)
Entrer ou sortir du mode "plein écran"
(Esc)
Tronquer ou non le feedback dans les terminaux (sortie standard & stacktrace / relancer le code pour appliquer)
Si activé, le texte copié dans le terminal est joint sur une seule ligne avant d'être copié dans le presse-papier
Évaluations restantes : 10/10

.128013s3o_8bcdufvg/0ly n7apS.r1me(P2=4:+twki95hx)6050i0B0J0u0M0p0b0r0h0p0u0b0b0F010J0M0v010406050b0j0A0A0u0y0q040w0d0p0j0-0d0s050n0@0_0{0}0=0v04161d051g0n1g1i1d0=0i0M0l0#0%0)0+0P0M0m0P0p1w0P0J0:050W0g0p0B1r0(0*011v1x1z1x0J1F1H1D0J0g0d0i0}1E0y1e0J0P0#100b0v0u0s0+0E011J1t010k0Y0B0s0u0A0B1D1+1-1=1L1^1H1{1}0:0a0r0D0y0d0v0d0b0M130s0r0U1)0y0y0B0h2i16200s1e0n1%2v0J1#1!1$0i220+1z0s1`2f1D1o1q0$1K2F0M2H0s1X1p1D0v2o1e2t2v2Z0?1,2j2N1?2S0y0`0p0:0z2s2%0;2$212)1L2+2-0:0E2;1-2?2t2E012{0u2.040c2 2u0=322_0+35370G3a312%333g0:0O3j3c3l3e340d2,360:0S3q2@2(1s2`3v2|040t3A3d3D3f3F3x040f3J3s3L3u3w370N3j1f2X162L2y0i2C330h1X1~1e3$1h3!2#172=053+0U2Y3S2O010L0:0U0k3Y3K3}0K0:0r433|2*0k0:0W0Y1H492^3T0/040C4h3C3}0s0:0v4n334k0R0H3q0r4z48442*0:1-2H0Q0B3j4B4a1L0d0:0F4J3B3m0:0D1_4t3t4k0C0R4y4A4R3t4q040J4Q4C4M4O4,4L0+0A0M0:0o4#4z4%3T3 040K1v4g3?304K4i3}0d46042S4+532u554o4D044s5d3{561?4N040x4W3T4)0B0b0J0e0l0M0U5r3}4Y4w4`4A4{4-3f4E0s4G4I5k4|570:5q5O5I340:0B0A0v4V5T4;014Y5B5h5j2#5U5o5S5,5$4)0U5Z525:5m1L5D4!5k065G5G5P5h5c2Z5f335o4P5k664(4d4:5`0+5o0I6e5g1L4?2/5F621L4~505!656p6g595b6j4S044F0B4H5)4.5p6F5J045u5w5y5A5#6f5%0:4Z4x5~604$5U4)5+3@5-5R6I5V6K5Y6t6#5$5(6P6k6J6C6E6:676%6^6c045?6,306v6R4l0R5}2Z5 6X5$4~2o0J0j0y156a714)642=0=0n3_0B2v2W7o3#1p3%2y2A2w1W1Y2y0u1G7r0n3$7l0U4e0Z04.

###(Dés-)Active le code après la ligne # Tests (insensible à la casse)
(Ctrl+I)
Entrer ou sortir du mode "deux colonnes"
(Alt+: ; Ctrl pour inverser les colonnes)
Entrer ou sortir du mode "plein écran"
(Esc)
Tronquer ou non le feedback dans les terminaux (sortie standard & stacktrace / relancer le code pour appliquer)
Si activé, le texte copié dans le terminal est joint sur une seule ligne avant d'être copié dans le presse-papier
Évaluations restantes : 10/10

.128013s3o_8bcdufvg/0ly n7apS.r1me(P2=4:+twki95hx)6050i0B0J0u0M0p0b0r0h0p0u0b0b0F010J0M0v010406050b0j0A0A0u0y0q040w0d0p0j0-0d0s050n0@0_0{0}0=0v04161d051g0n1g1i1d0=0i0M0l0#0%0)0+0P0M0m0P0p1w0P0J0:050W0g0p0B1r0(0*011v1x1z1x0J1F1H1D0J0g0d0i0}1E0y1e0J0P0#100b0v0u0s0+0E011J1t010k0Y0B0s0u0A0B1D1+1-1=1L1^1H1{1}0:0a0r0D0y0d0v0d0b0M130s0r0U1)0y0y0B0h2i16200s1e0n1%2v0J1#1!1$0i220+1z0s1`2f1D1o1q0$1K2F0M2H0s1X1p1D0v2o1e2t2v2Z0?1,2j2N1?2S0y0`0p0:0z2s2%0;2$212)1L2+2-0:0E2;1-2?2t2E012{0u2.040c2 2u0=322_0+35370G3a312%333g0:0O3j3c3l3e340d2,360:0S3q2@2(1s2`3v2|040t3A3d3D3f3F3x040f3J3s3L3u3w370N3j1f2X162L2y0i2C330h1X1~1e3$1h3!2#172=053+0U2Y3S2O010L0:0U0k3Y3K3}0K0:0r433|2*0k0:0W0Y1H492^3T0/040C4h3C3}0s0:0v4n334k0R0H3q0r4z48442*0:1-2H0Q0B3j4B4a1L0d0:0F4J3B3m0:0D1_4t3t4k0C0R4y4A4R3t4q040J4Q4C4M4O4,4L0+0A0M0:0o4#4z4%3T3 040K1v4g3?304K4i3}0d46042S4+532u554o4D044s5d3{561?4N040x4W3T4)0B0b0J0e0l0M0U5r3}4Y4w4`4A4{4-3f4E0s4G4I5k4|570:5q5O5I340:0B0A0v4V5T4;014Y5B5h5j2#5U5o5S5,5$4)0U5Z525:5m1L5D4!5k065G5G5P5h5c2Z5f335o4P5k664(4d4:5`0+5o0I6e5g1L4?2/5F621L4~505!656p6g595b6j4S044F0B4H5)4.5p6F5J045u5w5y5A5#6f5%0:4Z4x5~604$5U4)5+3@5-5R6I5V6K5Y6t6#5$5(6P6k6J6C6E6:676%6^6c045?6,306v6R4l0R5}2Z5 6X5$4~2o0J0j0y156a714)642=0=0n3_0B2v2W7o3#1p3%2y2A2w1W1Y2y0u1G7r0n3$7l0U4e0Z04.
Renverser les deux valeurs au sommet

Écrire la fonction renverse_deux qui prend en paramètre une pile et échange l'ordre des deux valeurs au sommet.

La transformation se fait en place : on modifie directement sur la pile et il est donc inutile de la renvoyer.

On garantit que la pile compte au moins deux éléments.

>>> p = Pile()
>>> p.empile("a")
>>> p.empile("b")
>>> p.empile("c")
>>> p
| a | b | c | <- sommet
>>> renverse_deux(p)
>>> p
| a | c | b | <- sommet

###(Dés-)Active le code après la ligne # Tests (insensible à la casse)
(Ctrl+I)
Entrer ou sortir du mode "deux colonnes"
(Alt+: ; Ctrl pour inverser les colonnes)
Entrer ou sortir du mode "plein écran"
(Esc)
Tronquer ou non le feedback dans les terminaux (sortie standard & stacktrace / relancer le code pour appliquer)
Si activé, le texte copié dans le terminal est joint sur une seule ligne avant d'être copié dans le presse-papier
Évaluations restantes : 10/10

.128013s3o_bcdufvg/ly napS.r1me(P2=4:twki5hx)050h0y0F0r0I0n0b0p0g0n0r0b0b0C010F0I0s010406050b0i0x0x0r0v0o040t0d0n0i0%0d0q050m0.0:0=0@0,0s041017051a0m1a1c170,0h0I0k0V0X0Z0#0K0I0l0K0n1q0K0F0*050Q0f0n0y1l0Y0!011p1r1t1r0F1z1B1x0F0f0d0h0@1y0v180F0K0V0`0b0s0r0q0#0B011D1n010j0S0y0q0r0x0y1x1#1%1,1F1/1B1=1@0*0a0p0A0v0d0s0d0b0I0}0q0p0O1Z0v0v0y0g2c101`0q180m1X2p0F1V1U1W0h1|0#1t0q1;291x1i1k0W1E2z0I2B0q1R1j1x0s2i182n2p2T0-1$2d2H1-2M0v0;0n0*0w2m2X0+2W1{2Z1F2#2%0*0B2+1%2-2n2y012=0r2(040c2_2o0,2|2:0#2 310D342{2X2}3a0*0J3d192R102F2s0h2w2}0g1R1^183o1b3m2V112,053t0O2S3f38010H0*0O0j3k371m1F0G0*0p3O3H3Q390j0*2i0q0k0y0v0b0y0e0O0i0L3V2/3X010)040z3:2Y3=0q0*0s3`2}3@0M0E3d060p473U3P2I2~0*0r3d493W4b0d0*0C4f2.3{4b3}043 3B2`4n2}4j040u403I4q0O0s1:4A3=3@0z0M45484g3;4p0*0f4m4a1-4x4l4t2o4N4o2!3~4G4i0*4z4X3G4O4#044D4F4+4v3I4I4K4+46484?3|4$4=4T1F4x4*2V51390*0y0x4E1B4%1-4I5d2;4d5g0#424L4|564c4r5j01535r4q595b0y5r5f504h4.4R5B4-1F5l4`103E0y2p2Q5M3n1j3p2s2u2q1Q1S2s0r1A5P0m3o0,5$0P0R0T04.

###(Dés-)Active le code après la ligne # Tests (insensible à la casse)
(Ctrl+I)
Entrer ou sortir du mode "deux colonnes"
(Alt+: ; Ctrl pour inverser les colonnes)
Entrer ou sortir du mode "plein écran"
(Esc)
Tronquer ou non le feedback dans les terminaux (sortie standard & stacktrace / relancer le code pour appliquer)
Si activé, le texte copié dans le terminal est joint sur une seule ligne avant d'être copié dans le presse-papier
Évaluations restantes : 10/10

.128013s3o_bcdufvg/ly napS.r1me(P2=4:twki5hx)050h0y0F0r0I0n0b0p0g0n0r0b0b0C010F0I0s010406050b0i0x0x0r0v0o040t0d0n0i0%0d0q050m0.0:0=0@0,0s041017051a0m1a1c170,0h0I0k0V0X0Z0#0K0I0l0K0n1q0K0F0*050Q0f0n0y1l0Y0!011p1r1t1r0F1z1B1x0F0f0d0h0@1y0v180F0K0V0`0b0s0r0q0#0B011D1n010j0S0y0q0r0x0y1x1#1%1,1F1/1B1=1@0*0a0p0A0v0d0s0d0b0I0}0q0p0O1Z0v0v0y0g2c101`0q180m1X2p0F1V1U1W0h1|0#1t0q1;291x1i1k0W1E2z0I2B0q1R1j1x0s2i182n2p2T0-1$2d2H1-2M0v0;0n0*0w2m2X0+2W1{2Z1F2#2%0*0B2+1%2-2n2y012=0r2(040c2_2o0,2|2:0#2 310D342{2X2}3a0*0J3d192R102F2s0h2w2}0g1R1^183o1b3m2V112,053t0O2S3f38010H0*0O0j3k371m1F0G0*0p3O3H3Q390j0*2i0q0k0y0v0b0y0e0O0i0L3V2/3X010)040z3:2Y3=0q0*0s3`2}3@0M0E3d060p473U3P2I2~0*0r3d493W4b0d0*0C4f2.3{4b3}043 3B2`4n2}4j040u403I4q0O0s1:4A3=3@0z0M45484g3;4p0*0f4m4a1-4x4l4t2o4N4o2!3~4G4i0*4z4X3G4O4#044D4F4+4v3I4I4K4+46484?3|4$4=4T1F4x4*2V51390*0y0x4E1B4%1-4I5d2;4d5g0#424L4|564c4r5j01535r4q595b0y5r5f504h4.4R5B4-1F5l4`103E0y2p2Q5M3n1j3p2s2u2q1Q1S2s0r1A5P0m3o0,5$0P0R0T04.
Renverser les k valeurs au sommet

Écrire la fonction renverse_k qui prend en paramètre une pile ainsi qu'un entier k et renverse l'ordre des k premiers éléments de la pile. Les autres éléments ne sont pas modifiés.

La transformation se fait en place : on modifie directement sur la pile et il est donc inutile de la renvoyer.

On garantit que la pile compte au moins k éléments.

>>> p = Pile()
>>> p.empile("a")
>>> p.empile("b")
>>> p.empile("c")
>>> p.empile("d")
>>> p.empile("e")
>>> p
| a | b | c | d | e | <- sommet
>>> renverse_k(p, 4)
>>> p
| a | e | d | c | b | <- sommet
Aide

On pourra utiliser deux piles annexes.

Etape 1

Etape 2

Etape 3

Etape 4

###(Dés-)Active le code après la ligne # Tests (insensible à la casse)
(Ctrl+I)
Entrer ou sortir du mode "deux colonnes"
(Alt+: ; Ctrl pour inverser les colonnes)
Entrer ou sortir du mode "plein écran"
(Esc)
Tronquer ou non le feedback dans les terminaux (sortie standard & stacktrace / relancer le code pour appliquer)
Si activé, le texte copié dans le terminal est joint sur une seule ligne avant d'être copié dans le presse-papier
Évaluations restantes : 10/10

.128013s3o_8bcdufvg/ly n7apS.r1me,(P2=4:twki95hx)6050i0A0I0t0L0o0b0q0h0o0t0b0b0F010I0L0u010406050b0j0z0z0t0x0p040v0d0o0j0,0d0r050n0?0^0`0|0;0u04151c051f0n1f1h1c0;0i0L0l0!0$0(0*0O0L0m0O0o1v0O0I0/050V0g0o0A1q0%0)011u1w1y1w0I1E1G1C0I0g0d0i0|1D0x1d0I0O0!0 0b0u0t0r0*0E011I1s010k0X0A0r0t0z0A1C1*1,1;1K1@1G1`1|0/0a0q0D0x0d0u0d0b0L120r0q0T1(0x0x0A0h2h151 0r1d0n1$2u0I1!1Z1#0i210*1y0r1_2e1C1n1p0#1J2E0L2G0r1W1o1C0u2n1d2s2u2Y0=1+2i2M1=2R0x0_0o0/0y2r2$0:2#202(1K2*2,0/0E2:1,2=2s2D012`0t2-040c2~2t0;312^0*34360G39302$323f0/0N3i3b3k3d330d2+350/0R3p2?2%1r2_3u2{040s3z3c3C3e3E3w040f3I3r3K3t3v360M3i1e2W152K2x0i2B320h1W1}1d3#1g3Z2!162;053*0T2X3R2N010K0/0T0k3X3J3|0J0/0q423{2)0k0/2n0r0l0A0x0b0A0e0K482@3S0.040C4m3B3|0r0/0u4s324p0B3i47432)0/4l3=2 3A4z0/0Q0H3p0q4Q4D492_0/1,2G0P4j2/4I2t4S4n3|0d0/0F4C4K3s4v040D1^4y3s4p0C0Q4P4R4.3S4:4W0A4Y0e2}4#044%4t1=4*044,56583l0/4=1G4@4o0/4`4|4Q4~3|3~040k3u4-4E4U040e5w4T0*0d45042P5B4(2)0g4c1,0m0A5k3|4_5Q4F044H2!5x0*4p4N5o4R5p5Y334V0r4X4Z5T1K5b0w5/3e0/0A0z0u4?565q1=5S5}5)4:4x615C015;5?5*040T5{5j655J1K4_0Q4{56065%5~1K5s5u0x5I595y5A5e6o5D5F5H6x625L040x5N5P6f6u5Z5m694:5W3?5)5!4O6l5%6n625+5-5469686J5g045_6d6I5X66606-6g5@0451534!6:6K670/5=6%4/3 0A6+696i6k2Y6m4}5)6q5v6C664:6w2Y5f3s5E0/6B7h6y336E6G0r5O746M6 4 4G7u045#6U6V5(7e4w6#6}6N5^5`5|6`4L4q7J6?5,524j557N7j7I7w4u71737Z5 5m6j3z0n3^0A2u2V7.3!1o3$2x2z2v1V1X2x0t1F7;0n3#0;810U0W0Y04.

###(Dés-)Active le code après la ligne # Tests (insensible à la casse)
(Ctrl+I)
Entrer ou sortir du mode "deux colonnes"
(Alt+: ; Ctrl pour inverser les colonnes)
Entrer ou sortir du mode "plein écran"
(Esc)
Tronquer ou non le feedback dans les terminaux (sortie standard & stacktrace / relancer le code pour appliquer)
Si activé, le texte copié dans le terminal est joint sur une seule ligne avant d'être copié dans le presse-papier
Évaluations restantes : 10/10

.128013s3o_8bcdufvg/ly n7apS.r1me,(P2=4:twki95hx)6050i0A0I0t0L0o0b0q0h0o0t0b0b0F010I0L0u010406050b0j0z0z0t0x0p040v0d0o0j0,0d0r050n0?0^0`0|0;0u04151c051f0n1f1h1c0;0i0L0l0!0$0(0*0O0L0m0O0o1v0O0I0/050V0g0o0A1q0%0)011u1w1y1w0I1E1G1C0I0g0d0i0|1D0x1d0I0O0!0 0b0u0t0r0*0E011I1s010k0X0A0r0t0z0A1C1*1,1;1K1@1G1`1|0/0a0q0D0x0d0u0d0b0L120r0q0T1(0x0x0A0h2h151 0r1d0n1$2u0I1!1Z1#0i210*1y0r1_2e1C1n1p0#1J2E0L2G0r1W1o1C0u2n1d2s2u2Y0=1+2i2M1=2R0x0_0o0/0y2r2$0:2#202(1K2*2,0/0E2:1,2=2s2D012`0t2-040c2~2t0;312^0*34360G39302$323f0/0N3i3b3k3d330d2+350/0R3p2?2%1r2_3u2{040s3z3c3C3e3E3w040f3I3r3K3t3v360M3i1e2W152K2x0i2B320h1W1}1d3#1g3Z2!162;053*0T2X3R2N010K0/0T0k3X3J3|0J0/0q423{2)0k0/2n0r0l0A0x0b0A0e0K482@3S0.040C4m3B3|0r0/0u4s324p0B3i47432)0/4l3=2 3A4z0/0Q0H3p0q4Q4D492_0/1,2G0P4j2/4I2t4S4n3|0d0/0F4C4K3s4v040D1^4y3s4p0C0Q4P4R4.3S4:4W0A4Y0e2}4#044%4t1=4*044,56583l0/4=1G4@4o0/4`4|4Q4~3|3~040k3u4-4E4U040e5w4T0*0d45042P5B4(2)0g4c1,0m0A5k3|4_5Q4F044H2!5x0*4p4N5o4R5p5Y334V0r4X4Z5T1K5b0w5/3e0/0A0z0u4?565q1=5S5}5)4:4x615C015;5?5*040T5{5j655J1K4_0Q4{56065%5~1K5s5u0x5I595y5A5e6o5D5F5H6x625L040x5N5P6f6u5Z5m694:5W3?5)5!4O6l5%6n625+5-5469686J5g045_6d6I5X66606-6g5@0451534!6:6K670/5=6%4/3 0A6+696i6k2Y6m4}5)6q5v6C664:6w2Y5f3s5E0/6B7h6y336E6G0r5O746M6 4 4G7u045#6U6V5(7e4w6#6}6N5^5`5|6`4L4q7J6?5,524j557N7j7I7w4u71737Z5 5m6j3z0n3^0A2u2V7.3!1o3$2x2z2v1V1X2x0t1F7;0n3#0;810U0W0Y04.
Fusionner deux piles de mêmes tailles

On considère p et q deux piles contenant le même nombre d'éléments.

On appelle « fusion de p et q » la pile obtenue en empilant alternativement les valeurs dépilées de p puis q.

Écrire la fonction fusion_simple qui prend en paramètre deux piles de même taille et renvoie la pile résultante.

Les piles p et q peuvent être modifiées lors du traitement.

>>> p = Pile()
>>> p.empile("c")
>>> p.empile("a")
>>> p
| c | a | <- sommet
>>> q = Pile()
>>> q.empile("d")
>>> q.empile("b")
| d | b | <- sommet
>>> fusion_simple(p, q)
| a | b | c | d | <- sommet

###(Dés-)Active le code après la ligne # Tests (insensible à la casse)
(Ctrl+I)
Entrer ou sortir du mode "deux colonnes"
(Alt+: ; Ctrl pour inverser les colonnes)
Entrer ou sortir du mode "plein écran"
(Esc)
Tronquer ou non le feedback dans les terminaux (sortie standard & stacktrace / relancer le code pour appliquer)
Si activé, le texte copié dans le terminal est joint sur une seule ligne avant d'être copié dans le presse-papier
Évaluations restantes : 10/10

.128013s3o_bcdufvg/lyq napS.r1me,(P2=4:twki5h)6050h0z0H0s0K0n0b0q0g0n0s0b0b0E010H0K0t010406050b0i0y0y0s0w0o040u0d0n0i0)0d0r050m0:0=0@0_0.0t041219051c0m1c1e190.0h0K0k0X0Z0#0%0M0K0l0M0n1s0M0H0,050S0f0n0z1n0!0$011r1t1v1t0H1B1D1z0H0f0d0h0_1A0w1a0H0M0X0|0b0t0s0r0%0D011F1p010j0U0z0r0s0y0z1z1%1)1.1H1;1D1@1_0,0a0q0C0w0d0t0d0b0K0 0r0q0Q1#0w0w0z0g2e121|0r1a0m1Z2r0H1X1W1Y0h1~0%1v0r1?2b1z1k1m0Y1G2B0K2D0r1T1l1z0t2k1a2p2r2V0/1(2f2J1/2O0w0?0n0,0x2o2Z0-2Y1}2#1H2%2)0,0D2-1)2/2p2A012@0s2*040c2{2q0.2~2=0%31330F362}2Z2 3c0,0L3f383h3a300d2(320,0O3f1b2T122H2u0h2y2 0g1T1`1a3A1d3y2X132.053F0Q2U3o1o1H0J0,0Q0j3w393U0%0I0,0q3!3T2K300j0,0j0i2c100e2c0y0t1D3+2;3$010+040B3}2!3 0r0,0t442 410A3f3*3#3-47040p4a3p410N0G3m0q4r4f3,2$0,0w4e2:453-0d0,0E4y4g4v040C1=4l3 410B0N4q4s4z2 3W040I1r3|3N2|4t3~4B3(042O0H4F4u2?484L4B0,0v4:4H0z0b0H0e0k0K0Q4@1H4N4o4Q4s4R4G4.044x4Z2q4S3p4C044?5b3S4$4^3`4K5i5d4M0,435o573b4/5t4-0%5f5h2X5u303X0z0t5n5C5y405r0N4P5i0655555p4h4w505z4=5W5E040z5m4Y5J5k515r5Z4i4k5x5*5X5g5-5F5H5(3O5D525O2V5Q565K4U2k0H0i0w115i4#4A4H5a5 123Q0z2r2S6h3z1l3B2u2w2s1S1U2u0s1C6k0m3A0.6x0R0T0V04.

###(Dés-)Active le code après la ligne # Tests (insensible à la casse)
(Ctrl+I)
Entrer ou sortir du mode "deux colonnes"
(Alt+: ; Ctrl pour inverser les colonnes)
Entrer ou sortir du mode "plein écran"
(Esc)
Tronquer ou non le feedback dans les terminaux (sortie standard & stacktrace / relancer le code pour appliquer)
Si activé, le texte copié dans le terminal est joint sur une seule ligne avant d'être copié dans le presse-papier
Évaluations restantes : 10/10

.128013s3o_bcdufvg/lyq napS.r1me,(P2=4:twki5h)6050h0z0H0s0K0n0b0q0g0n0s0b0b0E010H0K0t010406050b0i0y0y0s0w0o040u0d0n0i0)0d0r050m0:0=0@0_0.0t041219051c0m1c1e190.0h0K0k0X0Z0#0%0M0K0l0M0n1s0M0H0,050S0f0n0z1n0!0$011r1t1v1t0H1B1D1z0H0f0d0h0_1A0w1a0H0M0X0|0b0t0s0r0%0D011F1p010j0U0z0r0s0y0z1z1%1)1.1H1;1D1@1_0,0a0q0C0w0d0t0d0b0K0 0r0q0Q1#0w0w0z0g2e121|0r1a0m1Z2r0H1X1W1Y0h1~0%1v0r1?2b1z1k1m0Y1G2B0K2D0r1T1l1z0t2k1a2p2r2V0/1(2f2J1/2O0w0?0n0,0x2o2Z0-2Y1}2#1H2%2)0,0D2-1)2/2p2A012@0s2*040c2{2q0.2~2=0%31330F362}2Z2 3c0,0L3f383h3a300d2(320,0O3f1b2T122H2u0h2y2 0g1T1`1a3A1d3y2X132.053F0Q2U3o1o1H0J0,0Q0j3w393U0%0I0,0q3!3T2K300j0,0j0i2c100e2c0y0t1D3+2;3$010+040B3}2!3 0r0,0t442 410A3f3*3#3-47040p4a3p410N0G3m0q4r4f3,2$0,0w4e2:453-0d0,0E4y4g4v040C1=4l3 410B0N4q4s4z2 3W040I1r3|3N2|4t3~4B3(042O0H4F4u2?484L4B0,0v4:4H0z0b0H0e0k0K0Q4@1H4N4o4Q4s4R4G4.044x4Z2q4S3p4C044?5b3S4$4^3`4K5i5d4M0,435o573b4/5t4-0%5f5h2X5u303X0z0t5n5C5y405r0N4P5i0655555p4h4w505z4=5W5E040z5m4Y5J5k515r5Z4i4k5x5*5X5g5-5F5H5(3O5D525O2V5Q565K4U2k0H0i0w115i4#4A4H5a5 123Q0z2r2S6h3z1l3B2u2w2s1S1U2u0s1C6k0m3A0.6x0R0T0V04.
Fusionner deux piles de tailles inconnues

On considère p et q deux piles dont on ignore le nombre d'éléments.

On appelle « fusion de p et q » la pile obtenue en empilant alternativement les valeurs dépilées de p puis q.

Les piles n'ayant pas nécessairement le même nombre d'éléments, il est possible lors de la fusion que l'une d'elles soit vide avant l'autre. Dans ce cas, on terminera la fusion en vidant l'autre pile dans la pile résultante.

Écrire la fonction fusion qui prend en paramètre deux piles de tailles inconnues et renvoie la pile résultante.

Les piles p et q peuvent être modifiées lors du traitement.

>>> p = Pile()
>>> p.empile("e")
>>> p.empile("c")
>>> p.empile("a")
>>> p
| e | c | a | <- sommet
>>> q = Pile()
>>> q.empile("d")
>>> q.empile("b")
| d | b | <- sommet
>>> fusion_simple(p, q)
| a | b | c | d | e | <- sommet
Aide

On pourra organiser le code en trois temps :

  • les deux piles sont non-vides ;
  • la pile p est non-vide ;
  • la pile q est non-vide.

###(Dés-)Active le code après la ligne # Tests (insensible à la casse)
(Ctrl+I)
Entrer ou sortir du mode "deux colonnes"
(Alt+: ; Ctrl pour inverser les colonnes)
Entrer ou sortir du mode "plein écran"
(Esc)
Tronquer ou non le feedback dans les terminaux (sortie standard & stacktrace / relancer le code pour appliquer)
Si activé, le texte copié dans le terminal est joint sur une seule ligne avant d'être copié dans le presse-papier
Évaluations restantes : 10/10

.128013s3o_8bcdufvg/0lyq n7apS.r1me,(P2=4:twki95h)6050i0C0K0v0N0p0b0s0h0p0v0b0b0H010K0N0w010406050b0j0B0B0v0z0q040x0d0p0j0-0d0t050n0@0_0{0}0=0w04161d051g0n1g1i1d0=0i0N0l0#0%0)0+0Q0N0m0Q0p1w0Q0K0:050W0g0p0C1r0(0*011v1x1z1x0K1F1H1D0K0g0d0i0}1E0z1e0K0Q0#100b0w0v0t0+0G011J1t010k0Y0C0t0v0B0C1D1+1-1=1L1^1H1{1}0:0a0s0F0z0d0w0d0b0N130t0s0U1)0z0z0C0h2i16200t1e0n1%2v0K1#1!1$0i220+1z0t1`2f1D1o1q0$1K2F0N2H0t1X1p1D0w2o1e2t2v2Z0?1,2j2N1?2S0z0`0p0:0s0A2s2%0;2$212)1L2+2-2/0G2=1-2@2t2E012|0v2.040s0c302u0=332`0+36380s0I3c322%343i2/0P3m3e3o3g350d2,372/0S3t2^2(1s2{3y2}390u3D3f3G3h3I3A390f3M3v3O3x3z3j0O3U2_3W3q040A0o3m1f2X162L2y0i2C340h1X1~1e3:1h3.2#172?053^0U2Y3V2O010M0:0U0k3,3N470L2/4d462*0k0:0k0j2g144i3$470/040E4r3F470t0:0w4x344u0D3m0s3E3p0:0r4D3w4u0R0J3t0s4T4I4e2*0:0z4H4J3w0d0:0H4!4W2{0:0F1_4N3W4u0E0R4S4U4#3W49040L1v1H4*4j1L0d4g042S0K514s4X044C40314`474%040y4:4z0:0C0b0K0e0l0N0U5l1?4=4@5e2u4V520+540:1-0i594y1?5E560d585z395g5b4M5P5R530:5k5U4+3h5n5p5r5t0C5v1L5x4R5P064U5;5B5a4,044Z5Z5C015i5Y2#5!355n0B0w4/5{5@0+4=5+5#5c6b5}5X6e4A040U6550675J5,0:4?5y2Z5:5=4T5V6c5`605|5~6h636l5*6n4E6q6D045T6A686f5j6K6k666N6o696q0R6s2?6u6w614|4~6T2?5?6V5}55575I4K6d6H4$6g6@3%5$5q5s5u6`4t6X5.6t6v6$5|6i6z41616C705b0C646*5f616a7d5^5d6U347c7o3w6i6S6m7r4;6X6Z316#6,346(4 6G2Z7C4$6/5N6;7s4L6e7q7a776|5(6 7w714v4Q4^6v6x625_7P6_7W7e7g7v7R6O7k7+5^6M7/6-7Q7i7S6j0C6F6e5x7z3d5;7$4|2o0K0j0z155P7I6{7(5/16430C2v2W8j3/1p3;2y2A2w1W1Y2y0v1G8m0n3:0=8z0V0X0Z04.

###(Dés-)Active le code après la ligne # Tests (insensible à la casse)
(Ctrl+I)
Entrer ou sortir du mode "deux colonnes"
(Alt+: ; Ctrl pour inverser les colonnes)
Entrer ou sortir du mode "plein écran"
(Esc)
Tronquer ou non le feedback dans les terminaux (sortie standard & stacktrace / relancer le code pour appliquer)
Si activé, le texte copié dans le terminal est joint sur une seule ligne avant d'être copié dans le presse-papier
Évaluations restantes : 10/10

.128013s3o_8bcdufvg/0lyq n7apS.r1me,(P2=4:twki95h)6050i0C0K0v0N0p0b0s0h0p0v0b0b0H010K0N0w010406050b0j0B0B0v0z0q040x0d0p0j0-0d0t050n0@0_0{0}0=0w04161d051g0n1g1i1d0=0i0N0l0#0%0)0+0Q0N0m0Q0p1w0Q0K0:050W0g0p0C1r0(0*011v1x1z1x0K1F1H1D0K0g0d0i0}1E0z1e0K0Q0#100b0w0v0t0+0G011J1t010k0Y0C0t0v0B0C1D1+1-1=1L1^1H1{1}0:0a0s0F0z0d0w0d0b0N130t0s0U1)0z0z0C0h2i16200t1e0n1%2v0K1#1!1$0i220+1z0t1`2f1D1o1q0$1K2F0N2H0t1X1p1D0w2o1e2t2v2Z0?1,2j2N1?2S0z0`0p0:0s0A2s2%0;2$212)1L2+2-2/0G2=1-2@2t2E012|0v2.040s0c302u0=332`0+36380s0I3c322%343i2/0P3m3e3o3g350d2,372/0S3t2^2(1s2{3y2}390u3D3f3G3h3I3A390f3M3v3O3x3z3j0O3U2_3W3q040A0o3m1f2X162L2y0i2C340h1X1~1e3:1h3.2#172?053^0U2Y3V2O010M0:0U0k3,3N470L2/4d462*0k0:0k0j2g144i3$470/040E4r3F470t0:0w4x344u0D3m0s3E3p0:0r4D3w4u0R0J3t0s4T4I4e2*0:0z4H4J3w0d0:0H4!4W2{0:0F1_4N3W4u0E0R4S4U4#3W49040L1v1H4*4j1L0d4g042S0K514s4X044C40314`474%040y4:4z0:0C0b0K0e0l0N0U5l1?4=4@5e2u4V520+540:1-0i594y1?5E560d585z395g5b4M5P5R530:5k5U4+3h5n5p5r5t0C5v1L5x4R5P064U5;5B5a4,044Z5Z5C015i5Y2#5!355n0B0w4/5{5@0+4=5+5#5c6b5}5X6e4A040U6550675J5,0:4?5y2Z5:5=4T5V6c5`605|5~6h636l5*6n4E6q6D045T6A686f5j6K6k666N6o696q0R6s2?6u6w614|4~6T2?5?6V5}55575I4K6d6H4$6g6@3%5$5q5s5u6`4t6X5.6t6v6$5|6i6z41616C705b0C646*5f616a7d5^5d6U347c7o3w6i6S6m7r4;6X6Z316#6,346(4 6G2Z7C4$6/5N6;7s4L6e7q7a776|5(6 7w714v4Q4^6v6x625_7P6_7W7e7g7v7R6O7k7+5^6M7/6-7Q7i7S6j0C6F6e5x7z3d5;7$4|2o0K0j0z155P7I6{7(5/16430C2v2W8j3/1p3;2y2A2w1W1Y2y0v1G8m0n3:0=8z0V0X0Z04.