challenge 変形Fizz-Buzz問題

どもraynstardです。
どちらにしようか迷いましたが発想の元ネタがUIさんの投稿からなので
こちらに投稿してみます。
--------------
以下の仕様を満たす文字列を
20行出力するプログラムを作成してください。

1. 1行の出力は「<行番号> ':' <メッセージ>」であること。
2. 行番号が 3の倍数であるとき、メッセージは「Fizz」であること
3. 行番号が 5の倍数であるとき、メッセージは「Buzz」であること
4. 行番号が 3の倍数かつ5の倍数であるとき、メッセージは「FizzBuzz」であること
5. 上記に記した条件以外のメッセージについては「hoge」であること
6. 条件分岐する場合、if文のみが使用でき、
   かつ、論理式が成立した場合の処理のみが記述できます。
#アセンブリなどifがなければif以外でもかまわないです。(意味が同じならば)

というわけでこの問題はFizz-Buzz問題をelseなしならどう書く?という問題です。

出力例:
 1:hoge
 2:hoge
 3:Fizz
 4:hoge
 5:Buzz
 6:Fizz
 7:hoge
 8:hoge
 9:Fizz
10:Buzz
11:hoge
12:Fizz
13:hoge
14:hoge
15:FizzBuzz
16:hoge
17:hoge
18:Fizz
19:hoge
20:Buzz

Posted feedbacks - R

素直に書いてみました。
Rならifすら必要ありませんね。
1
2
3
4
5
6
7
FizzBuzz <- function(n=20){
    v <- rep("hoge", n)
    v[!1:n%%3]  = "Fizz"
    v[!1:n%%5]  = "Buzz"
    v[!1:n%%15] = "FizzBuzz"
    cat(paste(1:n, v, sep=":"), sep="\n")
}

馬鹿馬鹿しい解を一つ
1
2
3
4
FizzBuzz <- function(n) {
    v <- rep(c("hoge", "hoge", "Fizz", "hoge", "Buzz", "Fizz", "hoge", "hoge", "Fizz", "Buzz", "hoge", "Fizz", "hoge", "hoge", "FizzBuzz"), n%/%15+1)[1:n]
    print(v)
}

出題意図が今一不明ですが,else を使うなというだけなら,以下のように書けるが,ifすら使う必要がないというkkobayashiさんの意見はごもっとも。
else を使わないというのは,なんの制約にもならないと思うのだが。。。
1
2
3
4
5
6
7
for (i in 1:20) {
    str <- "hoge"
    if (i %% 3 == 0) str <- "Fizz"
    if (i %% 5 == 0) str <- "Buzz"
    if (i %% 15 == 0) str <- "FizzBuzz"
    cat(i, ":", str, "\n")
}

if も else も要らない
1
2
3
FizzBuzz <- function(n) {
    for (i in 1:n) cat(i,":",c("hoge", "Fizz", "Buzz", "FizzBuzz")[(!(i%%3))+(!(i%%5))*2+1],"\n")
}


	
1
junk<- sapply(1:20, function(i) cat(i, ":", c("FizzBuzz", "hoge", "hoge", "Fizz", "hoge", "Buzz", "Fizz", "hoge", "hoge", "Fizz", "Buzz", "hoge", "Fizz", "hoge", "hoge")[i%%15+1], "\n"))

Index

Feed

Other

Link

Pathtraq

loading...