Compression Run-Length Encoding
Le cadre
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 chaine "aabbbbcaa" comporte dans cet ordre :
- deux
"a" ;
- quatre
"b" ;
- un
"c" ;
- deux
"a".
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é !
Exercice
Afin de simplifier la démarche, on ne considèrera que des chaines de caractères ne comportant aucun chiffre. Ainsi, toutes les chaines étudiées ne comporteront que des lettres ou de la ponctuation.
Coder une fonction compression qui prend en paramètre texte et qui renvoie le texte compressé avec la méthode RLE décrite.
Exemples
>>> compression_RLE("aabbbbcaa")
'2a4b1c2a'
>>> compression_RLE("aa aa.")
'2a1 2a1.'
>>> compression_RLE("a" * 1000)
'1000a'
>>> compression_RLE("aA")
'1a1A'
.128013x/.r;nbOylaeêu)dM63m(P+02è-],59fq7B8 _o=pcwgv41kRIéhtsSàLC[ji:E050q0m0#0l0-0k0$0L0Q0k0l0$0$0O010#0-0P010406050$0o0u0u0l0e0j040%0N0k0o130N0g0L020l0u0P0f0L0X0m1d0e0H0o0m0$050c1a1c1e1g180P04051L1E1O0c1L180q0-0T0{0}0 110!0-0S0!0k1$0!0#16050?0h0k0m1X0~10011#1%1)1%0#1/1;1-0#0e1M0#0!1?1Z010G0^0m0g1r0m010{1j0$0P0l0g110z1-2j2l271^2a1;2d0u2f040a0L0w0e0N0P0N0$0-1m1o0;2h0e0e0m0Q2J1E2q0g1M0c252V2224231.0q2s111)0g2c2G1-1U1W0|1@2)0-2+0g0N2/1-0P2O1M2T2V30192k1o2;282_0e1d0k160L0V2S3417332r361^383a3c0z3f2l3h2T2(013m0l3b040L0t3q2U183t3k113w3y0L0U3C3s343u3I3c0E3M3E3O3G3v0N393x3c0s3T3i351Y3l3Y3n3z0I3%3F3*3H3,3!3z0K3:3V3=3X3Z3J0F3{3j3}3Q040V0y423)2=3~3-0V3e1F3g3U434b450V3p4g3r4i4a373@3y0V3B4o3D3(3P4t160V3L4x3N4j4s3 4C3S4F4q4A4J463$4M4z3W4l3/4S3;4k4B463`4X3|4Z4P0V414%4H3+4P0z484F1P2~1E2/2Y0q242%3W0Q2`2y0:1V1M2}0m2 3g3M05500;584.110W160;0G5a4Y280R3c5l4(370G16501s2O0 0-1n0M0X0)0/5q5f0115040v5F4r3l160#0m0b5P5L3u5I0p0.3T0L5Z0L4T3}5h040-5k4F5#5m3l0h162v5T3W5I5K4?5.3H5O5Q5S5`5r1^5V3M5-61110N160O0O645$4b0u0-164=325{5H165X4M5!6p655G5(2O0#0o0e0g6c6k0$2o0401013T066p6d375}5R0m0M5v560 0Z6z660168046b5,6J1^6B166E6G6I6k0g5u1e0l2Q0A2O0M0e0Z0P0Z0#6S6Z6k6W6Y306r5M5|045P6M5?3}5I0+786e6g046i596k5I0C5Y5!6!740g0h6?6^6`2I5z0g1D6}6U6 6T5G6f6h6)7m6k5(0G3Y7B733v6-0e6/0#6;0m7L3u0N5o5)6y7y5G6,755~7T605G5I6n306H6q5Z7n015(5*7U4U7O7Q7S7_3}6 703g723P7{6:6=6@6_6{7c287,7l7:6*6U7$7p7r897u1n7x717=6W0x813r833W7D468e6q7=5(0m0_7)6j6U8d6o8f8g7#6L5P6O0N5w1C0$6|8p6~168s7~4k5:040$228b62165_8G8M048j887t2J8o7h8H160p8Z288r8|5N040Q6.866N8;8a8J8K7;6+857R877s978V7z698 74927P948z8K7=8i7q968m7w9k6V9j7!7M8x4f7.7/9a8h8N6N6P5x8T9x8r8t2U8v448#8%0e8)115^9W7N8/9t9f9v8@3r7=639A7V8X9x7$9m7|9e898U4h9F9R4b6t0=6w7Z9h8.768O9K8S9_4p1E5c574@ac0c4`1E0#4|ah2#2W0l1:ae4`1K5e7M2O0u0M0G0l0W6N0!0t161w1y1A1C0L7-591R3h1L0)0l2h0g926{2d2J0L2L0Q0!0@2+0`aX939daH5b513u1`1(1*1,as8491aZ2@8F828q8X9P3z9r162_0o0T0m0l0o5a0cab3z0P0m1l0L0n221=501lbd0$1=2c2B0j251n0L0v0q0o0Lax2IaW1=0}0{6@0laV0q000o2+0Lb2b40k1;0{a^bKa%9na)0$0p0d0L0i1obcbe1l0^0-bm0e0LbC0u6`0!a,a+aX3}a.1|1+2p8h9T8(7*7M6W0d9Z7$0,0N2@b8ba0L1A0-0Lbc390=aW000Z0T2I0mb,0Q1=0q0Z0$0l0S6@2x0g0#c3aLar0Y0kbxb60#0L3x3Y0`0Q6@cn0LbJbBb*5PbA2h0o0P1;0`b?57bjcX1Caa513z0(0L2Ocv0NcWcO0q2l0`bCaYa!bi8Q6Q8TbncH2LcY0L01c62@0q2O2gbod38T2k7Pcyce1ecPbKc`a_0Lcl2Lc!a-1*b`a;7=6$6D6Fc09.04cA8-7Mc5c7a18^7+8+c45uc:c%9)2U9+8`c9c*cA1S4_0=0@0_3h2/3u0l0q0u1n9v0L0h1n0o0$161Kd%d)d+2J0B130#20040Jd/7xdW1L2C2E2GcOcQdncn2Hbs0lb40Q5#bad67Zca2F6w0Lckcmb,d350aRbF0ZaU7v0`960ZaHaXbReCbia(7S0$dVd#1Vd@d*0gd,2@7Jd=1NeNd_7vd{2Id~0rb:b=eidGc)5d1PaM04aO0Lb/brdpe(c8b9c*c-2c0Tc71=bJ2hbOcucqbIbK1)8%cqbieEa$eGbUeI0Lbob(f72lcHf0dd6.5Pen0q1n0g0ZeK1TeM3Wb_a:b|5G2u2c2e162A0*8n1j1=0wbqb;dH9*56as3159ba7=0S5I020S0#0ffZf#f%1u9Zdw2g0xd49Zc2dL04ej9Z5^7bdz3Wf,47dydD5U160D9xf,4;f dI7M5Ig39-f|6C010t0yg79*7i160C8{4-7M0S6W00470Lf.4;gu3A0y003%e_e+1R4^af5418gG0T3hgJ04.
# Tests(insensible à la casse)(Ctrl+I)
(Alt+: ; Ctrl pour inverser les colonnes)
(Esc)