스트림 처리

코드 출현 2017 9일 차



퍼즐 입력을 사용하여 시뮬레이터를 사용해보십시오!





1 부


  • 워킹 더 라인...다시
  • A for 루프 및 flag
  • 내 알고리즘 작성 및 테스트

  • 줄을 서서...다시



    2021 Day 10: Syntax Scoring이 생각난다

    몇 가지 차이점:
  • 구문 점수는 문자열 목록이었습니다. 이 퍼즐에는 하나의 긴 끈이 있습니다
  • .
  • 구문 스코어링은 corrupted 문자열을 식별하는 것으로 시작되었습니다. 이 퍼즐에는 올바른 문자열이 있습니다...쓰레기로 가득 차 있습니다!
  • 구문 스코어링은 동일한 유형의 여는 기호와 닫는 기호를 추적하고 일치시키는 문제였습니다. 이 퍼즐은 비슷하지만 garbage 데이터
  • 를 포함하여 추적해야 할 것이 더 많습니다.
  • 구문 채점 알고리즘이 문자열을 걸었습니다. 이 퍼즐
  • 에서도 똑같이 할 것으로 예상합니다.

    for 루프와 플래그



    이것이 내 알고리즘의 핵심 측면이 될 것이라고 생각합니다.

    Initialize a flag for garbage mode to false
    For each character in the string
      If in garbage mode
        Check for exclamation marks
          If one is encountered, skip a character
        Keep walking
      If not in garbage mode
        If next character is <
          Enter garbage mode
        Else, if next character is {
          Account for another group, possibly at the same or next level
        Else if next character is }
          Update the accumulating score to account for the group that just closed
        Else if next character is anything else
          Keep walking
    


    내가 놓친 조건에 더 미세한 세부 정보가 있을 수 있지만 이것이 내가 작성하려는 알고리즘의 개요입니다.

    작동하는 알고리즘을 작성할 수 있다고 가정하고 내가 얼마나 멀었는지 봅시다!

    내 알고리즘 작성 및 테스트



    고맙게도 지침은 많은 단위 테스트를 제공합니다.

    저는 이 알고리즘을 조건별로 작성하여 간단한 테스트 몇 개를 통과한 다음 더 복잡한 테스트를 통과하도록 할 것입니다. 그런 다음 퍼즐 입력을 바랍니다.

    예제 1-4 작동시키기




    {} = 1
    {{{}}} = 6
    {{},{}} = 5
    {{{},{},{{}}}} = 16
    


    내 작업 알고리즘:

    Setup:
      Split the input at each character into an array of characters
      Create score, starting at 0
      Create level, starting at 1
    
    Loop:
      For each character in the stream except the last
        Depending on what the next character is:
          If it is a {
            Increment level by 1
          Else, if it is a }
            Increment score by level
            Decrement level
    
    Return score
    


    이제 garbage에 대한 회계를 시작합니다.

    예제 6, 7, 9 작동시키기




    {<a>,<a>,<a>,<a>} = 1
    {{<a>},{<a>},{<a>},{<a>}} = 9
    {{<ab>},{<ab>},{<ab>},{<ab>}} = 9
    


    내 작업 알고리즘:

    Setup:
      Split the input at each character into an array of characters
      Create score, starting at 0
      Create level, starting at 1
      Create flag for garbage mode, starting at false
    
    Loop:
      For each character in the stream except the last
        Depending on what the next character is:
          If garbage mode is on
            If it is a >
              Turn garbage mode off
          Else, garbage mode is off
            If it is a {
              Increment level by 1
            Else, if it is a }
              Increment score by level
              Decrement level
            Else, if it is a <
              Turn garbage mode on
    
    Return score
    


    예제 8, 10, 11 작동시키기




    {{<!>},{<!>},{<!>},{<a>}} = 3
    {{<!!>},{<!!>},{<!!>},{<!!>}} = 9
    {{<a!>},{<a!>},{<a!>},{<ab>}} = 3
    


    내 작업 알고리즘:

    Setup:
      Split the input at each character into an array of characters
      Create score, starting at 0
      Create level, starting at 1
      Create flag for garbage mode, starting at false
    
    Loop:
      For each character in the stream except the last
        Depending on what the next character is:
          If garbage mode is on
            If it is a >
              Turn garbage mode off
            If it is a !
              Increment the character location tracker by 1 to skip a character in the stream
          Else, garbage mode is off
            If it is a {
              Increment level by 1
            Else, if it is a }
              Increment score by level
              Decrement level
            Else, if it is a <
              Turn garbage mode on
    
    Return score
    


    내 퍼즐 입력 테스트


  • 끝났습니다!
  • 정답을 생성했습니다!

  • 2 부


  • 쓰레기 수거는 물론!

  • 물론 쓰레기 수거!



    추적 카운터와 내 case 문 중 하나의 적절한 switch에서 하나씩 증가하는 문을 추가하기만 하면 됩니다.

    내 작업 알고리즘:

    Setup:
      Split the input at each character into an array of characters
      Create score, starting at 0
      Create level, starting at 1
      Create flag for garbage mode, starting at false
      Create garbage, starting at 0
    
    Loop:
      For each character in the stream except the last
        Depending on what the next character is:
          If garbage mode is on
            If it is a >
              Turn garbage mode off
            If it is a !
              Increment the character location tracker by 1 to skip a character in the stream
            Otherwise
              Increment garbage by 1
          Else, garbage mode is off
            If it is a {
              Increment level by 1
            Else, if it is a }
              Increment score by level
              Decrement level
            Else, if it is a <
              Turn garbage mode on
    
    Return garbage
    


    파트 2에 대한 정답을 생성하는 데 필요한 전부입니다!

    해냈어!!


  • 두 부분 모두 해결했습니다!
  • 알고리즘을 하나씩 작성하여 한 번에 몇 가지 예만 풀었습니다
  • .
  • 몇 가지switch 문을 사용했는데 이 퍼즐 전체에서 너무 자주 사용하지 않습니다. 나는 종종 키-값 조회를 활용할 수 있도록 사전을 선택합니다
  • .
  • built a simulator가 내 눈앞에서 처리되는 스트림을 지켜본다!

  • 이 퍼즐을 한 번에 풀려고 하지 않았거나 필요 이상으로 고생했을 수도 있으니 다행입니다.

    좋은 웹페이지 즐겨찾기