2013-08-03 3 views
1

나는 CoderByte 운동을 통해 갈거야 나는 다음과 같은 문제를 건너 왔어요 추구 JSBIN에 있지만 Coderbyte 작동합니다, 자바 스크립트 언어를 사용>편지 알고리즘을 변경, 설명

을 함수 LetterChanges이 (캐릭터를) 전달 된 str 매개 변수를 가져 와서 다음 알고리즘을 사용하여 수정하십시오. 문자열에있는 모든 문자를 알파벳 뒤에 나오는 문자로 바꿉니다 (즉, c는 d가되고 z는 a가됩니다). 그런 다음이 새 문자열 (a, e, i, o, u)에서 모든 모음을 대문자로 바꾸고 마지막으로이 수정 된 문자열을 반환하십시오.

JSBin에서 썼다. (심지어 te,하지만 CoderByte에서는 그렇지 않다.) 내가 쓴 것이 정확하고 CoderByte에서 문제가된다면 커뮤니티에 요청하고 싶다. 코드가 잘못하고 문제가 JSBin 함께 다음과 같이

코드는 다음과 같습니다.. 당신이 언급 한 것처럼

function LetterChanges(str) { 
    var iLetters = str.split(''); 
    var newStr = []; 

    for (var i = 0; i < str.length; i++) { 
     if (/[a-y]/ig.test(iLetters[i])) { 
      newStr[i] = String.fromCharCode(iLetters[i].charCodeAt(0) + 1); 
      if (/[aeiou]/ig.test(newStr[i])) { 
       newStr[i] = newStr[i].toUpperCase(); 
      } 
     } else if (/[z]/ig.test(iLetters[i])) { 
      newStr[i] = "A"; 
     } else if (/[^A-Z]/ig.test(iLetters[i])) { 
      newStr[i] = iLetters[i]; 
     } 
    } 

    return newStr.join(''); 
} 
+0

관련없는 것처럼 보이지만 콘솔의 해당 백엔드 JS 러너와도 같은 오류가 발생합니다. –

+1

감사합니다. 테크니션 인터뷰를 위해 JS 근육을 펴고 이것이 내게 스트레스를주었습니다. – DefionsCode

답변

1

이 실제로 자신의 백엔드 JS 러너에 벌레처럼 보인다, 코드는 잘 실행 받아 들여야합니다. 지원에보고 할만한 가치가 있습니다.

여기 .replace()에 대체 솔루션 specifying a function as second parameter입니다 : CoderByte에 다음과 같은 대안

비교 코드가 실패하지만이 일을 다음과 때

function LetterChanges(str) { 
    return str.replace(/[a-z]/ig, function(c) { 
    return c.toUpperCase() === 'Z' ? 'A' : String.fromCharCode(c.charCodeAt(0) + 1); 
    }).replace(/[aeiou]/g, function(c) { 
    return c.toUpperCase(); 
    }); 
} 
+0

+1 나는 그 대답에 빛나는 대답을 좋아합니다. 내가 당신의 대답 때문에 내가 (내가 그들에 대해 더 많은 것을 배울 필요가있는) 나의 정규식 기술을 털어 내야했기 때문에 나는 말해야 만한다. 하지만 내 솔루션을 좀 봐. 이 부분을 얻지 못했습니다 ** c.toUpperCase() === 'Z'? 'A': ** – Danish

+0

@Danish "z는 하나가됩니다"부분입니다. 'toUpperCase'는 대소 문자를 구별하지 않고 적용하기 위해 적용됩니다 (z -> A, Z -> A). 알고리즘은 결국 모든 모음을 대문자로 사용하기 때문에 "A"문자는 항상 대문자입니다. 대답에 대한 –

+0

주셔서 감사합니다. 알고리즘은 결국 모음을 대문자로 사용하고 프로그램은 이미'String.fromCharCode (c.charCodeAt (0) + 1)'을 사용하여 단어를 다음 단어로 대체하기 때문에 정말 "z가 될"부분이 필요합니까? . 환호 – Danish

0

귀하의 코드가 jsfiddle에 나를 위해 잘 작동했다. 그들의 사이트에 문제가있는 것 같습니다.

function letterChanges(str) { 
    var newString = "", 
     code, 
     length, 
     index; 

    for (index = 0, length = str.length; index < length; index += 1) { 
     code = str.charCodeAt(index); 
     switch (code) { 
      case 90: 
       code = 65; 
       break; 
      case 122: 
       code = 97 
       break; 
      default: 
       if ((code >= 65 && code < 90) || (code >= 97 && code < 122)) { 
        code += 1; 
       } 
     } 

     newString += String.fromCharCode(code); 
    } 

    return newString.replace(/[aeiou]/g, function (character) { 
     return character.toUpperCase(); 
    }); 
} 

console.log(LetterChanges("Then capitalize every vowel in this new string (a, e, i, o, u) and finally return this modified string.")); 
console.log(letterChanges("Then capitalize every vowel in this new string (a, e, i, o, u) and finally return this modified string.")); 

출력 @의 응답 파브 매트 및 비트 설명으로부터 바로 다른 용액을 사용 정규식 /[a-z]/를 사용하여 Z까지 첫 알파벳을 얻고 하나를 추가하여 대체한다는 것이다

UIfO dbqjUbmjAf fwfsz wpxfm jO UIjt Ofx tUsjOh (b, f, j, p, v) bOE gjObmmz sfUvsO UIjt npEjgjfE tUsjOh. fiddle.jshell.net/:70 
UIfO dbqjUbmjAf fwfsz wpxfm jO UIjt Ofx tUsjOh (b, f, j, p, v) bOE gjObmmz sfUvsO UIjt npEjgjfE tUsjOh. 
0

각 문자열의 ASCII는 String.fromCharCode(Estr.charCodeAt(0)+1)을 사용하고 나머지는 모음이 다시 정규 표현식 [aeiou]을 사용하고 대문자로 된 문자열을 찾는 문제입니다.

function LetterChanges(str) { 
    return str.replace(/[a-z]/ig, function(Estr) { 
     return String.fromCharCode(Estr.charCodeAt(0)+1); 
    }).replace(/[aeiou]/ig, function(readyStr) { 
     return readyStr.toUpperCase(); 
    }) 
} 
관련 문제