abbreviate.js

Codewars 알고리즘 풀이


Problem

  • The word ‘i18n’ is a common abbreviation of ‘internationalization’ in the developer community, used instead of typing the whole word and trying to spell it correctly.
    • ‘i18n’이라는 단어는 개발자 커뮤니티에서 ‘internationalization’의 약어로 사용된다.
  • Similarly, ‘a11y’ is an abbreviation of ‘accessibility’.
    • 마찬가지로 ‘a11y’는 ‘accessibility’의 약어이다.
  • Write a function that takes a string and turns any and all ‘words’ within that string of length 4 or greater into an abbreviation, following these rules:
    • 다음 규칙에 따라 길이가 4 이상인 문자열 내 ‘words’를 약어로 전환하는 함수를 작성한다.
  • A ‘word’ is a sequence of alphabetical characters.
    • ‘word’는 일련의 알파벳 문자이다.
  • By this definition, any other character like a space or hyphen will split up a series of letters into two words.
    • 이 정의에 따라 공백(space)이나 하이픈(hyphen) 같은 다른 문자는 일련의 문자를 두 단어로 나눈다.
  • The abbreviated version of the word should have the first letter, than the number of removed characters, then the last letter.
    • 단어의 약어 버전은 첫 글자, 제거된 글자 수, 마지막 글자가 있어야 한다.



Solution 01

function abbreviate(str) {
  return str.replace(/[a-zA-Z]{4,}/g, function(i) {
    return i[0] + (i.length - 2) + i.slice(-1);
  });
}

abbreviate('internationalization');            // i18n
abbreviate('accessibility');                   // a11y
abbreviate('Accessibility');                   // A11y
abbreviate('Elephant-rides are really fun!');  // E6t-r3s are r4y


Solution 02

function abbreviate(str) {
  return str.replace(/[a-z]{4,}/gi, function(i) {
    return i[0] + (i.length - 2) + i.slice(-1);
  });
}

abbreviate('internationalization');            // i18n
abbreviate('accessibility');                   // a11y
abbreviate('Accessibility');                   // A11y
abbreviate('Elephant-rides are really fun!');  // E6t-r3s are r4y


Solution 03

function abbreviate(str) {
  return str.replace(/\w{4,}/g, function(i) {
    return i[0] + (i.length - 2) + i.slice(-1);
  });
}

abbreviate('internationalization');            // i18n
abbreviate('accessibility');                   // a11y
abbreviate('Accessibility');                   // A11y
abbreviate('Elephant-rides are really fun!');  // E6t-r3s are r4y