43화 - 이걸 읽을 수 있다면... - Codewars Kata (6규)

지침




문자열을 조종사의 알파벳(NATO 음성 알파벳)으로 번역해야 합니다.

메모:

There are preloaded dictionary you can use, named NATO
The set of used punctuation is ,.!?.
Punctuation should be kept in your return string, but spaces should not.
Xray should not have a dash within.
Every word and punctuation mark should be seperated by a space ' '.
There should be no trailing whitespace



예시

입력:

If, you can read?



산출:

India Foxtrot , Yankee Oscar Uniform Charlie Alfa November Romeo Echo Alfa Delta ?



내 솔루션:



function to_nato(words) {
  let arr = words.split('').filter(x=> x!== ' ')
  let r = ''
  arr.map((x,i)=>{
    let letter = x.toLowerCase()
    let coded = NATO[letter]
    if(i !== arr.length - 1 && coded) r+=coded + ' '
    else if(i == arr.length- 1 && coded) r += coded
    else if(i !== arr.length - 1 && !coded) r += letter + ' '
    else r+=letter
  })
  return r
}


설명



먼저 문자열이 배열로 분할된 변수와 마지막 결과를 저장할 빈 문자열이 있는 또 다른 변수 "r"을 만들었습니다.

  let arr = words.split('').filter(x=> x!== ' ')
  let r = ''



그런 다음 해당 배열을 2개의 매개변수, x: 매핑되는 문자 및 i: 인덱스로 매핑했습니다.
루프에서 먼저 문자를 소문자로 변환한 다음 변수를 "coded"로 만들어 NATO 개체를 사용하여 파일럿 알파벳으로 문자를 저장했습니다.

  arr.map((x,i)=>{
    let letter = x.toLowerCase()
    let coded = NATO[letter]



그런 다음 4가지 조건문을 사용했습니다.
1- 문자의 인덱스가 배열 길이 - 1과 같지 않으면 마지막 문자가 아니며 coded가 정의되지 않았음을 의미하므로 존재한다는 의미이므로 결과 문자열에 추가하겠습니다. 코드와 공백

    if(i !== arr.length - 1 && coded) r+=coded + ' '
    else r+=letter



2- 문자가 배열의 마지막 문자이고 코딩된 경우 마지막 문자이기 때문에 sapce 없이 결과에 코딩을 추가합니다.

    else if(i == arr.length- 1 && coded) r += coded



3- 그렇지 않으면 마지막 문자가 아니고 코딩된 문자열이 없으면 .?!와 같은 기호 중 하나라는 의미이므로 공백이 있는 문자를 추가합니다.

    else if(i !== arr.length - 1 && !coded) r += letter + ' '
    else r+=letter



4- 조건이 참이면 기호이고 배열의 마지막 요소이므로 공백이 필요하지 않으므로 문자만 추가합니다.

    else r += letter



결국 나는 방금 r을 반환했습니다.

    return r



이 솔루션에 대해 어떻게 생각하십니까? 👇🤔

My Github

Solve this Kata

좋은 웹페이지 즐겨찾기