IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

[Tableaux] Compteur de palindromes


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    60
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 60
    Par défaut [Tableaux] Compteur de palindromes
    Bonjour,

    J'ai un petit problème avec un script que je dois réaliser. Je souhaiterais compter le nombre de palindromes possibles dans une chaine, mais je ne dois compter que les palindromes maximums.

    C'est à dire que la chaine "ababab" contient deux palindromes maximums : "ababa" et "babab", mais "aba" et "bab" n'en font pas partie.

    J'ai réalisé ce script, mais il ne fonctionne pas correctement (je me retrouve parfois avec trop de résultats, et parfois avec pas assez).

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    <?php
    function palindromes(){
     
    	$palindromes = 0;
    	$chaine_finale = "";
     
    	$som = 0;
    	$args = func_get_args();
    	$nbr = count($args);
     
     
    	for($i=0;$i<$nbr;++$i){
     
     
    		$args[$i] = strtolower(trim($args[$i]));
     
    		$chaine_finale = $chaine_finale . $args[$i];
     
    	}
     
     
    	$caracteres = strlen($chaine_finale);
    	$half = ceil($caracteres / 2);
     
    	for($i=1;$i<$caracteres-1;$i++){
     
    		if($i<$half){
    		$limit = $i;
    		}
    		elseif($i>=$half){
    		$limit = $caracteres - $i - 1;
    		}
     
    		$j = 0;
    		$k = 0;
     
    		while($j<$limit AND $k==0){
     
    			$j++;
     
    			$mot = substr($chaine_finale,$i-$j,$j+$j+1);
     
    			echo "$i - $j (Test de $mot)<br/>";
     
    		}
     
    		echo "<br/><br/>";
     
    	}
     
    	echo "<b>Nombre de palindromes :</b> $palindromes";
     
    }
     
    palindromes("ababab");
    ?>
    Si quelqu'un à une idée... merci !

  2. #2
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 659
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 659
    Billets dans le blog
    1
    Par défaut
    perso j'aurais coupé en deux , fait un strrev sur la seconde partie et testé l'égalité ...
    faut juste tester si la longueur est paire ou non ...
    a ce moment faudra faire du substring debut mileu fin et tester debut=strrev(fin)
    Ma page Developpez - Mon Blog Developpez
    Président du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts)
    Deux règles du succès: 1) Ne communiquez jamais à quelqu'un tout votre savoir...
    Votre post est résolu ? Alors n'oubliez pas le Tag

    Venez sur le Chat de Développez !

  3. #3
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 659
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 659
    Billets dans le blog
    1
    Par défaut
    ou encore beaucoup plus simple

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if($chaine==strrev($chaine))
    Ma page Developpez - Mon Blog Developpez
    Président du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts)
    Deux règles du succès: 1) Ne communiquez jamais à quelqu'un tout votre savoir...
    Votre post est résolu ? Alors n'oubliez pas le Tag

    Venez sur le Chat de Développez !

  4. #4
    Membre éprouvé

    Inscrit en
    Janvier 2006
    Messages
    969
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 969
    Par défaut
    C'est bien plus compliqué que ça : il s'git de repérer les palindromes dans une chaîne, mais il peut y en avoir plusieurs.
    Question : dans "abccbaazertybccb", faut-il compter 2 palindromes (abccba et bccb) ou considère-ton que bccb est contenu dans abccba ?
    Ca influe sur l'algorithme, mais dans les 2 cas il y a une méthode facile et fastidieuse.

  5. #5
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 659
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 659
    Billets dans le blog
    1
    Par défaut
    ben ce n'est pas ce que j'ai compris dasn ses explications ...
    il parlait uniquement de palindrome principal et pas de sous palindormes non ?
    Ma page Developpez - Mon Blog Developpez
    Président du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts)
    Deux règles du succès: 1) Ne communiquez jamais à quelqu'un tout votre savoir...
    Votre post est résolu ? Alors n'oubliez pas le Tag

    Venez sur le Chat de Développez !

  6. #6
    Membre éprouvé

    Inscrit en
    Janvier 2006
    Messages
    969
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 969
    Par défaut
    Oui, mais dans mon cas précis, bccb est à la fois un palindrome principal (les 4 dernières lettres) et un sous-palindrome de abccba. Faut-il le compter comme palindrome principal ou pas (on ne le compte pas comme sous palindrome, ok) ?

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    60
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 60
    Par défaut
    Citation Envoyé par guidav Voir le message
    Question : dans "abccbaazertybccb", faut-il compter 2 palindromes (abccba et bccb) ou considère-ton que bccb est contenu dans abccba ?
    On considère que bccb est compris dans abccba, et que donc ce n'est pas un palindrome. Seul abccba est consideré comme palindrome (car maximum).

  8. #8
    Membre éprouvé

    Inscrit en
    Janvier 2006
    Messages
    969
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 969
    Par défaut
    Au global, c'est assez simple, je vais juste donner un algo car j'ai la flemme de coder :
    On part de la première lettre $i=0 , on détermine la longueur $lmax qui reste dans la chaîne
    Pour $l de $lmax à 2, on regarde si la sous-chaine de $i à $l est un palindrome.

    Si oui, on le stocke dans un array (on vérifie s'il n'existe pas déjà) et on passe à la chaine suivante qui commence à $i+$l

    Si non, on fait $i++ et on recommence.

    Après, il faut voir comment tu veux gérer les morceaux de chaînes contenus dans 2 palindromes, du genre abcddcbaabce : il y a 2 palindromes, et la chaîne cba est présente dans les 2.
    S'il faut les détecter, alors il faudra faire $i=$i+floor($l/2) (ou $i = $i+1, je ne suis pas certain) au lieu de $i=$i+$l, mais forcément ça sera plus long.

    Corrigez-moi si je me trompe, évidemment.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Tableaux] Compteur de visite accessible
    Par Linon dans le forum Langage
    Réponses: 12
    Dernier message: 03/08/2006, 21h20
  2. [Tableaux] Compteur stat annonce
    Par digger dans le forum Langage
    Réponses: 1
    Dernier message: 15/05/2006, 12h38
  3. Réponses: 15
    Dernier message: 15/01/2006, 20h02
  4. [Tableaux] compteur Php comment faire ?
    Par loady dans le forum Langage
    Réponses: 1
    Dernier message: 17/09/2005, 10h35

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo