- こちらでFizzBuzz問題というのを扱われている
- こちらではFizzBuzz問題の背景について触れられている
- こちらでプログラムを組む群とプログラムを組まない群とが2峰性の分布を作る話がされている
- 2峰性を成す形質と1峰性を成す形質との、違いは何だろう?
- 男女は「(男)性決定因子」の存在で分ける
- 枝分かれ・結晶成長などでは、「過去」に上乗せする確率過程が「分岐」を作る
- この問題の特徴は、「実行結果」が合っているか間違っているかの判定を、(プログラムを書く人が)すぐに判断できること
- プログラムを書くときに、「どういう作業結果になるか」が「スカッと」わかった状態で書くことは大事
- さて。この問題は、
- 「1から順に数えていく」
- 「数える〜序数」さえわかれば、割り算とか掛け算とか割り切れるとか剰余とか公倍数か何も要らない
- 「条件が2種類ある」
- 「k段ごと増える」・・・k個で元に戻る
- 「xから始める」
- 「2種類の条件から2通りの条件にする」
- x1から始めてk1段ごと
- x2から始めてk2段ごと
- 「2通りの条件を組み合わせて2^2=4条件にする」・・・公倍数というのは条件の組み合わせ
- こうしておけば、k=k1,k2,...ktになったり、x=x1,x2,...,xtになったりしても、t^2 の場合分けにすることだし、場合分けをした、それぞれの場合が実在するかどうかとかも特に気にしなくてよさそう
- ひとまず、3と5とで割り切れる、という具体例を
k1 <- 3
k2 <- 5
cnt1 <- 1
cnt2 <- 1
n <- 100
for(i in 1:n){
if(cnt1 == 0){
if(cnt2 == 0){
print("fizzbuzz")
}else{
print("fizz")
}
}else{
if(cnt2 == 0){
print("buzz")
}else{
print(i)
}
}
cnt1 <- cnt1 + 1
cnt2 <- cnt2 + 1
if(cnt1 == k1){
cnt1 <- 0
}
if(cnt2 == k2){
cnt2 <- 0
}
}
t <- 5
ks <- sample(5:20,t)
xs <- sample(1:4,t,replace = TRUE)
L <- letters[1:t]
n <- 100
cnts <- xs
for(i in 1:n){
tmp <- paste(L[which(cnts ==0)],sep="")
if(length(tmp)==0){
tmp <- i
}
print(tmp)
cnts <- cnts + 1
for(j in 1:t){
if(cnts[j] == ks[j]){
cnts[j] <- 0
}
}
}
- 条件を任意にした上で、それを「3,5、割り切れる」にして、再度実行
t <- 2
ks <- c(3,5)
xs <- c(1,1)
L <- letters[1:t]
n <- 100
cnts <- xs
for(i in 1:n){
tmp <- paste(L[which(cnts ==0)],sep="")
if(length(tmp)==0){
tmp <- i
}
print(tmp)
cnts <- cnts + 1
for(j in 1:t){
if(cnts[j] == ks[j]){
cnts[j] <- 0
}
}
}
[1] 1
[1] 2
[1] "fizz"
[1] 4
[1] "buzz"
[1] "fizz"
[1] 7
[1] 8
[1] "fizz"
[1] "buzz"
[1] 11
[1] "fizz"
[1] 13
[1] 14
[1] "fizzbuzz"
[1] 16
[1] 17
[1] "fizz"
[1] 19
[1] "buzz"
[1] "fizz"
[1] 22
[1] 23
[1] "fizz"
[1] "buzz"
[1] 26
[1] "fizz"
[1] 28
[1] 29
[1] "fizzbuzz"
[1] 31
[1] 32
[1] "fizz"
[1] 34
[1] "buzz"
...
[1] 1
[1] 2
[1] 3
[1] 4
[1] "e"
[1] 6
[1] 7
[1] "d"
[1] 9
[1] "e"
[1] 11
[1] "a"
[1] 13
[1] "b"
[1] "e"
[1] 16
[1] 17
[1] "c" "d"
[1] 19
[1] "e"
[1] 21
[1] 22
[1] 23
[1] 24
[1] "a" "e"
[1] 26
[1] 27
[1] "d"
[1] "b"
[1] "e"
[1] 31
[1] 32
[1] 33
[1] 34
[1] "e"
[1] 36
[1] 37
[1] "a" "c" "d"
[1] 39
[1] "e"
[1] 41
[1] 42
[1] 43
[1] "b"
[1] "e"
[1] 46
[1] 47
[1] "d"
[1] 49
[1] "e"
[1] "a"
[1] 52
[1] 53
[1] 54
[1] "e"
[1] 56
[1] 57
[1] "c" "d"
[1] "b"
[1] "e"
[1] 61
[1] 62
[1] 63
[1] "a"
[1] "e"
[1] 66
[1] 67
[1] "d"
[1] 69
[1] "e"
[1] 71
[1] 72
[1] 73
...
[1] 1
[1] 2
[1] "a"
[1] 4
[1] "b"
[1] "a"
[1] 7
[1] 8
[1] "a"
[1] "b"
[1] 11
[1] "a"
[1] 13
[1] 14
[1] "a" "b"
[1] 16
[1] 17
[1] "a"
[1] 19
[1] "b"
[1] "a"
[1] 22
[1] 23
[1] "a"
[1] "b"
[1] 26
[1] "a"
[1] 28
[1] 29
[1] "a" "b"
[1] 31
[1] 32
[1] "a"
[1] 34
[1] "b"