use std::{collections::VecDeque, thread};
use worker_synchronizer::Synchronizer;
const TARGET: u32 = 10;
fn main() {
let numbers: [_; 32] = std::array::from_fn(|i| i as u32);
let init = (0, 0, numbers.as_slice());
let synchronizer = Synchronizer::new(VecDeque::from([init]));
thread::scope(|scope| {
for _ in 0..thread::available_parallelism().unwrap().get() {
scope.spawn(|| {
for ((current, selected, remaining_slice), writer) in &synchronizer {
use std::cmp::Ordering::*;
match current.cmp(&TARGET) {
Less => {
let Some((next, remaining_slice)) = remaining_slice.split_first()
else {
continue;
};
writer
.write_multiples([
(current + next, (selected << 1) + 1, remaining_slice),
(current, selected << 1, remaining_slice),
])
.unwrap();
}
Equal => {
dbg!(current, selected, remaining_slice);
synchronizer.close();
}
Greater => (),
}
}
});
}
})
}