ベクトル処理版FizzBuzz
J言語と同じ方法をなぞってみる
1〜15をaに代入 > a = 1:15 > a [1] 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 3の剰余を求める > a %% 3 [1] 1 2 0 1 2 0 1 2 0 1 2 0 1 2 0 その結果を0と比較する > a %% 3 == 0 [1] FALSE FALSE TRUE FALSE FALSE TRUE FALSE FALSE TRUE FALSE FALSE TRUE [13] FALSE FALSE TRUE 真の位置に対応するaの値を取り出す > a[a %% 3 == 0] [1] 3 6 9 12 15 インデックスに対応する場所をFizzで置換する > replace(a, a[a %% 3 == 0], 'Fizz') [1] "1" "2" "Fizz" "4" "5" "Fizz" "7" "8" "Fizz" "10" [11] "11" "Fizz" "13" "14" "Fizz" この処理を関数化 > foo = function(n,s,a) replace(a,(1:15)[1:15 %% n == 0],s) 定義した関数を使ってFizzBuzzを出力 > cat(foo(15,'FizzBuzz',foo(5,'Buzz',foo(3,'Fizz',1:15)))) 1 2 Fizz 4 Buzz Fizz 7 8 Fizz Buzz 11 Fizz 13 14 FizzBuzz インデックスに対応する場所を置換する別解 > a = 1:15 > a[1:15 %% 3 == 0] = 'Fizz' > a[1:15 %% 5 == 0] = 'Buzz' > a[1:15 %% 15 == 0] = 'FizzBuzz' > cat(a) 1 2 Fizz 4 Buzz Fizz 7 8 Fizz Buzz 11 Fizz 13 14 FizzBuzz
初級Q&A アーカイブ(7) - RjpWiki
http://www.okada.jp.org/RWiki/?%BD%E9%B5%E9%A3%D1%A1%F5%A3%C1%20%A5%A2%A1%BC%A5%AB%A5%A4%A5%D6%287%29#x4e95cdc
Fizz-Buzz問題