Code a la con !

cs_joebuz Messages postés 321 Date d'inscription samedi 12 février 2005 Statut Membre Dernière intervention 21 février 2013 - 9 janv. 2006 à 22:02
cs_joebuz Messages postés 321 Date d'inscription samedi 12 février 2005 Statut Membre Dernière intervention 21 février 2013 - 11 janv. 2006 à 01:10
bonjour,
Voila on m'a demandé un code pour une application a la noix qu'a l'air toute simple, j'ai dis pas de probleme, et pourtant j'y arrive pas !
Voici de quoi il s'agit,
il faut un code pour trouver toute les combinaisons possibles d'un mot en inversant les lettres, sans repeter deux fois la meme lettre, le tout afficher sous forme de liste, et fonctionnant avec le mot qu'on veut sans passer par une BDD !

j'ai essayé pour l'instant avec un mot $mot = table; //pour ex.
puis je fais ceci :

$nomlettre[1]="T";
$nomlettre[2]="A";
$nomlettre[3]="B";
$nomlettre[4]="L";
$nomlettre[5]="E";
srand((double)microtime()*1000000);
$affichmot1=rand(1,$nblettres);
$affichmot2=rand(1,$nblettres);
$affichmot3=rand(1,$nblettres);
$affichmot4=rand(1,$nblettres);
$affichmot5=rand(1,$nblettres);

echo "mot : ".$nomlettre[$affichmot1]." ".$nomlettre[$affichmot2]." ".$nomlettre[$affichmot3]." ".$nomlettre[$affichmot4]." ".$nomlettre[$affichmot5]." "
";

Le probleme c'est que je peux avoir deux fois la meme lettre et que ca fonctionne seulement pour le mot 'table' et que ca ne me donne pas toute les combinaisons !!

Voila si qqn a une idée

joebuz

5 réponses

cs_joebuz Messages postés 321 Date d'inscription samedi 12 février 2005 Statut Membre Dernière intervention 21 février 2013
9 janv. 2006 à 23:10
bon deja j'ai reussi à recuperer les lettres pour n'importe quel mot, voila comment je m'y prend :

- petit formulaire type text pour rentrer le mot que l'on souhaite

$mot = $_POST['mot']; // on recupere le mot di formulaire
$nb = strlen ("$mot"); // on compte de combien lettres est le mot
$sep = wordwrap($mot, 1, ",",1); //on separe les lettres par une virgule
$lettre = explode(",", $sep); //on recupere les lettres une a une
$nb2 = $nb; // on donne a la variable nb2 la valeur de nb

while (($nb2 <= $nb)&&($nb2 > 0)) { // a chaque fois que nb2 est < nb
$nb2 = --$nb2; // on desincremente nb2
echo $lettre[$nb2]."
"; // on affiche les lettres une a une
}

Voila ca c'est fait, maintenant reste plus qu'a retourner le mot dans tout les sens en contrôlant qu'on est qu'une seule fois la meme lettre, et afficher la liste

joebuz
0
FhX Messages postés 2350 Date d'inscription mercredi 13 octobre 2004 Statut Membre Dernière intervention 18 avril 2015 3
10 janv. 2006 à 01:15
Tu as la fonction shuffle() ou alors array_rand() pour un mélange :)
0
malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 25
10 janv. 2006 à 09:47
Ca risque d'être long, en mode aléatoire ;-)

C'est mathématique ton truc, si j'ai bien compris ce que tu dois faire. Le principe est de boucler sur chaque lettre, et de les déplacer.
Par ex :
ABC peut donner :

ABC,
ACB
BCA
BAC
CBA
CAB
Par contre je pige pas le "une seule fois 1 lettre". Tu fais comment pour un mot comme 'para' ? Il y a deux 'a'.
0
cs_joebuz Messages postés 321 Date d'inscription samedi 12 février 2005 Statut Membre Dernière intervention 21 février 2013
10 janv. 2006 à 21:24
en reponse a malalam

je disais ca c'est pour eviter d'avoir avec un rand() des mots comme :

pppp
prpr
raar

pour le mot para

mais sinon c'est ca le principe


joebuz
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_joebuz Messages postés 321 Date d'inscription samedi 12 février 2005 Statut Membre Dernière intervention 21 février 2013
11 janv. 2006 à 01:10
en fait je cois que ca va être tendu d'afficher tout les resultats vu les posibilités

NB LETTRE POSSIBILITES
2 2
3 6
4 24
5 120
6 720
7 5040
8 40320 !!
... ....

j'arrive a generer un mot avec les lettres dans n'importe quel ordre mais pas a en afficher la liste por ceux que ça interesse :

$mot = $_POST['mot']; //on recupere le mot du formulaire
$nb = strlen ("$mot"); //on compte le nb de lettres du mot
$sep = wordwrap($mot, 1, ",",1); //on ajoute une virgule entre chaque lettre
$lettre = explode(",", $sep); //on recupere les lettres entre les virgules

$numbers = range(0,$nb); //on génére un chiffre aleatoire
srand((float)microtime()*1000000);
shuffle($numbers);
foreach ($numbers as $number) { //en fonction du chiffre on cherche la lettre
$ltr = $lettre[$number];
echo "$ltr"; //on affiche le mot
}

Je sais pas si mon compte est exact, je ne connais pas trop les fonctions srand et shuffle, mais il fonctionne, si vous trouvez un moyen de faire plus simple ou d'afficher la liste, je veux bien, merci

joebuz
0
Rejoignez-nous