Soyez le premier à donner votre avis sur cette source.
Snippet vu 9 768 fois - Téléchargée 18 fois
using System; using System.Collections.Generic; namespace test { public static class Arrangement { /// <summary> /// Retroune la liste de tous les arrangements de carractères /// </summary> /// <param name="caracteres">Chaine contenant les caractères à arranger</param> /// <param name="longueur">Longueur des chaines attendues</param> /// <returns></returns> public static List<string> Arrange(string caracteres, int longueur) { List<string> liste = new List<string>(); //calcul du nombre de permuation int nbrePermut = (int)Math.Pow(caracteres.Length, longueur); //boucle de comptage de 0 à nbrePermut for (int i = 0; i < nbrePermut; i++) { string texte = string.Empty; //conversion dans la base qui va bien int[] valeurBase = Arrangement.BaseFromDecimal(i, caracteres.Length, longueur); //association de chaque valeur de la base avec le caractère associé for (int j = 0; j < longueur; j++) texte = caracteres[valeurBase[j]].ToString() + texte; liste.Add(texte); } return liste; } /// <summary> /// Retourne un tableau de int representant la conversion d'un entier décimal en une base quelquonque /// </summary> /// <param name="nDecimal">Decimal à convertir</param> /// <param name="nBase">Base de conversion</param> /// <param name="longueur">Longueur du mot en sortie (exemple 0 en 3 caractères 000)</param> /// <returns></returns> private static int[] BaseFromDecimal(int nDecimal, int nBase, int longueur) { int[] valeur = new int[longueur]; int dividende = nDecimal; for (int i = 0; i<longueur;i++) { if (dividende != 0) { int reste; dividende = Math.DivRem(dividende, nBase, out reste);//on divise par la base et on garde le reste valeur[i] = reste;//le reste est affecté à la valeur en cours } else valeur[i] = 0; //rempli les vides } return valeur; } } }
merci.
A l'époque j'ai préféré faire une méthode pour la conversion de base et une pour "compter" les permutations. L'avantage étant que la conversion de base peut être utilisée indépendamment.
Mais bien sûr ça peut être condensé comme tu l'as fait, et même un peu plus je pense avec Linq.
Correction apportée, j'ai laisse un permutation dans les mots clés, pour le cas ou d'autre fassent la même confusion que moi.
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.