RubyGuides
Share this post!

Ruby Coding Challenges & How to Solve Them

Doing coding challenges is an excellent way to improve your Ruby & problem-solving skills.

Why?

Because you put all your focus on solving 1 specific problem.

You don’t have to worry about anything else.

They stretch your thinking skills, allow you to explore interesting language features & most of them can be finished in under 1 hour.

Some of these challenges require specialized knowledge about some algorithm or way to do things.

It’s ok if you can’t solve a lot of them.

Now:

I think it can be helpful to read a few solutions to get a feeling for the process of solving these challenges.

Finding Duplicates

This first challenge is that given an array with Integer values you need to find all the duplicated numbers.

Here’s an example:

numbers = [1,2,2,3,4,5]

find_duplicates(numbers)
# [2]

Let’s start with a question…

“How can I know if a particular number is duplicated?”

I’m not trying to get the solution in one step.

At this stage I just want to ask & answer a question that will get me closer to the solution.

Write down a few ideas:

  • I can count how many of each number we have in the array, then count = 2 means duplicate.
  • I can go over every element & keep a list of “seen” elements, if I see an element twice then we found a duplicate.
  • I can join the numbers into a string & try to match the duplicated numbers with a regular expression.

It doesn’t matter “which is best” at this point.

Don’t worry about that!

Right now, what’s important is to get a working solution. Pick one that sounds good to you & write the code for it.

Example:

seen = []

numbers.each_with_object([]) do |n, dups|
  dups << n if seen.include?(n)

  seen << n
end

# [2]

This seems like the correct solution.

Now:

You want to try other inputs (different arrays) to make sure this really works, writing unit tests is great for this.

If the solution is 100% working then you can try the other solutions & use the one that's easier to understand.

Don't look for perfection.

Look for learning, understanding & making progress every day!

Valid Words

Given an array of characters & one word, find out if the word can be made from these characters.

Example:

word = "orange"
characters = %w(e n g a r o)

valid_word?(characters, word)
# true

Again we start with a question to direct our thinking process.

"How can we make sure that the word can be made with these characters?"

Come up with ideas.

Put away the distractions & think about it.

It may help to do this on paper.

My ideas:

  • For every character in word, remove that character from the characters array, if you can't remove all the characters then return false
  • Count all the characters in word & characters, then subtract the counts

Here's a possible solution:

word
  .each_char
  .all? { |ch| characters.delete_at(characters.index(ch)) rescue nil }

What's your solution?

Share it in the comments section.

Summary

You have learned about coding challenges & how to use them to improve your Ruby skills!

Remember:

It's perfectly ok to not be able to solve a specific challenge. Think of it like a video game boss, if the boss is level 100 & you're level 70 it's going to be really hard to beat this boss.

What do you do in that case?

You go level up & get experience with easier challenges (lower level bosses), and you get better gear (learning more about Ruby & programming).

Leave a Comment: