Skip to content

schwidom/eprmutate

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

5 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

eprmutate

Permutation library.

Calculation of a permutation from a number and back:

use eprmutate::permutation;
use eprmutate::permutation_number;

let p = permutation(u128::MAX);

assert_eq!(permutation_number(&p), Some(u128::MAX)); // p doesn't know the number

assert_eq!( p.v, [
    18, 13, 11, 8, 27, 16, 20, 22, 12, 24, 9, 1, 30, 3, 15, 23, 25, 2, 28, 19, 14, 29, 5, 10, 17,
    31, 32, 26, 33, 0, 4, 6, 21, 34, 7
]);

Permutating by number:

use eprmutate::permutation;
assert_eq!(permutation(0).v.as_slice(), [0]);
assert_eq!(permutation(1).v.as_slice(), [1, 0]);
assert_eq!(permutation(2).v.as_slice(), [0, 2, 1]);
assert_eq!(permutation(3).v.as_slice(), [1, 2, 0]);
assert_eq!(permutation(4).v.as_slice(), [2, 0, 1]);
assert_eq!(permutation(5).v.as_slice(), [2, 1, 0]);
assert_eq!(permutation(6).v.as_slice(), [0, 1, 3, 2]);

Initializing by a start number and continuing:

use eprmutate::PermutationRemainder;
let pr = PermutationRemainder::new( 7);
assert_eq!( pr.permutation().v.as_slice(), [1, 0, 3, 2]);
let pr = pr.next().unwrap();
assert_eq!( pr.permutation().v.as_slice(), [0, 2, 3, 1]);
let pr = pr.next().unwrap();
assert_eq!( pr.permutation().v.as_slice(), [1, 2, 3, 0]);
let pr = pr.next().unwrap();
assert_eq!( pr.permutation().v.as_slice(), [2, 0, 3, 1]);
assert_eq!( 10, pr.permutation_number().unwrap())

Managing a fixed length permutation

use eprmutate::permutation;
assert_eq!(permutation(0).fix_length(3).unwrap().as_slice(), [0, 1, 2]);
assert_eq!(permutation(1).fix_length(3).unwrap().as_slice(), [1, 0, 2]);
assert_eq!(permutation(2).fix_length(3).unwrap().as_slice(), [0, 2, 1]);
assert_eq!(permutation(3).fix_length(3).unwrap().as_slice(), [1, 2, 0]);
assert_eq!(permutation(4).fix_length(3).unwrap().as_slice(), [2, 0, 1]);
assert_eq!(permutation(5).fix_length(3).unwrap().as_slice(), [2, 1, 0]);
assert_eq!(permutation(6).fix_length(3), None);

About

Permutation library.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages