도전 도전 #002

4060 단어

문제.
문자열을 지정하고 함수를 만들어 마지막 네 문자를 제외한 모든 문자를 파운드 기호("#")로 변환합니다.복면을 한 밧줄을 내게 돌려줘.

가장자리 사례
그래서 이 문제는 매우 모호하지만, 테스트 용례가 뭔가를 밝힐 수 있으니, 나는 그것들을 여기에 두겠다!
maskify("4556364607935616") == "############5616"
maskify(     "64607935616") ==      "#######5616"
maskify(               "1") ==                "1"
maskify(                "") ==                 ""
그래, 이것이 우리에게 무엇을 알려주지?숫자 부분은 우리가 이미 알고 있다.우리가 모르는 것은 문자열의 길이가 4보다 작을 때 어떻게 해야 하는지, 지금 우리는 문자열만 되돌려 주는 것을 볼 수 있다.
이거 좋은데 편지는요?만약 당신이 안전 문제를 묻게 된다면 어떻게 합니까?그런 다음 문자열(문자와 공백으로 구성)의 마지막 네 글자만 찾습니다.

붕괴
우리가 진정으로 생각하기 전에 내가 하고 싶은 이야기.리턴 문장이것이 바로 내가 다시 읽어야 할 문제이다. 우리가 되돌아오는 문장을 필요로 하는지 아닌지를 보자.
읽기-----------------------------------------------------------
이 문제를 다시 한 번 읽으면 답은 정해지지 않지만 엣지 케이스 부분의 예를 보면 답은 긍정적이다.그들은 무엇일까요?사건마다 하나씩.그래, 그럼 상황은 어떨까?이 모든 것은 밧줄의 길이에 달려 있다.마지막 네 글자나 네 글자 이하를 가져올 수 없으면 문자열을 되돌려줍니다.다른 하나는 네 글자가 넘으면 차단 문자열을 되돌려줍니다.
function maskify(cc) {

  if(cc.length > 4){
     // do stuff 
   } else {
    return cc
  }
}
좋아, 우리는 이미 지금까지의 결과를 얻었다.이 예에서 문자열'cc'와 조건을 받아들이는 함수그런데 잠깐만, 우리 반품 성명 얘기하는 거 아니야? 그중에 하나만 봤어?하나는 어디 있어요?
우리가 되돌아오는 문장을 보기 전에, 우리는 조건문장에서 무슨 일이 발생했는지 토론해야 한다.그래서 프로그램의 이 점에서 우리는 우리가 얻은 문자열이 네 글자보다 크다는 것을 확신할 수 있다.우리는 마지막 네 자리 숫자를 포함하는 부품이 필요하다고 더 세분화할 수 있다.우리는 마지막 네 글자를 포함하는 하위 문자열을 포함하는 변수를 만들 수 있습니다.보아하니 이렇다!let lastFour = cc.substr(-4);다행이다. 우리는 그 배역들을 고정시켰다.이제 문자열의 나머지 부분을 계속 토론합시다.우리는 우리가 이 값들을 산열 표시로 바꾸어야 한다는 것을 알고 있지만, 우리는 어떻게 해야만 이 점을 할 수 있습니까?우선, 우리는 다른 하위 문자열을 가리키는 변수를 통해 이 값을 가져와야 한다.우리는 0에서 시작해서 이전에 필요로 했던 4를 줄여야 한다.보아하니 이렇다.let everythingButTheLastFour = cc.substr(0, cc.length - 4);우리는 아주 순조롭게 진행되었다. 우리는 마지막 네 개와 그 외의 모든 것을 얻었다.여전히 산열 표시를 해야 하지만, 우리는 우리가 필요로 하는 산열 표시의 수량을 저장할 수 있는 변수를 만들 수 있다.우리는 마지막 네 개를 제외한 모든 함수의 길이 함수를 호출하여 이 점을 실현하고 그것을 변수에 넣을 수 있다.보아하니 이렇다.let everythingButTheLastFourNum = everythingButTheLastFour.length;우리는 문자열에 마지막 네 글자의 문자가 포함되지 않는 숫자를 얻었다.우리는 하나하나에 해시 표시를 인쇄하기만 하면 된다.듣자하니 이것은 for 순환을 진행하는 좋은 기회라고 한다.그것은 이렇게 보인다.
for(let i = 0; i < everythingButTheLastFourNum; i++){
      '#';
    }
만약 네가 이것이 나쁜 코드라고 생각하지만, 그것이 작용하지 않는다면, 너는 옳다.내가 오래전 위조 코드에서 잃어버린 리턴 문장 기억나?이제 그것은 처음으로 선보일 것이다.edgecase 부분에서 보듯이 함수가 반환 문자열을 찾고 있습니다.그래서 우리는 반드시 하나를 해야 한다.조건 외에 빈 문자열을 포함하는 변수를 만들 것입니다.그것은 이렇게 보인다.let maskedCc = "";빈 문자열을 사용하여 해시 태그를 배치할 수 있습니다.
for(let i = 0; i < everythingButTheLastFourNum; i++){
      maskedCc += '#';
    }
우리는 여전히 마지막 네 글자를 추가해야 하기 때문에 지금 이렇게 하자.maskedCc += lastFour;마지막으로 가장 중요하지 않은 것은 모든 내용을 포함하는return 문장입니다.return maskedCc다음은 코드의 전체적인 모양입니다!:
function maskify(cc) {
    let maskedCc = "";
  if(cc.length > 4){
    let lastFour = cc.substr(-4);
    let everythingButTheLastFour = cc.substr(0, cc.length - 4);

    let everythingButTheLastFourNum = everythingButTheLastFour.length;

    for(let i = 0; i < everythingButTheLastFourNum; i++){
      maskedCc += '#';
    }
    maskedCc += lastFour;
     return maskedCc
  } else {
    return cc
  }
}


뭐 해!
이번 주에 나는 변수 이름에 있어서 더 잘했다고 생각하지만, for순환 변수 이름에 있어서는 일을 할 수 있다.나는 데이터 구조와 알고리즘에 더욱 익숙해져야 한다.나는 내가 그들과 잘 지낼수록 문제가 쉽게 해결될 것이라고 믿는다.다음 주에 내가 메워야 할 또 다른 공백은 빅O다. 빅O에 대한 글을 쓰고 가설을 하고 더 많은 테스트를 하자!나는 이것이 도움이 되기를 바란다. 이것은 매우 큰 즐거움이다.
- 고마워, 마이크

좋은 웹페이지 즐겨찾기