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'
###(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
.128013s3_8èufvIy n7aêSû1me(P24:jtwi][hE)6Oo;bcdg/0lîàqp.rL,=+k95Rxé050P0u0B0o0D0T0b0l0O0T0o0b0b0$010B0D0X010406050b0g0t0t0o0Z0k040q0L0T0g110L0m0l020o0t0X0M0l0+0u1b0Z0W0g0u0b050R181a1c1e160X041C1J051M0R1M1O1J160P0D0i0_0{0}0 0G0D0Q0G0T1$0G0B14050;0N0T0u1X0|0~011#1%1)1%0B1/1;1-0B0N0L0P1e1.0Z1K0B0G0_1h0b0X0o0m0 0x011?1Z010h0?0u0m1p0u1-2e2g2l1^2o1;2r0t2t040a0l0w0Z0L0X0L0b0D1k1m0/2c0Z0Z0u0O2O1C2v0m1K0R2a2!0B2827290P2x0 1)0m2q2L1-1U1W0`1@2.0D2:0m241V1-0X2T1K2Y2!35172f1m2_2m2~0Z1b0T140l0s2X3915382w3b1^3d3f3h0x3k2g3m2Y2-013r0o3g040l0c3v2Z163y3p0 3B3D0l0y3H3x393z3N3h0*3R3J3T3L3A0L3e3C3h0J3Y3n3a1Y3q3%3s3E0n3,3K3/3M3;3)3E0e3^3!3`3$3(3O0)403o423V040s0S473.2`433=0s3j1D3l3Z484g4a0s3u4l3w4n4f3c3|3D0s3G4t3I3-3U4y140s3Q4C3S4o4x444H3X4K4v4F4O4b3+4R4E3#4q3@4K1L331C2@2%0P2+3z0O242D0.1V1K320u343l3R054/0/4`4M1^0(140/0h4|3_4g0C3h57414p0h144/1q2T0}0D1l0d0+0!0H5c510 13040v5r4w3q140B0u0,5B5x3z5u0I0z3Y0l5L0l4Y495A5C5B0d5h4^0}0u3R5N582m0L140$5Y5O4g0b2j0401013Y065M5Z5d3c5g1c0o2V0u2T0d2T0X0:5X4K5@5s015$045(655*5_045B5D64375!1^5u0F5F3#0t0D144d4$6k5t140E5K5M6d5z040m0N600u62112O1B6c6v685%5)6N6q6s5;5?6B0 53040h3%6Q5^6C0O5{5}2T6$670L5a042|6-5y3M5Q6h6o425u5J4R5?6V6N6Y0D566M6%6^046)0Z5|5B6,766.5%6b35666@3A5`7b6+0u6G6I6i4{6N6}6z70706W7m6D6F610:2N5l0m6L7j7A690%7i3l7k3z6S4b7x7z72140u0@7t3w7A7w6 7y7V777B6g5S5U5j0b7!2Z7Q3#7M7O3w7@490N140b2(6{4g5u5w6u7+0m146E7r7F6K822m5H6?3z7M8h4Z7n7c5~7q7E5E7(7)6A6N88796*7d8p6H638k42697`7?7A8w7a8n7e355=8t8u87897D8B6J7H7J7P7L6P7f7l7S4k8N8O5L8I6_7.0L5i1A7;8D4g7_8?3c7~04800Z8e6l14856j8R7C8b8V1l8X7#7v140I8_1^8j8#3U8m7p967=158*7|4g6Y2T0B0g0Z0m9e787-7q7/8;9m160R4~4_4%9H0R4*1C0B4,9M2)2#23252%0o1:9J4*1I507l2T0t0d0h0o0(7q0G0c141u1w1y1A0l6~371P3m1J0K3a0Z0-1=0{0l0i1c0D9V1;5N9G6f5R9A8/5V8=9F4:3E0/802|a00l0V2c0m5B0m0D0Z0la20O0G0o0U2:0l2Q8K2V0f5j2c8:0}a00Y1L9{040j0T0l9)1j0l2q182N1=2|7G3C0D7;ava80P0-5U5B0Y2G0L9u0_7Y0o0l1l0_9 1=0/0g0,a3a5a79?6~1S050g0T3m1)1KaaaF8z9l1Caaaq112q0P7baw1=bfaH1=9=awa_6!0m2V7HaW80aW1m2(0=2Pbqae7da:9}aw00a#11a%7;0l0o0i2Ubp0l4^6q5~0_8ybsaD0g0l9z0l0M1Cbc16bc4}ai8a8q7G98biaibk0Dbmboa82~0t0N2TaDbqb%aI0D0/ar0D9=0^4/7Ia-1j740baN0Rb:1Cb9aPbMa,0N1j1=aX0gaZ0l0g1m2f0Z4/9u0^2Q0T00aX1v9Wb)b+aca:0wa=avay0obub?4 bf8ob|4 0#a`1mbS0/1b0m2Q0bbOaS1A0B0l0-0Q3Caoa9aic#5 8q64bjb63mcrb;0D8|0Da`czc)a{2|0O9 2Car1=cZ4_b^8Ub`7Ic%4_0#b/d9d8da0l2~0mde1m0o0Aa=5BcB1m2~0gbV0ob*cG0Xa8dN0l9 180T0;c^5w9G3z1`1(1*1,9!9iab6h5Tae7:9m9p5#147N9x3A8{8}8 6w5vd}7Bdo6Idq992Z7$9cd_9g7K8v9jbgd24|ah4 0IaWc^a{9 bPa61)bS1;0^a40Za69W0^dm8x7oee8Ud3b}0:c~4 e28c8Wds04cncp0Rd71N040H1m2obHbY1ccG0Z0bc)a8dPe(3%5j2Kc/2gc^dS0/9vb cVc91=0m00a_2f0^0-0B0-bTdF1jf20zc*bNdEdG1=0G3%cIa1a_230g0`0ucnb71JeUc7e?b#1)0ub*em2q0i0Lb bv0_azaBbIaK0baMaO9Z051v049:1cbu6~fMfBch6)f12r2Oc7fCaA2:ffb$eBbseyd!3#d$1|1+2u94cW2|d;8Z04d^9h8l6Da=dM0gegbj62aV0p2(bI0r5B0gbS2q2G0k2aa{0v0Pb*9)2NfZax9 0ofY0P00cCe`f 7Ye(fDaCaEe_0b0IbLcDfuc^ckeqfsa_0tf0fd2Qdmd#1*f/d)8Id{81867geNe08wdF6=4$eh4_0l1ydb623eeGgs0-0iaZcVa~0-0b0o0Qdi2q0BfmaPaRaTdNe:0Tfea|a0avguawa(dHaEa=dQ9?eze)1AeMc}2Tg hjb#0P2g0^axgzfFafang=a19?01g(c/2T2kgdes0lfHcEe/eYhdaCcWfEa3cbdlf,42f.d(f;675,145/e069cn9367g%fz9wgZ7l84g$5ghjese08gg*aah31T1VgS1{h$d*3#2z2q2s142F0qdh12c^0wgffdh?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#jQ4p140o0X62c/iId k08`7 gYj;jRk8kdk1jYdpj!kg8fe8j(eai:f=jGd1eDk79d8s8Pi)jljPjD8ij98Hj`ks9Dj^d=6Cj4e4i.6ad_j*i%j,jEh{0ghkj|f_h.7u94k3k50Pk792k#h:gX8~k990kfk,kUkie3kkk?j004kwkC7^d@jLedjOefk:d~k~jekT3z9r0:9uimkqh(5-h+l66Oj kl6ChHk*iKj{kv3,g+2!io4)4?9E0/0;0?0b04.