Défi n°8 : voila les T ohé !
Venez relever les défis MATLAB

Le , 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 : Sélectionner tout
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 : Sélectionner tout
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 : Sélectionner tout
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 :



Vous avez aimé cette actualité ? Alors partagez-la avec vos amis en cliquant sur les boutons ci-dessous :


 Poster une réponse

Avatar de duf42 duf42 - Expert confirmé https://www.developpez.com
le 18/07/2013 à 16:34
Si je puis me permettre, je ne suis pas tout à fait d'accord avec tes chiffres:
Code : Sélectionner tout
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
Avatar de Jerome Briot Jerome Briot - Rédacteur/Modérateur https://www.developpez.com
le 18/07/2013 à 17:42
Citation Envoyé par duf42  Voir le message
Si je puis me permettre, je ne suis pas tout à fait d'accord avec tes chiffres:

C'est corrigé
Avatar de Jerome Briot Jerome Briot - Rédacteur/Modérateur https://www.developpez.com
le 19/07/2013 à 12:08
Voici ma solution
Avatar de FDvlpmt FDvlpmt - Candidat au Club https://www.developpez.com
le 12/08/2013 à 11:46
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.
Avatar de Winjerome Winjerome - Expert éminent sénior https://www.developpez.com
le 13/08/2013 à 23:13
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 : Sélectionner tout
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
Contacter le responsable de la rubrique MATLAB