Les types de fichiers volumineux comme les images, sons et vidéos sont généralement compressés afin d'économiser de l'espace disque (pour leur stockage) et de la bande passante (pour leur transmission). Pour compresser sans perte des images à faible nombre de couleurs, comme par exemple les icones ou les images utilisées dans les vieux jeux vidéos, une méthode très simple est la suivante :
Cette méthode s'appelle Run-length encoding, ou RLE (il y a des variantes, et on n'a pas ici tenu compte du fait qu'utiliser de nouveaux symboles pour compter les répétitions augmente la taille de l'alphabet, ce qui vient contrebalancer, suivant les qualités de l'image, la réduction du nombre de symboles nécessaires pour la décrire). Dans cet exercice, on va écrire un décodeur de RLE.
Étant donnée une chaîne de caractères message
composée de lettres minuscules non-accentuées et de chiffres, calculer la chaîne de lettres (sans chiffres) obtenue en remplaçant, lorsqu'une lettre (par exemple `a`) est suivie d'un nombre ("12"), l'ensemble des deux ("a12") par une répétition de la lettre autant de fois qu'indiqué par le nombre ("aaaaaaaaaaaa").
L'entrée contient la chaîne de caractères message
. Elle ne contient que de caractères de `a` à `z` et de `0` à `9`, et commence par une lettre. S'il y a plusieurs chiffres successifs, ils forment un unique nombre, et les nombres sont toujours supérieurs ou égaux à 2 (et représentables par un entier de base dans votre langage (type int/integer)).
La sortie est le message d'entrée décodé comme décrit dans l'énoncé, et suivi d'un retour à la ligne.
entrée :
a2bcde10f
sortie :
aabcdeeeeeeeeeef
entrée :
b2nb4nb2n5b2nb4nb2
sortie :
bbnbbbbnbbnnnnnbbnbbbbnbb
Squelettes de codes :
[GROUPFULL:skeleton]