diff options
Diffstat (limited to 'src/solvers/intuitive.rs')
-rwxr-xr-x | src/solvers/intuitive.rs | 21 |
1 files changed, 19 insertions, 2 deletions
diff --git a/src/solvers/intuitive.rs b/src/solvers/intuitive.rs index 6fea69d..3caac73 100755 --- a/src/solvers/intuitive.rs +++ b/src/solvers/intuitive.rs @@ -1,6 +1,7 @@ use rayon::prelude::*; /// Solve for a given N and return the resulting wall +#[derive(Clone)] pub struct NormalSolver { pub n: u32, /// calculated height [might not be correct!] @@ -52,7 +53,7 @@ impl NormalSolver { for (n, i) in self.permutations.iter().enumerate() { let tmp: Vec<u32> = i.iter().map(|x| *x).collect(); //println!("perm {}: {:?}", n, tmp); - //println!("perm {}: {:?}", n, self.masks[n]); + println!("perm {}: {:?}", n, self.masks[n]); } println!("calculate results"); self.permute( @@ -84,6 +85,8 @@ impl NormalSolver { } } if tmask == (1 << (self.n + 1)) - 2 && stones == self.n { + println!("tmask: {:b}", tmask); + println!("curr: {:b}", curr_mask); //println!("success"); unsafe { SOLUTIONS += 1; @@ -96,11 +99,25 @@ impl NormalSolver { } let mut new_num = Vec::from(numbers); let start = numbers[index as usize] / self.chunk; + if index as usize == numbers.len() - 1 { + #[cfg(feature = "gpu")] + { + crate::solvers::opencl::check( + self.masks.as_ref(), + self.w, + self.n, + curr_mask, + (start * self.chunk) as usize, + ) + .unwrap(); + return; + } + } for i in start..self.n - (self.h - 1 - index as u32) { for n in 1..(numbers.len() - index) { new_num[n + index] = (n as u32 + i) * self.chunk; } - if index == 0 { + if index == 0 && false { (0..self.chunk).into_par_iter().for_each(|j| { let mut new_num = new_num.clone(); let tmp = i * self.chunk + j; |