script pour annagramme en php

  • Auteur de la discussion Auteur de la discussion dadovb
  • Date de début Date de début
WRInaute passionné
Bonjour à tous,
Je cherche l'algo pour réaliser un script php qui me donnerais tous les annagrammes d'une chaine fournie en paramètre. Je suis mauvais en récursivité et je suppose que dans le cas présent ca doit etre la meilleure manière de gérer le problème.

Donc si vous aviez quelques indications, ce serait sympa.

Merci d'avance :o
 
WRInaute passionné
merci dd32, mais je voudrais obtenir toutes les combinaisons possibles et pas seulement celles qui se trouvent dans le dico, je voudrais obtenir toutes les possibilités ! or ton script sert à jouer aux mots-croisés :)
 
WRInaute discret
J'ai trouvé une classe qui fait ca:

anagram.php
Code:
<?php

# anagram
# coded by Alessandro Rosa
# e-mail : zandor_zz@yahoo.it
# site : http://malilla.supereva.it

# Copyright (C) 2006  Alessandro Rosa

# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 3 of the License, or
# any later version.

# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.

# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software Foundation,
# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA

# Compiled with PHP 4.4.0


class anagram
{

  function anagram()
  {
      $this->reset() ;
  } 

  function reset()
  {
      $this->counter = 0 ;
      $this->bSaveFile = false ;
      $this->bInitialLetters = false ;
      $this->bTerminalLetters = false ;
      $this->$bOne_bond = false ;
      
      $this->max_bonds = 0;
      unset( $this->bonds ) ;
  } 

  function set_save_file( $bSF )        { $this->bSaveFile = $bSF ;   } 
  function set_save_file_name( $name )  { $this->save_file_name = $name ;   } 

  function add_bond( $letter_position )
  {
      $cnt = count( $this->bonds );
      
      $this->bonds[$cnt] = $letter_position - 1 ;
      $this->max_bonds = count( $this->bonds );
      
      $this->bOne_bond = true ;
  } 

  function insert_initials( $l )
  {
      $this->initial_letters = $l ;
      $this->initial_letters_len = strlen( $this->initial_letters );
      $this->bInitialLetters = true ;
  } 

  function insert_terminals( $l )
  {
      $this->terminal_letters = $l ;
      $this->terminal_letters_len = strlen( $this->terminal_letters );
      $this->bTerminalLetters = true ;
  } 
  
  function insert_word( $in )
  {
      $this->original_word = $in ;
  
      // creation of flags string

      $this->original_word_length = strlen( $in ) ;
      
      $this->flags_string = "";
      
      for ( $i = 0 ; $i < $this->original_word_length ; $i++ )
          $this->flags_string .= "N" ;
  } 

  function go()
  {
      if ( !isset( $this->original_word ) )
      {
          echo "<br/>No anagram can be performed.<br/>The input word was not initialized !<br/>" ;
          return ; 
      } 
      else if ( strlen( $this->original_word ) == 0 )
      {
          echo "<br/>No anagram can be performed.<br/>The input word is empty !<br/>" ;
          return ; 
      } 
      
      set_time_limit( 0 ) ;
      
      if ( strlen( $this->save_file_name ) == 0 ) $this->save_file_name = "list.html" ; 
  
      if ( $this->bSaveFile ) $this->FileHandle = fopen( $this->save_file_name, "w+" );

      $this->counter = 0 ;
      $this->permute( $this->flags_string, "", 0 );

      if ( $this->bSaveFile ) fclose( $this->FileHandle );

      $this->max_bonds = 0;
      unset( $this->bonds ) ;
  } 


  function display( $word )
  {
      if ( $this->bInitialLetters and $this->bTerminalLetters )
      {
          $initials = substr( $word, 0, $this->initial_letters_len );
          $terminals = substr( $word, -$this->terminal_letters_len, $this->terminal_letters_len );

          if ( strcmp( $initials, $this->initial_letters ) == 0 and strcmp( $terminals, $this->terminal_letters ) == 0 )
          {
              $this->counter++ ;
                  
              $outstring = "<font face=\"arial\" size=\"2\">$this->counter) <b>$word</b></font><br/>\r\n" ;
                  
              echo $outstring ;
                    
              if ( $this->bSaveFile ) fwrite( $this->FileHandle, $outstring ) ;
          } 
      } 
      else if ( $this->bInitialLetters )
      {
          $initials = substr( $word, 0, $this->initial_letters_len );
          if ( !strcmp( $initials, $this->initial_letters ) == 0 ) return ;
          
          $this->counter++ ;
              
          $outstring = "<font face=\"arial\" size=\"2\">$this->counter) <b>$word</b></font><br/>\r\n" ;
          echo $outstring ;
              
          if ( $this->bSaveFile ) fwrite( $this->FileHandle, $outstring ) ;
      } 
      else if ( $this->bTerminalLetters )
      {
          $terminals = substr( $word, -$this->terminal_letters_len, $this->terminal_letters_len );
          if ( !strcmp( $terminals, $this->terminal_letters ) == 0 ) return ;

          $this->counter++ ;
              
          $outstring = "<font face=\"arial\" size=\"2\">$this->counter) <b>$word</b></font><br/>\r\n" ;
              
          echo $outstring ;
              
          if ( $this->bSaveFile ) fwrite( $this->FileHandle, $outstring ) ;
      } 
      else
      {
          $this->counter++ ;
              
          $outstring = "<font face=\"arial\" size=\"2\">$this->counter) <b>$word</b></font><br/>\r\n" ;
              
          echo $outstring ;
              
          if ( $this->bSaveFile ) fwrite( $this->FileHandle, $outstring ) ;
      }

  } 

  function permute( $tmp, $word, $level )
  {
      if ( strlen( $word ) == $this->original_word_length )
      {
          $this->display( $word );
          return ;
      } 

      for ( $i = 0 ; $i < $this->original_word_length ; $i++ )
      {
          if ( $this->bOne_bond == true and $this->bonds[$level] != -1 and $i != $this->bonds[$level] and $level < $this->max_bonds ) continue ;
          
              if ( strcmp( $tmp{$i}, "N" ) == 0 )
              {
                  $word_tmp = $word ;
                  $word_tmp .= $this->original_word{$i};
                  
                  $flags_tmp = $tmp ;
                  $flags_tmp{$i} = "Y";
                  
                  $this->permute( $flags_tmp, $word_tmp, $level+1 );
              }
      } 
  } 

  var $counter ;
  var $original_word ;
  var $original_word_length ;
  var $flags_string ;

  var $initial_letters ;
  var $initial_letters_len;
  var $bInitialLetters ;

  var $one_bond ;
  var $bOne_bond ;

  var $terminal_letters ;
  var $terminal_letters_len;
  var $bTerminalLetters ;

  var $bonds ;
  var $max_bonds ;

  var $bSaveFile ;
  var $save_file_name ;

  var $FileHandle ;
}

?>


test.php
Code:
<?php

require_once( 'anagram.php' );
$anagrams = new anagram();
$anagrams->insert_word( "google" );
$anagrams->go();

?>


plus d'infos:
http://www.phpclasses.org/browse/package/2854.html
 

➡️ Offre MyRankingMetrics ⬅️

pré-audit SEO gratuit avec RM Tech (+ avis d'expert)
coaching offert aux clients (avec Olivier Duffez ou Fabien Faceries)

Voir les détails ici

coaching SEO
Discussions similaires
Haut