Developpez.com - Rubrique MATLAB

Le Club des Développeurs et IT Pro

Défi n°8 : voila les T ohé !

Venez relever les défis MATLAB

Le 2013-07-18 10:12:03, par Jerome Briot, Rédacteur/Modérateur


Un nouveau défi avec un titre de saison

Voici un extrait des paroles d'une chanson que je vous invite à enregistrer dans un fichier texte nommé mylittlegirl.txt :

Hey, little girl
Black and white and right and wrong
Only live inside a song, I will sing to you
You don't ever have to feel lonely
You will never lose any tears
You don't have to feel any sadness
When you look back on the years
How can I look you in the eyes?
And tell you such big lies
The best I can do is try to show you
How to love with no fear
My little girl

You've gone and stole my heart and made it your own
You stole my heart and made it your own
Le défi va consister à trouver des statistiques autour des apparitions de la lettre T dans le texte.
La casse n'étant pas prise en compte, les minuscules et majuscules seront confondues.
Les résultats prendront en compte à la fois T et t.

Vous devez donc créer une fonction MATLAB qui lit le texte de la chanson contenu dans le fichier et qui détermine :

  • le nombre total de lettres T (ou t) dans le texte
  • le nombre de lettres T (ou t) pour chaque ligne
  • le nombre total de mot commençant par la lettre T (ou t)
  • le nombre total de mot finissant par la lettre T (ou t)


Il n'y aucune restriction sur les techniques.
Vous pouvez utiliser toutes les solutions que vous voulez.

Vous écrirez votre code dans un fichier nommé voilalest_PSEUDO.m et dont le prototype de la fonction sera :

Code :
function [nb_total_T, nb_T_par_ligne, nb_mot_deb_T, nb_mot_fin_T] = voilalest_PSEUDO
En replaçant PSEUDO par votre pseudo DVP et où :

  • nb_total_T : un scalaire
  • nb_T_par_ligne : un vecteur de dimension 1 x nb_lignes ou nb_lignes x 1
  • nb_mot_deb_T : un scalaire
  • nb_mot_fin_T : un scalaire


Postez vos solutions à la suite de cette discussion.

Vous pourrez donc simplement exécuter les commandes suivantes pour valider vos résultats :

Code :
1
2
3
4
>> assert(nb_total_T==27)
>> assert(all(nb_T_par_ligne==[2;2;1;2;1;2;1;1;1;4;2;2;0;3;3]))
>> assert(nb_mot_deb_T==11)
>> assert(nb_mot_fin_T==8)
ou si votre version de MATLAB ne supporte par la fonction assert, vous pourrez vérifier les égalités comme ceci :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
>> nb_total_T==27

ans =

     1

>> all(nb_T_par_ligne==[2;2;1;2;1;2;1;1;1;4;2;2;0;3;3])

ans =

     1

>> nb_mot_deb_T==11

ans =

     1

>> nb_mot_fin_T==8

ans =

     1
Bon courage

----------------------------

Question subsidiaire

Saurez-vous répondre aux questions suivantes ?

  • Déterminer le nombre d'apparition de chaque caractère dans le texte à l'exception des caractères de fin de ligne et des espaces
  • Tracer l'histogramme de ces apparitions.
  • Pour chaque bâton de l'histogramme tracé, l’étiquette des abscisse devra être la lettre correspondante.


Vous trouverez une idée du tracé dans l'image attachée à cette discussion

----------------------------

Amusez-vous bien... ou pas

Et si vous avez besoin de vous détendre entre deux lignes de code :

  Discussion forum
5 commentaires
  • duf42
    Expert confirmé
    Si je puis me permettre, je ne suis pas tout à fait d'accord avec tes chiffres:
    Code :
    1
    2
    3
    4
    5
     
    >> assert(nb_total_T==27) 
    >> assert(all(nb_T_par_ligne==[2;2;1;2;1;2;1;1;1;4;2;2;0;3;3])) 
    >> assert(nb_mot_deb_T==11) 
    >> assert(nb_mot_fin_T==8)
    Et voici donc en pièce jointe le code qui m'a permit d'y parvenir.

    Duf
  • Jerome Briot
    Rédacteur/Modérateur
    Envoyé par duf42
    Si je puis me permettre, je ne suis pas tout à fait d'accord avec tes chiffres:
    C'est corrigé
  • Jerome Briot
    Rédacteur/Modérateur
    Voici ma solution
  • FDvlpmt
    Candidat au Club
    Salut, amusant comme jeu, un peu comme cody ...
    Je me suis bien amusé sur le graphique, cela faisait des années que je n'en avais pas fait.
  • Bonsoir,

    Une solution un peu originale utilisant les commandes dynamiques (?@cmd).

    On peut remarquer que les don't ne passent pas au test classique du début de mot :
    Code :
    regexp('don''t ', '\<t') % 5 plutôt que vide
    enfin peut-on réellement considérer que ce n'est pas un autre mot ?
    C'est en tout cas le choix qui semble être fait selon les assert