likes.js
Codewars 알고리즘 풀이
Problem
- You probably know the ‘like’ system from Facebook.
- Facebook의 ‘like’ 시스템을 알고 있을 것이다.
- We want to create the text that should be displayed next to such an item.
- 옆에 표시할 텍스트를 작성하려고 한다.
- Implement a function, which must take in input array, containing the names of people who like an item.
- like를 누른 사람들의 이름을 포함하는 배열을 가져오는 함수를 작성한다.
- For 4 more names, the number in ‘and 2 others’ simply increases.
- 이름이 4개 이상인 경우, ‘and 2 others’와 같이 단순히 증가시킨다.
For example
likes([]) =>
no one likes this
likes([‘Sam’]) =>
Sam likes this
likes([‘Ralph’, ‘Lauren’]) =>
Ralph and Lauren like this
likes([‘Ralph’, ‘Lauren’, ‘Leo’]) =>
Ralph, Lauren and Leo like this
likes([‘Sam’, ‘Ralph’, ‘Lauren’, ‘Leo’]) =>
Sam, Ralph and 2 others like this
Solution 01
function likes(arr) {
if (arr.length === 0) return 'no one likes this';
if (arr.length === 1) return arr[0] + ' likes this';
if (arr.length === 2) return arr[0] + ' and ' + arr[1] + ' like this';
if (arr.length === 3) return arr[0] + ', ' + arr[1] + ' and ' + arr[2] + ' like this';
return arr[0] + ', ' + arr[1] + ' and ' + (arr.length - 2) + ' others like this';
}
likes([]); // no one likes this
likes(['Sam']); // Sam likes this
likes(['Ralph', 'Lauren']); // Ralph and Lauren like this
likes(['Ralph', 'Lauren', 'Leo']); // Ralph, Lauren and Leo like this
likes(['Sam', 'Ralph', 'Lauren', 'Leo']); // Sam, Ralph and 2 others like this
Solution 02
function likes(arr) {
switch(arr.length) {
case 0:
return 'no one likes this';
case 1:
return `${arr[0]} likes this`;
case 2:
return `${arr[0]} and ${arr[1]} like this`;
case 3:
return `${arr[0]}, ${arr[1]} and ${arr[2]} like this`;
default:
return `${arr[0]}, ${arr[1]} and ${arr.length - 2} others like this`;
}
}
likes([]); // no one likes this
likes(['Sam']); // Sam likes this
likes(['Ralph', 'Lauren']); // Ralph and Lauren like this
likes(['Ralph', 'Lauren', 'Leo']); // Ralph, Lauren and Leo like this
likes(['Sam', 'Ralph', 'Lauren', 'Leo']); // Sam, Ralph and 2 others like this
Solution 03
function likes(arr) {
return {
0: 'no one likes this',
1: `${arr[0]} likes this`,
2: `${arr[0]} and ${arr[1]} like this`,
3: `${arr[0]}, ${arr[1]} and ${arr[2]} like this`,
4: `${arr[0]}, ${arr[1]} and ${arr.length - 2} others like this`,
}[Math.min(4, arr.length)];
}
likes([]); // no one likes this
likes(['Sam']); // Sam likes this
likes(['Ralph', 'Lauren']); // Ralph and Lauren like this
likes(['Ralph', 'Lauren', 'Leo']); // Ralph, Lauren and Leo like this
likes(['Sam', 'Ralph', 'Lauren', 'Leo']); // Sam, Ralph and 2 others like this