FizzBuzz question

Uma das perguntas mais comuns do burburinho é esta:

Escreva um programa que imprima os números de 1 a 100.
Mas para múltiplos de três imprima “Fizz” em vez do
número e para os múltiplos de cinco imprima “Buzz”. Para
números múltiplos de três e cinco,
imprima “FizzBuzz”.

Eu escrevi isso em rubi.
No início meu objetivo era apenas fazer funcionar e foi isso que consegui.

range = 1..100
range
.each do |x|

if x % 3 == 0 && x % 5 == 0
puts
"FizzBuzz"
elsif x % 3 == 0
puts
"Fizz"
elsif x % 5 == 0
puts
"Buzz"
else
puts x

end

fim

Isso funcionou e minha próxima etapa foi refatorá-lo. Usei o que aprendi recentemente no curso de Ruby na Codecademy e foi isso que descobri.

(1..100).each{ |x|
y
= ""
y
+= '"Fizz" if x % 3 == 0
y += ''Buzz" if x % 5 == 0

puts ( y.empty? ? x : y )

}

Quando x for um múltiplo de 3, ele adicionará a palavra “fizz” a y
quando x for um múltiplo de 5, ele adicionará a palavra “buzz” a y
quando for um múltiplo de ambos, ele adicionará a palavra fizz e buzz a y.
Usei a operadora ternária para mostrar o número, se não for fizz, buzz ou fizzbuzz.
Essa última linha basicamente diz que se y estiver vazio então é verdadeiro e x será exibido. Se não estiver vazio (fizzbuzz dentro), é falso e y será exibido.

puts (y.empty?? true: false);

Espero que ajude alguém