Problem 1
10未満の自然数のうち、3 もしくは 5 の倍数になっているものは 3, 5, 6, 9 の4つがあり、これらの合計は 23 になる。
同じようにして、1,000 未満の 3 か 5 の倍数になっている数字の合計を求めよ。
Problem 1 - PukiWiki
awk版
今回だけawkで変数使うとどうなるのかなーと思ってawkでも書いてみました。
BEGIN { x = 0; for(i = 1; i < 1000; i++) { if(i%3 == 0 || i%5 == 0) { x += i; } } print x; }
なんていうかBEGIN{}に囲まれてる以外はほぼCって感じのコードになった…。awkでは変数宣言が要らないらしいのでその辺が一番の違いか。
Ruby版
puts (1...1000).inject(0){|v,i| (i%3 == 0 || i%5 == 0) ? v+i:v }
そのまんまって感じ。Rubyで総和とか言われるとinject使ってみたくなっちゃう病。ただinjectは単語の意味が直感的じゃないと思うのは俺だけなんだろうか。
R版
x <- 0 for(i in 1:999) { if(i%%3 == 0 || i%%5 == 0) { x <- x + i } } x
考え方が手続き型すぎて全俺が泣いた。
このままではid:syou6162先生に怒られてしまうので必死に書き直した
sum(sapply(1:999, function(x){ifelse(x%%3&&x%%5, 0, x)}))
書き終わってみればとid:tor_ozaki氏と全く同じコードになっていた…
あと、lapplyでsumに突っ込もうとしたら出来なかった。Rにおけるリストとベクトルの違いがよく分からん…