# Ruby Interview Coding Challenges & How to Solve Them

Doing coding challenges is an excellent way to improve your Ruby & problem-solving skills. And to prepare for coding interviews!

Why?

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

You don’t have to worry about anything else.

This kind of practice will expand your thinking skills, allow you to explore interesting language features & become a better Ruby developer.

Some of these challenges require specialized knowledge about a computer algorithm, data structure or concept,  like some math trick.

It’s ok if you can’t solve most of these.

Don’t worry!

Now:

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

Starting with…

## Challenge 1: 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]
```

“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.

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!

## Challenge 2: 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
```

“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 }
```

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).

Good luck & have fun! ðŸ™‚