Aller au contenu

Arbre en version immuable

🏷️ On considère ici des arbres étiquetés.

Créer un tuple

Pour créer un tuple, on peut faire :

🐍 Script Python
t_0 = ()  # le tuple à 0 éléments
t_1 = (5,)  # un tuple à un seul éléments
témoins = (2, 3, 5, 7, 11, 13)  # un tuple à 6 éléments
carrés = tuple(n**2  for n in range(10))  # création avec une compréhension

une_liste = [17, 19]  # c'est une liste Python
une_liste.append(23)
suite_témoins = tuple(une_liste)  # création par transtypage explicite

⚠ Il est indispensable de placer une virgule au tuple (5,) ; sinon, Python l'interprète comme le nombre 5 qui n'est pas un tuple.

Arbre en version immuable

On souhaite, dans cet exercice, avoir une version immuable de l'arbre, à base de tuple, de manière récursive pour chaque branche.

🐍 Script Python
A__mutable = [42, [[1, []], [2, []]]]
A_immuable = (42, ((1, ()), (2, ())))

Exercice

Coder une fonction vers_tuple qui prend un arbre étiqueté en paramètre (en version liste) et qui renvoie un arbre de structure identique, avec les mêmes étiquettes, mais entièrement construit avec des tuples.

###(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 : /
.128013]x,5/f.q7r;nb _o=ylaepcwgu)vdV4613kRAméhtsP(S2[-i:050D0v0P0u0X0t0Q0o0x0t0u0Q0Q0r010P0X0w010406050Q0A0M0M0u0k0s040T0q0t0A0?0q0m0o020u0M0w0l0o0K0v100k0i0A0v0Q050f0}0 11130{0w04051y1r1B0f1y0{0D0X0C0+0-0/0;0O0X0z0O0t1P0O0P0_050$0n0t0v1K0.0:011O1Q1S1Q0P1Y1!1W0P0k1z0P0O1$1M010g0(0v0m1e0v010+160Q0w0u0m0;0U1W26281`1(1}1!200M22040a0o0R0k0q0w0q0Q0X191b0!240k0k0v0x2w1r2d0m1z0f1^2I1=1@1?1X0D2f0;1S0m1 2t1W1H1J0,1%2S0X2U0m0q2Y1W0w2B1z2G2I2:0|271b2!1{2)0k100t0_0H2F2@0`2?2e2_1(2{2}0_0U3128332G2R01380u2~040I3c2H0{3f360;3i3k0F3n3e2@3g3t0_0e3w3p3y3r3h0q2|3j0_0G3D342^1L373I39040j3w1C2.1r2Y2L0D1@2Q3G0x2*2l0Z1I1z2-0v2/323W3*0!3=353Q0;0J0_0!0g3W3q3|010y0_0o423F440m0g0_0C0v0k0Q0p0P0A0w1!493{2#010^040S4o3P4q0m0_110n2B4v3g4s0B0Y3D0o4J48434q0Q2b04011j0m0C0q0X1#0A2U240w4W0o2y0t004A2B0d0o1 0o4f4h0X1a0o4k4m224I4K3O3z0_0k0u0x2%0v4D3G4s0d3w4L4a4x0_1 0g280P1q1s325b4p1{0q0_0r5a4~3G4y044+555k3d064K5m4w2`0_2)0A4f0u0A0c5s4M5o5q5N5c1{4s0V0b4|4J5t443~040g3I5R5n370_0Q0q0A4i5x5)5E1(0q46042%5=4 045f5h5j2=5O1(4s4H5z3o5C5C5Z5d045H5J5L56445p040h6h6c0u0w0w1 0D6m5T0_4u673`5?3s4e4g4i4_4n6x6b6u4t6t5+045-5/0p5;6G630;4F0B5X5D3g5#2B4k0k0m5|576v6K6A0451532U6+4r0_596x6X5u0n0_6E5y625S646*6R706,6e0v5K5M735*6T0_0B6V6x0{0f3^3;3X7k0f3!1r0P3$7p2O2J0u1Z7m3!1x6y3g2B0M0p5g0J0v0p0O0I0_1j1l1n1p0o662=1E332Y3g0u0D0M1a2v4?1b0?4s1x7W7Y7!2w0W0?0P1:040E6C7$0o0u4f0x0o4Y1#3*1f0k0N0O1 2u1a1C7U1I3g1*1R1T1V7A3G2h1 210_2n0T0x0k0@0P2o0s1^886G3:6y2;3?7j8h5!3 0v417a6z45476;4c6B4h4j4l6F6 7b6=6J8I5}6Q8T8J4F7R325B4}6S014O0_4R1 4U4$7 4!4$4(4*0k4B0v4-4/4;877%8R4{7g6a8+5v6.546;586(4b5e4c609d4q6j5r6^6H6L8Z8(96743h6|0p5 0m5i9i5P049l2:6_4b6{046}9b728!5}908Q4`9J8W9L5u5,5.5:8{4C8X6)047f9D9n3}0_5%0k9z6L6N9W8|9-0;5^0_5{9m979f5g9x613?8+4F6W9(016Z0#0A6$9=8V6w9S9e6-529a9Z449c9`9s5v0P9v9g9~9Q9$8(1r8C7l2I7y3Z3.1G0#0%0)3g0D280z4g0_3p0~1l130L7|0o0-0o5%0m2D7_058C100wav3+2;aN1v8a2Z448d1,1U2c9s8j2j2l8n8p8r8t8v6%8x3Y7S2=aw8+5#406;5_48ai4x4d049N9Ibb6Iaca0am4z9X6~bk8U8$a38+8-4Q4S8;4X4Z3*4#1#8_5x8~1b907_6}01bsblaf6/bo3da4ak9%9{5~aq9yal8U9kaa5v9p5A9r8Ua66#a bT9s4sbjbQbU996:bh71046@b.8U0m9Gbgad4qb:8M9Ga#9Qb;2Ha45vbf939Qb|5lcb9|9hb_7c9#7e3N7ia(axaA0C337naD0(0Qcv0!0$cy04.