Browse Source

014 basic

master
Coin de Gamma 2 years ago
parent
commit
757868aa9b
  1. 38
      014/main.rs

38
014/main.rs

@ -0,0 +1,38 @@
type CZS = Vec<Option<u32>>;
struct Collatz { czs: CZS }
impl Collatz {
pub fn new() -> Collatz {
let cl0 = Some(0); // for indexing
let cl1 = Some(1);
Collatz { czs: vec![cl0, cl1] }
}
pub fn compute(&mut self, n: usize) -> u32 {
match self.ensure_get(n) {
Some(cl) => cl,
None => {
//println!("compute {}", n);
let cl_prev = if n % 2 == 0 {
self.compute(n / 2)
} else {
self.compute(3 * n + 1)
};
self.czs[n] = Some(cl_prev + 1);
cl_prev + 1
}
}
}
pub fn ensure_get(&mut self, i: usize) -> Option<u32> {
while self.czs.len() <= i { self.czs.push(None); }
self.czs[i]
}
}
fn main() {
let mut collatz = Collatz::new();
for k in 0..100000usize {
let clk = collatz.compute(k);
println!("{}: {}", k, clk);
}
}
Loading…
Cancel
Save