Skip to main content

37 Solving FizzBuzz in Ruby

Episode 127 · July 4, 2016

See how different approaches can affect the code you write using FizzBuzz as an example





Marc Gayle (320 XP) on

Love this episode Chris.

Would love to see more.

Thomas Connolly (50 XP) on

I tried the second solution and got an error "no implicit conversion of Fixnum into String" when using rails c with Pry; and NoMethodError: undefined method 'blank?' for String:Class when using irb:

[email protected]:~/paul$ irb
2.3.1 :001 > 1.upto(100) do |i|
2.3.1 :002 > str = ""
2.3.1 :003?>
2.3.1 :004 > str += "Fizz" if i % 3 == 0
2.3.1 :005?> str += "Buzz" if i % 5 == 0
2.3.1 :006?> str += i if str.blank?
2.3.1 :007?>
2.3.1 :008 > puts str
2.3.1 :009?> end
NoMethodError: undefined method `blank?' for "":String
from (irb):6:in `block in irb_binding'
from (irb):1:in `upto'
from (irb):1

What am I doing wrong?

Chris Oliver (169,610 XP) on

Oh you know what, I probably had access to ActiveSupport while I was doing that.

Add this line at the beginning if you have the active_support gem installed.

require 'active_support/core_ext'

The blank? method doesn't come from Ruby but most of my work being in Rails I'm so used to having it around. :)

Ilya Dolgirev (1,210 XP) on

You can use native Ruby string method .empty?

geo alarcon (20 XP) on

if you use pry works.


Nick McNeany (6,930 XP) on

Great episode Chris, would love to see more like this!

If anyone else is interested, a cool site to work on problems similar to FizzBuzz is I try to do one a week (Although it's been quite some time since my last one).

Brennen Awana (20 XP) on is also noteworthy.

Brittany Hicks (160 XP) on

Okay I'm hitting an error and I understand what it's saying but I'm more confused as to why it's happening.

`def fizzbuzz(start_num, end_num)
start_num.upto(end_num) do |n|
str = ""
str += "fizz" if n % 3 == 0
str += "buzz" if n % 5 == 0
str += n if str.empty?
puts str

fizzbuzz(1, 100)`

And when I run it....
`assessment_109.rb:7:in `+': no implicit conversion of Fixnum into String (TypeError)`

Changing the += to a = in the last line works (and since it's an empty string, it outputs the same)

Did anyone else run into this?
Is this just a typo that I'm over thinking or am I completely missing something here?

Thanks! :)

Chris Oliver (169,610 XP) on

You can do str += n.to_s if str.empty? instead because it's an integer and needs to be converted to a string before you can add those together.

Brittany Hicks (160 XP) on

Gotcha. :) Thanks Chris!

Andrew Cockerham on

Super helpful - would love more of this!


Trevor Johnson on

I hope you do more of these Chris. It's always great to see different ways people solve coding challenges.

yoshitakame on

I tried to solve the problem without defining empty string. But the result might be a bit more complicated.

1.upto(100) do |i|
str = 'fizz' if (i % 3).zero?
str = str ? 'fizzbuzz' : 'buzz' if (i % 5).zero?
str = i unless str
puts str

It's helpful to learn how to write clean and clear code!

Rodica Trifan (1,830 XP) on

Hi Chris, really like this example. I have a couple of pieces of feedback since I tried to run it and encountered issues. Line 19 needs to be str = i instead of str += i. Since str is started as a string, I get "no implicit conversion of Integer into String" when I try to add the i. Also, str.blank? works if you are in an ActiveSupport context. Otherwise, str.empty? is available.

Login or create an account to join the conversation.