# JavaScript Coding Challenge #10

Ever heard of CodeFights? If you didn’t, you must sign up now! It’s a lot of fun, I promise! :D

I’ve played some time and last week and I ended up on top 1. ^_^

CodeFights is a website where you can test your coding skills against friends, co-workers and company bots. And the best part is that they have support for a lot of programming languages, including JavaScript. Yey!

It’s great if you want to prepare yourself for an interview because they have a lot of interview problems.

Today we’re going to take a look at one of them which is called: the Line Encoding problem:

Given a string, return its encoding defined as follows:
First, the string is divided into the least possible number of disjoint substrings consisting of identical characters, for example, `"aabbbc"` is divided into `["aa", "bbb", "c"]`.
Next, each substring with length greater than one is replaced with a concatenation of its length and the repeating character, for example, substring `"bbb"` is replaced by `"3b"`.
Finally, all the new strings are concatenated together in the same order and a new string is returned.
Example
For `s = "aabbbc"`, the output should be `lineEncoding(s) = "2a3bc"`.

To be honest, it took me a while until I figured it out, but it was a lot of fun! I recommend you do the same before you continue to read this. It will help you a lot on the long run if you struggle with it instead of just jumping to the end.

My approach is a bit different then what they suggest in the problem, but it does the trick. :D

First we need to loop through all the letters of the string and compare each pair of two consecutive letters:

`function lineEncoding(s) {        for(var i=0; i < s.length; i++){        if(s[i] === s[i+1]){`
`        }    }}`

We’re going to add a count `x` which will hold the number of identical consecutive letters, and also a variable `result` in which we’re going to save the final output of your program:

`function lineEncoding(s) {    var x = 1;        var result = '';`
`    for(var i=0; i < s.length; i++){        if(s[i] === s[i+1]){`
`        }    }    return result;}`

We initialize `x` with `1` and increment it by `1` every time the next letter is identical.

`function lineEncoding(s) {    var x = 1;        var result = '';`
`    for(var i=0; i < s.length; i++){        if(s[i] === s[i+1]){            x += 1;        }    }    return result;}`

Now we’re going to store a concatenation of `x` with the current letter `s[i]` everytime the next letter `s[i+1]` is different. We also need to reset `x`:

`function lineEncoding(s) {    var x = 1;        var result = '';`
`    for(var i=0; i < s.length; i++){        if(s[i] === s[i+1]){            x += 1;        } else {            result += x+s[i];            x = 1;        }    }    return result;}`

Great! Now let’s test it:

`lineEncoding('aabbbc'); // 2a3b1clineEncoding('aabbbcccc'); // 2a3b4c`

Hmmm… It works almost well… but the problem is that we print `1` also. The problem says that we can only print the length of the substring which is bigger than one.

This little issue can be solved easily with the string’s replace function:

`function lineEncoding(s) {    var x = 1;        var result = '';`
`    for(var i=0; i < s.length; i++){        if(s[i] === s[i+1]){            x += 1;        } else {            result += x+s[i];            x = 1;        }    }    return result.replace(/1/g, '');}`

We’re passing a regular expression `/1/g` which matches every occurrence of the character `1` and replace it with an empty string `''`.

### Conclusion

Do you have a better solution for this problem? Please don’t hesitate to let me know about it in the comments sections bellow. I’ve learned a lot from people who submitted their own solutions on the previous coding challenges. Find out more about them here.

I hope you enjoyed this and I would sincerely appreciate a click on the Recommend button 💚.

Happy coding! ^_^

Like what you read? Give Florin Pop a round of applause.

From a quick cheer to a standing ovation, clap to show how much you enjoyed this story.