countSmileys.js

Codewars 알고리즘 풀이


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