summaryrefslogtreecommitdiff
path: root/src/solvers/mod.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/solvers/mod.rs')
-rwxr-xr-xsrc/solvers/mod.rs25
1 files changed, 24 insertions, 1 deletions
diff --git a/src/solvers/mod.rs b/src/solvers/mod.rs
index 9dc210b..0615eab 100755
--- a/src/solvers/mod.rs
+++ b/src/solvers/mod.rs
@@ -1,4 +1,27 @@
//pub mod incremental_block;
pub mod intuitive;
#[cfg(feature = "gpu")]
-pub mod ocl;
+pub mod opencl;
+
+lazy_static! {
+ pub static ref PERMUTATIONS: (Vec<Vec<u32>>, Vec<u64>) = {
+ let n = crate::N;
+ let mut heap = (1..=n).collect::<Vec<u32>>();
+ let heap = permutohedron::Heap::new(&mut heap);
+ let n_f = permutohedron::factorial(n as usize);
+ let mut permutations = Vec::with_capacity(n_f);
+
+ let mut masks: Vec<u64> = vec![0; n_f];
+ println!("Generating permutations");
+ for (j, data) in heap.enumerate() {
+ let mut sum = 0;
+ permutations.push(data.clone());
+ for stone in data.iter().take(n as usize - 1) {
+ sum += stone;
+ masks[j] |= 1 << sum;
+ }
+ }
+ (permutations, masks)
+ };
+}
+