Rust StableでFizzBuzz

前回: RustでFizzBuzz - Ryusei’s Notes (a.k.a. M59のブログ)

安定版がリリースされてからは特段試してなかったことに気づいたので、今更ながら安定版で動くFizzBuzzを載せておく。

fn main() {
    use std::thread::spawn;
    use std::sync::mpsc::channel;
    use std::borrow::Cow;

    let n = 100;
    let (tx, rx) = channel();
    for i in 0 .. n {
        let tx = tx.clone();
        spawn(move || {
            let i = i + 1;
            let b = match (i % 3, i % 5) {
                (0, 0) => Cow::Borrowed("FizzBuzz"),
               	(0, _) => Cow::Borrowed("Fizz"),
                (_, 0) => Cow::Borrowed("Buzz"),
                _      => Cow::Owned(i.to_string())
            };
            tx.send((i, b)).unwrap();
        });
    }

    let mut res = Vec::new();
    for _ in 0 .. n {
        res.push(rx.recv().unwrap());
    }

    res.sort_by(|t, u| (&t.0).cmp(&u.0));
    for t in res.iter() {
        println!("{}", t.1);
    }
}