Count the smiley faces!

Count the smiley faces!

Description: - Given an array (arr) as an argument complete the function countSmileys that should return the total number of smiling faces.

Rules for a smiling face:

  • Each smiley face must contain a valid pair of eyes. Eyes can be marked as : or ;
  • A smiley face can have a nose but it does not have to. Valid characters for a nose are - or ~
  • Every smiling face must have a smiling mouth that should be marked with either ) or D.
  • No additional characters are allowed except for those mentioned.
  • Valid smiley face examples:   -   :)  :D  ;-D  :~) Invalid smiley faces:   -   ;(  :>   :}   :]

Example cases: countSmileys([':)',  ';(',  ';}',  ':-D']); // should return 2; countSmileys([';D',  ':-(',  ':-)',  ';~)']); // should return 3; countSmileys([';]',  ':[',  ';*',  ':$',  ';-D']); // should return 1;

주어진 배열에 Smile Faces가 몇 개 있는지 확인 후, 그 수를 반환하는 문제입니다.

문자열의 순서에 따라 적합한 character가 들어 갔는지 확인하면 되는 간단한 문제입니다. 하지만, 스마일의 '코'는 있어도 되고 없어도 되기 때문에 문자열의 길이기 2일때와 3일때 두 가지로 조건을 다르게 주어 코드를 짰습니다.

function countSmileys(arr) {
  var count = 0;

  arr.forEach(function(cur) {
    if (cur[0] === ':' || cur[0] === ';') {
      if (cur.length === 2 && (cur[1] === ')' || cur[1] === 'D')) {
        count++;
      } else if (cur.length === 3 && (cur[1] === '-' || cur[1] === '~')) {
        if (cur[2] === ')' || cur[2] === 'D') {
          count++;
        }
      }
    }
  });
  return count;
}

정규 표현식을 사용하면 좀 더 간략하게 코드를 짤 수 있을 것 같은데 향후에 정규 표현식으로 다시 풀어봐야 겠습니다.