Des règles et des lettres

On se donne une chaine de caractères appelée motif ainsi qu'un ensemble de règles du type "Si le caractère lu est un a , remplace-le par ab".

L'ensemble de ces règles est stocké dans un dictionnaire Python dans lequel :

  • une clĂ© est un caractère lu,
  • et la valeur associĂ©e est une chaine de caractères par laquelle le caractère doit ĂŞtre remplacĂ©.

Si le caractère lu ne fait pas partie des clés du dictionnaire, il n'est associé à aucune règle et est donc recopié à l'identique.

Exemple

On prend pour règles {'a': 'ab', 'b': 'ac', 'c': 'd'}.

On prend pour motif de départ 'a'.

Après une transformation on obtient 'ab'.

Il est aussi possible d'effectuer cette transformation plusieurs fois de suite en l'appliquant à chaque étape au résultat de l'étape précédente.

Exemple

On garde pour règles {'a': 'ab', 'b': 'ac', 'c': 'd'}.

On prend pour encore motif de départ 'a'.

Après une transformation on obtient 'ab'.

Après deux transformations on obtient 'abac'.

Après trois transformations on obtient 'abacabd'.

Vous devez écrire deux fonctions Python :

  • transformation(motif, regles) prend en argument un motif initial (une chaine de caractères) ainsi qu'un ensemble de règles (un dictionnaire) et renvoie la chaine obtenue après une transformation.

  • n_transformations(motif, regles, n) prend en argument un motif initial (une chaine de caractères), un ensemble de règles (un dictionnaire) ainsi qu'un entier n et renvoie le rĂ©sultat obtenu après n transformations.

Exemples
Python
>>> regles = {"a": "ab", "b": "ac", "c": "d"}
>>> motif = "a"
>>> transformation(motif, regles)
'ab'
>>> n_transformations(motif, regles, 2)
'abac'
>>> n_transformations(motif, regles, 3)
'abacabd'
>>> motif = "abc"
>>> transformation(motif, regles)
'abacd'
>>> n_transformations(motif, regles, 3)
'abacabdabacdd'
>>> motif = "ddddd"
>>> n_transformations("ddddd", regles, 50)
'ddddd'
###(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 : 5/5
.128013it3a;dv,n2S5wbcy+14q: f-up08)_9eklohrP=[s6(]/mg7050g0G0c0e0b0I0P0w0p0I0e0P0P0N010c0b0A010406050P0z0U0U0e0L0q040l0J0I0z0;0J0j050T0{0}0 110_0A04051h1a1k0T1h0_0g0b0h0)0+0-0/0+0j0V0z0e0V0G0y0A0q0c0K180w0K0b0V0K0I1M0K0c0@050!0o0I0G1t0,0.011L1N1P1N0c1V1X1T0c0L1i1H0)140P0A0e0j0/0k011Z1v010x0$0G0j0e0U0G1T1^1`1 1#221X25270@0a0w0M0L0J0A0J0P0b170j0w0Y1?0L0L0G0p2s1a2a0j1i0T1H2F1/1;1:1U0g2c1w0b0j242p1T1q1s0*1!2P2R0j0J2V1T0A2y1i2D2F2,0`1_2t2X202#0L0~0I1T0e1K2y0x0/030E0E0p2$0G1P2!0J0y0s3a0@0w0s1a0e2-2:0^2/2b2=1#2@2_2{2}0G2 01313335372S3a0y1}040w0k3g3i1`3k2D2O013p0e2`1i2|0K2~3032340Y3z2#3B0d3d0d3H2C3j0_3L3n0/3O3Q053S3U3v3W3y2Q3A3b0t3d0t3)1b3+3l2;1u3o0J2^3P3r3T3t3V3x3Y3{3!3b0m3d0m412,3,2:3M3:4b3@3w3X364h393b0Q3d0Q4n433-463/483q3R3s3u4v3`383B0W3d0W4E3J4p3m4H3N4J4a4L4c4N3_4g4Q3b0C3d0C4V2E4X452Y4!493;3?4d3^4f4x4,0y0F3d0F4;3K4q3.4_4K3=4M4e4w3Z4z3a0B0@0s0B564?4r4#4{5d4~5f4y3B0s0s5k3f0T3h3*4W445p4`4t4}4O4+3|3a3D0s3G5B3I4=5F594s4%4u4*505M0s3$045$5n5U4Z5W5c4(5e4P5#3~5(405R5D2E1l2*1a2V2I0g1;2N594w2U1r1i2)0G2+3j5`1i4w6b2b0b0g0/322D5w3r6i6k4 5g6n0w2g0G6q5u515y2F5C4G4^0H0@0Y0x6d5+4^0n3d6J6D2?0x0@1/1`0P0x4#2B423J6K200?040R6O585,0@0U0J0;6I6Z5{6P1#6%0i6d0w6#3o0@2y0V1X0P6*4Y4^6%0D0v6d0_6=6g2t6p016l2:3B3D5c7f5Z6s3b1}6u266w7g6r5v7p1T5R0w7A6|6@3/6 0G0{0I0!0c6{6}0/0J0@0N7L7D010P3D020u0z6/0f7W7Y0c0f7a747e6j7u6m3b5%7l7,7n7w0y3$7r276x5;4i7^7y3h7B7C6+6E0@6W0L7R842?0@0p0 0e2A0G2y8975200J6M042Q8j4@8b046.6:7*3M6%797c7b2.3L7m0E7.0y5?7;7|5L7~3~7`7t7?518I7z827B7M016F8o6;2,838k6~048d0L8f0c8h0G8q3M8m0@8p7c8$8r8(70728w598y7)7c5F8E8G4k4L8E6y5M4k8O8K5!7~963H8U9i8_4r7F7H7J8:597O040r7Q8^8W0j7F717G8~4Z6%0O9B4^9x8)8e8g8i927S6%0S918C4q947i4A6o7=7v514B9c7u997~4B6B3E9j8W8Y360P8/9M8a6^0@8z4o8w9T1`4R9W9d7o0y4S9#8Q5M4S9*9j8U9w9m0z7I0e7K9v7S9r9t9p6,9I8+9K9;9`9=6h9X8G4.979X9%5h4.a49Y5Maw9h8V7S8Y2y0c0z0L19ah9?7E042y9naf9Q6c8Dau9U529 9$7}5h53aCaz3B539*8BaX9SaZ9}3b5la$a57~a_a+a(5w5ja/9{a?0j5w6A8Ja%8L5h5x1~6va07@bc9*9-6G3t9F208n6|as8`3/6R040j0E6T0j6V6X0b1873bq8x0@6)bE5V6-6/0b8!a;8%0/6_al9G9y8}bI9C0@6`aPbP3N0@aO9Rb#779_43bE9|b5a^7k2|98a b;bd7sbf6z7k8T7Abj0487bS8s0Ec41#8=8ob(3j9k5V0o6 1`1Cbm9@6(cjaRcb6!9N0@78aWcpa=6q8G5$a`aDa|7_beb99ebb7:b aa7S9H8ubMc77N7PcOb$04bxbz496Yb)br016%bHcY9l8tbLbNcub*bYcR9H8|9AbW76crct6?cv7-a!0s8Ib?ayb^3a8NcDa{bb8S81aHaQ8X7FaLaNc/bK8v8A6J0T6f5|6a5~671a0c61dr2L2G0e1Wdo0T5 7b0Y0!0$0P04.

source Codex