Brian Dunning's FileMaker Custom Functions

Permutation ( IdxLst ; PermNr ; nObj )

Permutation of an index list

  Average rating: 4.6 (20 votes) Log in to vote

Erich Schmidt   Erich Schmidt - Show more from this author

Share on Facebook Share on Twitter

  Sample input:
Permutation(""; 4023; 7)
Permutation(""; 600000; 10)
Permutation(""; Factorial(5)-1; 6 )
  Sample output:
5¶3¶2¶4¶1¶6¶0
1¶6¶9¶0¶4¶2¶3¶5¶7¶8
0¶5¶4¶3¶2¶1

  Function definition: (Copy & paste into FileMaker's Edit Custom Function window)

The function returns one of the nObj! [ Factorial(nObj) ] possible permutations of the index list {0, 1, 2, …, nObj-1}

Parameters:
IdxLst must be empty
PermNr can be an integer between 0 and Factorial( nObj) - 1
nObj must be a positive integer

For different values of PermNr you get different permutations.
The PermNr=0 gives the index list in ascending order, PermNr=Factorial(nObj)-1 gives the index list in descending order.

Requires other CF: CustomList() [www.briandunning.com/cf/868]

Examples:

Permutation(""; 18 ; 4 ) returns "3¶0¶1¶2"
Permutation(""; 600000; 10) returns "1¶6¶9¶0¶4¶2¶3¶5¶7¶8"
CustomList ( 1 ; Factorial ( 4 ) ; "Substitute ( Permutation ( \"\" ; [n]-1 ; 4 ) ; \¶ ; \" \" ) ") returns "0 1 2 3 ¶0 1 3 2 ¶0 2 1 3 ¶ … ¶3 2 0 1¶3 2 1 0 " 24 lines


Notice:

To permute an arbitrary list $AnyList you can use the following statement sequence:

Let (
[
n = ValueCount($AnyList) ;
$PLIST = Permutation ( "" ; $PNR ; n )
];
CustomList ( 1 ; n ; "GetValue($AnyList; 1+GetValue($PLIST; [n]) )" )
)

where $PNR is the permutation number [an integer between 0 and factorial(n)-1 ].

For $AnyList ="alpa¶beta¶gamma¶delta¶epsilon¶zeta¶eta¶theta¶iota" and $PNR=270001 you get the following list:

eta
zeta
epsilon
alpa
beta
gamma
delta
iota
theta

 

Comments

Log in to post comments.

 

Note: these functions are not guaranteed or supported by BrianDunning.com. Please contact the individual developer with any questions or problems.

Support this website.

This library has been a free commmunity resource for FileMaker users and developers for 15 years. It receives no funding and has no advertisements. If it has helped you out, I'd really appreciate it if you could contribute whatever you think it's worth: