Duplicate Encoder

title

The goal of this exercise is to convert a string to a new string where each character in the new string is ‘(‘ if that character appears only once in the original string, or ‘)’ if that character appears more than once in the original string. Ignore capitalization when determining if a character is a duplicate.

example

1
2
3
4
5
6
7
"din" => "((("

"recede" => "()()()"

"Success" => ")())())"

"(( @" => "))(("


My solution

1
2
3
4
5
6
7
8
9
10
11
12
13
14
function duplicateEncode(word){
if(!word){return}
var str = word.toLowerCase();
var newStr = '';
for(var i = 0;i<str.length;i++){
var _char = str.charAt(i);
if(str.indexOf(_char) == str.lastIndexOf(_char) ){
newStr +='\(';
}else{
newStr +='\)';
}
}
return newStr;
}

good solution

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
function duplicateEncodes(word){
return word
.toLowerCase()
.split('')
.map( function (a, i, w) {
return w.indexOf(a) == w.lastIndexOf(a) ? '(' : ')'
})
.join('');
}

function duplicateEncodess(word) {
var letters = word.toLowerCase().split('')
return letters.map(function(c, i) {
return letters.some(function(x, j) { return x === c && i !== j }) ? ')' : '('
}).join('')
}