Problem
- Given an array as an argument complete the function that should return the total number of smiling faces.
- Each smiley face must contain a valid pair of eyes. (
:
or ;
)- 각 웃는 얼굴에는 유효한 한 쌍의 눈이 있어야 한다.
- A smiley face can have a nose but it does not have to. (
-
or ~
)- 웃는 얼굴에는 코가 있을 수 있지만 꼭 있어야 하는 것은 아니다.
- Every smiling face must have a smiling mouth that should be marked. (
)
or D
)
Solution 01
function countSmileys(arr) {
const smileys = [':)', ':D', ':-)', ':~)', ':-D', ':~D', ';)', ';D', ';-)', ';~)', ';-D', ';~D'];
let count = 0;
for (let i = 0; i < arr.length; i++) {
for (let j = 0; j < smileys.length; j++) {
if (arr[i] === smileys[j]) {
count++;
}
}
}
return count;
}
countSmileys([]); // 0
countSmileys([':)']); // 1
countSmileys([':(']); // 0
countSmileys([':)', ':D', ';-)', ':~D']); // 4
countSmileys([';(', ':-]', ':}', ':->']); // 0
Solution 02
function countSmileys(arr) {
const smileys = [':)', ':D', ':-)', ':~)', ':-D', ':~D', ';)', ';D', ';-)', ';~)', ';-D', ';~D'];
let count = 0;
for (let i = 0; i < arr.length; i++) {
if (smileys.includes(arr[i])) {
count++;
}
}
return count;
}
countSmileys([]); // 0
countSmileys([':)']); // 1
countSmileys([':(']); // 0
countSmileys([':)', ':D', ';-)', ':~D']); // 4
countSmileys([';(', ':-]', ':}', ':->']); // 0
Solution 03
function countSmileys(arr) {
const regExp = /[:;][-~]?[)D]/;
let count = 0;
for (let i = 0; i < arr.length; i++) {
if (regExp.test(arr[i])) {
count++;
}
}
return count;
}
countSmileys([]); // 0
countSmileys([':)']); // 1
countSmileys([':(']); // 0
countSmileys([':)', ':D', ';-)', ':~D']); // 4
countSmileys([';(', ':-]', ':}', ':->']); // 0
Solution 04
function countSmileys(arr) {
const regExp = /[:;][-~]?[)D]/;
let count = 0;
for (let i of arr) {
if (regExp.test(i)) {
count++;
}
}
return count;
}
countSmileys([]); // 0
countSmileys([':)']); // 1
countSmileys([':(']); // 0
countSmileys([':)', ':D', ';-)', ':~D']); // 4
countSmileys([';(', ':-]', ':}', ':->']); // 0
Solution 05
function countSmileys(arr) {
const regExp = /[:;][-~]?[)D]/;
let count = 0;
if (arr.length === 0) return 0;
arr.forEach(i => {
if (regExp.test(i)) {
count++;
}
});
return count;
}
countSmileys([]); // 0
countSmileys([':)']); // 1
countSmileys([':(']); // 0
countSmileys([':)', ':D', ';-)', ':~D']); // 4
countSmileys([';(', ':-]', ':}', ':->']); // 0
Solution 06
function countSmileys(arr) {
return arr.reduce((total, i) => total + /[:;][-~]?[)D]/.test(i), 0);
}
countSmileys([]); // 0
countSmileys([':)']); // 1
countSmileys([':(']); // 0
countSmileys([':)', ':D', ';-)', ':~D']); // 4
countSmileys([';(', ':-]', ':}', ':->']); // 0
Solution 07
function countSmileys(arr) {
return arr.filter(i => /[:;][-~]?[)D]/.test(i)).length;
}
countSmileys([]); // 0
countSmileys([':)']); // 1
countSmileys([':(']); // 0
countSmileys([':)', ':D', ';-)', ':~D']); // 4
countSmileys([';(', ':-]', ':}', ':->']); // 0