성냥개비

코드 출현 2015 8일 차



1 부


  • escape 방, 응?
  • reduce() , replaceAll()eval() 우승!

  • 방 탈출, 응?


  • 이스케이프 문자로 가득 찬 문자열
  • 모두 처리해야 해
  • 원시 길이와 가공 길이 비교

  • reduce() , replaceAll() 및 eval() 승리!



    원시 텍스트의 문자 수를 세는 것은 간단합니다.
  • 입력 파일이 모든 문자를 포함하는 하나의 긴 문자열입니다
  • .
  • 개행 문자만 제거하면 됩니다.

  • input.replaceAll('\n','').length
    

    eval()를 사용하면 인메모리 문자를 쉽게 계산할 수 있습니다.
  • 모든 문자열
  • eval()로 전달될 때
  • 메모리 내 형식을 취함

  • 따라서 "aaa\"aaa"와 같은 문자열 ...

    ...다음과 같이 eval uated 후:

    eval("aaa\"aaa")
    


    ...되다aaa"aaa
    거기에서 길이가 필요합니다.
    reduce() 안에 래핑하면 JavaScript의 내 메모리 내 문자 계산 알고리즘은 다음과 같습니다.

    input.split('\n')
      .reduce(
        (sum, str) => sum += eval(str).length
      , 0)
    


    전자의 합계에서 후자의 합계를 뺀 후 정답을 생성했습니다!

    2 부


  • 입력: regex 및 수학

  • 입력: 정규식 및 수학


  • regex 각 문자열
  • 에서 \"의 모든 항목을 계산합니다.
  • 각 인코딩된 문자열의 총 문자 수를 계산하는 수학
  • regex는 다음과 같습니다.

    /\\|\"/g
    


  • \\는 모든 백슬래시 문자
  • 와 일치합니다.
  • |
  • 중 하나와 일치합니다.
  • \"는 모든 큰따옴표 문자
  • 와 일치합니다.

    수학은 다음과 같습니다.

    Set specials to the count of all \ and " characters
    Set others to the difference between all characters and specials
    Set total to 2 + others + specials times 2
    


  • 추가된 큰따옴표에 대한 추가 계정 2개

  • 예:

    "aaa\"aaa"
    
    specials = ",\,"," -> 4
    others = a,a,a,a,a,a -> 6
    total = 2 + 6 + (4 * 2) => 16
    

    reduce() 안에 래핑하면 JavaScript에서 인코딩된 문자 계산 알고리즘은 다음과 같습니다.

    input.split('\n')
      .reduce(
        (sum, str) => {
          let specials = [...str.matchAll(/\\|\"/g)].length
          let others = str.length - specials
          return sum + 2 + others + specials * 2
        }
      , 0)
    


    원래 합계에서 새 합계를 뺀 후 정답을 생성했습니다!

    JavaScript의 두 부분에 대한 전체 알고리즘:

    let codeChars = input.replaceAll('\n','').length
    let memoryChars = input.split('\n')
      .reduce(
        (sum, str) => sum += eval(str).length
      , 0)
    let encodedChars = input.split('\n')
      .reduce(
        (sum, str) => {
          let extra = [...str.matchAll(/\\|\"/g)].length
          let others = str.length - extra
          return sum + 2 + others + extra * 2
        }
      , 0)
    console.log("Part 1", codeChars - memoryChars)
    console.log("Part 2", encodedChars - codeChars)
    


    내 알고리즘, 애니메이션:


    해냈어!!


  • 두 부분 모두 해결했습니다!
  • reduce() , regex , replaceAll() , eval() 를 사용하고 약간의 산술!

  • 그것은 소프트볼 퍼즐처럼 느껴졌습니다.

    하지만 시리즈의 첫 해이고 첫 10일에 접어들었습니다.

    끝까지 별 두 개를 버는 날이 되기를 바랍니다!

    좋은 웹페이지 즐겨찾기