Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

SUITE LOGIQUE


Information sur la source

Description

Une suite logique que j'ai découvert dans un des livres de Bernard Werber :

1
11
21
1211
111221
312211
etc...

La voici adaptée en php, ça ne sert pas à grand chose mais bon, ça affute l'esprit comme dirait l'autre ;).
 

Source

  • <?php
  • $loop = 20; // on le fait "$loop" fois
  • $line = '1';
  • for($i=0;$i<$loop;$i++) {
  • echo $line; // on affiche la derniere ligne
  • $l = strlen($line); // on recupere la taille de la chaine
  • $nb = 0; // on initialise le nombre d'occurence
  • $curLine = ''; // on initialise ce qui deviendra la ligne suivante
  • for($j=0;$j<=$l;$j++) { // pour chaque lettre de la ligne precedente
  • if($j===0) { // si on est au premier caractere c'est forcement une premiere occurence
  • $nb++; // on incremente
  • } else if($j!==$l && $line[$j-1]===$line[$j]) { // si la lettre precedente est la même que l'actuelle
  • $nb++; // on incremente
  • } else { // sinon
  • $curLine .= $nb.$line[$j-1]; // on ajoute le nombre d'occurence de la lettre precedente et la lettre precendente a ce qui deviendra la ligne suivante
  • $nb = 1; // on reinitilalise le nombre d'occurence (pas la meme lettre donc forcement premiere occurence)
  • }
  • }
  • $line = $curLine; // la prochaine ligne à parser est celle que l'on a construit
  • echo '<br/>'; // saut de ligne sinon c'est pas beau (et on ne comprend rien accesoirement)
  • }
  • ?>
<?php 
$loop = 20; // on le fait "$loop" fois
$line = '1';

for($i=0;$i<$loop;$i++) {
    echo $line;         // on affiche la derniere ligne
    $l = strlen($line); // on recupere la taille de la chaine
    $nb = 0;            // on initialise le nombre d'occurence
    $curLine = '';        // on initialise ce qui deviendra la ligne suivante
    for($j=0;$j<=$l;$j++) { // pour chaque lettre de la ligne precedente
        if($j===0) {        // si on est au premier caractere c'est forcement une premiere occurence
            $nb++;            // on incremente
        } else if($j!==$l && $line[$j-1]===$line[$j]) { // si la lettre precedente est la même que l'actuelle
             $nb++;            // on incremente
        } else {            // sinon
            $curLine .= $nb.$line[$j-1]; // on ajoute le nombre d'occurence de la lettre precedente et la lettre precendente a ce qui deviendra la ligne suivante
            $nb = 1;    // on reinitilalise le nombre d'occurence (pas la meme lettre donc forcement premiere occurence)
        }
    }
    $line = $curLine;    // la prochaine ligne à parser est celle que l'on a construit
    echo '<br/>';    // saut de ligne sinon c'est pas beau (et on ne comprend rien accesoirement)
}
?>

Commentaires et avis

signaler à un administrateur
Commentaire de webdeb le 17/08/2008 18:25:44 10/10

T'aurais pu faire une fonction sérieux ^^

signaler à un administrateur
Commentaire de Palleas_44 le 17/08/2008 18:27:27

Pouarf non, c'était simplement l'algorithme qu'il faut retenir, vu qu'à la base ça ne sert à rien :p

signaler à un administrateur
Commentaire de neigedhiver le 18/08/2008 17:46:48

Salut,

Il s'agit de la suite de Conway :
http://fr.wikipedia.org/wiki/Suite_de_Conway#cite_ref-0

Sur l'article Wikipedia, on trouve même comment faire ça en PHP... Avec une fonction, ce qui est très très important, justement, pour l'algo, puisqe sans, on ne peut pas faire de récursivité... La source présentée dans l'article n'affiche qu'une seule ligne définie de la suite, mais avec deux lignes de code en plus (dont une pour une variable statique) on obtient quelque chose de très satisfaisant et en plus de très élégant.

signaler à un administrateur
Commentaire de Palleas_44 le 18/08/2008 18:10:09

Effectivement, en faire une fonction récursive est plutôt malin, autant pour moi.
Par contre pour moi, il n'y a ABSOLUMENT rien d'élégant à utiliser une variable globale ;)

signaler à un administrateur
Commentaire de Palleas_44 le 18/08/2008 18:10:33

(Mais merci pour le nom, je me le suis toujours demandé !)

signaler à un administrateur
Commentaire de neigedhiver le 18/08/2008 18:23:30

On peut changer les globales en variables statiques dans la fonction... C'est pas la fin du monde...

signaler à un administrateur
Commentaire de Palleas_44 le 18/08/2008 18:30:01

ah mais ce n'est pas ce que je dis, je dis juste que ce n'est pas élégant :p

signaler à un administrateur
Commentaire de The Red Man le 19/08/2008 15:03:05

lol ! j'ai déjà eu a faire ça en colle de JAVA (ou c'était juste un exo de td je sais plus ^^) en 1ere année de DUT. Mais effectivement tu aurais du faire une méthode ou même mieux une classe static Suites dans laquelle tu écris toutes les méthodes correspondantes au Suites. Ou encore mieux, une interface Suites ainsi que toutes les classes SuitesX (Avec X nom de la suite) implémentant cette classe.

signaler à un administrateur
Commentaire de thedeejay le 20/08/2008 19:28:30

héhé...
c'est une epreuve de newbiecontest...

signaler à un administrateur
Commentaire de FaustXVI le 26/10/2008 00:16:57 5/10

Salut,

je reprendrai les idées des autres en disant que tu aurait au minimum put faire une fonction...
Mais surtout je pense que tu aurai pu optimiser ton code!!

Remplacer :

#  $nb = 0; // on initialise le nombre d'occurence
# for($j=0;$j<=$l;$j++) { // pour chaque lettre de la ligne precedente
# if($j===0) { // si on est au premier caractere c'est forcement une premiere occurence
# $nb++; // on incremente
# } else if($j !==$l ....

par

$nb = 1;
for($j=1;$j<=$l;$j++) {
if($j !==$l...

tu evitera ainsi un test par tour et tu fera un tour de moins.

Je sais que ca parrai que dalle comme ca mais si tu n'optimise pas des codes aussi simple ca risque de devenir une catastrophe quand on arrivera à des codes plus complexes!

Enfin derniere chose, essaie de mettre des noms de variable explicites!!
$l devrait etre $longueur au minimum voir $longueurChaineDepart

Je met 5/10 parceque ca a quand meme le merite de faire ce que c'est sensé faire.

Bonne conitnuation

Ajouter un commentaire

Discussions en rapport avec ce code source dans le forum

Message ERREUR Suite tentative de transfert d'un fichier [ par David ] Il en résulte le message d'erreur suivant : Warning: Unable to create '../occas/1.jpg': Permission denied in /home4/eq9846/html/test/prive/admin/edi_o problème d'INCLUDE !!!! [ par nicoy2000 ] j'ai $gourl, qui vaut "scripts/al/al.php3?suite=ok" puis je fais include($gourl); et voici l'erreur: Warning: Failed opening 'scripts/al/al.php3?suite problème d'INCLUDE !!!! [ par nicoy2000 ] j'ai $gourl, qui vaut "scripts/al/al.php3?suite=ok" puis je fais include($gourl); et voici l'erreur: Warning: Failed opening 'scripts/al/al.php3?suite Suivi de navigation suite [ par gby ] Salut à tous,le bout de code qui me permet de récupérer le nom du fichier donc de la page en cours : &lt;?php $nb = count(explode ("/", $REQUEST_URI)) Affichage...suite de tableau [ par Brikse ] Hello tout le monde.... Je rencontre un problème au niveau de l'affichage dans mon code PHP. Alors, le truc est simple.J'ai un code qui insère une ima Algorithme de tri ... [ par LocalStone ] Salut à tous ! Il y a peut-être 1 mois et demi, j'ai lu un article - ou plutôt un tutorial - sur comment mettre en place un algorithme de tri automati colorier un ligne sur deux [ par herveguedj ] salut je voulais savoir comment faire pour colorier une ligne sur deux dan sun tableau a la suite d'une requete sql et une boucle while je m'exiplique Mise à jour d'une table MySql, suite à une recherche PHP [ par tanktrasher ] 'lut,j'ai un bleme :j'ai une liste deroulante dans un formulaire PHP qui me permet d'executer une requete de recherche dans une table MySql.Je fais af Suite de discussion lancée dans un code source [ par frop01 ] tout ca c'est complique pour moi Oublions le array et je commence avec un variable entier.voici mon code &lt;html&gt;&lt;head&gt;&lt Opérateur logique [ par dorian53 ] BonjourEst ce qu'il existe une différence sur la longueur d'évaluation entre &, && et AND en php.Comme en java & (éval courte) && (éval longue)Merci.D


Nos sponsors

Sondage...

CalendriCode

Juillet 2009
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
2728293031  

Consulter la suite du CalendriCode

Comparez les prix Nouvelle version

Photothèque Nouveau !



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,406 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.