Skip to content

Instantly share code, notes, and snippets.

@sys1yagi
Last active August 29, 2015 14:02
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save sys1yagi/7f91574212818084d2a6 to your computer and use it in GitHub Desktop.
Save sys1yagi/7f91574212818084d2a6 to your computer and use it in GitHub Desktop.
swiftでfizzbuzz。 caseクラスぽいやつとタプルのパターンマッチと演算子オーバーロード使ってやりました。
enum FizzBuzz{
case None
case Fizz
case Buzz
case FizzBuzz
case Num(i : Int)
func print(){
switch self{
case .Fizz:
println("Fizz")
case .Buzz:
println("Buzz")
case .FizzBuzz:
println("FizzBuzz")
case let Num(i):
println(i)
default:
()
}
}
}
@infix func + (left: FizzBuzz, right: FizzBuzz) -> FizzBuzz {
switch (left, right){
case let (.Fizz, .None):
return .Fizz
case let (.None, .Buzz):
return .Buzz
case let (.Fizz, .Buzz):
return .FizzBuzz
case let (.Fizz, .Num):
return .Fizz
case let (.Buzz, .Num):
return .Buzz
case let (.FizzBuzz, .Num):
return .FizzBuzz
case let (.None, .Num(i)):
return .Num(i: i)
default:
return .None
}
}
func fizz(i: Int) -> FizzBuzz {
if i % 3 == 0 {
return .Fizz
}
return .None
}
func buzz(i: Int) -> FizzBuzz {
if i % 5 == 0 {
return .Buzz
}
return .None
}
func num(i: Int) -> FizzBuzz {
return .Num(i:i)
}
for i in 1...100{
(fizz(i) + buzz(i) + num(i)).print()
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment