Created
January 31, 2015 14:48
-
-
Save DiegoCoronel/75b97fc654663fe13790 to your computer and use it in GitHub Desktop.
FizzBuzz Ceylon
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
//Testes | |
import ceylon.test { | |
test, | |
assertEquals | |
} | |
import fizzbuzz { | |
FizzBuzz | |
} | |
test | |
shared void amostragemDevePossuirApenasNumeros() { | |
value fizzBuzz = FizzBuzz(10); | |
assertEquals(fizzBuzz[1], "1"); | |
assertEquals(fizzBuzz[2], "2"); | |
assertEquals(fizzBuzz[4], "4"); | |
assertEquals(fizzBuzz[7], "7"); | |
} | |
test | |
shared void amostragemDevePossuirApenasBuzz() { | |
value fizzBuzz = FizzBuzz(30); | |
assertEquals( fizzBuzz[5], "buzz"); | |
assertEquals( fizzBuzz[10], "buzz"); | |
assertEquals( fizzBuzz[20], "buzz"); | |
assertEquals( fizzBuzz[25], "buzz"); | |
} | |
test | |
shared void amostragemDevePossuirApenasFizz() { | |
value fizzBuzz = FizzBuzz(30); | |
assertEquals( fizzBuzz[3], "fizz"); | |
assertEquals( fizzBuzz[6], "fizz"); | |
assertEquals( fizzBuzz[9], "fizz"); | |
assertEquals( fizzBuzz[12], "fizz"); | |
} | |
test | |
shared void amostragemDevePossuirApenasFizzBuzz() { | |
value fizzBuzz = FizzBuzz(30); | |
assertEquals( fizzBuzz[15], "fizzbuzz"); | |
assertEquals( fizzBuzz[30], "fizzbuzz"); | |
} | |
test | |
shared void itemForaDosLimitesDeveSerNulo() { | |
value fizzBuzz = FizzBuzz(30); | |
assertEquals( fizzBuzz[-1], null); | |
assertEquals( fizzBuzz[0], null); | |
assertEquals( fizzBuzz[31], null); | |
} | |
//Implementação | |
shared class FizzBuzz(Integer limite) | |
satisfies Iterable<String, Null> & Correspondence<Integer, String> { | |
shared actual Iterator<String> iterator() { | |
object iterable satisfies Iterator<String> { | |
variable Integer current = 1; | |
shared actual String|Finished next() { | |
if(current > limite) { | |
return finished; | |
} | |
String result; | |
if(isFizzBuzz(current)) { | |
result = "fizzbuzz"; | |
} else if(isFizz(current)) { | |
result = "fizz"; | |
} else if(isBuzz(current)) { | |
result = "buzz"; | |
} else { | |
result = current.string; | |
} | |
current++; | |
return result; | |
} | |
} | |
return iterable; | |
} | |
shared Boolean isFizz(Integer i) => i % 3 == 0; | |
shared Boolean isBuzz(Integer i) => i % 5 == 0; | |
shared Boolean isFizzBuzz(Integer i) => isFizz(i) && isBuzz(i); | |
defines(Integer key) => 1 <= key <= limite; | |
get(Integer key) => if (defines(key)) then skip(key-1).first else null; | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment