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
.128073.1280133ytbIqO)N4ê_7uûj:ks(ar5.lRLàv21mép;=cASi,6fdg[!he P]èTow/n050T0Y0e0w0P0A0u0Z0M0A0w0u0u0L010e0P0J010406050u0p0H0H0w0x0d040O0(0A0p0 0(0+0Z020w0H0J0K0Z0B0Y190x0h0p0Y0u050*16181a1c140J041A1H051K0*1K1M1H140T0P0E0@0_0{0}0X0P0U0X0A1!0X0e12050/0f0A0Y1V0`0|011Z1#1%1#0e1-1/1+0e0f0(0T1c1,0x1I0e0X0@1f0u0J0w0+0}0F011;1X010S0;0Y0+1n0Y1+2c2e2j1?2m1/2p0H2r040b0Z0!0x0(0J0(0u0P1i1k0-2a0x0x0Y0M2M1A2t0+1I0*282Y0e2625270T2v0}1%0+2o2J1+1S1U0^1=2,0P2.0+221T1+0J2R1I2W2Y33152d1k2@2k2|0x190A120G2V3713362u391?3b3d120F3h2e3j2W2+013o0w3e040c3s2X143v3m0}3y3A0l3D3u373w3J120y3M3F3O3H3x0(3c3z120R3T3k381W3n3Y3p040o3M1J311A2=2#0T2)3w0M222B0,1T1I300Y323i3:3|0-443l3*0}0t120-0S3:3G4b010)120Z4h3V4j0+0S121n0P0u0n0T0n4u1z1B454i2^0111040v4o4a4F0+122R0u0Y0w0p4K3)4F4H0Q3M4n4E3a122A0H0f2R4U3w4H0j0s3T0Z4=4!4p4M4O1y0p0A0/0e4Z3(3w0(120L504#1?4H0V0#4;4?513W4d040S3Y564^4$044u5k4L2k0(4l042`5p4V5m4P4R4T4C3t5e4j594,3W4N044(4*0Y5H5F120#4:5C3E4?5V4@5q1?5g5i0x5w3P4t0H0P4x0Y4z5*5%3W5s125v5T045X5x3n4`4Q4S5O4W120V605m5o5^5E61045R5c5W5W682k5g0P4g5^5`5(5n5*5,5.0P5:4j53040W556k6f5|5K1t5M6s4F5=5n0+0T6E656o0-6q6K1?6G2|4 6y570}6G5@336l5I5}4|4~6458125S33066d6/5d6V3x6$4}0w6T356=6u0z6)3I4t0J0J2o6J676=4H4J765l6A4u6p666{7b0}4.6c6!4j5g2R0e0p0x0+6P70044P6%6_3%0*47433;7C0*3@1A0e3_7H2%2Z21232#0w1.7E3@1G495{0}2R0H0n0S0w0t5-0X0c121s1u1w1y0Z6,451N3j1H0C0w2a0+0u2$0p2T0P1j0Z2O057B7v4{6^6T860Z0u0(0p0?5#2A83000p2.0Z1%7}1:1n0$8m0D0Z0Y0S0S2S7p0Y0x8n1:0e1y0e4n7B3w1^1$1(1*7V6m7d6N7f3i7l6F5t6S7t016X7s6U7h6?8716893:7A3}5_1w0P8v7}831:3|0q8H2-0I0:2R0Z0v0J1g0?0_8n4v8F8I8/7w8,8.488?8|1j0U1x0Q0Z938f8n7`2R0M0X8B9s1:731h0Z0m2$1:0A9i1x0j6~7?7U0i1k9x8H9A909n0?8w2m0M0w0M1:2o0Z1h0;4v2e8H8l830P801j2p0P2R0z0Z0g0A0Z7#9y2d8C3|0+9B8v8x8z1x8C8l8_1j0E8B2K828d9o8h1:2O8o990w0E9%8^0Z2R0+0E0(0d8B8Dan0I8+4~7:1J3j2=8K1(1`1)2s8(2x2o2q122D0O0M0x108H0!0d281j3:427V3445866z4c4e8w6 4k4ma+4r5)4v4x6q4B7g5Y7i1279a^7W8)5z5 7aa_4G124Y8%b35J5L4+b2a~4.7;3t6.6;8(5J0E8f8Z6u6x6Za%3x0f4e9+6`4D8(780j7kbr5!5jb7a~5J8T3t8V5r5t6Y8Ubr5Jb05Ba}4-62a.4%6CbbbT3W4H6b5^bh6dbC125#8ZbH6M5-bI2XbK6QbM8$bq6=bQ1y5Aa+5Gbc8Q5/c2b#5Qbf5U6:bib812bla@bxb3c1b!4qa:7ec4cj695bbF52548Z0t0M120%0x1xbB6=7n0.7qb`bO77bVc5ck040^5Ncr5fb,bEb{bj12cNbnb_b.cdbmcP7m5?6jcTcccM1/bn126wcZ6B4)bZcgbd5Q4Zb@0}0M0G12037{a80xaa1k9YahcO6-1Aa$1N3=7F407U0Na80M9Z2Nbv810+9.2R9l2|9o2I0paq7|0Z0I0U3z1t2o9(0 8oat960H0IaV84861S2T0z7%0d0u0vbA9e437:4n9I3 2?4j8LaF8ObraJ2z2BaNaPaR2EaU0XaW67aY3(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~d00Z8F8@9S9+9Ve)c9fbe.eweye$f3e#f27u8Rb;fke*chc`fp6WctfV01cvcxczfEfafc3wcD7p7rb.eEaheZa|ercLfJfN8!129Hf_5JdScffSc_eKeL3i14dX2Yd{df0E7@040a0Z0k0(0e1j0?7.9a487ocF0ZcedR0YdTdVdb8/0Z8maoaq0P9w0`dl9C981:194v0Z820(0f0r0.830pfy0d73gm8_d(aE8NaHc+eG0nf 8-869;9Ka08y2T1x831jdka5d2a9do0Z4S0Z0H0(2A9~amgAardI1:0xaw7x8H0sgW87f,1kah0vgrf dVdWdc1Q3?0.0:0=04.