Bonjour,
J'ai trouvé quelquechose d'utile.. mais c'est en PHP ce qui cause un problème car tout code en PHP s'arrête après 45 sec d'exécution. J'essaye de convertir ce code en C# mais je reste pris.
function permutations($letters,$num){
$last = str_repeat($letters{0},$num);
$result = array();
while($last != str_repeat(lastchar($letters),$num)){
$result[] = $last;
$last = char_add($letters,$last,$num-1);
}
$result[] = $last;
return $result;
}
function char_add($digits,$string,$char){
if($string{$char} != lastchar($digits)){
$string{$char} = $digits{strpos($digits,$string{$char}) + 1};
return $string;
}else{
$string = changeall($string,$digits{0},$char);
return char_add($digits,$string,$char-1);
}
}
function lastchar($string){
return $string{strlen($string)-1};
}
function changeall($string,$char,$start 0,$end 0){
if($end 0) $end strlen($string)-1;
for($i=$start;$i<=$end;$i++){
$string{$i} = $char;
}
return $string;
}
$Array=permutations("ABC", 3); //Pour afficher les résultats
for($i=0 ; $i < count($Array) ; $i++) {
echo "$i. " . $Array[$i] . "
";
}
et moi j'ai :
//array = permutations("ABC", 3);
private string[] permutations(string letters, int num)
{
string last null, last2 null;
string str_repeat = null;
string[] result = new string[1000000];
int i = 0;
foreach (char c in letters)
{
if (i == 0)
{
str_repeat = c.ToString();
}
i++;
}
i = 0;
while (i != num)
{
last = last + str_repeat;
last2 = last2 + lastchar(letters);
i++;
}
i = 0;
while (last != last2)
{
result[i] = last;
last = char_add(letters, last, num - 1);
i++;
}
result[i + 1] = last;
return result;
}
private string char_add(string digits, string string2, int char2)//
{
int i = 0;
string lastone = null;
foreach (char c in string2)
{
if (i == char2)
{
lastone = c.ToString();
}
i++;
}
if (lastone != lastchar(digits))
{
string[] letters2 = new string[char2 + 1];
string charofstring null, digitspos null, nstring = null;//
int pos = 0;
i = 0;
foreach (char c in string2)
{
if (i == char2)
{
charofstring = c.ToString();
}
i++;
}
i = 0;
foreach (char c in digits)
{
if (c.ToString() == charofstring)
{
pos = i + 1;
}
i++;
}
i = 0;
foreach (char c in digits)
{
if (i == pos)
{
digitspos = c.ToString();
}
i++;
}
i = 0;
foreach (char c in string2)
{
letters2[i] = c.ToString();
if (i == pos)
{
letters2[i] = digitspos;
}
i++;
}
i = 0;
while (letters2.Length != i)
{
nstring = nstring + letters2[i];
i++;
}
return nstring;
}
else
{
i = 0;
string first = null;
foreach (char c in digits)
{
if (i == 0)
{
first = c.ToString();
}
i++;
}
string2 = changeall(string2, first, char2);
return char_add(digits, string2, char2 - 1);
}
}
private string changeall(string string2, string char2, int start 0, int end 0)
{
if (end == 0)
end = string2.Length - 1;
int i = start;
string[] letters2 = new string[10000000];
foreach (char c in string2)
{
letters2[i] = c.ToString();
letters2[i] = char2;
i++;
}
string2 = null;
i = 0;
while (letters2.Length != i)
{
string2 = string2 + letters2[i];
i++;
}
return string2;
}
private string lastchar(string string2)
{
int i = 0;
string lastc = null;
foreach (char c in string2)
{
if (i == string2.Length - 1)
{
lastc = c.ToString();
}
i++;
}
return lastc;
}
sa donne : AAA ABA ABA ABA etc. jusqu'à un IndexOutOfRangeExecption
C'est peut-être pas très, comment dire.. orthodoxe comme façon mais c'est un début.
Si quelqu'un peut m'aider?
Merci
PS Dites-moi le si je m'éloigne un peu trop du sujet et je ferai un autre post