please help me to reverse a function call order
Salih Dincer
salihdb at hotmail.com
Sun Jul 24 15:11:45 UTC 2022
On Sunday, 24 July 2022 at 08:16:41 UTC, Test123 wrote:
> On Saturday, 23 July 2022 at 23:14:03 UTC, Salih Dincer wrote:
>> On Saturday, 23 July 2022 at 22:50:55 UTC, Salih Dincer wrote:
>>> [...]
>>
>> I guess my code didn't list all possibilities either.
>> Moreover, the m and n parameters will be swapped:
>>
>>> [...]
>>
>> **PS.** * marked from version(c) in the above list is from
>> version(b).
>>
>> SDB at 79
>
> Can you share your code ?
>
>
> The restuls is position unrelated.
Everyone has it, the classic permutation codes.There should even
be something in the standard library?
I didn't share because I didn't know what you looking for. But
you know this classic recurisive function:
```d
void permut(T)(T[] x, ref int count, int start = 0) {
auto len = cast(int)x.length;
if(start != len)
{
for(int i = start; i < len; i++)
{
x[start].swap(x[i]);
x.permut(count, start + 1);
x[start].swap(x[i]);
}
} else if(len < 9) x.writeln(": ", ++count);
else ++count; // ^---a lot of output
}
void swap(T)(ref T x, ref T y) {
auto t = y;
y = x;
x = t;
}
T factorial(T)(in T n) pure nothrow @nogc
in(n < 21, "The number is a very large for ulongMax") {
return n > 1 ? n * factorial(n - 1) : 1;
} unittest { assert (factorial!int(12) == 479001600); }
import std.range, std.stdio;
void main() {
int totalCount, n = 3;
iota(1, n + 1).array.permut(totalCount);
totalCount.writeln(" permutation found...");
assert(totalCount == n.factorial);
}
```
**PS.** I added extra factorial `assert()`...
SDB at 79
More information about the Digitalmars-d-learn
mailing list