{"id":"7N9dkqduft","url":"https://pastebin.ca/7N9dkqduft","raw_url":"https://raw.anybin.ca/7N9dkqduft","visibility":"public","access":"public","created_at":1785644834786,"expires_at":1786249634786,"fetch_limit":null,"fetches_used":0,"reads_remaining":null,"size_bytes":1834,"syntax_hint":"rust","title":"number of partitions of some k","filename":"main.rs","change_note":null,"cipher":null,"cipher_meta":null,"parent_id":null,"root_id":"7N9dkqduft","version":1,"owner_id":null,"recipient_id":null,"body":"fn make_next(current: &[u64], i: usize, j: usize) -> Vec<u64> {\n    let mut new = Vec::with_capacity(current.len()-1);\n    let add = current[i]+current[j];\n    //println!(\"{i},{j}: {}+{}={add}\", current[i], current[j]);\n    for k in 0..current.len() {\n        let value = if k==i || k==j {0} else {current[k]};\n        //println!(\"{k}: {value}\");\n        if value != 0 {\n            new.push(value);\n        }\n    }\n    let pos = new.binary_search(&add).unwrap_or_else(|e| e);\n    new.insert(pos, add);\n    new\n}\n\nfn get_all_next(current: &[u64]) -> Vec<Vec<u64>> {\n    let mut next: Vec<Vec<u64>> = Vec::new();\n\n    for i in 0..current.len() {\n        for j in i..current.len() {\n            if i == j { // could maybe replace with just looping j starting from i+1 but wehh\n                continue;\n            }\n            let check = make_next(&current, i, j);\n            if !(next.contains(&check)) {\n                next.push(check)\n            }\n        }\n    }\n    next\n}\n\nfn full_next(last: &[Vec<u64>]) -> Vec<Vec<u64>> {\n    let mut full_next = Vec::new();\n\n    for i in last {\n        let local_next = get_all_next(&i);\n        for j in local_next {\n            if !full_next.contains(&j) {\n                full_next.push(j);\n            }\n        }\n    }\n    \n    full_next\n}\n\nfn start(k: u64) -> Vec<u64> {\n    vec![1u64; k as usize]\n}\n\nfn collect_all(k: u64) -> Vec<Vec<u64>> {\n    let rounds = (k-2) as usize;\n    let mut all = Vec::new();\n    let start = start(k);\n    let mut next = get_all_next(&start);\n    all.push(start);\n    for _ in 0..rounds {\n        let mut last = next;\n        next = full_next(last.as_slice());\n        all.append(&mut last);\n    }\n    all\n}\n\nfn main() {\n    for i in 2..=10 {\n        let collect = collect_all(i);\n        println!(\"{:?}\\nLENGTH = {}\", collect, collect.len());\n    }\n}\n"}