Problem 1
メソッドチェーン
この問題は、Pythonならこんな風に書きたいところでしょう。
import sys n = int(sys.argv[1]) s = sum(i for i in range(1, n) if i%3 == 0 or i%5 == 0) print(s)
Rustではこういう書き方は無いようです。しかし、メソッドチェーンは使えます。
use std::env; fn main() { let args: Vec<String> = env::args().collect(); let n: i64 = args[1].parse().unwrap(); let s: i64 = (1..n).filter(|&i| i % 3 == 0 || i % 5 == 0).sum(); println!("{}", s); }
filterの引数はclosureです。&を使っているのは、オブジェクトの所有権の移動はなくて、参照だからですね。この辺りは、また出てくると思います。
速度
速度を見てみましょう。
$ rustc -O e001b.rs $ time ./e001b 1000000000 233333333166666668 real 0m1.352s user 0m1.344s sys 0m0.000s
少し遅いだけですね。