Aller au contenu

Des règles et des lettres

Le cadre

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, règles) 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.

  • poly_transformation(motif, règles, 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
>>> règles = {"a": "ab", "b": "ac", "c": "d"}
>>> motif = "a"
>>> transformation(motif, règles)
'ab'
>>> poly_transformation(motif, règles, 2)
'abac'
>>> poly_transformation(motif, règles, 3)
'abacabd'
>>> motif = "abc"
>>> transformation(motif, règles)
'abacd'
>>> poly_transformation(motif, règles, 3)
'abacabdabacdd'
>>> motif = "ddddd"
>>> poly_transformation("ddddd", règles, 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 : /
.128013x/.r;nbOylae%êu)dM63Am(P+02è-],59fq!7B8 _o=pcwgv41kRéhtsSLC[ji:E050r0m0%0l0.0k0(0O0T0k0l0(0(0R010%0.0S010406050(0p0w0w0l0e0j040)0Q0k0p140Q0g0O020l0w0S0f0O0!0m1e0e0J0p0m0(050c1b1d1f1h190S04051M1F1P0c1M190r0.0W0|0~10120$0.0V0$0k1%0$0%17050@0h0k0m1Y0 11011$1(1*1(0%1:1=1.0%0e1N0%0$1@1!010I0_0m0g1s0m010|1k0(0S0l0g120B1.2k2m281_2b1=2e0w2g040a0O0y0e0Q0S0Q0(0.1n1p0=2i0e0e0m0T2K1F2r0g1N0c262W2325241/0r2t121*0g2d2H1.1V1X0}1^2*0.2,0g0Q2:1.0S2P1N2U2W311a2l1p2=292`0e1e0k170O0Y2T3518342s371_393b3d0B3g2m3i2U2)013n0l3c040O0u3r2V193u3l123x3z0O0X3D3t353v3J3d0G3N3F3P3H3w0Q3a3y3d0t3U3j361Z3m3Z3o3A0L3(3G3+3I3-3#3A0N3;3W3?3Y3!3K0H3|3k3~3R040Y0A433*2?3 3.0Y3f1G3h3V444c460Y3q4h3s4j4b383^3z0Y3C4p3E3)3Q4u170Y3M4y2W2~0m2W2:2Z0r252(3X0T2{2z0;1W1N4I303h3N054R0=4Y4k290Z170=0I4!3=4c0U3d4/3}4l0I17232m0(0I3^2S4G4A3X16040x4@4)3m170w0Q144.524:29550F3N0O5345170e0C0V1=1E5g4^5i170q0/3U0O5C5m5h5a040e0#1b0k0@0%5l5n4c0Q170R5O5F120(2p0401015B5D5P4*174 0e5U5w5G0T1f0l2R0C2P5-59120Q4=042^5_4s5G5c5e586112555A4G065D6c5E5.124+5~5f316e5`3w175:0e5=0%5@0m603v5|175 4G6l666n5H5r5t653v685$6d6d5(5G5I5K5M6v3X5R040z5T6A6N3I5p6F1D6H54170,6(5o046p6r6t6,4c550E6K6M5V016h0m0`6u5v6m6J6a6L6L6Z6D6P0p5L0l5N6Y6{6U6W6S6-6/5?5^745%6{6h2P0%0p0e0g7i4l5p5J7a6R6a064r3v6h4-6=295}5m716C0g4`042G0k0j0P4|0g4~500.1o7I1_55577M3Q5b5d0.6j4Z6{5j7w386#5s6%7)6)045k7e6f6D7v7`3~555z6_776h5+7=5G0P8a5{5}6z6k770g0h5p2m0V70337:177(8p7 0g17818t725y69316b758i7+647~6m6U6X8h6{8v047V7X3!518y6C7%7#6!04637-8X017;8I7N7@6G826?5y867p5p0?7t8x3h6B7*8Z7,7.4q1F4$4J1Q2 1F4L1F0%4N972$2X0l1;920c4L1L4(6C2P0w0P0I0l0Z0m0P0$0u171x1z1B1D0O8B4Z1S3i1M0*1?2~0Q1;0C2y0O0(000l0S2l2P0g0%1?0l0p0b5m0l0O0$2P0I1#1 0S0(0/0c0c0I0e0d0U0.0Z150m1V0l0d3Z0V0c9@9_0c0*0D0)0j0(0%0n0+0u0n0v0N2y1.1y04a50(a86s2y5uaj1F0l3A2^0W2d0%5J0O2d3e0H0t0N0O9S0O1=0O0h7Z0k0Q0V0.a91?0v0eaQ142(0*2^0=0g1e0j0m0e0O0l2b2L1?0r0#0TaU2PaIa.0#awaN9R1yax0O0r000o239z0W1W2m0%0(0d1Q3i0=0@0_0{3X0r8ma(173F1c1z1h0)0%0jaJ4 0g2R7Z0g2,0k2Tbn1J9E040i1p1m0_aQ701T057a3i1*040k002F0#6q9V7t0O9V7u0^a?0/5m913v1{1)1+1-9j8{0b8d6|6y8~2V8`3X8O4R0g1V8T8_87176~0(8oc28N170j4!0c912WbQ19bQ0~0O0w0#264Sb)4S040-0Q6zce1Fcg1FbO1U1Wb+1+1}1,2q7 2v2d2f172B0)a;150%2C0jcn8^3s1O943352cv8;047H8-7J4?c(3m7P8Q5+1ec1cV8q568$8O8!b_b:7{7}8M8u8+7_8U6I8A8:d05H7z7bb8b?8Kb?550,6^7n5Cc304898)8{7k6s7mc 8J8fcUb`8F8|8Hd37{9B4q75b{6-79da5udA3~6Ubac+8Y9Q0S2d0r8$8WdO786$dJ7/7 dfc^6o5;7lc7c=d#17dhds6C6h8#dn7{8sd!6mb}d)dqd+dw7fdub?8O5q7^dZd,8z040qb?6}6 e3d(6qd*dU8/didF4c7q8?7ub?5X175!8$dMd%crctdvc|838rexdH5Me72V77843(cdcq939f9h1O040:1p3y0~9Ua*0paK0Q1ma 1?cja/1z0T0$1?1o0O9J14dS6q2J0O0p36co05ajbubw1obz1FajaAbH2,aI1%f769bM2:cC1|b.cG6mcI2x2zcMcO0ScQ0ycS0$7!524X3)324Zc!7 7G0mc{777Kc^c-6q7Wc/7cbxejc@dWc_8}fNc~c8d7e58,dK8.eadC3E6cdk7r8@er5YeudWewfP17cs8gd`8V8rd_e88*6Ee6fN6+f:6.d}6;dW6@ecb^deeDg1dpg4d:6we2d@dGdYfNebghenc4eegm7?g2ehd~g7dl3Zefgs6:drfUdt6yeAemgrc`gkgl8C90eN1S949g4V9i0*002^ay0eb2aGaUbv153y0Ocmb70O9ya@2i2M1DcQ0m0ba:1m0#a*aw0Te%0{e 2K0{a:aU9V0{aB0+aAcQ2`a-0{0he#0}9zfqcTg+0p0.9N1ocQ0S1l0{2wh40O0K0O0+00g:a 1og|e`aA0ba(0T0.0Ta.9Ha(fKbve.eZ0S0#bi0VaO0.9ydNbM9g0?0^0`3ih!beh%cA2;3~0l0r5c0g2Jbxe!0g0p0(bl1O3vh/h;h?1o0D140%21040M1oh`bb9i2D2F2Ha(e_f7aw0e2Ie/0lg{cp4%f=81ceaGe#a)a_2Jig5t2ibv7c0#2eh00O5IhRay9z2Me,0^2,0{iMg32Pb9ib4Uh-4ch 1oi11p2^4 h|0Sh~h:i!2Ki32Ji60scmfs2M4#cqirgM4%iV9F9#clcni^cei{eM4%iH2d0Wct1?hD4R0k0~8na 00e`e(aVhK0|0$iOiL1?gciTf5e_141*0(g*hD0(0#9S7c0mbY0rf10#hYbccB3Xb,cEb/77fjcK2Ahw1o0(1k1?hhfseAcW92cY33fz6m0V55020V0%0fj:j=j@1v8$es5Z0O0z0O5#f.17dNfYgrj5k57$8rg0k85Wf,48k1kc8%17fT3sgG1_j|010B0Akgf@d47|f+et0ukrfN0EgK4i77hU170048j~0OkqkJky00eLcvgOePgR95kTgQ0W04.