V
// println!("ss={:?}", ss);
if ss.len() <= 1 {
let r = vec![vec![(*ss).clone()]];
return r;
}
let mut res: Vec<Vec<Vec<i32>>> = vec![vec![vec![]]];
let to_max = 2_i32.pow(ss.len() as u32) / 2;
// println!("to_max={:}", to_max);
let mut i = 0;
let mut ii = 0;
while i < to_max {
// println!("i={:}", i);
ii = i;
let ss_len = ss.len() as usize;
let mut parts = vec![Vec::with_capacity(ss_len),Vec::with_capacity(ss_len)];
for item in ss.iter() {
parts[(ii & 1) as usize].push(*item);
ii >>= 1;
}
let bb = get_partitionr(&parts[1].clone());
for b in bb.iter() {
let mut c: Vec<Vec<i32>> = Vec::with_capacity(b.len() as usize);
c.push(parts[0].clone());
if b[0].len() > 0 {
for el in b.iter() {
c.push(el.to_vec());
}
}
// println!("c={:?}", c)
if res[0][0].len() == 0 { // it was hard to detect this place to avoid wrong vals
res[0] = c; // replace initial empty val
} else {
res.push(c);
}
}
i += 1;
}
res
}
fn main() {
println!("rust version");
let part = vec![1_i32, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12];
let lr = get_partitionr(&part);
println!("{:}", lr.len());
println!("lr={:?}", &lr[0..10])
}