Diverses piles

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 munit des fonctions primitives suivantes :

  • cree_pile_vide() : crée et renvoie une pile vide ;
  • est_vide(p) : renvoie le booléen indiquant si la pile p passée en paramètre est vide ou non ;
  • empile(p, x) : empile la valeur x au sommet de la pile p ;
  • depile(p) : dépile et renvoie la valeur au sommet de la pile p. Provoque une erreur si la pile est vide.

Ces diverses fonctions sont déjà chargées.

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

Utilisation
>>> p = cree_pile_vide()  # création d'une pile vide
>>> est_vide(p)           # la pile est-elle vide ? -> Oui
True
>>> empile(p, 0)          # empile 0 dans la pile
>>> est_vide(p)           # la pile est-elle vide ? -> Non
False
>>> empile(p, 1)          # empile 1 dans la pile
>>> p                     # affichage du contenu de p
[0, 1]
>>> depile(p)             # dépile une valeur
1
>>> p
[0]
>>> q = cree_pile_vide()
>>> empile(q, 1)
>>> q
[1]
>>> 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 !

Disons-le dès maintenant : les piles mises en œuvre ici sont des listes python et peuvent donc subir toutes les opérations classiques applicables aux listes.

Toutefois, ces exercices visent à utiliser certaines techniques classiques liées aux piles. Il est donc demandé de les traiter en se limitant à l'utilisation des fonctions primitives présentées.

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 = cree_pile_vide()
>>> taille(p)
0
>>> empile(p, "a")
>>> empile(p, "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

.128013wl7,a/: +r0npmx3_6kshf45(vtb=ocgeS19)2iPd8uy050P0H0B0f0N0c0u0i0F0c0f0u0u0D010B0N0n010406050u0R0o0o0f0k0S040I0E0c0R0-0E0m050g0@0_0{0}0=0n04161d051g0g1g1i1d0=0P0N0A0#0%0)0+0v0N0G0v0c1w0v0B0:050W0C0c0H1r0(0*011v1x1z1x0B1F1H1D0B0C0E0P0}1E0k1e0B0v0#100u0n0f0m0+0M011J1t010w0Y0H0m0f0o0H1D1+1-1=1L1^1H1{1}0:0a0i0O0k0E0n0E0u0N130m0i0U1)0k0k0H0F2i16200m1e0g1%2v0B1#1!1$0P220+1z0m1`2f1D1o1q0$1K2F0N2H0m1X1p1D0n2o1e2t2v2Z0?1,2j2N1?2S0k0`0c0:0J2s2%0;2$212)1L2+2-0:0M2;1-2?2t2E012{0f2.040q2 2u0=322_0+35370x3a312%333g0:0y3j3c3l3e340E2,360:0s3q2@2(1s2`3v2|040d3A3d3D3f3F3x040Q3J3s3L3u3w370K3j1f2X162L2y0P2C330F1X1~1e3$1h3!2#172=053+0U2Y3S2O010t0:0U0w3Y3K3}0b0:0i433|2*0w0:0W0Y1H492^3T0/040z4h3C3}0m0:0n4n334k0L0h3q0i4z48442*0:1-2H0p0H3j4B4a1L0E0:0D4J3B3m0:0F2o0H0r0n1_0r0A0N0U4t3t4k0z0L4y4A4R3t4q040B4Q4C4M4O4@4L0+0o0N0:0l4-4z4/3T3 040b1v4g3?304K4i3}0E46042S4?5b2u5d4o4D040H0u0B4!4$4I5l3{5e1?4*4(3T4;4s5x543}4v4x5x064A5N5n4S5q0o4Y5a2#4^0+5B5G5W344E0m4G5w5V4|014k0e4{5z2`400H5T5)3@5!5Y5*5:3f4r5C5I0:0L4,5L5O4.5!4;5k2Z5P3t4N044P5x6c5D4d5/5o4_040j6l334~2/526i3}56581_6q6d5h5j6A6j5q5s5u4%5Z5+5{5_5+4;4F0H4H605A625K2Z5M666v5p0H5S6z6K5}5,0:4m6)6m5~045F5|6/6+045.6h5H5p0U5@6T1L6M306|5;046Q6S6.4u62646X5N740+562o0B0R0k156{686k5L163_0H2v2W7t3#1p3%2y2A2w1W1Y2y0f1G7w0g3$0=7J0V0X0Z04.

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

.128013wl7,a/: +r0npmx3_6kshf45(vtb=ocgeS19)2iPd8uy050P0H0B0f0N0c0u0i0F0c0f0u0u0D010B0N0n010406050u0R0o0o0f0k0S040I0E0c0R0-0E0m050g0@0_0{0}0=0n04161d051g0g1g1i1d0=0P0N0A0#0%0)0+0v0N0G0v0c1w0v0B0:050W0C0c0H1r0(0*011v1x1z1x0B1F1H1D0B0C0E0P0}1E0k1e0B0v0#100u0n0f0m0+0M011J1t010w0Y0H0m0f0o0H1D1+1-1=1L1^1H1{1}0:0a0i0O0k0E0n0E0u0N130m0i0U1)0k0k0H0F2i16200m1e0g1%2v0B1#1!1$0P220+1z0m1`2f1D1o1q0$1K2F0N2H0m1X1p1D0n2o1e2t2v2Z0?1,2j2N1?2S0k0`0c0:0J2s2%0;2$212)1L2+2-0:0M2;1-2?2t2E012{0f2.040q2 2u0=322_0+35370x3a312%333g0:0y3j3c3l3e340E2,360:0s3q2@2(1s2`3v2|040d3A3d3D3f3F3x040Q3J3s3L3u3w370K3j1f2X162L2y0P2C330F1X1~1e3$1h3!2#172=053+0U2Y3S2O010t0:0U0w3Y3K3}0b0:0i433|2*0w0:0W0Y1H492^3T0/040z4h3C3}0m0:0n4n334k0L0h3q0i4z48442*0:1-2H0p0H3j4B4a1L0E0:0D4J3B3m0:0F2o0H0r0n1_0r0A0N0U4t3t4k0z0L4y4A4R3t4q040B4Q4C4M4O4@4L0+0o0N0:0l4-4z4/3T3 040b1v4g3?304K4i3}0E46042S4?5b2u5d4o4D040H0u0B4!4$4I5l3{5e1?4*4(3T4;4s5x543}4v4x5x064A5N5n4S5q0o4Y5a2#4^0+5B5G5W344E0m4G5w5V4|014k0e4{5z2`400H5T5)3@5!5Y5*5:3f4r5C5I0:0L4,5L5O4.5!4;5k2Z5P3t4N044P5x6c5D4d5/5o4_040j6l334~2/526i3}56581_6q6d5h5j6A6j5q5s5u4%5Z5+5{5_5+4;4F0H4H605A625K2Z5M666v5p0H5S6z6K5}5,0:4m6)6m5~045F5|6/6+045.6h5H5p0U5@6T1L6M306|5;046Q6S6.4u62646X5N740+562o0B0R0k156{686k5L163_0H2v2W7t3#1p3%2y2A2w1W1Y2y0f1G7w0g3$0=7J0V0X0Z04.
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 = cree_pile_vide()
>>> empile(p, "a")
>>> empile(p, "b")
>>> empile(p, "c")
>>> p
['a', 'b', 'c']
>>> renverse_deux(p)
>>> p
['a', 'c', 'b']

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

.128013wl,a/: rnmx3_kshf45(vtbu=ocgeS1)2iPdpy050K0D0w0e0I0c0p0h0B0c0e0p0p0z010w0I0L010406050p0y0k0k0e0i0M040E0A0c0y0%0A0j050f0.0:0=0@0,0L041017051a0f1a1c170,0K0I0v0V0X0Z0#0q0I0C0q0c1q0q0w0*050Q0x0c0D1l0Y0!011p1r1t1r0w1z1B1x0w0x0A0K0@1y0i180w0q0V0`0p0L0e0j0#0H011D1n010r0S0D0j0e0k0D1x1#1%1,1F1/1B1=1@0*0a0h0J0i0A0L0A0p0I0}0j0h0O1Z0i0i0D0B2c101`0j180f1X2p0w1V1U1W0K1|0#1t0j1;291x1i1k0W1E2z0I2B0j1R1j1x0L2i182n2p2T0-1$2d2H1-2M0i0;0c0*0F2m2X0+2W1{2Z1F2#2%0*0H2+1%2-2n2y012=0e2(040m2_2o0,2|2:0#2 310s342{2X2}3a0*0t3d192R102F2s0K2w2}0B1R1^183o1b3m2V112,053t0O2S3f38010o0*0O0r3k371m1F0b0*0h3O3H3Q390r0*2i0j0v0D0i0p0D0n0O0y0l3V2/3X010)040u3:2Y3=0j0*0L3`2}3@0G0g3d060h473U3P2I2~0*0e3d493W4b0A0*0z4f2.3{4b3}040O0L1:403I3@3_3B2`4n3g3~4v3=4245484g3;4p0*0x4m4a1-4j044l4z2o4J4o2!3L0D4t1B4E4b4x4%4Y043 4U3G4K1-4G4.46484B3I4q0D0k4#0D4*1F4)4.4_3|4D534P510*0d4O4h4+4e575d59040G4H4^58390*4|4~500#522V5n4c4,5s3?5a5c4:2;4M5z4=2T0,0f3E0D2p2Q5M3n1j3p2s2u2q1Q1S2s0e1A5P0f3o5J0O0Q0S0p04.

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

.128013wl,a/: rnmx3_kshf45(vtbu=ocgeS1)2iPdpy050K0D0w0e0I0c0p0h0B0c0e0p0p0z010w0I0L010406050p0y0k0k0e0i0M040E0A0c0y0%0A0j050f0.0:0=0@0,0L041017051a0f1a1c170,0K0I0v0V0X0Z0#0q0I0C0q0c1q0q0w0*050Q0x0c0D1l0Y0!011p1r1t1r0w1z1B1x0w0x0A0K0@1y0i180w0q0V0`0p0L0e0j0#0H011D1n010r0S0D0j0e0k0D1x1#1%1,1F1/1B1=1@0*0a0h0J0i0A0L0A0p0I0}0j0h0O1Z0i0i0D0B2c101`0j180f1X2p0w1V1U1W0K1|0#1t0j1;291x1i1k0W1E2z0I2B0j1R1j1x0L2i182n2p2T0-1$2d2H1-2M0i0;0c0*0F2m2X0+2W1{2Z1F2#2%0*0H2+1%2-2n2y012=0e2(040m2_2o0,2|2:0#2 310s342{2X2}3a0*0t3d192R102F2s0K2w2}0B1R1^183o1b3m2V112,053t0O2S3f38010o0*0O0r3k371m1F0b0*0h3O3H3Q390r0*2i0j0v0D0i0p0D0n0O0y0l3V2/3X010)040u3:2Y3=0j0*0L3`2}3@0G0g3d060h473U3P2I2~0*0e3d493W4b0A0*0z4f2.3{4b3}040O0L1:403I3@3_3B2`4n3g3~4v3=4245484g3;4p0*0x4m4a1-4j044l4z2o4J4o2!3L0D4t1B4E4b4x4%4Y043 4U3G4K1-4G4.46484B3I4q0D0k4#0D4*1F4)4.4_3|4D534P510*0d4O4h4+4e575d59040G4H4^58390*4|4~500#522V5n4c4,5s3?5a5c4:2;4M5z4=2T0,0f3E0D2p2Q5M3n1j3p2s2u2q1Q1S2s0e1A5P0f3o5J0O0Q0S0p04.
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 = cree_pile_vide()
>>> empile(p, "a")
>>> empile(p, "b")
>>> empile(p, "c")
>>> empile(p, "d")
>>> empile(p, "e")
>>> p
['a', 'b', 'c', 'd', 'e']
>>> renverse_k(p, 4)
>>> p
['a', 'e', 'd', 'c', 'b']
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

.128013wl7,a/: rnpmx3_6kshf45(vtb=ocgeS19)2iPd8uy050N0F0z0f0L0c0s0i0D0c0f0s0s0B010z0L0l010406050s0P0m0m0f0j0Q040G0C0c0P0+0C0k050g0=0@0_0{0:0l04141b051e0g1e1g1b0:0N0L0y0Z0#0%0)0t0L0E0t0c1u0t0z0.050U0A0c0F1p0$0(011t1v1x1v0z1D1F1B0z0A0C0N0{1C0j1c0z0t0Z0~0s0l0f0k0)0K011H1r010u0W0F0k0f0m0F1B1)1+1:1J1?1F1_1{0.0a0i0M0j0C0l0C0s0L110k0i0S1%0j0j0F0D2g141~0k1c0g1#2t0z1Z1Y1!0N200)1x0k1^2d1B1m1o0!1I2D0L2F0k1V1n1B0l2m1c2r2t2X0;1*2h2L1;2Q0j0^0c0.0H2q2#0/2!1 2%1J2)2+0.0K2/1+2;2r2C012_0f2,040o2}2s0:302@0)33350v382 2#313e0.0w3h3a3j3c320C2*340.0q3o2=2$1q2^3t2`040d3y3b3B3d3D3v040O3H3q3J3s3u350I3h1d2V142J2w0N2A310D1V1|1c3!1f3Y2Z152:053)0S2W3Q2M010r0.0S0u3W3I3{0b0.0i413`2(0u0.2m0k0y0F0j0s0F0p0r472?3R0-040x4l3A3{0k0.0l4r314o0e3h46422(0.4k3;2~3z4y0.0J0h3o0i4P4C482^0.1+2F0n4i2.4H2s4R4m3{0C0.0B4B4J3r4u040D2m4i0l1@0p0y0L0S4x3r4o0x0J4O4Q4-3R4/4V0F4X0p2|4!044$4s1;4)044+5c5e3k0.4;0F4?4^4`4|5c543{4 515c064Q5l3r3}040u3t4,4D4T040p5I4S0)0C44042O5N4%2(0A4b1+0E0F4}4n0.4q5u5J3d4F5$5w4L4N5z5B5B5v4E040F0m4@1F5.1;4 5 5K57594Z2Z5+014z5U5f5K0S5}5#5*5O695(625,044w6h5V1J4o0J5y2X5A53685E5G0j6b5m5L6C3r5Q0.5T5k5^2^5X040j5Z6g676i616p6c6m4G6S6q0)6s5;6v5?6x6i4/5{6f6l6j4p6/560k4W4i5b6Z6W6:4A6K684/6e1@6/6U6{6D644Y744L6u2:6w4P6L0)6z5H6 6+0.5M7k6!016H5S137o6|0k6N6P0k5!7a6;6V6D6Y3=686$526)7g320.6-737D4~6k7Q554v7B6~2X5C7U04725~7T5/7C764.4U6@586_7B6t3y0g3@0F2t2U7_3Z1n3#2w2y2u1U1W2w0f1E7|0g3!0:890T0V0X04.

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

.128013wl7,a/: rnpmx3_6kshf45(vtb=ocgeS19)2iPd8uy050N0F0z0f0L0c0s0i0D0c0f0s0s0B010z0L0l010406050s0P0m0m0f0j0Q040G0C0c0P0+0C0k050g0=0@0_0{0:0l04141b051e0g1e1g1b0:0N0L0y0Z0#0%0)0t0L0E0t0c1u0t0z0.050U0A0c0F1p0$0(011t1v1x1v0z1D1F1B0z0A0C0N0{1C0j1c0z0t0Z0~0s0l0f0k0)0K011H1r010u0W0F0k0f0m0F1B1)1+1:1J1?1F1_1{0.0a0i0M0j0C0l0C0s0L110k0i0S1%0j0j0F0D2g141~0k1c0g1#2t0z1Z1Y1!0N200)1x0k1^2d1B1m1o0!1I2D0L2F0k1V1n1B0l2m1c2r2t2X0;1*2h2L1;2Q0j0^0c0.0H2q2#0/2!1 2%1J2)2+0.0K2/1+2;2r2C012_0f2,040o2}2s0:302@0)33350v382 2#313e0.0w3h3a3j3c320C2*340.0q3o2=2$1q2^3t2`040d3y3b3B3d3D3v040O3H3q3J3s3u350I3h1d2V142J2w0N2A310D1V1|1c3!1f3Y2Z152:053)0S2W3Q2M010r0.0S0u3W3I3{0b0.0i413`2(0u0.2m0k0y0F0j0s0F0p0r472?3R0-040x4l3A3{0k0.0l4r314o0e3h46422(0.4k3;2~3z4y0.0J0h3o0i4P4C482^0.1+2F0n4i2.4H2s4R4m3{0C0.0B4B4J3r4u040D2m4i0l1@0p0y0L0S4x3r4o0x0J4O4Q4-3R4/4V0F4X0p2|4!044$4s1;4)044+5c5e3k0.4;0F4?4^4`4|5c543{4 515c064Q5l3r3}040u3t4,4D4T040p5I4S0)0C44042O5N4%2(0A4b1+0E0F4}4n0.4q5u5J3d4F5$5w4L4N5z5B5B5v4E040F0m4@1F5.1;4 5 5K57594Z2Z5+014z5U5f5K0S5}5#5*5O695(625,044w6h5V1J4o0J5y2X5A53685E5G0j6b5m5L6C3r5Q0.5T5k5^2^5X040j5Z6g676i616p6c6m4G6S6q0)6s5;6v5?6x6i4/5{6f6l6j4p6/560k4W4i5b6Z6W6:4A6K684/6e1@6/6U6{6D644Y744L6u2:6w4P6L0)6z5H6 6+0.5M7k6!016H5S137o6|0k6N6P0k5!7a6;6V6D6Y3=686$526)7g320.6-737D4~6k7Q554v7B6~2X5C7U04725~7T5/7C764.4U6@586_7B6t3y0g3@0F2t2U7_3Z1n3#2w2y2u1U1W2w0f1E7|0g3!0:890T0V0X04.
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 = cree_pile_vide()
>>> empile(p, "c")
>>> empile(p, "a")
>>> p
['c', 'a']
>>> q = cree_pile_vide()
>>> empile(q, "d")
>>> empile(q, "b")
['d', 'b']
>>> fusion_simple(p, q)
['a', 'b', 'c', 'd']

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

.128013wl,a/: qrnpm3_6kshf45(vtb=ocgeS1)2iPduy050L0E0y0e0J0c0r0h0C0c0e0r0r0A010y0J0l010406050r0M0m0m0e0j0N040F0B0c0M0(0B0k050f0/0;0?0^0-0l041118051b0f1b1d180-0L0J0x0W0Y0!0$0s0J0D0s0c1r0s0y0+050R0z0c0E1m0Z0#011q1s1u1s0y1A1C1y0y0z0B0L0^1z0j190y0s0W0{0r0l0e0k0$0I011E1o010t0T0E0k0e0m0E1y1$1(1-1G1:1C1?1^0+0a0h0K0j0B0l0B0r0J0~0k0h0P1!0j0j0E0C2d111{0k190f1Y2q0y1W1V1X0L1}0$1u0k1=2a1y1j1l0X1F2A0J2C0k1S1k1y0l2j192o2q2U0.1%2e2I1.2N0j0=0c0+0G2n2Y0,2X1|2!1G2$2(0+0I2,1(2.2o2z012?0e2)040n2`2p0-2}2;0$30320u352|2Y2~3b0+0v3e373g392 0B2%310+0p3e1a2S112G2t0L2x2~0C1S1_193z1c3x2W122-053E0P2T3n1n1G0q0+0P0t3v383T0$0b0+0h3Z3S2J2 0t0+0t0M2b0 0o2b0m0l1C3*2:3#010*040w3|2Z3~0k0+0l432~400d3e3)3!3,46040i493o400H0g3l0h4q4e3+2#0+0j4d2/443,0B0+0A4x4f4u040C2j0E0o0l1;0o0x0J0P4k3~400w0H4p4r4y2~3V040b1q3{3M2{4s3}4A3%042N0y4E4t2=0+0E0r0y4O4Q0E4S3,4U504G484*2p4Z4l0+4n4X4r4Y4F4^040E3_1;531G52563R4-4G4w5o584T0+4c5o4,4z4G0P4M4)2W5f0$5n5F4@3a475l5H5a4W5o065d5d5u4g4_5j5E3N5G3 0+425t5#4h5s5J5q5m5w4?5.5L045C5k5)5K5$415N2 0+4j5`5=5|0H5Q2U5S5e5{4#2j0y0M0j105y5V5r3l113P0E2q2R6n3y1k3A2t2v2r1R1T2t0e1B6q0f3z0-6D0Q0S0U04.

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

.128013wl,a/: qrnpm3_6kshf45(vtb=ocgeS1)2iPduy050L0E0y0e0J0c0r0h0C0c0e0r0r0A010y0J0l010406050r0M0m0m0e0j0N040F0B0c0M0(0B0k050f0/0;0?0^0-0l041118051b0f1b1d180-0L0J0x0W0Y0!0$0s0J0D0s0c1r0s0y0+050R0z0c0E1m0Z0#011q1s1u1s0y1A1C1y0y0z0B0L0^1z0j190y0s0W0{0r0l0e0k0$0I011E1o010t0T0E0k0e0m0E1y1$1(1-1G1:1C1?1^0+0a0h0K0j0B0l0B0r0J0~0k0h0P1!0j0j0E0C2d111{0k190f1Y2q0y1W1V1X0L1}0$1u0k1=2a1y1j1l0X1F2A0J2C0k1S1k1y0l2j192o2q2U0.1%2e2I1.2N0j0=0c0+0G2n2Y0,2X1|2!1G2$2(0+0I2,1(2.2o2z012?0e2)040n2`2p0-2}2;0$30320u352|2Y2~3b0+0v3e373g392 0B2%310+0p3e1a2S112G2t0L2x2~0C1S1_193z1c3x2W122-053E0P2T3n1n1G0q0+0P0t3v383T0$0b0+0h3Z3S2J2 0t0+0t0M2b0 0o2b0m0l1C3*2:3#010*040w3|2Z3~0k0+0l432~400d3e3)3!3,46040i493o400H0g3l0h4q4e3+2#0+0j4d2/443,0B0+0A4x4f4u040C2j0E0o0l1;0o0x0J0P4k3~400w0H4p4r4y2~3V040b1q3{3M2{4s3}4A3%042N0y4E4t2=0+0E0r0y4O4Q0E4S3,4U504G484*2p4Z4l0+4n4X4r4Y4F4^040E3_1;531G52563R4-4G4w5o584T0+4c5o4,4z4G0P4M4)2W5f0$5n5F4@3a475l5H5a4W5o065d5d5u4g4_5j5E3N5G3 0+425t5#4h5s5J5q5m5w4?5.5L045C5k5)5K5$415N2 0+4j5`5=5|0H5Q2U5S5e5{4#2j0y0M0j105y5V5r3l113P0E2q2R6n3y1k3A2t2v2r1R1T2t0e1B6q0f3z0-6D0Q0S0U04.
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 = cree_pile_vide()
>>> empile(p, "e")
>>> empile(p, "c")
>>> empile(p, "a")
>>> p
['e', 'c', 'a']
>>> q = cree_pile_vide()
>>> empile(q, "d")
>>> empile(q, "b")
['d', 'b']
>>> fusion_simple(p, q)
['a', 'b', 'c', 'd', 'e']
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

.128013wl7,a/: qr0npm3_6kshf45(vtb=ocgeS19)2iPd8uy050O0G0A0f0M0c0t0i0E0c0f0t0t0C010A0M0n010406050t0Q0o0o0f0k0R040H0D0c0Q0,0D0m050g0?0^0`0|0;0n04151c051f0g1f1h1c0;0O0M0z0!0$0(0*0u0M0F0u0c1v0u0A0/050V0B0c0G1q0%0)011u1w1y1w0A1E1G1C0A0B0D0O0|1D0k1d0A0u0!0 0t0n0f0m0*0L011I1s010v0X0G0m0f0o0G1C1*1,1;1K1@1G1`1|0/0a0i0N0k0D0n0D0t0M120m0i0T1(0k0k0G0E2h151 0m1d0g1$2u0A1!1Z1#0O210*1y0m1_2e1C1n1p0#1J2E0M2G0m1W1o1C0n2n1d2s2u2Y0=1+2i2M1=2R0k0_0c0/0i0I2r2$0:2#202(1K2*2,2.0L2;1,2?2s2D012{0f2-040i0p2 2t0;322_0*35370i0w3b312$333h2.0x3l3d3n3f340D2+362.0r3s2@2%1r2`3x2|380d3C3e3F3g3H3z380P3L3u3N3w3y3i0J3T2^3V3p040I0l3l1e2W152K2x0O2B330E1W1}1d3/1g3-2!162=053@0T2X3U2N010s0/0T0v3+3M460b2.4c452)0v0/0v0Q2f134h3#460.040y4q3E460m0/0n4w334t0e3l0i3D3o0/0j4C3v4t0K0h3s0i4S4H4d2)0/0k4G4I3v0D0/0C4Z4V2`0/0E2n0G0q0n1^0q0z0M0T4M3V4t0y0K4R4T4!3V48040b1u1G4)4i1K0D4f042R0A584r4W040G0t0A4?4^0G4`4s0/4v3 30514y4A5q1=4O5g4x1=5b0/1,0O5C335F5d0D5f5u2t4U593g0/5k5m4@4_5P445h1K4|5z4+044L5Z5w5A0/4P4 4T504*5T5j0o4;575,5@015%5}5S344X5(0*4E5J3v4z040T5{5p615#665s6563044B6f5D5$5/4~5Z065=5=5-5)0G5`1^6j602!5~6a4Y6n4D0/4F5Z5R6g6k6c6A6H4N6i6R3$4K6B6q5;6M6o0*53556Q2Y6!5K5c5e686V5j5l5n5Y6D626C406E5y6U5r045:6s6u5?626a6y6d6X4u6j6F796K6*6w5^6P5|6^6N6`5v6|6l790K6r2Y6t746N6%566e7f5~5L6.6L7g6k5V6?7z6{6_6T7k6#6k5+7N6I704Q72736+695U6z7j7K7l7M7$7O7c6~5.047e2=7X6:7i7J7n7L7a7,5)7Q7)7S7r6Z7F532n0A0Q0k147E7o6G7t15420G2u2V8f3.1o3:2x2z2v1V1X2x0f1F8i0g3/0;8v0U0W0Y04.

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

.128013wl7,a/: qr0npm3_6kshf45(vtb=ocgeS19)2iPd8uy050O0G0A0f0M0c0t0i0E0c0f0t0t0C010A0M0n010406050t0Q0o0o0f0k0R040H0D0c0Q0,0D0m050g0?0^0`0|0;0n04151c051f0g1f1h1c0;0O0M0z0!0$0(0*0u0M0F0u0c1v0u0A0/050V0B0c0G1q0%0)011u1w1y1w0A1E1G1C0A0B0D0O0|1D0k1d0A0u0!0 0t0n0f0m0*0L011I1s010v0X0G0m0f0o0G1C1*1,1;1K1@1G1`1|0/0a0i0N0k0D0n0D0t0M120m0i0T1(0k0k0G0E2h151 0m1d0g1$2u0A1!1Z1#0O210*1y0m1_2e1C1n1p0#1J2E0M2G0m1W1o1C0n2n1d2s2u2Y0=1+2i2M1=2R0k0_0c0/0i0I2r2$0:2#202(1K2*2,2.0L2;1,2?2s2D012{0f2-040i0p2 2t0;322_0*35370i0w3b312$333h2.0x3l3d3n3f340D2+362.0r3s2@2%1r2`3x2|380d3C3e3F3g3H3z380P3L3u3N3w3y3i0J3T2^3V3p040I0l3l1e2W152K2x0O2B330E1W1}1d3/1g3-2!162=053@0T2X3U2N010s0/0T0v3+3M460b2.4c452)0v0/0v0Q2f134h3#460.040y4q3E460m0/0n4w334t0e3l0i3D3o0/0j4C3v4t0K0h3s0i4S4H4d2)0/0k4G4I3v0D0/0C4Z4V2`0/0E2n0G0q0n1^0q0z0M0T4M3V4t0y0K4R4T4!3V48040b1u1G4)4i1K0D4f042R0A584r4W040G0t0A4?4^0G4`4s0/4v3 30514y4A5q1=4O5g4x1=5b0/1,0O5C335F5d0D5f5u2t4U593g0/5k5m4@4_5P445h1K4|5z4+044L5Z5w5A0/4P4 4T504*5T5j0o4;575,5@015%5}5S344X5(0*4E5J3v4z040T5{5p615#665s6563044B6f5D5$5/4~5Z065=5=5-5)0G5`1^6j602!5~6a4Y6n4D0/4F5Z5R6g6k6c6A6H4N6i6R3$4K6B6q5;6M6o0*53556Q2Y6!5K5c5e686V5j5l5n5Y6D626C406E5y6U5r045:6s6u5?626a6y6d6X4u6j6F796K6*6w5^6P5|6^6N6`5v6|6l790K6r2Y6t746N6%566e7f5~5L6.6L7g6k5V6?7z6{6_6T7k6#6k5+7N6I704Q72736+695U6z7j7K7l7M7$7O7c6~5.047e2=7X6:7i7J7n7L7a7,5)7Q7)7S7r6Z7F532n0A0Q0k147E7o6G7t15420G2u2V8f3.1o3:2x2z2v1V1X2x0f1F8i0g3/0;8v0U0W0Y04.