-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathfizzbuzz.R
68 lines (54 loc) · 1.64 KB
/
fizzbuzz.R
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
# Run this once to install benchmark suite:
#install.packages(c("microbenchmark", "stringr"), dependencies = TRUE)
require(microbenchmark)
library(parallel)
# Setup parallelization particulars.
cores <- detectCores()
cluster <- makeCluster(cores)
gerardFizzBuzz <- function(i) {
fizz <- i %% 3
buzz <- i %% 5
if (fizz == 0 & buzz == 0) {
return('FizzBuzz')
}
else if (buzz == 0) {
return('Buzz')
}
else if (fizz == 0) {
return('Fizz')
}
return(i)
}
applyFizzBuzz <- function(range) {
return(lapply(1:range, gerardFizzBuzz))
}
parallelFizzBuzz <- function(range) {
return(parLapply(cluster, 1:range, gerardFizzBuzz))
}
vectorizedFizzBuzz <- function(range) {
v <- Vectorize(gerardFizzBuzz)
return(v(1:range))
}
papasmurfFizzBuzz <- function (range) {
res <- seq(1, range)
for (i in res){
if (i %% 3 == 0 & i %% 5 == 0){
res[i] <- 'FizzBuzz'
}
else if (i %% 5 ==0){
res[i] <- 'Buzz'
}
else if (i %% 3 == 0){
res[i] <- 'Fizz'
}
else{
res[i] <- i
}
}
return(res)
}
range <- 100000;
perf <- microbenchmark(applyFizzBuzz(range), vectorizedFizzBuzz(range), parallelFizzBuzz(range), papasmurfFizzBuzz(range), times=20)
# note the log scale.
boxplot(perf, names = c("lapply", "Vectorized", "parLapply", "forloop"))
stopCluster(cluster)