facile
Compression RLE
Certains formats de fichiers informatiques utilisent la compression Run-Length Encoding .
Le principe est de remplacer les suites de valeurs identiques par des couples (valeur, répétition).
On propose ci-dessous un exemple d'application à un fichier texte :
Exemple
>>> compression_RLE ( "aabbbbcaa" )
"2a4b1c2a"
Le code "2a4b1c2a" signifie que la chaîne "aabbbbcaa" comporte dans cet ordre :
deux "a" ;
quatre "b" ;
un "c" ;
deux "a" .
On garantit que le texte proposé est non-vide.
Remarques
Cette méthode de compression est particulièrement efficace dans le cas d'un texte comportant de nombreuses répétitions.
Par exemple, le texte "aaaa...a" comportant 10 000 fois le caractère "a" sera compressé en "10000a" . On passe ainsi de 10 000 caractères à 6 !
À l'inverse, si le texte comporte beaucoup de caractères uniques, la compression n'est pas avantageuse : "abcd" devient "1a1b1c1d" et la taille a doublé !
Afin de simplifier la démarche, on ne considérera que des chaînes de caractères ne comportant aucun chiffre. Ainsi, toutes les chaînes étudiées ne comporteront que des lettres ou de la ponctuation.
Afin de calculer la compression d'une chaîne de caractères par cette méthode, on doit la parcourir en comptant le nombre de répétitions de chaque caractère lu. Lorsque l'on change de caractère, on complète la chaîne compressée.
Exemples
>>> compression_RLE ( "aabbbbcaa" )
'2a4b1c2a'
>>> compression_RLE ( "aa aa." )
'2a1 2a1.'
>>> compression_RLE ( "a" * 1000 )
'1000a'
>>> compression_RLE ( "aA" )
'1a1A'
Vous devez écrire la fonction compression(texte) décrite.
Coup de pouce
Python ne supporte pas « l'addition » d'un entier et d'un caractère. On pourra utiliser la méthode suivante :
🐍 Console Python >>> str ( 5 ) + "a"
'5a'
.128013:Lp(40îed3; 1Ejo5_ên)h]6,qc[yuvà8i2+xms7=ûwlSIatf9ORrg.éPkbè/050j0i0W0V0I0S0N0m0B0S0V0N0N0P010W0I0d010406050N0E0M0M0V0#0D040T0q0S0E110q0u0m020V0M0d0l0m0!0i1b0#0A0E0i0N050-181a1c1e160d041C1J051M0-1M1O1J160j0I0F0_0{0}0 0w0I0$0w0S1$0w0W14050;0+0S0i1X0|0~011#1%1)1%0W1/1;1-0W0+0q0j1e1.0#1K0W0w0_1h0N0d0V0u0 0J011?1Z010X0?0i0u1p0i1-2e2g2l1^2o1;2r0M2t040a0m0)0#0q0d0q0N0I1k1m0/2c0#0#0i0B2O1C2v0u1K0-2a2!0W2827290j2x0 1)0u2q2L1-1U1W0`1@2.0I2:0u241V1-0d2T1K2Y2!35172f1m2_2m2~0#1b0S140m0n2X3915382w3b1^3d3f3h0J3k2g3m2Y2-013r0V3g040m0k3v2Z163y3p0 3B3D0m0f3H3x393z3N3h0r3R3J3T3L3A0q3e3C3h0y3Y3n3a1Y3q3%3s3E0O3,3K3/3M3;3)3E0H3^3!3`3$3(3O0Y403o423V040n0g473.2`433=0n3j1D3l3Z484g4a0n3u4l3w4n4f3c3|3D0n3G4t3I3-3U4y140n3Q4C3S4o4x444H3X4K4v4F4O4b3+4R4E3#4q3@4K1L331C2@2%0j2+3z0B242D0.1V1K320i343l3R054/0/4`4M1^0*140/0X4|3_4g0R3h57414p0X144/1q2T0}0I1l0s0!0c0o5c510 13040e5r4w3q140W0i0L5B5x3z5u0v0b3Y0m5L0m4Y495A5C5B0s5h4^0}0i3R5N582m0q140P5Y5O4g0N2j0401013Y065M5Z5d3c5g1c0V2V0i2T0s2T0d0:5X4K5@5s015$045(655*5_045B5D64375!1^5u0C5F3#0M0I144d4$6k5t140x5K5M6d5z040u0+600i62112O1B6c6v685%5)6N6q6s5;5?6B0 53040X3%6Q5^6C0B5{5}2T6$670q5a042|6-5y3M5Q6h6o425u5J4R5?6V6N6Y0I566M6%6^046)0#5|5B6,766.5%6b35666@3A5`7b6+0i6G6I6i4{6N6}6z70706W7m6D6F610:2N5l0u6L7j7A690K7i3l7k3z6S4b7x7z72140i0@7t3w7A7w6 7y7V777B6g5S5U5j0N7!2Z7Q3#7M7O3w7@490+140N2(6{4g5u5w6u7+0u146E7r7F6K822m5H6?3z7M8h4Z7n7c5~7q7E5E7(7)6A6N88796*7d8p6H638k42697`7?7A8w7a8n7e355=8t8u87897D8B6J7H7J7P7L6P7f7l7S4k8N8O5L8I6_7.0q5i1A7;8D4g7_8?3c7~04800#8e6l14856j8R7C8b8V1l8X7#7v140v8_1^8j8#3U8m7p967=158*7|4g6Y2T0W0E0#0u9e787-7q7/8;9m160-4~4_4%9H0-4*1C0W4,9M2)2#23252%0V1:9J4*1I507l2T0M0s0X0V0*7q0w0k141u1w1y1A0m6~371P3m1J0Z3a0#0(1=0{0m0F1c0I9V1;5N9G6f5R9A8/5V8=9F4:3E0/802|a00m0G2c0u5B0u0I0#0ma20B0w0V0h2:0m2Q8K2V0,5j2c8:0}a00%1L9{040U0S0m9)1j0m2q182N1=2|7G3C0I7;ava80j0(5U5B0%2G0q9u0_7Y0V0m1l0_9 1=0/0E0La3a5a79?6~1S050E0S3m1)1KaaaF8z9l1Caaaq112q0j7baw1=bfaH1=9=awa_6!0u2V7HaW80aW1m2(0=2Pbqae7da:9}aw00a#11a%7;0m0V0F2Ubp0m4^6q5~0_8ybsaD0E0m9z0m0l1Cbc16bc4}ai8a8q7G98biaibk0Ibmboa82~0M0+2TaDbqb%aI0I0/ar0I9=0^4/7Ia-1j740NaN0-b:1Cb9aPbMa,0+1j1=aX0EaZ0m0E1m2f0#4/9u0^2Q0S00aX1v9Wb)b+aca:0)a=avay0Vbub?4 bf8ob|4 0za`1mbS0/1b0u2Q0NbOaS1A0W0m0(0$3Caoa9aic#5 8q64bjb63mcrb;0I8|0Ia`czc)a{2|0B9 2Car1=cZ4_b^8Ub`7Ic%4_0zb/d9d8da0m2~0ude1m0V0pa=5BcB1m2~0EbV0Vb*cG0da8dN0m9 180S0;c^5w9G3z1`1(1*1,9!9iab6h5Tae7:9m9p5#147N9x3A8{8}8 6w5vd}7Bdo6Idq992Z7$9cd_9g7K8v9jbgd24|ah4 0vaWc^a{9 bPa61)bS1;0^a40#a69W0^dm8x7oee8Ud3b}0:c~4 e28c8Wds04cncp0-d71N040o1m2obHbY1ccG0#0Nc)a8dPe(3%5j2Kc/2gc^dS0/9vb cVc91=0u00a_2f0^0(0W0(bTdF1jf20bc*bNdEdG1=0w3%cIa1a_230E0`0icnb71JeUc7e?b#1)0ib*em2q0F0qb bv0_azaBbIaK0NaMaO9Z051v049:1cbu6~fMfBch6)f12r2Oc7fCaA2:ffb$eBbseyd!3#d$1|1+2u94cW2|d;8Z04d^9h8l6Da=dM0Eegbj62aV0t2(bI0Q5B0EbS2q2G0D2aa{0e0jb*9)2NfZax9 0VfY0j00cCe`f 7Ye(fDaCaEe_0N0vbLcDfuc^ckeqfsa_0Mf0fd2Qdmd#1*f/d)8Id{81867geNe08wdF6=4$eh4_0m1ydb623eeGgs0(0FaZcVa~0(0N0V0$di2q0WfmaPaRaTdNe:0Sfea|a0avguawa(dHaEa=dQ9?eze)1AeMc}2Tg hjb#0j2g0^axgzfFafang=a19?01g(c/2T2kgdes0mfHcEe/eYhdaCcWfEa3cbdlf,42f.d(f;675,145/e069cn9367g%fz9wgZ7l84g$5ghjese08gg*aah31T1VgS1{h$d*3#2z2q2s142F0Tdh12c^0)gffdh?374^9!364{aa7A6Y55e06:5Nh@3U5f79d/8;7H5n5ph~91h`d,8rh/h^9c9^4m71f=h|hof|8E8!eb7+6m6y4R9o8,eA8L8A7se9iY8YeciL9me7046niz6p6r046tiN5G6x7Ui)eJ97driW8@i/7{7A7Si~4mi(7W6Z6#j76ed0f^6N6/14g)iZh:8-i?9b04iQ4u8titjp75jr7l8J8yc$jj9f7hd_jFeB8obhi`6|14jx3I8P8Qjs95b_8djI0 8^j#018%7UiS676Y7Yagi 3#7%8NjV8+i;hne5i8iXg#jQ4p140V0d62c/iId k08`7 gYj;jRk8kdk1jYdpj!kg8fe8j(eai:f=jGd1eDk79d8s8Pi)jljPjD8ij98Hj`ks9Dj^d=6Cj4e4i.6ad_j*i%j,jEh{0Ehkj|f_h.7u94k3k50jk792k#h:gX8~k990kfk,kUkie3kkk?j004kwkC7^d@jLedjOefk:d~k~jekT3z9r0:9uimkqh(5-h+l66Oj kl6ChHk*iKj{kv3,g+2!io4)4?9E0/0;0?0N04.
# Tests(insensible à la casse)(Ctrl+I)
(Alt+: ; Ctrl pour inverser les colonnes)
(Esc)