Les amis de mes amis

On considère le schéma suivant où une flèche allant d'une personne Α vers une personne B indique que la personne A « suit » la personne B sur son compte Immediam. On dit alors que B est un ami de A.

Voici un exemple de réseau Immediam

flowchart LR
    A([Anna]) --> B([Billy])
    B --> A
    B --> E([Eroll])
    C([Carl]) --> B
    D([Dora]) --> G([Gaby])
    E --> B
    E --> D
    E --> G
    E --> F([Flynn])
    F --> G
    G --> E
Les amis d'Eroll sont Dora, Gaby, Flynn et Billy.

Les amis des amis d'Eroll sont donc Gaby (amie à la fois de Dora et Flynn) et Anna (amie de Billy).

On représente ce réseau Immediam en machine par un dictionnaire dans lequel :

  • les clés sont les chaînes de caractères correspondant aux noms des personnes inscrites,

  • les valeurs associées sont des listes de chaînes de caractères représentant les personnes suivies.

Écrire une fonction amis_d_amis qui :

  • prend en argument un dictionnaire reseau représentant un tel réseau Immediam et une chaîne de caractères membre qui représente un membre du réseau ;

  • renvoie la liste des amis des amis de membre, à l'exclusion de lui-même et sans doublon.

La liste des amis renvoyée pourra contenir les membres dans n'importe quel ordre. Les tests s'effectuent en effet sur la version triée de cette liste, sorted(amis_d_amis(immediam, "Billy")) par exemple.

Exemples
>>> immediam = {
        "Anna": ["Billy"],
        "Billy": ["Anna", "Eroll"],
        "Carl": ["Billy"],
        "Dora": ["Gaby"],
        "Eroll": ["Billy", "Dora", "Flynn", "Gaby"],
        "Flynn": ["Gaby"],
        "Gaby": ["Eroll"],
}
>>> amis_d_amis(immediam, 'Billy')
['Dora', 'Flynn', 'Gaby']
>>> amis_d_amis(immediam, 'Eroll')
['Anna', 'Gaby']
>>> amis_d_amis(immediam, 'Dora')
['Eroll']
###(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
.128013.128073s3_èufvIy n7aêSû1me(P24:jtwi][h)6Oo;bcdg/TlàqAp!.rL,=Nk5Ré050O0u0B0o0D0S0c0l0N0S0o0c0c0$010B0D0W010406050c0g0t0t0o0Z0k040q0K0S0g0 0K0m0l020o0t0W0L0l0*0u190Z0U0g0u0c050Q16181a1c140W041A1H051K0Q1K1M1H140O0D0i0@0_0{0}0G0D0P0G0S1!0G0B12050/0M0S0u1V0`0|011Z1#1%1#0B1-1/1+0B0M0K0O1c1,0Z1I0B0G0@1f0c0W0o0m0}0x011;1X010h0;0u0m1n0u1+2c2e2j1?2m1/2p0t2r040a0l0w0Z0K0W0K0c0D1i1k0-2a0Z0Z0u0N2M1A2t0m1I0Q282Y0B2625270O2v0}1%0m2o2J1+1S1U0^1=2,0D2.0m221T1+0W2R1I2W2Y33152d1k2@2k2|0Z190S120s2V3713362u391?3b3d120x3h2e3j2W2+013o0o3e040d3s2X143v3m0}3y3A0y3D3u373w3J120)3M3F3O3H3x0K3c3z120I3T3k381W3n3Y3p040n3M1J311A2=2#0O2)3w0N222B0,1T1I300u323i3:3|0-443l3*0}0(120-0h3:3G4b010C120l4h3V4j0m0h121n0D0c0e0O0e4u1z1B454i2^0111040v4o4a4F0m122R0c0u0o0g4K3)4F4H0#3M4n4E3a122A0t0M2R4U3w4H0H0z3T0l4=4!4p4M4O1y0g0S0/0B4Z3(3w0K120$504#1?4H0F0E4;4?513W4d040h3Y564^4$044u5k4L2k0K4l042`5p4V5m4P4R4T4C3t5e4j594,3W4N044(4*0u5H5F120E4:5C3E4?5V4@5q1?5g5i0Z5w3P4t0t0D4x0u4z5*5%3W5s125v5T045X5x3n4`4Q4S5O4W120F605m5o5^5E61045R5c5W5W682k5g0D4g5^5`5(5n5*5,5.0D5:4j53040X556k6f5|5K1t5M6s4F5=5n0m0O6E656o0-6q6K1?6G2|4 6y570}6G5@336l5I5}4|4~6458125S33066d6/5d6V3x6$4}0o6T356=6u0Y6)3I4t0W0W2o6J676=4H4J765l6A4u6p666{7b0}4.6c6!4j5g2R0B0g0Z0m6P70044P6%6_3%0Q47433;7C0Q3@1A0B3_7H2%2Z21232#0o1.7E3@1G495{0}2R0t0e0h0o0(5-0G0d121s1u1w1y0l6,451N3j1H0!0o2a0m0c2$0g2T0D1j0l2O057B7v4{6^6T860l0c0K0g0?5#2A83000g2.0l1%7}1:1n0f8m0T0l0u0h0h2S7p0u0Z8n1:0B1y0B4n7B3w1^1$1(1*7V6m7d6N7f3i7l6F5t6S7t016X7s6U7h6?8716893:7A3}5_1w0D8v7}831:3|0r8H2-0+0:2R0l0v0W1g0?0_8n4v8F8I8/7w8,8.488?8|1j0P1x0#0l938f8n7`2R0N0G8B9s1:731h0l0p2$1:0S9i1x0H6~7?7U0J1k9x8H9A909n0?8w2m0N0o0N1:2o0l1h0;4v2e8H8l830D801j2p0D2R0Y0l0j0S0l7#9y2d8C3|0m9B8v8x8z1x8C8l8_1j0i8B2K828d9o8h1:2O8o990o0i9%8^0l2R0m0i0K0k8B8Dan0+8+4~7:1J3j2=8K1(1`1)2s8(2x2o2q122D0q0N0Z108H0w0k281j3:427V3445866z4c4e8w6 4k4ma+4r5)4v4x6q4B7g5Y7i1279a^7W8)5z5 7aa_4G124Y8%b35J5L4+b2a~4.7;3t6.6;8(5J0i8f8Z6u6x6Za%3x0M4e9+6`4D8(780H7kbr5!5jb7a~5J8T3t8V5r5t6Y8Ubr5Jb05Ba}4-62a.4%6CbbbT3W4H6b5^bh6dbC125#8ZbH6M5-bI2XbK6QbM8$bq6=bQ1y5Aa+5Gbc8Q5/c2b#5Qbf5U6:bib812bla@bxb3c1b!4qa:7ec4cj695bbF52548Z0(0N120R0Z1xbB6=7n0.7qb`bO77bVc5ck040^5Ncr5fb,bEb{bj12cNbnb_b.cdbmcP7m5?6jcTcccM1/bn126wcZ6B4)bZcgbd5Q4Zb@0}0N0s12037{a80Zaa1k9YahcO6-1Aa$1N3=7F407U0Va80N9Z2Nbv810m9.2R9l2|9o2I0gaq7|0l0+0P3z1t2o9(0 8oat960t0+aV84861S2T0Y7%0k0c0vbA9e437:4n9I3 2?4j8LaF8ObraJ2z2BaNaPaR2EaU0GaW67aY3(a!5Da$cCa)c)c^3w5td!co3a4s6na;4y4Ac0a{bW8*b cK69b6c*bGbXc?d9e3c6044/cBcU04cec.04bpcHbjbt04dPbw5DcI4IdW6-5Vb+5hcSeCc+b=5_br8#c;bRee0463ej5mbaeqeIbyc77keNe0eP5$c$4_eacm6re=bL5?cGbJbP5}eie76*e!egeTbrb$c813cacba~6he2e~b|cl8ScneRa~6uc:e`6Ae(eZf94=brc~d00l8F8@9S9+9Ve)c9fbe.eweye$f3e#f27u8Rb;fke*chc`fp6WctfV01cvcxczfEfafc3wcD7p7rb.eEaheZa|ercLfJfN8!129Hf_5JdScffSc_eKeL3i14dX2Yd{df0i7@040b0l0%0K0B1j0?7.9a487ocF0lcedR0udTdVdb8/0l8maoaq0D9w0`dl9C981:194v0l820K0M0A0.830gfy0k73gm8_d(aE8NaHc+eG0ef 8-869;9Ka08y2T1x831jdka5d2a9do0l4S0l0t0K2A9~amgAardI1:0Zaw7x8H0zgW87f,1kah0vgrf dVdWdc1Q3?0.0:0=04.