From 85627bc39db56d1ca3dca747535afcf6fd9cdcdd Mon Sep 17 00:00:00 2001 From: natrixaeria Date: Sun, 5 Jan 2020 21:47:19 +0100 Subject: Create GpuSolver --- src/permutations.rs | 45 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 45 insertions(+) create mode 100644 src/permutations.rs (limited to 'src/permutations.rs') diff --git a/src/permutations.rs b/src/permutations.rs new file mode 100644 index 0000000..7b8e4d3 --- /dev/null +++ b/src/permutations.rs @@ -0,0 +1,45 @@ +use permutohedron::{Heap, LexicalPermutation}; + +pub trait PermutationGenerator { + fn permutations(n: u32) -> Vec>; +} + +pub struct HeapsPermutations; + +impl PermutationGenerator for HeapsPermutations { + fn permutations(n: u32) -> Vec> { + Heap::<'_, Vec, _>::new(&mut (1..=n).collect()).collect() + } +} + +pub struct LexicalPermutations { + state: Vec, + is_ended: bool, +} + +impl Iterator for LexicalPermutations { + type Item = Vec; + fn next(&mut self) -> Option { + if self.is_ended { + None + } else { + self.is_ended = self.state.next_permutation(); + Some(self.state.clone()) + } + } +} + +impl LexicalPermutations { + fn new(n: u32) -> Self { + Self { + state: (1..=n).collect(), + is_ended: false + } + } +} + +impl PermutationGenerator for LexicalPermutations { + fn permutations(n: u32) -> Vec> { + Self::new(n).collect() + } +} -- cgit v1.2.3-70-g09d2