summaryrefslogtreecommitdiff
path: root/src/solvers/intuitive.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/solvers/intuitive.rs')
-rwxr-xr-xsrc/solvers/intuitive.rs21
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;