Aller au contenu

Dictionnaire de bijection

Le cadre

Deux repas ont parfois la même liste d'ingrédients, mais pas dans le même ordre, les repas sont alors identiques.

Mais pour Python, l'ordre d'une liste compte, comme dans l'exemple :

🐍 Script Python
repas_1 = ["pain", "beurre", "confiture", "chocolat"]
repas_2 = ["chocolat", "beurre", "pain", "confiture"]

Il est clair qu'il s'agit des mêmes ingrédients (chacun présent une seule fois), donc du même repas.

On souhaite construire le dictionnaire bijection qui pour chaque indice d'un ingrédient de repas_1 donne l'indice de l'ingrédient correspondant dans repas_2.

Ici, on a bijection = {0: 2, 1: 1, 2: 3, 3: 0}

En effet :

  • L'ingrédient d'indice 0 dans repas_1 est "pain", il correspond à celui d'indice 2 dans repas_2.
  • L'ingrédient d'indice 1 dans repas_1 est "beurre", il correspond à celui d'indice 1 dans repas_2.
  • L'ingrédient d'indice 2 dans repas_1 est "confiture", il correspond à celui d'indice 3 dans repas_2.
  • L'ingrédient d'indice 3 dans repas_1 est "chocolat", il correspond à celui d'indice 0 dans repas_2.

Exercice

Coder une fonction bijection qui prend en paramètres deux listes repas_1 et repas_2 des mêmes éléments (chacun présent une seule fois) et qui renvoie un dictionnaire qui associe les indices du premier aux indices du second suivant l'exemple précédent.

  • On garantit que les listes ne comportent que des éléments distincts qui sont immuables pour Python (des nombres, des chaines de caractères, ou des tuple de valeurs immuables). Les éléments de la liste peuvent donc être des clés de dictionnaire.
  • On garantit que les deux listes sont obtenues par mélange l'une de l'autre.
  • 👍 On garantit que les listes font moins de 1000 éléments distincts.
###(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 : /
.128013x/.Tr;nbylaeu)*dV6z3×^Am?(P02-],5fq7}8 _o={GpcwgQv41kRIéhtsàSLC[ji:E050q0m0*0l0=0k0+0N0U0k0l0+0+0Q010*0=0T010406050+0n0y0y0l0f0j040-0P0k0n180P0h0N020l0y0T0g0N0$0m1i0f0J0n0m0+050c1f1h1j1l1d0T04051Q1J1T0c1Q1d0q0=0Y101214160)0=0W0)0k1+0)0*1b050{0i0k0m1$1315011*1,1.1,0*1@1_1=0*0f1R0*0)1{1(010I0}0m0h1w0m01101o0+0T0l0h160D1=2o2q2c1}2f1_2i0y2k040a0N0B0f0P0T0P0+0=1r1t0_2m0f0f0m0U2O1J2v0h1R0c2a2!2729281?0q2x161.0h2h2L1=1Z1#111|2.0=2:0h0P2@1=0T2T1R2Y2!351e2p1t2_2d2~0f1i0k1b0!2X391c382w3b1}3d3f1b0D3j2q3l2Y2-013q0l3g040u3u2Z1d3x3o163A3C0Z3F3w393y3L1b0H3O3H3Q3J3z0P3e3B1b0s3V3m3a1%3p3!3r040K3)3I3,3K3.3$040M3O1U331J2@2%0q292,3Y0U2 2D0^1!1R320m343k3}470_4f3n3@010#1b0_0I3}3?2`010V1b0N4s3X4m0h0I1b0i0=0;2U2W1K4g4t2d1a040A4z4l4u0h1b2T2p0+0O3i4K3v3*3y4O0G3O4y4M3p4V0m4X0O3t4#2Z4%3Y4O0o0?3V0N4 4,4A4u0+2t04011B0h0Y0P0=1`0n2P0=2V0=1s2i0=2T0N2Q4F4H5h1s014~504_4B4p5g0P4+5w4u0P1b0Q5B4-3K0i5y2V4R3+4u4O0A0o5u4 5C2d4o040I3!5H523c1b0=5#4S2d0P4w042|5*5O3c5K040f2q0W0m5N4(1b4Q4@4k5=3p5@2A5}4`5 675x5^4:134Z6a5P1b0o4|5T505U5I4n1b5Z0f5;3R1b0;6t3Y5-5(0h6x4B5@5_0h5{6g4N69615V641b666L6o5Q6I4.6c4;4?376R6i6k61066m6(5v6o5X0=4r61515+6U4W6e4!6Y5$1}4O0:6T3K5(6~014O0F6C5D5F5G6/6M6 6V6e6X4L6`166|714U046w6Q7g721b0F4}6$6)7u6*7o7k1Z47717i7n6;7b5)7D637h7q755,5F7L6U7m356%7w7E6p6c0*0n0f6B796o7y5z3)0c4i4e3~7,0c411J0*437;2*2#0l1^7.411P623y2T0y0O0I0l0#0m0O0)0u1b1B1D1F1H0N7s371W3l2@3y0l0q0y1s2N5i1t184O1P8m8o8q2O0E180*25040x0Y2U0N5Z0h5r1t057+042h1g0m5_0*5|7*482!1X1S040X0n2q2,1s8J0|0*0N5e0N2p0f477Y0 2Q1.0+8V0N0`0N1F008+0+1`940f8.8`002|7z1`1e271s0W8Q0*2X9f6G045n1`120N0Y3B0m7Y0G0N0}8~8|8;1p0 0(0k0(0W2q98001q0}0=964y8P8R2C8U0m0A1i0O8{8V5S8X4j901G9P8Y6F5{0A2A9V0l9X9N9Z9!8P1U8k1!3y1 1-1/1;7 3Y2z2h2j1b2F0-0U0f198.0B0j2a1s3}4d62364g9^6+4p0m6.6_7U5.4y7H3R4D045p4I8s7B6Kar7I3z4/4;6^7f7U4)7O7b6?4Y7e4$6Z046#7R6m7a01541b572h5a5c8/5f8M5k5m5o4GaA5s6laY7%7A7#7o5E0478356:aF0h5@7z9jav684P9!aW7TaF5X6raNaG5/aC044*a`7U7k0bbf6z5/7!a a@5@9R8T0l8Vbi60aE6u7c4YaJaS7o4{8h3k7S6)aYbd5!blb16vbibkbt7$1b0jbp5.5:bR3Rbv0h8S9TbA7jaH7dbiaVbL7vaXan5/aq3kb0bDbob%6y77bf7kbZb64m4ObK3vbMb@b^7x5L5Ac66h046}ch5%bhcl6{7Kc04ma|a~b|a@bT7tbb3y5X2T7X7Zc3cf7)9^1W3 7/4b1dcL0Y9`2^4m8n8p0h8r8+0q5`8T1b8w3YcT8z8s8B2N8E0r0P27951o9L8+1H0*0E0m0k1_8;8T6r1i0h8}0z9_1d0n0k3l1.040.0l0N0+c=2O8;0f0(94d20(1`5g0=0N2:0N0k00c^8;139w1i9N8~c|950n0I2f0+9I1`2K7Y0N8p2|8_1`0!0CdT0N9E0(2Cd20+0d0N0@1tap0I8 9q0q0P0n7{0N0id.111`d)4I9(a%5l8+aY1j2N0)1i8V0b1b090AdSdT0ve90C0QdS0w0s09b9b|2J0(8U8s0+9w0U1`1Fdqdw5_9N5j7`1_0d1Jda1dda8G8I8:0y0}1.cX00dWdY0*epdtddd-d/c}d=0nd@8Jbx2Nb}c%aa2ae30me504e7ef0R0!0D0Lei4+elen1seRer9%dq0hdv9A4X0Newdf0h2i7{eB0ceD1Jd73l1Q0/0P1h2h8.d*aa0m0t0E5a0n0 dL0f9%9p1`8V9A1f1!9I8J2|9N948~1t8:dP0{d20Nd48j1Y9{3Y9}211:2u7oa32B2Da7a9ab2Gae0)ag6Lai3*ak4$am7o0U0!1b030N0edw2Q0Tc 3_8L8W7RbO7k0I2I0y71at7j7k6Fd-gaco16gcgi4n7k0=1x3!b5bWce040+0)dF0I1_3V3Wbm1b0{eKg4cv6octbfeJ3h0C71a|0p0p71gL043(6$cwbE6fcr76a}bf7CbC3YdI6q71a!5627eY0Og-0=1b0Rb.cng)4m2M1b0Lg-555tg!5W6qbQgsgCg{gHa{b#bshbbm6EcZb-gl7kgEdDb;74gWbXgugwdGgzgl6Shkb/bFb;3=gtaP4=bp7Nh4cpcjg-0lg,glg.170fg;g?g^g`7Gg|53g@04h0hOh2bfbP6shI7Fb!6Ac3hh6GgGbHaLaDaKbS04hmhvhX6JaUhpg5hrgvgxh}h_5~4Pg`hEaR4^aTejcagBh`7zcgh8aFgJh+bgaz8Mhjh~6=6dhAhw1bbVhfh`ibhBhq7oh)cFha3ve%cshdh/4Vhiixi9hyh{0|hniQb=cacdh97QiA3yinilbDijbickith,iQi1b?cz3Y5X1|8Tgri$3YgeivgZi.7phKiShWi7b7i;iJaYctcuj9hriCiQi-j66bi#h?aF73cH8Y7-2!7}0^0`iU0 3Y8uc#1e1g1D1l0%0h9c0N6^jB1Nfg04fi0h8|hR5l5d8NjP9g044deJ8T9k2I9m5n5g2Oa-9d8P2|8H0f941J8Pe 0N1|0P0Ua)0,100)0l8edV9FeP9o9)4jhE4!j=f79xjF5g0mfb8!7/ju0}0+8kki0~3yjy3wjJ1k04jEjG6Xkr1O8#d%dx8?d.6F8.8O9*i 4?j=47jOg:jRj%2T2V1Cfldt1`b48sj*9od10q0(kf3lkhhmkk1Ykmjw4m0W0n0=0_jz1LjC040Sk;2Q0l8H0Ude0*0jc}8Ka,c{2XkxcQ9|1/fWa0aYf!a52E0Na8aa0Tacf+f-37f/8i37f?7U5X4qgb4x7jaxiq4Jj1hxj1i~aIbUiHjflE6ic93GiZh`j-8Tj:ioi(i|6D5Li{jli85Ra?b_beiognlJl+1bb i)6yiMl+b)b+byh=idbIh^l#i}hzj0jiciiXlP7ugXlSj/l{a1c71bjhl cs1b0dmjbij82ZiKg#jcmnjamimk6$cbgXi+lVhHl;lY04b4bAifm66niFh6h*mB4TcxlMbjiHc5mM5,l?mT6N8Qb*9Sl`ism3cmlLm%hJm51c7vms04mjfb7Rmwb_cC7Yhejdgtmyg59#7.f/cOk(0_k*n4cM40k-04.