Swiftでいこう -- 定番!fizzBuzz
3の倍数のときは「Fizz」と、5の倍数のときは「Buzz」、3と5両方の倍数の場合には「FizzBuzz」と出力させるものです。
func fizzBuzz(_ numberOfTurns: Int) {
for i in 1...numberOfTurns {
var result = ""
if i % 3 == 0 {
result += "Fizz"
}
if i % 5 == 0 {
result += (result.isEmpty ? "" : " ") + "Buzz"
}
if result.isEmpty {
result += "\(i)"
}
print(result)
}
}
まず
fizzBuzz(_ numberOfTurns: Int) で"for i in 1...numberOfTurns"ということなので。
numberOfTurnsまで調べます。
fizzBuzz(15)ですと"15"まで調べて出力します。
変数"result"に調べた結果を入れて行きます。
var result = ""
"3"で割り切れるのときは"Fizz"として"result"に追加します。
if i % 3 == 0 {
result += "Fizz"
}
"5"だけで割り切れるのときは"Buzz"、"3"、"5"で割り切れるときは"Fizz Buzz"を "result"に追加します。
ポイントは(result.isEmpty ? "" : " ")の部分です。先に"i % 3 == 0"であった場合は"result"に"Fizz"が追加済みであるか判定しています。
追加がない場合、3で割り切れない場合は "" であるので"Buzz"のみを追加します。
3で割り切れる場合はすでに"Fizz"が追加されているので " " スペースを空けて、"Buzz"を追加するので、結果"Fizz Buzz"となって出力されます。
if i % 5 == 0 {
result += (result.isEmpty ? "" : " ") + "Buzz"
}
それで、3でも5でも割り切れない場合は "\(i)" ということでそのままの数字を出力します。
if result.isEmpty {
result += "\(i)"
}
fizzBuzz(15)ですと、1から15までの数字をまず"1"を調べて出力、つぎに"2"を調べて、という感じで15まで調べます。
print(result)
結果
1
2
Fizz
4
Buzz
Fizz
7
8
Fizz
Buzz
11
Fizz
13
14
Fizz Buzz
と表示されます。
この記事が気に入ったらサポートをしてみませんか?