function pitrat(titre)
% Romain ZUCCONE / 4AM.OC1 / Groupe 410 / Janvier-Fevrier-Mars-Avril 2003
% Projet 2003

% titre='Vous avez bien raison de compter toutes les lettres de cette phrase avant de la croire quand elle vous affirme qu elle contient pour terminer';

if nargin==0
 titre='Ce titre contient';
end

ltitre=lower(titre);

% Table des nombres (en suisse-romand)

table={'un','deux','trois','quatre','cinq','six','sept','huit','neuf','dix',...
        'onze','douze','treize','quatorze','quinze','seize','dix-sept','dix-huit','dix-neuf','vingts',...
        'vingt et un','vingt-deux','vingt-trois','vingt-quatre','vingt-cinq',...
        'vingt-six','vingt-sept','vingt-huit','vingt-neuf','trente',...
        'trente et un','trente-deux','trente-trois','trente-quatre','trente-cinq',...
        'trente-six','trente-sept','trente-huit','trente-neuf','quarante',...
        'quarante et un','quarante-deux','quarante-trois','quarante-quatre','quarante-cinq',...
        'quarante-six','quarante-sept','quarante-huit','quarante-neuf','cinquante',...
        'cinquante et un','cinquante-deux','cinquante-trois','cinquante-quatre','cinquante-cinq',...
        'cinquante-six','cinquante-sept','cinquante-huit','cinquante-neuf','soixante',...
        'soixante et un','soixante-deux','soixante-trois','soixante-quatre','soixante-cinq',...
        'soixante-six','soixante-sept','soixante-huit','soixante-neuf','septante',...
        'septante et un','septante-deux','septante-trois','septante-quatre','septante-cinq',...
        'septante-six','septante-sept','septante-huit','septante-neuf','quatre-vingts',...
        'quatre-vingt-un','quatre-vingt-deux','quatre-vingt-trois','quatre-vingt-quatre','quatre-vingt-cinq',...
        'quatre-vingt-six','quatre-vingt-sept','quatre-vingt-huit','quatre-vingt-neuf','nonante',...
        'nonante et un','nonante-deux','nonante-trois','nonante-quatre','nonante-cinq',...
        'nonante-six','nonante-sept','nonante-huit','nonante-neuf','cent'};

lettres=['a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z'];

lettresapo={'''c''','''d''','''e''','''f''','''g''','''h''','''i''',...
        '''n''','''o''','''p''','''q''','''r''','''s''','''t''','''u''','''v'''};

% ----------------------------------------------------------------------------------------------------

% La partie fixe
% -> cetitrecontientaunbcdefghiunjunkunlunmnopqrstuvunwxunyetz

g=find(ltitre~=' ');
ctitre=[ltitre(g)];

compte=zeros(1,26);

nombresfixes=[ctitre 'a'];
i=find(ctitre=='b');
nbi=length(i)+1;
compte(2)=nbi;
nombresfixes=[nombresfixes table{nbi} 'b'];
nombresfixes=[nombresfixes 'cdefghi'];
i=find(ctitre=='j');
nbi=length(i)+1;
compte(10)=nbi;
nombresfixes=[nombresfixes table{nbi} 'j'];
i=find(ctitre=='k');
nbi=length(i)+1;
compte(11)=nbi;
nombresfixes=[nombresfixes table{nbi} 'k'];
i=find(ctitre=='l');
nbi=length(i)+1;
compte(12)=nbi;
nombresfixes=[nombresfixes table{nbi} 'l'];
i=find(ctitre=='m');
nbi=length(i)+1;
compte(13)=nbi;
nombresfixes=[nombresfixes table{nbi} 'm'];
nombresfixes=[nombresfixes 'nopqrstuv'];
i=find(ctitre=='w');
nbi=length(i)+1;
compte(23)=nbi;
nombresfixes=[nombresfixes table{nbi} 'w'];
nombresfixes=[nombresfixes 'x'];
i=find(ctitre=='y');
nbi=length(i)+1;
compte(25)=nbi;
nombresfixes=[nombresfixes table{nbi} 'y'];
nombresfixes=[nombresfixes 'etz'];

% ----------------------------------------------------------------------------------------------------

% La partie mobile
% -> 19 nombres au hasard pour acdefghinopqrstuvxz

letRest='acdefghinopqrstuvxz';

partiemobile=[];
nbl=fix(rand(1,19).*19)+1;   % nbl en chiffres

nbldepart=nbl;   % -> Pour savoir si ce nbl est une bonne matrice de depart
nbldepart  % script-test : ok!

partiemobile=[table{nbl}];   % nbl en lettres
ip=find(partiemobile~='-');
partiemobile=[partiemobile(ip)];

contenu=[nombresfixes partiemobile];   % contient toutes les lettres de départ

no=zeros(1,19);

for co=1:length(letRest)
    tr=find(letRest(co)==contenu);
    no(co)=length(tr);   % compte les lettres restantes du contenu de départ
end

% ----------------------------------------------------------------------------------------------------

tempsdepart=clock;
datestr(now,0)

% Les changements : le programme en lui-meme

fin=19;   % Nombres des premieres lettres a prendre en compte dans les changements (entre 1 et 19 - tout)
red=1;

while 1
    taz=fix(rand(1).*fin)+1;
    if nbl(taz)~=no(taz)
        nbl(taz)=no(taz);
        partiemobile=[table{nbl}];
        ip=find(partiemobile~='-');
        partiemobile=[partiemobile(ip)];
        contenu=[nombresfixes partiemobile];
        for cs=1:length(letRest);
            tr=find(letRest(cs)==contenu);
            no(cs)=length(tr);   % re-compte les lettres restantes du contenu
        end
    end
    if nbl(1:fin)==no(1:fin)   % FIN
        % Remettre le nombre de lettres correct dans compte (en entier)
        compte=[no(1) compte(2) no(2:8) compte(10:13) no(9:17) compte(23) no(18) compte(25) no(19)];
        % Recreer la phrase en entier
        texte=titre;
        texte=[titre ' ' table{compte(1)} ' ''a'''];
        texte=[texte ', ' table{compte(2)} ' ''b'''];
        for is=1:7
            texte=[texte ', ' table{compte(is+2)}  ' ' lettresapo{is}];
        end
        texte=[texte ', ' table{compte(10)} ' ''j'''];
        texte=[texte ', ' table{compte(11)} ' ''k'''];
        texte=[texte ', ' table{compte(12)} ' ''l'''];
        texte=[texte ', ' table{compte(13)} ' ''m'''];
        for is=8:16
            texte=[texte ', ' table{compte(is+6)}  ' ' lettresapo{is}];
        end
        texte=[texte ', ' table{compte(23)} ' ''w'''];
        texte=[texte ', ' table{compte(24)} ' ''x'''];
        texte=[texte ', ' table{compte(25)} ' ''y'''];
        texte=[texte ' et ' table{compte(26)} ' ''z''.'];
        % Afficher la phrase en entier (plus le reste à savoir)
        disp('ok fini');
        fin
        nbl
        no
        red
        tempsfin=clock;
        temps=tempsfin-tempsdepart;
        temps
        texte
        return
    end
    red=red+1;
end

% ----------------------------------------------------------------------------------------------------
