Suite logique

Soyez le premier à donner votre avis sur cette source.

Snippet vu 8 913 fois - Téléchargée 15 fois

Contenu du snippet

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 / Exemple :


<?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)
}
?>

A voir également

Ajouter un commentaire

Commentaires

Messages postés
5
Date d'inscription
dimanche 11 février 2007
Statut
Membre
Dernière intervention
15 juillet 2009

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
Messages postés
74
Date d'inscription
dimanche 2 avril 2006
Statut
Membre
Dernière intervention
23 juin 2010

héhé...
c'est une epreuve de newbiecontest...
Messages postés
112
Date d'inscription
vendredi 15 avril 2005
Statut
Membre
Dernière intervention
13 juin 2010
2
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.
Messages postés
130
Date d'inscription
lundi 12 décembre 2005
Statut
Membre
Dernière intervention
19 avril 2009

ah mais ce n'est pas ce que je dis, je dis juste que ce n'est pas élégant :p
Messages postés
2483
Date d'inscription
jeudi 30 novembre 2006
Statut
Membre
Dernière intervention
14 janvier 2011
15
On peut changer les globales en variables statiques dans la fonction... C'est pas la fin du monde...
Afficher les 10 commentaires

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.