Llevo siguiendo la iniciativa 12 meses 12 katas desde que empezó en Enero. Sin embargo, este mes ha sido el primero que me he decidido a subir mi solución al problema planteado.

No obstante, me he quedado con un poco de ganas de más. Así, partiendo de que ya tenía unos tests definidos, decidí volver a hacer la kata, esta vez en Groovy. Como no quiero marear dejando mil soluciones en github, decido estrenar mi blog con el código groovy de la solución que se me ha ocurrido para esta kata, y partiendo de los tests que ya tenía diseñados en java.

  1. //KATA
  2. def fizz = { it%3 == 0 || Integer.toString(it).contains(«3») ?«Fizz»:«» }
  3. _
  4. def buzz = { it%5 == 0 || Integer.toString(it).contains(«5») ?«Buzz»:«» }
  5. _
  6. def sayFizzBuzz = {
  7. _ _result = fizz(it) + buzz(it)
  8. _ _if(result == «»){
  9. _ _ _ _return it
  10. _ _}
  11. _ _return result
  12. }
  13. _
  14. _
  15. //TESTS
  16. assert 1 == sayFizzBuzz(1)
  17. assert «Fizz» == sayFizzBuzz(3)
  18. assert «Buzz» == sayFizzBuzz(5)
  19. assert «FizzBuzz» == sayFizzBuzz(15)
  20. assert «Fizz» == sayFizzBuzz(13)
  21. assert «FizzBuzz» == sayFizzBuzz(35)
  22. assert «FizzBuzz» == sayFizzBuzz(53)
  23. assert «FizzBuzz» == sayFizzBuzz(54)
  24. assert «Buzz» == sayFizzBuzz(58)

Y esto es todo por hoy. De momento sólo he aprendido a trastear la consola de Groovy. A ver si poco a poco voy dándole más a este lenguaje, que por lo poquito que he tocado y lo mucho que he oído me está llamando bastante la atención.

Actualización:

Después de haber hablado con txingo, me ha ayudado a ver una solución más genérica y encima más corta:

  1. def say = {x, y, word ->
  2. _ _ !(x%y) || x.toString().contains(y.toString()) ?word:«»
  3. }
  4. _
  5. def sayFizzBuzz = {
  6. _ _ result = say(it, 3, «Fizz») + say(it, 5, «Buzz»)
  7. _ _ result.empty?it:result
  8. }