-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathDuplicateEncoder.js
More file actions
64 lines (52 loc) · 1.65 KB
/
Copy pathDuplicateEncoder.js
File metadata and controls
64 lines (52 loc) · 1.65 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
// URL: https://www.codewars.com/kata/54b42f9314d9229fd6000d9c/solutions/javascript
// Description
/*
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.
Examples
"din" => "((("
"recede" => "()()()"
"Success" => ")())())"
"(( @" => "))(("
Notes
Assertion messages may be unclear about what they display in some languages. If you read "...It Should encode XXX", the "XXX" is the expected result, not the input!
*/
// Code
// Solution 1
/*
function duplicateEncode(word){
let mem = [];
let duplicates = [];
let arr = word.toLowerCase().split('');
let output = '';
for (let i = 0; i < arr.length; i++) {
let char = arr[i];
if (mem.indexOf(char) < 0) {
mem.push(char);
} else {
duplicates.push(char);
}
}
for (let i = 0; i < arr.length; i++) {
let char = arr[i];
if (duplicates.indexOf(char) > -1) {
output += ')'
} else {
output += '('
}
}
return output
}
*/
// Solution 2
/*
function duplicateEncode(word){
const isDuplicate = Array.prototype.reduce.call(word, (isDuplicate, letter) => {
letter = letter.toLowerCase();
return (letter in isDuplicate ? isDuplicate[letter] = true : isDuplicate[letter] = false, isDuplicate);
}, {});
return Array.prototype.reduce.call(word, (output, letter) => {
letter = letter.toLowerCase();
return isDuplicate[letter] ? output + ')' : output + '(';
}, '');
}
*/