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.128073snTc)êwuqAûlI3 j(è;ébokp/h1tà,[aRPmy7!]f4OL_26eviSg:5=N.dr050*0W0D0H0Y0n0c0q0f0n0H0c0c0%010D0Y0z010406050c0j0K0K0H0+0L040Z0x0n0j0 0x0d0q020H0K0z0u0q0I0W190+0k0j0W0c050A16181a1c140z041A1H051K0A1K1M1H140*0Y0X0@0_0{0}0B0Y0!0B0n1!0B0D12050/0w0n0W1V0`0|011Z1#1%1#0D1-1/1+0D0w0x0*1c1,0+1I0D0B0@1f0c0z0H0d0}0U011;1X010P0;0W0d1n0W1+2c2e2j1?2m1/2p0K2r040a0q0J0+0x0z0x0c0Y1i1k0-2a0+0+0W0f2M1A2t0d1I0A282Y0D2625270*2v0}1%0d2o2J1+1S1U0^1=2,0Y2.0d221T1+0z2R1I2W2Y33152d1k2@2k2|0+190n120C2V3713362u391?3b3d120U3h2e3j2W2+013o0H3e040p3s2X143v3m0}3y3A0Q3D3u373w3J120$3M3F3O3H3x0x3c3z120V3T3k381W3n3Y3p040M3M1J311A2=2#0*2)3w0f222B0,1T1I300W323i3:3|0-443l3*0}0y120-0P3:3G4b010i120q4h3V4j0d0P121n0Y0c0T0*0T4u1z1B454i2^0111040s4o4a4F0d122R0c0W0H0j4K3)4F4H0F3M4n4E3a122A0K0w2R4U3w4H0g0#3T0q4=4!4p4M4O1y0j0n0/0D4Z3(3w0x120%504#1?4H0G0O4;4?513W4d040P3Y564^4$044u5k4L2k0x4l042`5p4V5m4P4R4T4C3t5e4j594,3W4N044(4*0W5H5F120O4:5C3E4?5V4@5q1?5g5i0+5w3P4t0K0Y4x0W4z5*5%3W5s125v5T045X5x3n4`4Q4S5O4W120G605m5o5^5E61045R5c5W5W682k5g0Y4g5^5`5(5n5*5,5.0Y5:4j53040N556k6f5|5K1t5M6s4F5=5n0d0*6E656o0-6q6K1?6G2|4 6y570}6G5@336l5I5}4|4~6458125S33066d6/5d6V3x6$4}0H6T356=6u0)6)3I4t0z0z2o6J676=4H4J765l6A4u6p666{7b0}4.6c6!4j5g2R0D0j0+0d6P70044P6%6_3%0A47433;7C0A3@1A0D3_7H2%2Z21232#0H1.7E3@1G495{0}2R0K0T0P0H0y5-0B0p121s1u1w1y0q6,451N3j1H0S0H2a0d0c2$0j2T0Y1j0q2O057B7v4{6^6T860q0c0x0j0?5#2A83000j2.0q1%7}1:1n0t8m0E0q0W0P0P2S7p0W0+8n1:0D1y0D4n7B3w1^1$1(1*7V6m7d6N7f3i7l6F5t6S7t016X7s6U7h6?8716893:7A3}5_1w0Y8v7}831:3|0m8H2-0v0:2R0q0s0z1g0?0_8n4v8F8I8/7w8,8.488?8|1j0!1x0F0q938f8n7`2R0f0B8B9s1:731h0q0h2$1:0n9i1x0g6~7?7U0R1k9x8H9A909n0?8w2m0f0H0f1:2o0q1h0;4v2e8H8l830Y801j2p0Y2R0)0q0o0n0q7#9y2d8C3|0d9B8v8x8z1x8C8l8_1j0X8B2K828d9o8h1:2O8o990H0X9%8^0q2R0d0X0x0L8B8Dan0v8+4~7:1J3j2=8K1(1`1)2s8(2x2o2q122D0Z0f0+108H0J0L281j3:427V3445866z4c4e8w6 4k4ma+4r5)4v4x6q4B7g5Y7i1279a^7W8)5z5 7aa_4G124Y8%b35J5L4+b2a~4.7;3t6.6;8(5J0X8f8Z6u6x6Za%3x0w4e9+6`4D8(780g7kbr5!5jb7a~5J8T3t8V5r5t6Y8Ubr5Jb05Ba}4-62a.4%6CbbbT3W4H6b5^bh6dbC125#8ZbH6M5-bI2XbK6QbM8$bq6=bQ1y5Aa+5Gbc8Q5/c2b#5Qbf5U6:bib812bla@bxb3c1b!4qa:7ec4cj695bbF52548Z0y0f120e0+1xbB6=7n0.7qb`bO77bVc5ck040^5Ncr5fb,bEb{bj12cNbnb_b.cdbmcP7m5?6jcTcccM1/bn126wcZ6B4)bZcgbd5Q4Zb@0}0f0C12037{a80+aa1k9YahcO6-1Aa$1N3=7F407U0la80f9Z2Nbv810d9.2R9l2|9o2I0jaq7|0q0v0!3z1t2o9(0 8oat960K0vaV84861S2T0)7%0L0c0sbA9e437:4n9I3 2?4j8LaF8ObraJ2z2BaNaPaR2EaU0BaW67aY3(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~d00q8F8@9S9+9Ve)c9fbe.eweye$f3e#f27u8Rb;fke*chc`fp6WctfV01cvcxczfEfafc3wcD7p7rb.eEaheZa|ercLfJfN8!129Hf_5JdScffSc_eKeL3i14dX2Yd{df0X7@040b0q0(0x0D1j0?7.9a487ocF0qcedR0WdTdVdb8/0q8maoaq0Y9w0`dl9C981:194v0q820x0w0r0.830jfy0L73gm8_d(aE8NaHc+eG0Tf 8-869;9Ka08y2T1x831jdka5d2a9do0q4S0q0K0x2A9~amgAardI1:0+aw7x8H0#gW87f,1kah0sgrf dVdWdc1Q3?0.0:0=04.